biogo-1.0.4/0000755000175000017500000000000014136731467012155 5ustar nileshnileshbiogo-1.0.4/go.sum0000644000175000017500000000711014136731467013307 0ustar nileshnileshdmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/biogo/boom v0.0.0-20150317015657-28119bc1ffc1/go.mod h1:fwtxkutinkQcME9Zlywh66T0jZLLjgrwSLY2WxH2N3U= github.com/biogo/graph v0.0.0-20150317020928-057c1989faed h1:g46/nB/R498zw0GxBjqY6tES+V6VmktZGZZEvSo6bw4= github.com/biogo/graph v0.0.0-20150317020928-057c1989faed/go.mod h1:UuyD2swDzTz1ChZTQld42mP5pyePLSDccmGycTpxRew= github.com/biogo/hts v1.1.0 h1:J6Na8+e+MYyEpV1B762GUvt4mhtPn3tnQQaxWyKo5rk= github.com/biogo/hts v1.1.0/go.mod h1:6C9MdMt9ALD5PsluK5n0B0svHOpmVse3UjQQx/cTgOw= github.com/biogo/store v0.0.0-20200104231603-2c6ad937eb83 h1:wQjRDdhQmyjOlYPJGS/FHKMA13hgT4anRXIWjHX84zU= github.com/biogo/store v0.0.0-20200104231603-2c6ad937eb83/go.mod h1:wdbXg77soR6ESRprAMEwAQDFtLT6EAGF5o1GRy0cB5k= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/kortschak/utter v0.0.0-20190412033250-50fe362e6560/go.mod h1:oDr41C7kH9wvAikWyFhr6UFr8R7nelpmCF5XR5rL7I8= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= biogo-1.0.4/biogo-gs.png0000644000175000017500000002406114136731467014374 0ustar nileshnileshPNG  IHDR==>tsRGBbKGD pHYs B(xtIME IDATxwUMPCBRD EA,W:"I2 RC $!q΅uwٙy{f̙g>󜧊S ^@@@@ @z H/ nƏ``h7O[Ҥ'"(U>lnJҦ w($H@@IODVBp+8~wX~oЮRҥRi(>+[Dd*~{N G( P@@BVBpR7UuŰ΄&w`*_? lḚRHF`zXX~'3l(+PBV6w=ύV!<.a^P KKxUEa yU}/,}][0(N[YXi?k^Ix&E4Ӯ#IFFްD/9nz倀H/`.8`+zg7WC&/æj-&Sޤ&\ }C. ne,-j+~ĻPD4~^U?Y7o8]_`{kת]UV$M9U(#-RX;DZXUل*ֱĻ!ɼO^0^f4SH[d϶I88Wu&s\ \aviݸ25ꇩ}4V]:7΢,i|3jUhRUx#; n]K8zmo϶+MoD䇪bzRwdp{3\ogo;ۋE\{{\LѸbBc _&"[e 19JG6ekk۶Ӓ ܻ{E UKAoL0y}x F$a &ў{=ζemՉHOD8vh}amRrpxk}u]! <!cU*_qn3]a}ު&`5mοUoMϾeu^`zS&xn;*DUzEzy0n߮p$i^uo`)^bwHF#>vxTg+V#ӕF60ϹV;[KUoJڏo_$1YU%ڊ޸{PSէZ$T< c'c]qdZO$ˈȢuoX߉d-1*Q|aPM'Z{XZ2.6H*Z^ocޕ0\4a1 Հzr>ZZDҳJK!Yv77+ؗ*] ֪:9 2b*dVl=Ӊ0uw<=-{ & s#"ۦ<m,I۠q}^7a.b3Y0b6p0YbM4y8~N|vV{[U?yݪC=ӟS72Zh,qx*UYo%8N.Wtoa$DzzA=w4?j>_j&|TP9Ѳ =͋Ě\윟aК ߗN78k\9~c{CcjD^Cxt!9vT-8CBDS0 je8' z5W9t?9~ ٖIĨtTvY>8Z/m@ޮc˺pK}W)4K q0`kzߔ%:1VY"\Qn/O>O<ۜEϭ ֻ^臛&p5zu뚸8+#7+qbL|[ lMJ4s1|p'T<%V0c芡Az>Uu)"_9aǑoeZhIq˯z`:uf ׍|F KMsxQ$Y*h2teR$ou~D|rw| ZgEzc'/"wU&\OW/۲(( ISf=YSE Ce\Ɵy/MRE~į)OaԪ2V& "B̀o,8jۦ~[n/Ylmlµo1v>pGʿӤ}ȌBPWk'eAz>N[skR{KHoQ-޵ <֕K{Ww2sHAM"/쟽|r{yvƤq;|L|lbmS֔8!HfLZ6XH/続wvXy]) oMd=c s-,3^'ioU/sb ('Ћ$ j[\Zk Lhe[9_Ey2'Fݩ:@[ǖ}c"KxhzC3ʰb'^NL~4IǞ7>_r{ɧlBM{]4`5~wdeS$-R.s!lϖ. !Iu~Ę [[e0@ƞ{=MYn{ǽ@Ki_jz>N\Z;6ƭat'y{ݞ)k<9MR [^դN7=u 9QF-Nz彵s|g;lBz#4:Zw6vxDddf L+Tqܼr3= MHUoZ{p^|[J-Aw'7q /~կV?d˵>Yc Ljrq+$i,>hO]^.obһ7S< U;ln¿؄|za URZ{I yi7oi~0?ms}DfLV׶8x|0~Ll̹rj 5ˣ}m ;,}ρ얰֞.6+3lV%{z[VrbhnϳM|@z oPEd6pat1r9 S\ /OʚR6>ؤuI&կ{7i[ ؽJdF{n`OG|U;ہ?M"K;uu;Q?{%R`l ]4Y8v'e9U}fXUwˡav+̎I_56$C|KUKCJ/LmSX6>zZ Q]EDƯͰ+"[L`4OD)wI|AoqH*51 eY fjd ͜%"WbuI]ݪV7FD;xXזIUI}C#}FUKHx-l!{ @"=ܖ<ߢzdL%10"ouG '%owF4V^{JGe mhyZJm<9#6*\` *KE9nDzwm'@Fz" &,^IxbV2y>7 6_^%g_h4?>"|s>+ll8Eu%#0zEubt>Xq똜ĝ)3Gmk+%1?X]'n0GNZ7zoNٷ_t` TY#DdX3("K?q>SfHZ|ҫZr:AU!Ł;150A= `%Kxv1("5K?E4[CB}wz,ïe9W^\5=oJpL؊"z ت ^zQ؄=lߤ{9S إ,`3~C~/"XG[7Ms&d R\w JBz k>}UYzc[p'rj>f7R9sOp/ۀ?{,~Yn}poB[m;?"&܇o|Sm \[zW̸s,tju y\N& 3V(Ty`Ǭ."^3ߗsEc8%"H`mb­^<{qvp Sn/#>ذtk;~q7+4pl]O#G܃)RD`cTaDh#̈,.v)LܜKz<`_U1aJ={qA7٩;zWl@Jih"rp1nݿ&[,FqL5E>U+W#wml<[a;6- "'|bjo0|.Ua9j1cv:18_kIey9V 8IDJ^.܌[[p@^ ^PՇvYy=_j5p؝v܋޶&$ZF/{yuLD/Sޓ1,30)W1H\֖0_'xo!"^;ͬ/ @v`w @U_ 'mL_=~Cu95V#nv[s~R"`JXJ৮N+Sr̰属}&bRkR=WU ]_s0e;i_DduӘyU\Q_x}VWwm ȓ{Y{kd&Mke{a*=[[Ù+E&U/)-5@<_H˜ipa)HsQ{r|{{ar7p {0xoc;e NWq KoZ/&tm; KHÆ3Cʺ¯zrctO=4݄@<+2'L@ >.:>ᒇ!S<"%&=.QKt^YDNKwmRķ 蜦/L>NG6T&}!g‹Uq1")Y\k,WյT{|ͯv;*/%DBLhR=› lT kDn3"rL ClKLM1[Ix_8p /*ImCRY(L)\֦s>$ AvF?1jWX)Z7dĕȿM cIDATalcH>oaw弎`M{ƑvQV}%͐0e7.D79V:*wQn/ܥRi'("/_dK7sֶGM럒3Dd+cbHUZy<h rUtmL]q/[OYvUl\hd4{79rzσik5;X-#`r{ٻZTZ4{QM&[`|/ 3wٛ$0.fo` L(:tX}p_O\E1Z\`SU}*mwH?#]?V kZԶdSn&7MslXL > o6DPrUkr{9QAT69#XH!"`⧖tiyt&[b\&YzR)tJh'ѩGc}a$R?i'6*R;pK %L(&Po-5.e`x3n|"&x)Ij=V>ҫtT[MVw}R^}`(";Y3KNN.=lh[;ZJԏR?i '+ w$Mx:EU7MW X7fcT-/6vE^:IUwTNZ]p{6իW65DGQ-Tk՟E V1xD+*U/tLLR8EsA 3EmYULM/*sF@TZ(SyNE7*vnEҳ1pݕ`p{&szJb~*A~ħ8-&]̮S[⛁H/^C*:u#aYE >2c3?db^#6`T*n /`ۀB_cn}#JGeYW:y6V5EcAl <ǯTkH/^R-.JU1\Ӣ( xśw(𵸶dHzqzPlAgFQTRh9~rM7M bhz1=6"qRJFEQO1qlg {^[ߎ@DQtB,w nNTp%z(zSkQDpM# -)?A롤W ~01c ģgLX7 Sy;-jzq^aQFGDQAXs٦=^́q}06IrbP؂6x!9WUCY =g [@|oȖ6 jk ` L`{'x)LUstuM` 4$h'R8튞Z .Te٦H/i՘fEPU=/^ tT[ p%7U Lu/4%.CUb &mb-/hz1b `wLCod<(& m[j].score } func (m probTable) Swap(i, j int) { m[i], m[j] = m[j], m[i] } type Feature struct { MotifLocation feat.Feature MotifStart int MotifEnd int MotifScore float64 MotifProb float64 MotifSeq seq.Sequence MotifOrient feat.Orientation Moltype feat.Moltype } func (f *Feature) Start() int { return f.MotifStart } func (f *Feature) End() int { return f.MotifEnd } func (f *Feature) Len() int { return f.MotifEnd - f.MotifStart } func (f *Feature) Name() string { return fmt.Sprintf("%s:[%d,%d)", f.Location().Name(), f.MotifStart, f.MotifEnd) } func (f *Feature) Description() string { return "PWM motif" } func (f *Feature) Location() feat.Feature { return f.MotifLocation } func (f *Feature) MolType() feat.Moltype { return f.Moltype } func (f *Feature) Orientation() feat.Orientation { return f.MotifOrient } type PWM struct { matrix [][]float64 lookAhead []float64 table probTable minScore float64 Format string // Format for probability values in attributes. } func New(matrix [][]float64) (m *PWM) { m = &PWM{ matrix: matrix, lookAhead: make([]float64, len(matrix)), minScore: math.MaxFloat64, Format: "%e", } var maxVal, maxScore float64 for i := len(matrix) - 1; i >= 0; i-- { maxVal = 0 for _, v := range matrix[i] { if v > maxVal { maxVal = v } } maxScore += maxVal m.lookAhead[i] = maxScore } for i := range matrix { for j := range matrix[i] { matrix[i][j] /= maxScore } m.lookAhead[i] /= maxScore } return } func (m *PWM) genTable(minScore, score float64, pos int, motif []byte) { for i, s := range m.matrix[pos] { motif[pos] = byte(i) if pos < len(m.matrix)-1 { if minScore-(score+s) > m.lookAhead[pos+1] { // will not be able to achieve minScore continue } m.genTable(minScore, score+s, pos+1, motif) } else { if score+s < minScore { // will not be able to achieve minScore continue } // count frequencies of states in current motif freqs := make([]int, 4) for _, j := range motif { freqs[j]++ } found := false for j := len(m.table) - 1; j >= 0; j-- { table := m.table[j] if table.score != score+s { continue // if using insertion sort, if table.score > score+s then we can found = false and break } match := true for k := range freqs { if freqs[k] != table.freqs[k] { match = false break } } if match { table.occurrence++ found = true break } } if !found { m.table = append(m.table, &probs{score: score + s, freqs: freqs, occurrence: 1}) } } } } type Sequence interface { seq.Sequence Moltype() feat.Moltype Orientation() feat.Orientation } func (m *PWM) Search(s Sequence, start, end int, minScore float64) []feat.Feature { if minScore < m.minScore { m.table = make(probTable, 0) m.genTable(minScore, 0, 0, make([]byte, len(m.matrix))) sort.Sort(m.table) } var ( index = s.Alphabet().LetterIndex() length = len(m.matrix) freqs = make([]float64, 4) zeros = make([]float64, 4) diff = 1 / float64(length) f []feat.Feature ) LOOP: for pos := start; pos+length < end; pos++ { // Determine the score for this position. var score = 0. for i := 0; i < length; i++ { base := index[s.At(pos+i).L] if base < 0 || minScore-score > m.lookAhead[i] { // not valid base or will not be able to achieve minScore continue LOOP } else { score += m.matrix[i][base] } } if score < minScore { continue } // Calculate base frequencies for window. copy(freqs, zeros) for i := pos; i < pos+length; i++ { base := index[s.At(i).L] if base >= 0 { freqs[base] += diff } else { // Probability for this pos will be meaningless; if N is tolerated, include N in valid alphabet - make special case? continue LOOP } } // Descend probability function summing probabilities. var ( prob = 0. sp = 0. ) for _, e := range m.table { sp = 1 if e.score < score { break } for i, f := range freqs { sp *= math.Pow(f, float64(e.freqs[i])) } sp *= float64(e.occurrence) prob += sp } mot := s.New() sequtils.Truncate(mot, s, pos, pos+length) f = append(f, &Feature{ MotifLocation: s, MotifStart: pos, MotifEnd: pos + length, MotifScore: score, MotifProb: prob, MotifSeq: mot, MotifOrient: s.Orientation(), Moltype: s.Moltype(), }) } return f } biogo-1.0.4/concurrent/0000755000175000017500000000000014136731467014337 5ustar nileshnileshbiogo-1.0.4/concurrent/concurrent.go0000644000175000017500000000066714136731467017061 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package to apply a function over an array or stream of data. package concurrent // The Concurrent interface represents a processor that allows adding jobs and retrieving results type Concurrent interface { Process(...interface{}) Result() (interface{}, error) } biogo-1.0.4/concurrent/processor.go0000644000175000017500000000466214136731467016715 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package concurrent import ( "fmt" "runtime" "sync" ) // Interface is a type that performs an operation on itself, returning any error. type Operator interface { Operation() (interface{}, error) } // The Processor type manages a number of concurrent Processes. type Processor struct { in chan Operator out chan Result stop chan struct{} work chan struct{} threads int wg *sync.WaitGroup } // Return a new Processor to operate the function f over the number of threads specified taking // input from queue and placing the result in buffer. Threads is limited by GOMAXPROCS, if threads is greater // GOMAXPROCS or less than 1 then threads is set to GOMAXPROCS. func NewProcessor(queue chan Operator, buffer int, threads int) (p *Processor) { if available := runtime.GOMAXPROCS(0); threads > available || threads < 1 { threads = available } p = &Processor{ in: queue, out: make(chan Result, buffer), stop: make(chan struct{}), work: make(chan struct{}, threads), threads: threads, wg: &sync.WaitGroup{}, } for i := 0; i < threads; i++ { p.work <- struct{}{} } for i := 0; i < threads; i++ { p.wg.Add(1) go func() { <-p.work defer func() { if err := recover(); err != nil { p.out <- Result{nil, fmt.Errorf("concurrent: processor panic: %v", err)} } p.work <- struct{}{} if len(p.work) == p.threads { close(p.out) } p.wg.Done() }() for input := range p.in { v, e := input.Operation() if p.out != nil { p.out <- Result{v, e} } select { case <-p.stop: return default: } } }() } return } // Submit values for processing. func (p *Processor) Process(value ...Operator) { for _, v := range value { p.in <- v } } // Get the next available result. func (p *Processor) Result() (interface{}, error) { r := <-p.out return r.Value, r.Err } // Close the queue. func (p *Processor) Close() { close(p.in) } // Return the number of working goroutines. func (p *Processor) Working() int { return p.threads - len(p.work) } // Terminate the goroutines. func (p *Processor) Stop() { close(p.stop) } // Wait for all running processes to finish. func (p *Processor) Wait() { p.wg.Wait() } type Result struct { Value interface{} Err error } biogo-1.0.4/concurrent/conc_test.go0000644000175000017500000000064414136731467016653 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package concurrent import ( "testing" "gopkg.in/check.v1" ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) func (s *S) TestWarning(c *check.C) { c.Log("\nFIXME: Tests only in examples.\n") } biogo-1.0.4/concurrent/example_promisemap_test.go0000644000175000017500000000201114136731467021606 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package concurrent_test import ( "github.com/biogo/biogo/concurrent" "fmt" "time" ) type SlowCounter []int func (c SlowCounter) Slice(i, j int) concurrent.Mapper { return c[i:j] } func (c SlowCounter) Len() int { return len(c) } func (c SlowCounter) Operation() (r interface{}, err error) { var sum int for _, v := range c { sum += v time.Sleep(1e8) } return sum, nil } func ExamplePromiseMap() { c := SlowCounter{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} p := concurrent.PromiseMap(c, 1, 2) fmt.Println("Waiting...") request1 := <-p.Wait() if request1.Err != nil { fmt.Println(request1.Err) } else { fmt.Println(request1.Value) } request2 := <-p.Wait() if request2.Err != nil { fmt.Println(request2.Err) } else { fmt.Println(request2.Value) } // Output: // Waiting... // [3 7 11 15 19] // [3 7 11 15 19] } biogo-1.0.4/concurrent/map.go0000644000175000017500000000364114136731467015447 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package concurrent import ( "github.com/biogo/biogo/util" "fmt" "math" ) // A Mapper is an Operator that can subdivide itself. type Mapper interface { Operator Slice(i, j int) Mapper Len() int } // Map routines to iterate a function over an array, potentially splitting the array slice into // chunks so that each chunk is processed concurrently. When using concurrent processing the // Chunk size is either the nearest even division of the total array over the chosen concurrent // processing goroutines or a specified maximum chunk size, whichever is smaller. Reducing // chunk size can reduce the impact of divergence in time for processing chunks, but may add // to overhead. func Map(set Mapper, threads, maxChunkSize int) (results []interface{}, err error) { queue := make(chan Operator, 1) p := NewProcessor(queue, 0, threads) defer p.Stop() chunkSize := util.Min(int(math.Ceil(float64(set.Len())/float64(threads))), maxChunkSize) quit := make(chan struct{}) go func() { for s := 0; s*chunkSize < set.Len(); s++ { select { case <-quit: break default: endChunk := util.Min(chunkSize*(s+1), set.Len()) queue <- set.Slice(chunkSize*s, endChunk) } } }() for r := 0; r*chunkSize < set.Len(); r++ { result := <-p.out if result.Err != nil { err = fmt.Errorf("concurrent: map failed: %v", err) close(quit) break } results = append(results, result.Value) } return } // A future Map function - synchronisation is via a Promise. func PromiseMap(set Mapper, threads, maxChunkSize int) *Promise { promise := NewPromise(false, false, false) go func() { result, err := Map(set, threads, maxChunkSize) if err == nil { promise.Fulfill(result) } else { promise.Fail(result, err) } }() return promise } biogo-1.0.4/concurrent/example_map_test.go0000644000175000017500000000171614136731467020222 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package concurrent_test import ( "github.com/biogo/biogo/concurrent" "fmt" ) type CountConsumer []int func (c CountConsumer) Slice(i, j int) concurrent.Mapper { return c[i:j] } func (c CountConsumer) Len() int { return len(c) } func (c CountConsumer) Operation() (r interface{}, err error) { var sum int for i, v := range c { sum += v c[i] = 0 } return sum, nil } func ExampleMap() { c := CountConsumer{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} fmt.Println(c) for c.Len() > 1 { result, err := concurrent.Map(c, 1, 2) if err != nil { fmt.Println(err) } else { fmt.Println(result) c = c[:0] for _, r := range result { c = append(c, r.(int)) } } } // Output: // [1 2 3 4 5 6 7 8 9 10] // [3 7 11 15 19] // [10 26 19] // [36 19] // [55] } biogo-1.0.4/concurrent/promise.go0000644000175000017500000000644414136731467016354 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package concurrent import ( "errors" "fmt" "sync" ) // Implementation of a promise multiple goroutine synchronisation and communication system // based on the approach used in Alice. Promises will safely allow multiple promisers to // interact with multiple promisees. // // New or non-error Broken Promises can be Fulfilled or Failed. Fulfilled or Failed Promises // can be Broken and any state of Promise can be Recovered if specified at creation. // // Promises can be mutable or not, recoverable or not and may relay internal error states // to other listeners. // Mutable promises may have their value state changed with subsequence Fulfill calls. // Recoverable promises may be recovered after a Fail call. // Promises created with relay set to true will relay an error generated by attempting to // fulfill an immutable fulfilled promise. type Promise struct { message chan Result m sync.Mutex mutable bool recoverable bool relay bool } // Create a new promise func NewPromise(mutable, recoverable, relay bool) *Promise { return &Promise{ message: make(chan Result, 1), mutable: mutable, recoverable: recoverable, relay: relay, } } func (p *Promise) messageState() (message Result, set bool) { select { case message = <-p.message: set = true default: } return } // Fulfill a promise, allowing listeners to unblock. func (p *Promise) Fulfill(value interface{}) error { p.m.Lock() defer p.m.Unlock() return p.fulfill(value) } func (p *Promise) fulfill(value interface{}) (err error) { r, set := p.messageState() if r.Err != nil { err = fmt.Errorf("concurrent: attempt to fulfill failed promise: %v", r.Err) } else { if !set || p.mutable { r.Value = value err = nil } else { err = errors.New("concurrent: attempt to fulfill already set immutable promise") } } if err != nil && p.relay { if r.Err != nil { err = fmt.Errorf("concurrent: promise already failed - cannot relay: %v", r.Err) } else { r.Err = err } } p.message <- r return } // Fail a promise allowing listeners to unblock, but sending an error state. func (p *Promise) Fail(value interface{}, err error) (ok bool) { p.m.Lock() defer p.m.Unlock() return p.fail(value, err) } func (p *Promise) fail(value interface{}, err error) (f bool) { r, _ := p.messageState() if r.Err == nil && r.Value == nil { if value != nil { r.Value = value } r.Err = err f = true } else { f = false } p.message <- r return } // Recover a failed promise, setting the error state to nil. Promise must be recoverable. func (p *Promise) Recover(value interface{}) (ok bool) { p.m.Lock() defer p.m.Unlock() r, _ := p.messageState() if p.recoverable { r.Err = nil if value != nil { p.fulfill(value) } ok = true } else { ok = false } return } // Break an already fulfilled or failed promise, blocking all listeners. func (p *Promise) Break() { p.m.Lock() defer p.m.Unlock() p.messageState() } // Wait for a promise to be fulfilled, failed or recovered. func (p *Promise) Wait() <-chan Result { r := <-p.message p.message <- r f := make(chan Result, 1) f <- r close(f) return f } biogo-1.0.4/concurrent/lazy.go0000644000175000017500000000163314136731467015650 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package concurrent // Evaluator is a function for lazy evaluation. type Evaluator func(...interface{}) (interface{}, State) type State []interface{} // Lazily is function to generate a lazy evaluator. // // Lazy functions are terminated by closing the reaper channel. nil should be passed as // a reaper for perpetual lazy functions. func Lazily(f Evaluator, lookahead int, reaper <-chan struct{}, init ...interface{}) func() interface{} { rc := make(chan interface{}, lookahead) go func(rc chan interface{}) { defer close(rc) var state State = init var result interface{} for { result, state = f(state...) select { case rc <- result: case <-reaper: return } } }(rc) return func() interface{} { return <-rc } } biogo-1.0.4/concurrent/lazy_example_test.go0000644000175000017500000000234714136731467020425 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package concurrent_test import ( "github.com/biogo/biogo/concurrent" "fmt" ) func ExampleLazily() { sentence := "A sentence to be slowly ROT'ed." ROT13 := func(b byte) byte { c := b & ('a' - 'A') i := b&^c - 'A' if i < 26 { return (i+13)%26 + 'A' | c } return b } mutator := concurrent.Lazily( func(state ...interface{}) (interface{}, concurrent.State) { b, c := []byte(state[0].(string)), state[1].(int) b[c] = ROT13(b[c]) ms := string(b) return state[0], concurrent.State{ms, (c + 1) % len(ms)} }, 0, // No lookahead nil, // Perpetual evaluator sentence, 0, // Initial state ) var r string for i := 0; i < len(sentence)*2; i++ { r = mutator().(string) if i%10 == 0 { fmt.Println(r) } } fmt.Println(r) // Output: // A sentence to be slowly ROT'ed. // N fragrapr to be slowly ROT'ed. // N fragrapr gb or fybwly ROT'ed. // N fragrapr gb or fybjyl EBG'rq. // A sentencr gb or fybjyl EBG'rq. // A sentence to be slbjyl EBG'rq. // A sentence to be slowly ROT'eq. // A sentence to be slowly ROT'ed. } biogo-1.0.4/README.md0000644000175000017500000001320014136731467013430 0ustar nileshnilesh![bíogo](https://raw.githubusercontent.com/biogo/biogo/master/biogo.png) # bíogo [![GoDoc](https://godoc.org/github.com/biogo/biogo?status.png)](http://godoc.org/github.com/biogo/biogo) [![Build Status](https://travis-ci.org/biogo/biogo.svg?branch=master)](https://travis-ci.org/biogo/biogo) ## Installation $ go get github.com/biogo/biogo/... ## Overview bíogo is a bioinformatics library for the Go language. ## Getting help Help or similar requests are preferred on the biogo-user Google Group. https://groups.google.com/forum/#!forum/biogo-user ## Contributing If you find any bugs, feel free to file an issue on the github issue tracker. Pull requests are welcome, though if they involve changes to API or addition of features, please first open a discussion at the biogo-dev Google Group. https://groups.google.com/forum/#!forum/biogo-dev ## Citing ## If you use bíogo, please cite Kortschak, Snyder, Maragkakis and Adelson "bíogo: a simple high-performance bioinformatics toolkit for the Go language", doi:[10.21105/joss.00167](http://dx.doi.org/10.21105/joss.00167), and Kortschak and Adelson "bíogo: a simple high-performance bioinformatics toolkit for the Go language", doi:[10.1101/005033](http://biorxiv.org/content/early/2014/05/12/005033). ## The Purpose of bíogo bíogo stems from the need to address the size and structure of modern genomic and metagenomic data sets. These properties enforce requirements on the libraries and languages used for analysis: * speed - size of data sets * concurrency - problems often embarrassingly parallelisable In addition to the computational burden of massive data set sizes in modern genomics there is an increasing need for complex pipelines to resolve questions in tightening problem space and also a developing need to be able to develop new algorithms to allow novel approaches to interesting questions. These issues suggest the need for a simplicity in syntax to facilitate: * ease of coding * checking for correctness in development and particularly in peer review Related to the second issue is the [reluctance of some researchers to release code because of quality concerns](http://www.nature.com/news/2010/101013/full/467753a.html "Publish your computer code: it is good enough. Nature 2010."). The issue of code release is the first of the principles formalised in the [Science Code Manifesto](http://sciencecodemanifesto.org/). Code All source code written specifically to process data for a published paper must be available to the reviewers and readers of the paper. A language with a simple, yet expressive, syntax should facilitate development of higher quality code and thus help reduce this barrier to research code release. ## Articles ## [bíogo: a simple high-performance bioinformatics toolkit for the Go language](http://biorxiv.org/content/early/2014/05/12/005033) [Analysis of Illumina sequencing data using bíogo](http://talks.godoc.org/github.com/biogo/talks/illumination/illumina.article) [Using and extending types in bíogo](http://talks.godoc.org/github.com/biogo/talks/types/types.article) ## Yet Another Bioinformatics Library It seems that nearly every language has it own bioinformatics library, some of which are very mature, for example [BioPerl](http://bioperl.org) and [BioPython](http://biopython.org). Why add another one? The different libraries excel in different fields, acting as scripting glue for applications in a pipeline (much of [[1], [2], [3]]) and interacting with external hosts [[1], [2], [4], [5]], wrapping lower level high performance languages with more user friendly syntax [[1], [2], [3], [4]] or providing bioinformatics functions for high performance languages [[5], [6]]. The intended niche for bíogo lies somewhere between the scripting libraries and high performance language libraries in being easy to use for both small and large projects while having reasonable performance with computationally intensive tasks. The intent is to reduce the level of investment required to develop new research software for computationally intensive tasks. [1]: http://bioperl.org/ "BioPerl" [2]: http://biopython.org/ "BioPython" [3]: http://bioruby.org/ "BioRuby" [4]: http://pycogent.sourceforge.net/ "PyCogent" [5]: http://biojava.org/ "BioJava" [6]: http://www.seqan.de/ "SeqAn" 1. BioPerl http://genome.cshlp.org/content/12/10/1611.full http://www.springerlink.com/content/pp72033m171568p2 2. BioPython http://bioinformatics.oxfordjournals.org/content/25/11/1422 3. BioRuby http://bioinformatics.oxfordjournals.org/content/26/20/2617 4. PyCogent http://genomebiology.com/2007/8/8/R171 5. BioJava http://bioinformatics.oxfordjournals.org/content/24/18/2096 6. SeqAn http://www.biomedcentral.com/1471-2105/9/11 ## Library Structure and Coding Style The bíogo library structure is influenced both by the Go core library. The coding style should be aligned with normal Go idioms as represented in the Go core libraries. ## Quality Scores Quality scores are supported for all sequence types, including protein. Phred and Solexa scoring systems are able to be read from files, however internal representation of quality scores is with Phred, so there will be precision loss in conversion. A Solexa quality score type is provided for use where this will be a problem. ## Copyright and License Copyright ©2011-2013 The bíogo Authors except where otherwise noted. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. The bíogo logo is derived from Bitstream Charter, Copyright ©1989-1992 Bitstream Inc., Cambridge, MA. BITSTREAM CHARTER is a registered trademark of Bitstream Inc. biogo-1.0.4/seq/0000755000175000017500000000000014136731467012745 5ustar nileshnileshbiogo-1.0.4/seq/annotation.go0000644000175000017500000000531614136731467015453 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package seq import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" ) // Strand stores linear sequence strand information. type Strand int8 const ( Minus Strand = iota - 1 None Plus ) func (s Strand) String() string { switch s { case Plus: return "+" case None: return "." case Minus: return "-" } return "undefined" } // An Annotation is a basic linear sequence annotation type. type Annotation struct { ID string Desc string Loc feat.Feature Strand Strand Conform feat.Conformation Alpha alphabet.Alphabet Offset int } // Name returns the ID string of the sequence. func (a *Annotation) Name() string { return a.ID } // SetName sets the ID string of the sequence. func (a *Annotation) SetName(id string) error { a.ID = id; return nil } // Description returns the Desc string of the sequence. func (a *Annotation) Description() string { return a.Desc } // SetDescription sets the Desc string of the sequence. func (a *Annotation) SetDescription(d string) error { a.Desc = d; return nil } // Conformation returns the sequence conformation. func (a *Annotation) Conformation() feat.Conformation { return a.Conform } // SetConformation sets the sequence conformation. func (a *Annotation) SetConformation(c feat.Conformation) error { a.Conform = c; return nil } // Orientation returns the sequence's strand as a feat.Orientation. func (a *Annotation) Orientation() feat.Orientation { return feat.Orientation(a.Strand) } // SetOrientation sets the sequence'a strand from a feat.Orientation. func (a *Annotation) SetOrientation(o feat.Orientation) error { a.Strand = Strand(o); return nil } // Location returns the Loc field of the sequence. func (a *Annotation) Location() feat.Feature { return a.Loc } // SetLocation sets the Loc field of the sequence. func (a *Annotation) SetLocation(f feat.Feature) error { a.Loc = f; return nil } // Alphabet return the alphabet.Alphabet used by the sequence. func (a *Annotation) Alphabet() alphabet.Alphabet { return a.Alpha } // SetAlphabet the sets the alphabet.Alphabet used by the sequence. func (a *Annotation) SetAlphabet(n alphabet.Alphabet) error { a.Alpha = n; return nil } // SetOffset sets the global offset of the sequence to o. func (a *Annotation) SetOffset(o int) error { a.Offset = o; return nil } // Moltype returns the molecule type of the sequence. func (a *Annotation) Moltype() feat.Moltype { return a.Alpha.Moltype() } // CloneAnnotation returns a pointer to a copy of the receiver. func (a *Annotation) CloneAnnotation() *Annotation { ca := *a; return &ca } biogo-1.0.4/seq/quality/0000755000175000017500000000000014136731467014435 5ustar nileshnileshbiogo-1.0.4/seq/quality/solexa.go0000644000175000017500000000655614136731467016273 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package quality import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq" ) // A slice of quality scores that satisfies the alphabet.Slice interface. type Qsolexas []alphabet.Qsolexa func (q Qsolexas) Make(len, cap int) alphabet.Slice { return make(Qsolexas, len, cap) } func (q Qsolexas) Len() int { return len(q) } func (q Qsolexas) Cap() int { return cap(q) } func (q Qsolexas) Slice(start, end int) alphabet.Slice { return q[start:end] } func (q Qsolexas) Append(a alphabet.Slice) alphabet.Slice { return append(q, a.(Qsolexas)...) } func (q Qsolexas) Copy(a alphabet.Slice) int { return copy(q, a.(Qsolexas)) } type Solexa struct { seq.Annotation Qual Qsolexas Encode alphabet.Encoding } // Create a new scoring type. func NewSolexa(id string, q []alphabet.Qsolexa, encode alphabet.Encoding) *Solexa { return &Solexa{ Annotation: seq.Annotation{ID: id}, Qual: append([]alphabet.Qsolexa(nil), q...), Encode: encode, } } // Returns the underlying quality score slice. func (q *Solexa) Slice() alphabet.Slice { return q.Qual } // Set the underlying quality score slice. func (q *Solexa) SetSlice(sl alphabet.Slice) { q.Qual = sl.(Qsolexas) } // Append to the scores. func (q *Solexa) Append(a ...alphabet.Qsolexa) { q.Qual = append(q.Qual, a...) } // Return the raw score at position pos. func (q *Solexa) At(i int) alphabet.Qsolexa { return q.Qual[i-q.Offset] } // Return the error probability at position pos. func (q *Solexa) EAt(i int) float64 { return q.Qual[i-q.Offset].ProbE() } // Set the raw score at position pos to qual. func (q *Solexa) Set(i int, qual alphabet.Qsolexa) error { q.Qual[i-q.Offset] = qual; return nil } // Set the error probability to e at position pos. func (q *Solexa) SetE(i int, e float64) error { q.Qual[i-q.Offset] = alphabet.Esolexa(e) return nil } // Encode the quality at position pos to a letter based on the sequence Encode setting. func (q *Solexa) QEncode(i int) byte { return q.Qual[i-q.Offset].Encode(q.Encode) } // Decode a quality letter to a phred score based on the sequence Encode setting. func (q *Solexa) QDecode(l byte) alphabet.Qsolexa { return q.Encode.DecodeToQsolexa(l) } // Return the quality Encode type. func (q *Solexa) Encoding() alphabet.Encoding { return q.Encode } // Set the quality Encode type to e. func (q *Solexa) SetEncoding(e alphabet.Encoding) error { q.Encode = e; return nil } // Return the length of the score sequence. func (q *Solexa) Len() int { return len(q.Qual) } // Return the start position of the score sequence. func (q *Solexa) Start() int { return q.Offset } // Return the end position of the score sequence. func (q *Solexa) End() int { return q.Offset + q.Len() } // Return a copy of the quality sequence. func (q *Solexa) Copy() seq.Quality { c := *q c.Qual = append([]alphabet.Qsolexa(nil), q.Qual...) return &c } // Reverse the order of elements in the sequence. func (q *Solexa) Reverse() { l := q.Qual for i, j := 0, len(l)-1; i < j; i, j = i+1, j-1 { l[i], l[j] = l[j], l[i] } } func (q *Solexa) String() string { qs := make([]byte, 0, len(q.Qual)) for _, s := range q.Qual { qs = append(qs, s.Encode(q.Encode)) } return string(qs) } biogo-1.0.4/seq/quality/quality_test.go0000644000175000017500000000065314136731467017517 0ustar nileshnilesh// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package quality import ( "testing" "gopkg.in/check.v1" ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) func (s *S) TestWarning(c *check.C) { c.Log("\nTest included only to force build on go test.\n") } biogo-1.0.4/seq/quality/genSolexa.sh0000644000175000017500000000066114136731467016721 0ustar nileshnilesh#!/usr/bin/bash # Copyright ©2012 The bíogo Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. cat < phred.go | \ gofmt -r 'Phred -> Solexa' | \ gofmt -r 'NewPhred -> NewSolexa' | \ gofmt -r 'Qphred -> Qsolexa' | \ gofmt -r 'Qphreds -> Qsolexas' | \ gofmt -r 'DecodeToQphred -> DecodeToQsolexa' | \ gofmt -r 'Ephred -> Esolexa' \ > solexa.go biogo-1.0.4/seq/quality/phred.go0000644000175000017500000000650314136731467016072 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package quality import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq" ) // A slice of quality scores that satisfies the alphabet.Slice interface. type Qphreds []alphabet.Qphred func (q Qphreds) Make(len, cap int) alphabet.Slice { return make(Qphreds, len, cap) } func (q Qphreds) Len() int { return len(q) } func (q Qphreds) Cap() int { return cap(q) } func (q Qphreds) Slice(start, end int) alphabet.Slice { return q[start:end] } func (q Qphreds) Append(a alphabet.Slice) alphabet.Slice { return append(q, a.(Qphreds)...) } func (q Qphreds) Copy(a alphabet.Slice) int { return copy(q, a.(Qphreds)) } type Phred struct { seq.Annotation Qual Qphreds Encode alphabet.Encoding } // Create a new scoring type. func NewPhred(id string, q []alphabet.Qphred, encode alphabet.Encoding) *Phred { return &Phred{ Annotation: seq.Annotation{ID: id}, Qual: append([]alphabet.Qphred(nil), q...), Encode: encode, } } // Returns the underlying quality score slice. func (q *Phred) Slice() alphabet.Slice { return q.Qual } // Set the underlying quality score slice. func (q *Phred) SetSlice(sl alphabet.Slice) { q.Qual = sl.(Qphreds) } // Append to the scores. func (q *Phred) Append(a ...alphabet.Qphred) { q.Qual = append(q.Qual, a...) } // Return the raw score at position pos. func (q *Phred) At(i int) alphabet.Qphred { return q.Qual[i-q.Offset] } // Return the error probability at position pos. func (q *Phred) EAt(i int) float64 { return q.Qual[i-q.Offset].ProbE() } // Set the raw score at position pos to qual. func (q *Phred) Set(i int, qual alphabet.Qphred) error { q.Qual[i-q.Offset] = qual; return nil } // Set the error probability to e at position pos. func (q *Phred) SetE(i int, e float64) error { q.Qual[i-q.Offset] = alphabet.Ephred(e) return nil } // Encode the quality at position pos to a letter based on the sequence Encode setting. func (q *Phred) QEncode(i int) byte { return q.Qual[i-q.Offset].Encode(q.Encode) } // Decode a quality letter to a phred score based on the sequence Encode setting. func (q *Phred) QDecode(l byte) alphabet.Qphred { return q.Encode.DecodeToQphred(l) } // Return the quality Encode type. func (q *Phred) Encoding() alphabet.Encoding { return q.Encode } // Set the quality Encode type to e. func (q *Phred) SetEncoding(e alphabet.Encoding) error { q.Encode = e; return nil } // Return the length of the score sequence. func (q *Phred) Len() int { return len(q.Qual) } // Return the start position of the score sequence. func (q *Phred) Start() int { return q.Offset } // Return the end position of the score sequence. func (q *Phred) End() int { return q.Offset + q.Len() } // Return a copy of the quality sequence. func (q *Phred) Copy() seq.Quality { c := *q c.Qual = append([]alphabet.Qphred(nil), q.Qual...) return &c } // Reverse the order of elements in the sequence. func (q *Phred) Reverse() { l := q.Qual for i, j := 0, len(l)-1; i < j; i, j = i+1, j-1 { l[i], l[j] = l[j], l[i] } } func (q *Phred) String() string { qs := make([]byte, 0, len(q.Qual)) for _, s := range q.Qual { qs = append(qs, s.Encode(q.Encode)) } return string(qs) } biogo-1.0.4/seq/seq_test.go0000644000175000017500000000155614136731467015132 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package seq_test import ( "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/alignment" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/seq/multi" "testing" _ "gopkg.in/check.v1" // Necessary to squelch complaints when testing ./biogo/... verbosely. ) func TestSeq(t *testing.T) { var ( _ seq.Sequence = (*linear.Seq)(nil) _ seq.Sequence = (*linear.QSeq)(nil) _ seq.Sequence = (*alignment.Row)(nil) _ seq.Sequence = (*alignment.QRow)(nil) _ seq.Scorer = (*linear.QSeq)(nil) _ seq.Scorer = (*alignment.QRow)(nil) _ seq.Rower = (*alignment.Seq)(nil) _ seq.Rower = (*alignment.QSeq)(nil) _ seq.Rower = (*multi.Multi)(nil) _ seq.Rower = (*multi.Set)(nil) ) } biogo-1.0.4/seq/multi/0000755000175000017500000000000014136731467014077 5ustar nileshnileshbiogo-1.0.4/seq/multi/set_example_test.go0000644000175000017500000000260614136731467017777 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package multi import ( "fmt" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq/linear" ) var set Set func ExampleSet_AppendEach() { ss := [][]alphabet.Letter{ []alphabet.Letter("ACGCTGACTTGGTGCACGT"), []alphabet.Letter("ACGACTGGGACGT"), []alphabet.Letter("ACGCTGACTGGCCGT"), []alphabet.Letter("GCCTTTGCACGT"), } set = make(Set, 4) for i := range set { set[i] = linear.NewSeq(fmt.Sprintf("example DNA %d", i), ss[i], alphabet.DNA) } as := [][]alphabet.QLetter{ alphabet.QLetter{L: 'A'}.Repeat(2), alphabet.QLetter{L: 'C'}.Repeat(2), alphabet.QLetter{L: 'G'}.Repeat(2), alphabet.QLetter{L: 'T'}.Repeat(2), } set.AppendEach(as) for _, s := range set { fmt.Printf("%-s\n", s) } // Output: // ACGCTGACTTGGTGCACGTAA // ACGACTGGGACGTCC // ACGCTGACTGGCCGTGG // GCCTTTGCACGTTT } func ExampleSet_Rows() { fmt.Println(set.Rows()) // Output: // 4 } func ExampleSet_Row() { fmt.Printf("%-s\n", set.Row(2)) // Output: // ACGCTGACTGGCCGTGG } func ExampleSet_Len() { fmt.Println(set.Len()) // Output: // 21 } func ExampleSet_RevComp() { set.RevComp() for _, s := range set { fmt.Println(s) } } func ExampleSet_Reverse() { set.RevComp() for _, s := range set { fmt.Println(s) } } biogo-1.0.4/seq/multi/multi.go0000644000175000017500000003437614136731467015575 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package multi handles collections of sequences as alignments or sets. package multi import ( "bytes" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/seq/sequtils" "github.com/biogo/biogo/util" "errors" "fmt" "reflect" "sort" "strings" "sync" ) func init() { joinerRegistryLock = &sync.RWMutex{} joinerRegistry = make(map[reflect.Type]JoinFunc) } var ( joinerRegistryLock *sync.RWMutex joinerRegistry map[reflect.Type]JoinFunc ) type Multi struct { seq.Annotation Seq []seq.Sequence ColumnConsense seq.ConsenseFunc Encode alphabet.Encoding } // Create a new Multi sequence. func NewMulti(id string, n []seq.Sequence, cons seq.ConsenseFunc) (*Multi, error) { var alpha alphabet.Alphabet for _, s := range n { if alpha != nil && s.Alphabet() != alpha { return nil, errors.New("multi: inconsistent alphabets") } else if alpha == nil { alpha = s.Alphabet() } } return &Multi{ Annotation: seq.Annotation{ ID: id, Alpha: alpha, }, Seq: n, ColumnConsense: cons, }, nil } // Encoding returns the quality encoding scheme. func (m *Multi) Encoding() alphabet.Encoding { return m.Encode } // SetEncoding sets the quality encoding scheme to e. func (m *Multi) SetEncoding(e alphabet.Encoding) { for _, r := range m.Seq { if enc, ok := r.(seq.Scorer); ok { enc.SetEncoding(e) } } m.Encode = e } // Len returns the length of the alignment. func (m *Multi) Len() int { var ( min = util.MaxInt max = util.MinInt ) for _, r := range m.Seq { if start := r.Start(); start < min { min = start } if end := r.End(); end > max { max = end } } return max - min } // Rows returns the number of rows in the alignment. func (m *Multi) Rows() int { return len(m.Seq) } // SetOffset sets the location-relative offset of the sequence to o. func (m *Multi) SetOffset(o int) error { for _, r := range m.Seq { r.SetOffset(r.Start() - m.Offset + o) } m.Offset = o return nil } // Start returns the start position of the sequence in coordinates relative to // the sequence location. func (m *Multi) Start() int { start := util.MaxInt for _, r := range m.Seq { if lt := r.Start(); lt < start { start = lt } } return start } // End returns the end position of the sequence in coordinates relative to // the sequence location. func (m *Multi) End() int { end := util.MinInt for _, m := range m.Seq { if rt := m.End(); rt > end { end = rt } } return end } // Clone returns a copy of the sequence. func (m *Multi) Clone() seq.Rower { c := &Multi{} *c = *m c.Seq = make([]seq.Sequence, len(m.Seq)) for i, r := range m.Seq { c.Seq[i] = r.Clone().(seq.Sequence) } return c } // RevComp reverse complements the sequence. func (m *Multi) RevComp() { end := m.End() for _, r := range m.Seq { r.RevComp() r.SetOffset(end - m.End()) } return } // Reverse reverses the order of letters in the the sequence without complementing them. func (m *Multi) Reverse() { end := m.End() for _, r := range m.Seq { r.Reverse() r.SetOffset(end - m.End()) } } // Conformation returns the sequence conformation. func (m *Multi) Conformation() feat.Conformation { return m.Conform } // SetConformation sets the sequence conformation. func (m *Multi) SetConformation(c feat.Conformation) { for _, r := range m.Seq { r.SetConformation(c) } m.Conform = c } // Add adds sequences n to the multiple sequence. func (m *Multi) Add(n ...seq.Sequence) error { for _, r := range n { if m.Alpha == nil { m.Alpha = r.Alphabet() continue } else if r.Alphabet() != m.Alpha { return errors.New("multi: inconsistent alphabets") } } m.Seq = append(m.Seq, n...) return nil } // Delete removes the sequence represented at row i of the alignment. It panics if i is out of range. func (m *Multi) Delete(i int) { m.Seq = m.Seq[:i+copy(m.Seq[i:], m.Seq[i+1:])] } // Row returns the sequence represented at row i of the alignment. It panics is i is out of range. func (m *Multi) Row(i int) seq.Sequence { return m.Seq[i] } // Append appends a to the ith sequence in the receiver. func (m *Multi) Append(i int, a ...alphabet.QLetter) (err error) { return m.Row(i).(seq.Appender).AppendQLetters(a...) } // Append each byte of each a to the appropriate sequence in the receiver. func (m *Multi) AppendColumns(a ...[]alphabet.QLetter) (err error) { for i, c := range a { if len(c) != m.Rows() { return fmt.Errorf("multi: column %d does not match Rows(): %d != %d.", i, len(c), m.Rows()) } } for i, b := 0, make([]alphabet.QLetter, 0, len(a)); i < m.Rows(); i, b = i+1, b[:0] { for _, r := range a { b = append(b, r[i]) } m.Append(i, b...) } return } // AppendEach appends each []alphabet.QLetter in a to the appropriate sequence in the receiver. func (m *Multi) AppendEach(a [][]alphabet.QLetter) (err error) { if len(a) != m.Rows() { return fmt.Errorf("multi: number of sequences does not match Rows(): %d != %d.", len(a), m.Rows()) } var i int for _, r := range m.Seq { if al, ok := r.(seq.AlignedAppender); ok { row := al.Rows() if al.AppendEach(a[i:i+row]) != nil { panic("internal size mismatch") } i += row } else { r.(seq.Appender).AppendQLetters(a[i]...) i++ } } return } // Column returns a slice of letters reflecting the column at pos. func (m *Multi) Column(pos int, fill bool) []alphabet.Letter { if pos < m.Start() || pos >= m.End() { panic("multi: index out of range") } var c []alphabet.Letter if fill { c = make([]alphabet.Letter, 0, m.Rows()) } else { c = []alphabet.Letter{} } for _, r := range m.Seq { if a, ok := r.(seq.Aligned); ok { if a.Start() <= pos && pos < a.End() { c = append(c, a.Column(pos, fill)...) } else if fill { c = append(c, m.Alpha.Gap().Repeat(a.Rows())...) } } else { if r.Start() <= pos && pos < r.End() { c = append(c, r.At(pos).L) } else if fill { c = append(c, m.Alpha.Gap()) } } } return c } // ColumnQL returns a slice of quality letters reflecting the column at pos. func (m *Multi) ColumnQL(pos int, fill bool) []alphabet.QLetter { if pos < m.Start() || pos >= m.End() { panic("multi: index out of range") } var c []alphabet.QLetter if fill { c = make([]alphabet.QLetter, 0, m.Rows()) } else { c = []alphabet.QLetter{} } for _, r := range m.Seq { if a, ok := r.(seq.Aligned); ok { if a.Start() <= pos && pos < a.End() { c = append(c, a.ColumnQL(pos, fill)...) } else if fill { c = append(c, alphabet.QLetter{L: m.Alpha.Gap()}.Repeat(a.Rows())...) } } else { if r.Start() <= pos && pos < r.End() { c = append(c, r.At(pos)) } else if fill { c = append(c, alphabet.QLetter{L: m.Alpha.Gap()}) } } } return c } // IsFlush returns a boolean indicating whether the end specified by where is flush - that is // all the contributing sequences start at the same offset. func (m *Multi) IsFlush(where int) bool { if m.Rows() <= 1 { return true } var start, end int for i, r := range m.Seq { if lt, rt := r.Start(), r.End(); i > 0 && ((lt != start && where&seq.Start != 0) || (rt != end && where&seq.End != 0)) { return false } else if i == 0 { start, end = lt, rt } } return true } // Flush fills ragged sequences with the receiver's gap letter so that all sequences are flush. func (m *Multi) Flush(where int, fill alphabet.Letter) { if m.IsFlush(where) { return } if where&seq.Start != 0 { start := m.Start() for _, r := range m.Seq { if r.Start()-start < 1 { continue } switch sl := r.Slice().(type) { case alphabet.Letters: r.SetSlice(alphabet.Letters(append(fill.Repeat(r.Start()-start), sl...))) case alphabet.QLetters: r.SetSlice(alphabet.QLetters(append(alphabet.QLetter{L: fill}.Repeat(r.Start()-start), sl...))) } r.SetOffset(start) } } if where&seq.End != 0 { end := m.End() for _, r := range m.Seq { if end-r.End() < 1 { continue } r.(seq.Appender).AppendQLetters(alphabet.QLetter{L: fill}.Repeat(end - r.End())...) } } } // Subseq returns a multiple subsequence slice of the receiver. func (m *Multi) Subseq(start, end int) (*Multi, error) { var ns []seq.Sequence for _, r := range m.Seq { rs := reflect.New(reflect.TypeOf(r)).Interface().(sequtils.Sliceable) err := sequtils.Truncate(rs, r, start, end) if err != nil { return nil, err } ns = append(ns, rs.(seq.Sequence)) } ss := &Multi{} *ss = *m ss.Seq = ns return ss, nil } // Truncate truncates the the receiver from start to end. func (m *Multi) Truncate(start, end int) error { for _, r := range m.Seq { err := sequtils.Truncate(r, r, start, end) if err != nil { return err } } return nil } // Join joins a to the receiver at the end specied by where. func (m *Multi) Join(a *Multi, where int) error { if m.Rows() != a.Rows() { return fmt.Errorf("multi: row number mismatch %d != %d", m.Rows(), a.Rows()) } switch where { case seq.Start: if !a.IsFlush(seq.End) { a.Flush(seq.End, m.Alpha.Gap()) } if !m.IsFlush(seq.Start) { m.Flush(seq.Start, m.Alpha.Gap()) } case seq.End: if !a.IsFlush(seq.Start) { a.Flush(seq.Start, m.Alpha.Gap()) } if !m.IsFlush(seq.End) { m.Flush(seq.End, m.Alpha.Gap()) } } for i := 0; i < m.Rows(); i++ { r := m.Row(i) as := a.Row(i) err := joinOne(r, as, where) if err != nil { return err } } return nil } func joinOne(m, am seq.Sequence, where int) error { switch m.(type) { case *linear.Seq: _, ok := am.(*linear.Seq) if !ok { goto MISMATCH } return sequtils.Join(m, am, where) case *linear.QSeq: _, ok := am.(*linear.QSeq) if !ok { goto MISMATCH } return sequtils.Join(m, am, where) default: joinerRegistryLock.RLock() defer joinerRegistryLock.RUnlock() joinerFunc, ok := joinerRegistry[reflect.TypeOf(m)] if !ok { return fmt.Errorf("multi: sequence type %T not handled.", m) } if reflect.TypeOf(m) != reflect.TypeOf(am) { goto MISMATCH } return joinerFunc(m, am, where) } MISMATCH: return fmt.Errorf("multi: sequence type mismatch: %T != %T.", m, am) } type JoinFunc func(a, b seq.Sequence, where int) (err error) func RegisterJoiner(p seq.Sequence, f JoinFunc) { joinerRegistryLock.Lock() joinerRegistry[reflect.TypeOf(p)] = f joinerRegistryLock.Unlock() } type ft struct { s, e int } func (f *ft) Start() int { return f.s } func (f *ft) End() int { return f.e } func (f *ft) Len() int { return f.e - f.s } func (f *ft) Orientation() feat.Orientation { return feat.Forward } func (f *ft) Name() string { return "" } func (f *ft) Description() string { return "" } func (f *ft) Location() feat.Feature { return nil } type fts []feat.Feature func (f fts) Features() []feat.Feature { return f } func (f fts) Len() int { return len(f) } func (f fts) Less(i, j int) bool { return f[i].Start() < f[j].Start() } func (f fts) Swap(i, j int) { f[i], f[j] = f[j], f[i] } func max(a, b int) int { if a > b { return a } return b } func min(a, b int) int { if a < b { return a } return b } // Stitch produces a subsequence of the receiver defined by fs. The result is stored in the receiver // and all contributing sequences are modified. func (m *Multi) Stitch(fs feat.Set) error { ff := fs.Features() for _, f := range ff { if f.End() < f.Start() { return errors.New("multi: feature end < feature start") } } ff = append(fts(nil), ff...) sort.Sort(fts(ff)) var ( fsp = make(fts, 0, len(ff)) csp *ft ) for i, f := range ff { if s := f.Start(); i == 0 || s > csp.e { csp = &ft{s: s, e: f.End()} fsp = append(fsp, csp) } else { csp.e = max(csp.e, f.End()) } } return m.Compose(fsp) } // Compose produces a composition of the receiver defined by the features in fs. The result is stored // in the receiver and all contributing sequences are modified. func (m *Multi) Compose(fs feat.Set) error { m.Flush(seq.Start|seq.End, m.Alpha.Gap()) for _, r := range m.Seq { err := sequtils.Compose(r, r, fs) if err != nil { return err } } return nil } func (m *Multi) String() string { t := m.Consensus(false) return t.String() } // Consensus returns a quality sequence reflecting the consensus of the receiver determined by the // ColumnConsense field. func (m *Multi) Consensus(includeMissing bool) *linear.QSeq { cm := make([]alphabet.QLetter, 0, m.Len()) alpha := m.Alphabet() for i := m.Start(); i < m.End(); i++ { cm = append(cm, m.ColumnConsense(m, alpha, i, includeMissing)) } c := linear.NewQSeq("Consensus:"+m.ID, cm, m.Alpha, m.Encode) c.SetOffset(m.Offset) return c } // Format is a support routine for fmt.Formatter. It accepts the formats 'v' and 's' // (string), 'a' (fasta) and 'q' (fastq). String, fasta and fastq formats support // truncated output via the verb's precision. Fasta format supports sequence line // specification via the verb's width field. Fastq format supports optional inclusion // of the '+' line descriptor line with the '+' flag. The 'v' verb supports the '#' // flag for Go syntax output. The 's' and 'v' formats support the '-' flag for // omission of the sequence name and in conjunction with this, the ' ' flag for // alignment justification. func (m *Multi) Format(fs fmt.State, c rune) { if m == nil { fmt.Fprint(fs, "") return } var align bool switch c { case 'v': if fs.Flag('#') { fmt.Fprintf(fs, "&%#v", *m) return } fallthrough case 's': align = fs.Flag(' ') && fs.Flag('-') fallthrough case 'a', 'q': format := formatString(fs, c) for i, r := range m.Seq { if align { fmt.Fprintf(fs, "%s", strings.Repeat(" ", r.Start()-m.Start())) } fmt.Fprintf(fs, format, r) if i < m.Rows()-1 { fmt.Fprintln(fs) } } default: fmt.Fprintf(fs, "%%!%c(*multi.Multi=%.10s)", c, m) } } func formatString(fs fmt.State, c rune) string { w, wOk := fs.Width() p, pOk := fs.Precision() var b bytes.Buffer b.WriteByte('%') for _, f := range "+-# 0" { if fs.Flag(int(f)) { b.WriteRune(f) } } if wOk { fmt.Fprint(&b, w) } if pOk { b.WriteByte('.') fmt.Fprint(&b, p) } b.WriteRune(c) return b.String() } biogo-1.0.4/seq/multi/set.go0000644000175000017500000000217214136731467015223 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package multi import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/util" "fmt" ) type Set []seq.Sequence // Interface guarantees var ( _ seq.Rower = (*Set)(nil) _ seq.RowAppender = (*Set)(nil) ) // Append each []byte in a to the appropriate sequence in the receiver. func (s Set) AppendEach(a [][]alphabet.QLetter) (err error) { if len(a) != s.Rows() { return fmt.Errorf("multi: number of sequences does not match row count: %d != %d.", len(a), s.Rows()) } for i, r := range s { r.(seq.Appender).AppendQLetters(a[i]...) } return nil } func (s Set) Row(i int) seq.Sequence { return s[i] } func (s Set) Len() int { max := util.MinInt for _, r := range s { if l := r.Len(); l > max { max = l } } return max } func (s Set) Rows() (c int) { return len(s) } func (s Set) Reverse() { for _, r := range s { r.Reverse() } } func (s Set) RevComp() { for _, r := range s { r.RevComp() } } biogo-1.0.4/seq/multi/multi_example_test.go0000644000175000017500000001301714136731467020334 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package multi import ( "fmt" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/linear" ) var m, n *Multi func init() { var err error m, err = NewMulti("example multi", []seq.Sequence{ linear.NewSeq("example DNA 1", []alphabet.Letter("ACGCTGACTTGGTGCACGT"), alphabet.DNA), linear.NewSeq("example DNA 2", []alphabet.Letter("ACGGTGACCTGGCGCGCAT"), alphabet.DNA), linear.NewSeq("example DNA 3", []alphabet.Letter("ACGATGACGTGGCGCTCAT"), alphabet.DNA), }, seq.DefaultConsensus) if err != nil { panic(err) } } func ExampleNewMulti() { m, err := NewMulti("example multi", []seq.Sequence{ linear.NewSeq("example DNA 1", []alphabet.Letter("ACGCTGACTTGGTGCACGT"), alphabet.DNA), linear.NewSeq("example DNA 2", []alphabet.Letter("ACGGTGACCTGGCGCGCAT"), alphabet.DNA), linear.NewSeq("example DNA 3", []alphabet.Letter("ACGATGACGTGGCGCTCAT"), alphabet.DNA), }, seq.DefaultConsensus) if err != nil { return } fmt.Printf("%- s\n\n%-s\n", m, m.Consensus(false)) // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGATGACGTGGCGCTCAT // // acgntgacntggcgcncat } func ExampleMulti_Add() { var err error fmt.Printf("%v %-s\n", m.Rows(), m.Consensus(false)) err = m.Add(linear.NewQSeq("example DNA", []alphabet.QLetter{{'a', 40}, {'c', 39}, {'g', 40}, {'C', 38}, {'t', 35}, {'g', 20}}, alphabet.DNA, alphabet.Sanger)) if err != nil { fmt.Println(err) return } fmt.Printf("%v %-s\n", m.Rows(), m.Consensus(false)) err = m.Add(linear.NewQSeq("example RNA", []alphabet.QLetter{{'a', 40}, {'c', 39}, {'g', 40}, {'C', 38}, {'t', 35}, {'g', 20}}, alphabet.RNA, alphabet.Sanger)) if err != nil { fmt.Println(err) return } // Output: // 3 acgntgacntggcgcncat // 4 acgctgacntggcgcncat // multi: inconsistent alphabets } func ExampleMulti_Clone() { n = m.Clone().(*Multi) n.Row(2).Set(3, alphabet.QLetter{L: 't'}) fmt.Printf("%- s\n\n%-s\n\n%- s\n\n%-s\n", m, m.Consensus(false), n, n.Consensus(false), ) // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGATGACGTGGCGCTCAT // acgCtg // // acgctgacntggcgcncat // // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGtTGACGTGGCGCTCAT // acgCtg // // acgctgacntggcgcncat } func ExampleMulti_Rows() { fmt.Println(m.Rows()) // Output: // 4 } func ExampleMulti_IsFlush() { m.Row(3).SetOffset(13) fmt.Printf("%- s\n\n%-s\n", m, m.Consensus(false)) fmt.Printf("\nFlush at left: %v\nFlush at right: %v\n", m.IsFlush(seq.Start), m.IsFlush(seq.End)) m.Flush(seq.Start, '-') fmt.Printf("\n%- s\n\n%-s\n", m, m.Consensus(false)) fmt.Printf("\nFlush at left: %v\nFlush at right: %v\n", m.IsFlush(seq.Start), m.IsFlush(seq.End)) // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGATGACGTGGCGCTCAT // acgCtg // // acgntgacntggcgcgcat // // Flush at left: false // Flush at right: true // // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGATGACGTGGCGCTCAT // -------------acgCtg // // acgntgacntggcgcgcat // // Flush at left: true // Flush at right: true } func ExampleMulti_Join() { fmt.Printf("%- s\n\n%-s\n", n, n.Consensus(false)) n.Join(m, seq.End) fmt.Printf("\n%- s\n\n%-s\n", n, n.Consensus(false)) // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGtTGACGTGGCGCTCAT // acgCtg // // acgctgacntggcgcncat // // ACGCTGACTTGGTGCACGTACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCATACGGTGACCTGGCGCGCAT // ACGtTGACGTGGCGCTCATACGATGACGTGGCGCTCAT // acgCtg--------------------------acgCtg // // acgctgacntggcgcncatacgntgacntggcgcgcat } func ExampleMulti_Len() { fmt.Println(m.Len()) // Output: // 19 } func ExampleMulti_RevComp() { fmt.Printf("%- s\n\n%-s\n\n", m, m.Consensus(false)) m.RevComp() fmt.Printf("%- s\n\n%-s\n", m, m.Consensus(false)) // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGATGACGTGGCGCTCAT // -------------acgCtg // // acgntgacntggcgcgcat // // ACGTGCACCAAGTCAGCGT // ATGCGCGCCAGGTCACCGT // ATGAGCGCCACGTCATCGT // caGcgt------------- // // atgcgcgccangtcancgt } type fe struct { s, e int st seq.Strand feat.Feature } func (f fe) Start() int { return f.s } func (f fe) End() int { return f.e } func (f fe) Len() int { return f.e - f.s } func (f fe) Orientation() feat.Orientation { return feat.Orientation(f.st) } type fs []feat.Feature func (f fs) Features() []feat.Feature { return []feat.Feature(f) } func ExampleMulti_Stitch() { f := fs{ &fe{s: -1, e: 4}, &fe{s: 30, e: 38}, } fmt.Printf("%- s\n\n%-s\n\n", n, n.Consensus(false)) if err := n.Stitch(f); err == nil { fmt.Printf("%- s\n\n%-s\n", n, n.Consensus(false)) } else { fmt.Println(err) } // Output: // ACGCTGACTTGGTGCACGTACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCATACGGTGACCTGGCGCGCAT // ACGtTGACGTGGCGCTCATACGATGACGTGGCGCTCAT // acgCtg--------------------------acgCtg // // acgctgacntggcgcncatacgntgacntggcgcgcat // // ACGCGTGCACGT // ACGGGCGCGCAT // ACGtGCGCTCAT // acgC--acgCtg // // acgcgcgcgcat } func ExampleMulti_Truncate() { fmt.Printf("%- s\n\n%-s\n\n", m, m.Consensus(false)) m.Truncate(4, 12) fmt.Printf("%- s\n\n%-s\n", m, m.Consensus(false)) // Output: // ACGTGCACCAAGTCAGCGT // ATGCGCGCCAGGTCACCGT // ATGAGCGCCACGTCATCGT // caGcgt------------- // // atgcgcgccangtcancgt // // GCACCAAG // GCGCCAGG // GCGCCACG // gt------ // // gcgccang } biogo-1.0.4/seq/multi/multi_test.go0000644000175000017500000000064414136731467016623 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package multi import ( "testing" "gopkg.in/check.v1" ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) func (s *S) TestWarning(c *check.C) { c.Log("\nFIXME: Tests only in example tests.\n") } biogo-1.0.4/seq/sequtils/0000755000175000017500000000000014136731467014616 5ustar nileshnileshbiogo-1.0.4/seq/sequtils/example_test.go0000644000175000017500000000413714136731467017644 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sequtils import ( "fmt" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" ) func ExampleTruncate_a() { s := stringToConformRangeOffSlice("ACGCTGACTTGGTGCACGT") s.conf = feat.Linear fmt.Printf("%s\n", s) if err := Truncate(s, s, 5, 12); err == nil { fmt.Printf("%s\n", s) } // Output: // ACGCTGACTTGGTGCACGT // GACTTGG } func ExampleTruncate_b() { var ( src = stringToConformRangeOffSlice("ACGCTGACTTGGTGCACGT") dst = &conformRangeOffSlice{} ) src.conf = feat.Circular fmt.Printf("%s Conformation = %v\n", src, src.Conformation()) if err := Truncate(dst, src, 12, 5); err == nil { fmt.Printf("%s\n", dst) } else { fmt.Println("Error:", err) } src.conf = feat.Linear fmt.Printf("%s Conformation = %v\n", src, src.Conformation()) if err := Truncate(dst, src, 12, 5); err == nil { fmt.Printf("%s\n", dst) } else { fmt.Println("Error:", err) } // Output: // ACGCTGACTTGGTGCACGT Conformation = circular // TGCACGTACGCT // ACGCTGACTTGGTGCACGT Conformation = linear // Error: sequtils: start position greater than end position for linear sequence } func ExampleJoin() { var s1, s2 *offSlice s1 = stringToOffSlice("agctgtgctga") s2 = stringToOffSlice("CGTGCAGTCATGAGTGA") fmt.Printf("%s %s\n", s1, s2) Join(s1, s2, seq.Start) fmt.Printf("%s\n", s1) s1 = stringToOffSlice("agctgtgctga") s2 = stringToOffSlice("CGTGCAGTCATGAGTGA") Join(s1, s2, seq.End) fmt.Printf("%s\n", s1) // Output: // agctgtgctga 0 CGTGCAGTCATGAGTGA 0 // CGTGCAGTCATGAGTGAagctgtgctga -17 // agctgtgctgaCGTGCAGTCATGAGTGA 0 } func ExampleStitch() { s := stringToConformRangeOffSlice("aAGTATAAgtcagtgcagtgtctggcagTGCTCGTGCgtagtgaagtagGGTTAGTTTa") f := fs{ fe{s: 1, e: 8}, fe{s: 28, e: 37}, fe{s: 49, e: len(s.slice) - 1}, } fmt.Printf("%s\n", s) if err := Stitch(s, s, f); err == nil { fmt.Printf("%s\n", s) } // Output: // aAGTATAAgtcagtgcagtgtctggcagTGCTCGTGCgtagtgaagtagGGTTAGTTTa // AGTATAATGCTCGTGCGGTTAGTTT } biogo-1.0.4/seq/sequtils/utils_test.go0000644000175000017500000002120014136731467017337 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sequtils import ( "fmt" "reflect" "testing" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "gopkg.in/check.v1" ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) var ( lorem = stringToSlice("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.") ) type slice []byte func stringToSlice(s string) slice { return []byte(s) } func (s slice) Make(len, cap int) alphabet.Slice { return make(slice, len, cap) } func (s slice) Len() int { return len(s) } func (s slice) Cap() int { return cap(s) } func (s slice) Slice(start, end int) alphabet.Slice { return s[start:end] } func (s slice) Append(a alphabet.Slice) alphabet.Slice { return append(s, a.(slice)...) } func (s slice) Copy(a alphabet.Slice) int { return copy(s, a.(slice)) } type offSlice struct { slice offset int conf feat.Conformation } func stringToOffSlice(s string) *offSlice { return &offSlice{slice: stringToSlice(s)} } func (os *offSlice) Conformation() feat.Conformation { return os.conf } func (os *offSlice) SetOffset(o int) error { os.offset = o; return nil } func (os *offSlice) Slice() alphabet.Slice { return os.slice } func (os *offSlice) SetSlice(sl alphabet.Slice) { os.slice = sl.(slice) } func (os *offSlice) String() string { return fmt.Sprintf("%s %d", os.slice, os.offset) } type conformRangeOffSlice struct { slice offset int conf feat.Conformation } func stringToConformRangeOffSlice(s string) *conformRangeOffSlice { return &conformRangeOffSlice{slice: stringToSlice(s)} } func (os *conformRangeOffSlice) Conformation() feat.Conformation { return os.conf } func (os *conformRangeOffSlice) SetConformation(c feat.Conformation) { os.conf = c } func (os *conformRangeOffSlice) SetOffset(o int) error { os.offset = o; return nil } func (os *conformRangeOffSlice) Start() int { return os.offset } func (os *conformRangeOffSlice) End() int { return os.offset + len(os.slice) } func (os *conformRangeOffSlice) Slice() alphabet.Slice { return os.slice } func (os *conformRangeOffSlice) SetSlice(sl alphabet.Slice) { os.slice = sl.(slice) } func (os *conformRangeOffSlice) String() string { return fmt.Sprintf("%s", os.slice) } func (s *S) TestTruncate(c *check.C) { type test struct { in *conformRangeOffSlice start, end int expect interface{} } var T []test = []test{ { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear}, start: 28, end: 39, expect: stringToSlice("consectetur"), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear, offset: 1}, start: 29, end: 40, expect: stringToSlice("consectetur"), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Circular}, start: 28, end: 39, expect: stringToSlice("consectetur"), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear}, start: 117, end: 5, expect: "sequtils: start position greater than end position for linear sequence", }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Circular}, start: 117, end: 5, expect: stringToSlice("aliqua.Lorem"), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Circular, offset: 1}, start: 118, end: 6, expect: stringToSlice("aliqua.Lorem"), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear}, start: 5, end: 1170, expect: "sequtils: index out of range", }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Circular}, start: 1170, end: 5, expect: "sequtils: index out of range", }, } for _, t := range T { r := &conformRangeOffSlice{} if err := Truncate(r, t.in, t.start, t.end); err != nil { c.Check(err, check.ErrorMatches, t.expect) } else { c.Check(r.slice, check.DeepEquals, t.expect) c.Check(r.conf, check.Equals, feat.Linear) if t.in.conf != feat.Circular || (t.in.conf == feat.Circular && t.end >= t.start) { c.Check(t.end-t.start, check.Equals, reflect.ValueOf(t.expect).Len()) } else { c.Check(t.end+reflect.ValueOf(t.in.slice).Len()-t.start, check.Equals, reflect.ValueOf(t.expect).Len()) } } } } func (s *S) TestJoin(c *check.C) { type test struct { a, b *offSlice where int expect *offSlice } var T []test = []test{ { a: &offSlice{lorem[28:40], 0, feat.Linear}, b: &offSlice{lorem[117:], 0, feat.Linear}, where: seq.Start, expect: &offSlice{stringToSlice("aliqua.consectetur "), -7, feat.Linear}, }, { a: &offSlice{lorem[28:40], 0, feat.Linear}, b: &offSlice{lorem[117:], 0, feat.Linear}, where: seq.End, expect: &offSlice{stringToSlice("consectetur aliqua."), 0, feat.Linear}, }, } for _, t := range T { Join(t.a, t.b, t.where) c.Check(t.a, check.DeepEquals, t.expect) } } type fe struct { s, e int orient feat.Orientation feat.Feature } func (f fe) Start() int { return f.s } func (f fe) End() int { return f.e } func (f fe) Len() int { return f.e - f.s } func (f fe) Orientation() feat.Orientation { return f.orient } type fs []feat.Feature func (f fs) Features() []feat.Feature { return []feat.Feature(f) } func (s *S) TestStitch(c *check.C) { type test struct { in *conformRangeOffSlice f feat.Set expect interface{} } var T []test = []test{ { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear, offset: 0}, f: fs{fe{s: 12, e: 18}, fe{s: 24, e: 26}, fe{s: 103, e: 110}}, expect: stringToSlice("dolor et dolore"), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear, offset: -1}, f: fs{fe{s: 12, e: 18}, fe{s: 24, e: 26}, fe{s: 103, e: 110}}, expect: stringToSlice("olor st,dolore "), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear, offset: 0}, f: fs{fe{s: 12, e: 18}, fe{s: 13, e: 17}, fe{s: 24, e: 26}, fe{s: 103, e: 110}}, expect: stringToSlice("dolor et dolore"), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear, offset: -1}, f: fs{fe{s: 12, e: 18}, fe{s: 13, e: 17}, fe{s: 24, e: 26}, fe{s: 103, e: 110}}, expect: stringToSlice("olor st,dolore "), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear, offset: 0}, f: fs{fe{s: 19, e: 18}}, expect: "sequtils: feature end < feature start", }, } for _, t := range T { r := &conformRangeOffSlice{} if err := Stitch(r, t.in, t.f); err != nil { c.Check(err, check.ErrorMatches, t.expect) } else { c.Check(r.slice, check.DeepEquals, t.expect) } } } func (s *S) TestCompose(c *check.C) { type test struct { in *conformRangeOffSlice f feat.Set expect interface{} } var T []test = []test{ { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear, offset: 0}, f: fs{fe{s: 12, e: 18}, fe{s: 24, e: 26}, fe{s: 103, e: 110}}, expect: stringToSlice("dolor et dolore"), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear, offset: -1}, f: fs{fe{s: 12, e: 18}, fe{s: 24, e: 26}, fe{s: 103, e: 110}}, expect: stringToSlice("olor st,dolore "), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear, offset: 0}, f: fs{fe{s: 12, e: 18}, fe{s: 13, e: 17}, fe{s: 24, e: 26}, fe{s: 103, e: 110}}, expect: stringToSlice("dolor oloret dolore"), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear, offset: -1}, f: fs{fe{s: 12, e: 18}, fe{s: 13, e: 17}, fe{s: 24, e: 26}, fe{s: 103, e: 110}}, expect: stringToSlice("olor slor t,dolore "), }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear, offset: -1}, f: fs{fe{s: 12, e: 18}, fe{s: 13, e: 17}, fe{s: 24, e: 26, orient: feat.Reverse}, fe{s: 103, e: 110}}, expect: "sequtils: unable to reverse segment during compose", }, { in: &conformRangeOffSlice{slice: lorem, conf: feat.Linear, offset: 0}, f: fs{fe{s: 19, e: 18}}, expect: "sequtils: feature end < feature start", }, } for _, t := range T { r := &conformRangeOffSlice{} if err := Compose(r, t.in, t.f); err == nil { c.Check(r.slice, check.DeepEquals, t.expect) } else { c.Check(err, check.ErrorMatches, t.expect) } } } biogo-1.0.4/seq/sequtils/utils.go0000644000175000017500000001645614136731467016321 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package sequtils provides generic functions for manipulation of biogo/seq/... types. package sequtils import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "errors" "sort" ) // A Joinable can be joined to another of the same concrete type using the Join function. type Joinable interface { SetOffset(int) error Slice() alphabet.Slice SetSlice(alphabet.Slice) } // Join joins a and be with the target location of b specified by where. The offset of dst // will be updated if src is prepended. Join will panic if dst and src do not hold the same // concrete Slice type. Circular sequences cannot be joined. func Join(dst, src Joinable, where int) error { dstC, dstOk := dst.(seq.Conformationer) srcC, srcOk := src.(seq.Conformationer) switch { case dstOk && dstC.Conformation() > feat.Linear, srcOk && srcC.Conformation() > feat.Linear: return errors.New("sequtils: cannot join circular sequence") } o := dst if where == seq.End { src, dst = dst, src } dstSl, srcSl := dst.Slice(), src.Slice() srcLen := srcSl.Len() if where == seq.Start { dst.SetOffset(-srcLen) } t := dst.Slice().Make(srcLen, srcLen+dstSl.Len()) t.Copy(srcSl) o.SetSlice(t.Append(dstSl)) return nil } // A Sliceable can be truncated, stitched and composed. type Sliceable interface { Start() int End() int SetOffset(int) error Slice() alphabet.Slice SetSlice(alphabet.Slice) } // Truncate performs a truncation on src from start to end and places the result in dst. // The conformation of dst is set to linear and the offset is set to start. If dst and src // are not equal, a copy of the truncation is allocated. Only circular sequences can be // truncated with start > end. func Truncate(dst, src Sliceable, start, end int) error { var ( sl = src.Slice() offset = src.Start() ) if start < offset || end > src.End() { return errors.New("sequtils: index out of range") } if start <= end { if dst == src { dst.SetSlice(sl.Slice(start-offset, end-offset)) } else { dst.SetSlice(sl.Make(0, end-start).Append(sl.Slice(start-offset, end-offset))) } dst.SetOffset(start) if dst, ok := dst.(seq.ConformationSetter); ok { dst.SetConformation(feat.Linear) } return nil } if src, ok := src.(seq.Conformationer); !ok || src.Conformation() == feat.Linear { return errors.New("sequtils: start position greater than end position for linear sequence") } if end < offset || start > src.End() { return errors.New("sequtils: index out of range") } t := sl.Make(sl.Len()-start+offset, sl.Len()+end-start) t.Copy(sl.Slice(start-offset, sl.Len())) dst.SetSlice(t.Append(sl.Slice(0, end-offset))) dst.SetOffset(start) if dst, ok := dst.(seq.ConformationSetter); ok { dst.SetConformation(feat.Linear) } return nil } type feats []feat.Feature func (f feats) Len() int { return len(f) } func (f feats) Less(i, j int) bool { return f[i].Start() < f[j].Start() } func (f feats) Swap(i, j int) { f[i], f[j] = f[j], f[i] } func max(a, b int) int { if a > b { return a } return b } func min(a, b int) int { if a < b { return a } return b } // Stitch produces a subsequence of src defined by fs and places the the result in dst. // The subsequences are guaranteed to be in order and non-overlapping even if not provided as such. // Stitching a circular sequence returns a linear sequence. func Stitch(dst, src Sliceable, fs feat.Set) error { var ( sl = src.Slice() offset = src.Start() ff = feats(fs.Features()) ) for _, f := range ff { if f.End() < f.Start() { return errors.New("sequtils: feature end < feature start") } } ff = append(feats(nil), ff...) sort.Sort(ff) // FIXME Does not correctly deal with circular sequences and feature sets. // Range over ff if src is circular and and trunc at start and end, do checks to // see if feature splits on origin and rearrange tail to front. pLen := sl.Len() end := pLen + offset type fi struct{ s, e int } var ( fsp = make([]*fi, 0, len(ff)) csp *fi ) for i, f := range ff { if s := f.Start(); i == 0 || s > csp.e { csp = &fi{s: s, e: f.End()} fsp = append(fsp, csp) } else { csp.e = max(csp.e, f.End()) } } var l int for _, f := range fsp { l += max(0, min(f.e, end)-max(f.s, offset)) } t := sl.Make(0, l) for _, f := range fsp { fs, fe := max(f.s-offset, 0), min(f.e-offset, pLen) if fs >= fe { continue } t = t.Append(sl.Slice(fs, fe)) } dst.SetSlice(t) if dst, ok := dst.(seq.ConformationSetter); ok { dst.SetConformation(feat.Linear) } dst.SetOffset(0) return nil } type SliceReverser interface { Sliceable New() seq.Sequence Alphabet() alphabet.Alphabet SetAlphabet(alphabet.Alphabet) error RevComp() Reverse() } // Compose produces a composition of src defined by the features in fs. The subparts of // the composition may be out of order and if features in fs specify orientation may be // reversed or reverse complemented depending on the src - if src is a SliceReverser and // its alphabet is a Complementor the segment will be reverse complemented, if the alphabte // is not a Complementor these segments will only be reversed. If src is not a SliceREverser // and a reverse segment is specified an error is returned. // Composing a circular sequence returns a linear sequence. func Compose(dst, src Sliceable, fs feat.Set) error { var ( sl = src.Slice() offset = src.Start() ff = feats(fs.Features()) ) pLen := sl.Len() end := pLen + offset t := make([]alphabet.Slice, len(ff)) var tl int for i, f := range ff { if f.End() < f.Start() { return errors.New("sequtils: feature end < feature start") } l := min(f.End(), end) - max(f.Start(), offset) tl += l t[i] = sl.Make(l, l) t[i].Copy(sl.Slice(max(f.Start()-offset, 0), min(f.End()-offset, pLen))) } c := sl.Make(0, tl) var r SliceReverser for i, ts := range t { if f, ok := ff[i].(feat.Orienter); ok && f.Orientation() == feat.Reverse { switch src := src.(type) { case SliceReverser: if r == nil { r = src.New().(SliceReverser) if _, ok := src.Alphabet().(alphabet.Complementor); ok { r.SetAlphabet(src.Alphabet()) r.SetSlice(ts) r.RevComp() } else { r.SetSlice(ts) r.Reverse() } } default: return errors.New("sequtils: unable to reverse segment during compose") } c = c.Append(r.Slice()) } else { c = c.Append(ts) } } dst.SetSlice(c) if dst, ok := dst.(seq.ConformationSetter); ok { dst.SetConformation(feat.Linear) } dst.SetOffset(0) return nil } // A QualityFeature describes a segment of sequence quality information. EAt() called with // column values within Start() and End() is expected to return valid error probabilities for // the zero'th row position. type QualityFeature interface { feat.Feature EAt(int) float64 } // Trim uses the modified-Mott trimming function to determine the start and end positions // of good sequence. http://www.phrap.org/phredphrap/phred.html func Trim(q QualityFeature, limit float64) (start, end int) { var sum, max float64 for i := q.Start(); i < q.End(); i++ { sum += limit - q.EAt(i) if sum < 0 { sum, start = 0, i+1 } if sum >= max { max, end = sum, i+1 } } return } biogo-1.0.4/seq/linear/0000755000175000017500000000000014136731467014217 5ustar nileshnileshbiogo-1.0.4/seq/linear/qseq.go0000644000175000017500000001560414136731467015525 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package linear import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "fmt" "unicode" ) // A QSeq is a basic linear sequence with Phred quality scores. type QSeq struct { seq.Annotation Seq alphabet.QLetters Threshold alphabet.Qphred // Threshold for returning valid letter. QFilter seq.QFilter // How to represent below threshold letter. Encode alphabet.Encoding } // Interface guarantees var ( _ feat.Feature = (*QSeq)(nil) _ seq.Sequence = (*QSeq)(nil) _ seq.Scorer = (*QSeq)(nil) ) // NewQSeq create a new QSeq with the given id, letter sequence, alphabet and quality encoding. func NewQSeq(id string, ql []alphabet.QLetter, alpha alphabet.Alphabet, enc alphabet.Encoding) *QSeq { return &QSeq{ Annotation: seq.Annotation{ ID: id, Alpha: alpha, Strand: seq.Plus, }, Seq: append(alphabet.QLetters(nil), ql...), Encode: enc, Threshold: 3, QFilter: seq.AmbigFilter, } } // Append append Letters to the sequence, the DefaultQphred value is used for quality scores. func (s *QSeq) AppendLetters(a ...alphabet.Letter) error { l := s.Len() s.Seq = append(s.Seq, make([]alphabet.QLetter, len(a))...)[:l] for _, v := range a { s.Seq = append(s.Seq, alphabet.QLetter{L: v, Q: seq.DefaultQphred}) } return nil } // Append appends QLetters to the sequence. func (s *QSeq) AppendQLetters(a ...alphabet.QLetter) error { s.Seq = append(s.Seq, a...) return nil } // Slice returns the sequence data as a alphabet.Slice. func (s *QSeq) Slice() alphabet.Slice { return s.Seq } // SetSlice sets the sequence data represented by the sequence. SetSlice will panic if sl // is not a alphabet.QLetters. func (s *QSeq) SetSlice(sl alphabet.Slice) { s.Seq = sl.(alphabet.QLetters) } // At returns the letter at position pos. func (s *QSeq) At(i int) alphabet.QLetter { return s.Seq[i-s.Offset] } // QEncode encodes the quality at position pos to a letter based on the sequence encoding setting. func (s *QSeq) QEncode(i int) byte { return s.Seq[i-s.Offset].Q.Encode(s.Encode) } // Encoding returns the quality encoding scheme. func (s *QSeq) Encoding() alphabet.Encoding { return s.Encode } // SetEncoding sets the quality encoding scheme to e. func (s *QSeq) SetEncoding(e alphabet.Encoding) error { s.Encode = e; return nil } // EAt returns the probability of a sequence error at position pos. func (s *QSeq) EAt(i int) float64 { return s.Seq[i-s.Offset].Q.ProbE() } // Set sets the letter at position pos to l. func (s *QSeq) Set(i int, l alphabet.QLetter) error { s.Seq[i-s.Offset] = l return nil } // SetE sets the quality at position pos to e to reflect the given p(Error). func (s *QSeq) SetE(i int, e float64) error { s.Seq[i-s.Offset].Q = alphabet.Ephred(e) return nil } // Len returns the length of the sequence. func (s *QSeq) Len() int { return len(s.Seq) } // Start return the start position of the sequence in coordinates relative to the // sequence location. func (s *QSeq) Start() int { return s.Offset } // End returns the end position of the sequence in coordinates relative to the // sequence location. func (s *QSeq) End() int { return s.Offset + s.Len() } // Validate validates the letters of the sequence according to the sequence alphabet. func (s *QSeq) Validate() (bool, int) { for i, ql := range s.Seq { if !s.Alpha.IsValid(ql.L) { return false, i } } return true, -1 } // Clone returns a copy of the sequence. func (s *QSeq) Clone() seq.Sequence { c := *s c.Seq = append([]alphabet.QLetter(nil), s.Seq...) return &c } // New returns an empty *QSeq sequence with the same alphabet. func (s *QSeq) New() seq.Sequence { return &QSeq{Annotation: seq.Annotation{Alpha: s.Alpha}} } // RevComp reverse complements the sequence. RevComp will panic if the alphabet used by // the receiver is not a Complementor. func (s *QSeq) RevComp() { l, comp := s.Seq, s.Alphabet().(alphabet.Complementor).ComplementTable() i, j := 0, len(l)-1 for ; i < j; i, j = i+1, j-1 { l[i].L, l[j].L = comp[l[j].L], comp[l[i].L] l[i].Q, l[j].Q = l[j].Q, l[i].Q } if i == j { l[i].L = comp[l[i].L] } s.Strand = -s.Strand } // Reverse reverses the order of letters in the the sequence without complementing them. func (s *QSeq) Reverse() { l := s.Seq for i, j := 0, len(l)-1; i < j; i, j = i+1, j-1 { l[i], l[j] = l[j], l[i] } s.Strand = seq.None } // String returns a string representation of the sequence data only. func (s *QSeq) String() string { cs := make([]alphabet.Letter, 0, len(s.Seq)) for _, ql := range s.Seq { cs = append(cs, s.QFilter(s.Alpha, s.Threshold, ql)) } return alphabet.Letters(cs).String() } func min(a, b int) int { if a < b { return a } return b } // Format is a support routine for fmt.Formatter. It accepts the formats 'v' and 's' // (string), 'a' (fasta) and 'q' (fastq). String, fasta and fastq formats support // truncated output via the verb's precision. Fasta format supports sequence line // specification via the verb's width field. Fastq format supports optional inclusion // of the '+' line descriptor line with the '+' flag. The 'v' verb supports the '#' // flag for Go syntax output. The 's' and 'v' formats support the '-' flag for // omission of the sequence name. func (s *QSeq) Format(fs fmt.State, c rune) { if s == nil { fmt.Fprint(fs, "") return } var ( w, wOk = fs.Width() p, pOk = fs.Precision() buf []alphabet.QLetter ) if pOk { buf = s.Seq[:min(p, len(s.Seq))] } else { buf = s.Seq } switch c { case 'v': if fs.Flag('#') { fmt.Fprintf(fs, "&%#v", *s) return } fallthrough case 's': if !fs.Flag('-') { fmt.Fprintf(fs, "%q ", s.ID) } for _, ql := range buf { fmt.Fprintf(fs, "%c", s.QFilter(s.Alpha, s.Threshold, ql)) } if pOk && p < s.Len() { fmt.Fprint(fs, "...") } case 'a': s.formatDescLineTo(fs, '>') for i, ql := range buf { fmt.Fprintf(fs, "%c", s.QFilter(s.Alpha, s.Threshold, ql)) if wOk && i < s.Len()-1 && i%w == w-1 { fmt.Fprintln(fs) } } if pOk && p < s.Len() { fmt.Fprint(fs, "...") } case 'q': s.formatDescLineTo(fs, '@') for _, ql := range buf { fmt.Fprintf(fs, "%c", s.QFilter(s.Alpha, s.Threshold, ql)) } if pOk && p < s.Len() { fmt.Fprintln(fs, "...") } else { fmt.Fprintln(fs) } if fs.Flag('+') { s.formatDescLineTo(fs, '+') } else { fmt.Fprintln(fs, "+") } for _, ql := range buf { e := ql.Q.Encode(s.Encode) if e >= unicode.MaxASCII { e = unicode.MaxASCII - 1 } fmt.Fprintf(fs, "%c", e) } if pOk && p < s.Len() { fmt.Fprint(fs, "...") } default: fmt.Fprintf(fs, "%%!%c(linear.QSeq=%.10s)", c, s) } } func (s *QSeq) formatDescLineTo(fs fmt.State, p rune) { fmt.Fprintf(fs, "%c%s", p, s.ID) if s.Desc != "" { fmt.Fprintf(fs, " %s", s.Desc) } fmt.Fprintln(fs) } biogo-1.0.4/seq/linear/seq_example_test.go0000644000175000017500000001033014136731467020105 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package linear import ( "fmt" "strings" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/sequtils" ) func ExampleNewSeq() { d := NewSeq("example DNA", []alphabet.Letter("ACGCTGACTTGGTGCACGT"), alphabet.DNA) fmt.Printf("%-s %v\n", d, d.Moltype()) // Output: // ACGCTGACTTGGTGCACGT DNA } func ExampleSeq_Validate() { r := NewSeq("example RNA", []alphabet.Letter("ACGCTGACTTGGTGCACGT"), alphabet.RNA) fmt.Printf("%-s %v\n", r, r.Moltype()) if ok, pos := r.Validate(); ok { fmt.Println("valid RNA") } else { fmt.Println(strings.Repeat(" ", pos-1), "^ first invalid RNA position") } // Output: // ACGCTGACTTGGTGCACGT RNA // ^ first invalid RNA position } func ExampleSeq_truncate_a() { s := NewSeq("example DNA", []alphabet.Letter("ACGCTGACTTGGTGCACGT"), alphabet.DNA) fmt.Printf("%-s\n", s) if err := sequtils.Truncate(s, s, 5, 12); err == nil { fmt.Printf("%-s\n", s) } // Output: // ACGCTGACTTGGTGCACGT // GACTTGG } func ExampleSeq_truncate_b() { var s *Seq s = NewSeq("example DNA", []alphabet.Letter("ACGCTGACTTGGTGCACGT"), alphabet.DNA) s.Conform = feat.Circular fmt.Printf("%-s Conformation = %v\n", s, s.Conformation()) if err := sequtils.Truncate(s, s, 12, 5); err == nil { fmt.Printf("%-s Conformation = %v\n", s, s.Conformation()) } else { fmt.Println("Error:", err) } s = NewSeq("example DNA", []alphabet.Letter("ACGCTGACTTGGTGCACGT"), alphabet.DNA) fmt.Printf("%-s Conformation = %v\n", s, s.Conformation()) if err := sequtils.Truncate(s, s, 12, 5); err == nil { fmt.Printf("%-s Conformation = %v\n", s, s.Conformation()) } else { fmt.Println("Error:", err) } // Output: // ACGCTGACTTGGTGCACGT Conformation = circular // TGCACGTACGCT Conformation = linear // ACGCTGACTTGGTGCACGT Conformation = linear // Error: sequtils: start position greater than end position for linear sequence } func ExampleSeq_RevComp() { s := NewSeq("example DNA", []alphabet.Letter("ATGCtGACTTGGTGCACGT"), alphabet.DNA) fmt.Printf("%-s\n", s) s.RevComp() fmt.Printf("%-s\n", s) // Output: // ATGCtGACTTGGTGCACGT // ACGTGCACCAAGTCaGCAT } func ExampleSeq_join() { var s1, s2 *Seq s1 = NewSeq("a", []alphabet.Letter("agctgtgctga"), alphabet.DNA) s2 = NewSeq("b", []alphabet.Letter("CGTGCAGTCATGAGTGA"), alphabet.DNA) fmt.Printf("%-s %-s\n", s1, s2) if err := sequtils.Join(s1, s2, seq.Start); err == nil { fmt.Printf("%-s\n", s1) } s1 = NewSeq("a", []alphabet.Letter("agctgtgctga"), alphabet.DNA) s2 = NewSeq("b", []alphabet.Letter("CGTGCAGTCATGAGTGA"), alphabet.DNA) if err := sequtils.Join(s1, s2, seq.End); err == nil { fmt.Printf("%-s\n", s1) } // Output: // agctgtgctga CGTGCAGTCATGAGTGA // CGTGCAGTCATGAGTGAagctgtgctga // agctgtgctgaCGTGCAGTCATGAGTGA } type fe struct { s, e int st seq.Strand feat.Feature } func (f fe) Start() int { return f.s } func (f fe) End() int { return f.e } func (f fe) Len() int { return f.e - f.s } func (f fe) Orientation() feat.Orientation { return feat.Orientation(f.st) } type fs []feat.Feature func (f fs) Features() []feat.Feature { return []feat.Feature(f) } func ExampleSeq_stitch() { s := NewSeq("example DNA", []alphabet.Letter("aAGTATAAgtcagtgcagtgtctggcagTGCTCGTGCgtagtgaagtagGGTTAGTTTa"), alphabet.DNA) f := fs{ fe{s: 1, e: 8}, fe{s: 28, e: 37}, fe{s: 49, e: s.Len() - 1}, } fmt.Printf("%-s\n", s) if err := sequtils.Stitch(s, s, f); err == nil { fmt.Printf("%-s\n", s) } // Output: // aAGTATAAgtcagtgcagtgtctggcagTGCTCGTGCgtagtgaagtagGGTTAGTTTa // AGTATAATGCTCGTGCGGTTAGTTT } func ExampleSeq_compose() { s := NewSeq("example DNA", []alphabet.Letter("aAGTATAAgtcagtgcagtgtctggcaggtagtgaagtagggttagttta"), alphabet.DNA) f := fs{ fe{s: 0, e: 32}, fe{s: 1, e: 8, st: -1}, fe{s: 28, e: s.Len() - 1}, } fmt.Printf("%-s\n", s) if err := sequtils.Compose(s, s, f); err == nil { fmt.Printf("%-s\n", s) } // Output: // aAGTATAAgtcagtgcagtgtctggcaggtagtgaagtagggttagttta // aAGTATAAgtcagtgcagtgtctggcagTTATACTgtagtgaagtagggttagttt } biogo-1.0.4/seq/linear/linear.go0000644000175000017500000000034114136731467016016 0ustar nileshnilesh// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package linear handles single sequences. package linear biogo-1.0.4/seq/linear/linear_test.go0000644000175000017500000000157514136731467017067 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package linear import ( "testing" "github.com/biogo/biogo/alphabet" "gopkg.in/check.v1" ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) func (s *S) TestWarning(c *check.C) { c.Log("\nFIXME: Tests only in example tests.\n") } func BenchmarkRevComp(b *testing.B) { in := []alphabet.Letter("ATGCtGACTTGGTGCACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTATGCtGACTTGGTGCACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTATGCtGACTTGGTGCACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTATGCtGACTTGGTGCACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTATGCtGACTTGGTGCACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT") for i := 0; i < b.N; i++ { s := NewSeq("example DNA", in, alphabet.DNA) s.RevComp() } } biogo-1.0.4/seq/linear/seq.go0000644000175000017500000001255114136731467015342 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package linear import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "fmt" "unicode" ) // A Seq is a basic linear sequence. type Seq struct { seq.Annotation Seq alphabet.Letters } // Interface guarantees var ( _ feat.Feature = (*Seq)(nil) _ seq.Sequence = (*Seq)(nil) ) // NewSeq creates a new Seq with the given id, letter sequence and alphabet. func NewSeq(id string, b []alphabet.Letter, alpha alphabet.Alphabet) *Seq { return &Seq{ Annotation: seq.Annotation{ ID: id, Alpha: alpha, Strand: seq.Plus, }, Seq: append(alphabet.Letters(nil), b...), } } // Append append QLetters to the sequence, ignoring Q component. func (s *Seq) AppendQLetters(a ...alphabet.QLetter) error { l := s.Len() s.Seq = append(s.Seq, make([]alphabet.Letter, len(a))...)[:l] for _, v := range a { s.Seq = append(s.Seq, v.L) } return nil } // Append appends Letters to the sequence. func (s *Seq) AppendLetters(a ...alphabet.Letter) error { s.Seq = append(s.Seq, a...) return nil } // Slice returns the sequence data as a alphabet.Slice. func (s *Seq) Slice() alphabet.Slice { return s.Seq } // SetSlice sets the sequence data represented by the sequence. SetSlice will panic if sl // is not a alphabet.Letters. func (s *Seq) SetSlice(sl alphabet.Slice) { s.Seq = sl.(alphabet.Letters) } // At returns the letter at position pos. func (s *Seq) At(i int) alphabet.QLetter { return alphabet.QLetter{ L: s.Seq[i-s.Offset], Q: seq.DefaultQphred, } } // Set sets the letter at position pos to l. func (s *Seq) Set(i int, l alphabet.QLetter) error { s.Seq[i-s.Offset] = l.L return nil } // Len returns the length of the sequence. func (s *Seq) Len() int { return len(s.Seq) } // Start returns the start position of the sequence in coordinates relative to the sequence // location. func (s *Seq) Start() int { return s.Offset } // End returns the end position of the sequence in coordinates relative to the sequence // location. func (s *Seq) End() int { return s.Offset + s.Len() } // Validate validates the letters of the sequence according to the sequence alphabet. func (s *Seq) Validate() (bool, int) { return s.Alpha.AllValid(s.Seq) } // Clone returns a copy of the sequence. func (s *Seq) Clone() seq.Sequence { c := *s c.Seq = append([]alphabet.Letter(nil), s.Seq...) return &c } // New returns an empty *Seq sequence with the same alphabet. func (s *Seq) New() seq.Sequence { return &Seq{Annotation: seq.Annotation{Alpha: s.Alpha}} } // RevComp reverse complements the sequence. RevComp will panic if the alphabet used by // the receiver is not a Complementor. func (s *Seq) RevComp() { l, comp := s.Seq, s.Alphabet().(alphabet.Complementor).ComplementTable() i, j := 0, len(l)-1 for ; i < j; i, j = i+1, j-1 { l[i], l[j] = comp[l[j]], comp[l[i]] } if i == j { l[i] = comp[l[i]] } s.Strand = -s.Strand } // Reverse reverses the order of letters in the the sequence without complementing them. func (s *Seq) Reverse() { l := s.Seq for i, j := 0, len(l)-1; i < j; i, j = i+1, j-1 { l[i], l[j] = l[j], l[i] } s.Strand = seq.None } // String returns a string representation of the sequence data only. func (s *Seq) String() string { return alphabet.Letters(s.Seq).String() } // Format is a support routine for fmt.Formatter. It accepts the formats 'v' and 's' // (string), 'a' (fasta) and 'q' (fastq). String, fasta and fastq formats support // truncated output via the verb's precision. Fasta format supports sequence line // specification via the verb's width field. Fastq format supports optional inclusion // of the '+' line descriptor line with the '+' flag. The 'v' verb supports the '#' // flag for Go syntax output. The 's' and 'v' formats support the '-' flag for // omission of the sequence name. func (s *Seq) Format(fs fmt.State, c rune) { if s == nil { fmt.Fprint(fs, "") return } var ( w, wOk = fs.Width() p, pOk = fs.Precision() buf []alphabet.Letter ) if pOk { buf = s.Seq[:min(p, len(s.Seq))] } else { buf = s.Seq } switch c { case 'v': if fs.Flag('#') { fmt.Fprintf(fs, "&%#v", *s) return } fallthrough case 's': if !fs.Flag('-') { fmt.Fprintf(fs, "%q ", s.ID) } for _, l := range buf { fmt.Fprintf(fs, "%c", l) } if pOk && p < s.Len() { fmt.Fprint(fs, "...") } case 'a': s.formatDescLineTo(fs, '>') for i, l := range buf { fmt.Fprintf(fs, "%c", l) if wOk && i < s.Len()-1 && i%w == w-1 { fmt.Fprintln(fs) } } if pOk && p < s.Len() { fmt.Fprint(fs, "...") } case 'q': s.formatDescLineTo(fs, '@') for _, l := range buf { fmt.Fprintf(fs, "%c", l) } if pOk && p < s.Len() { fmt.Fprintln(fs, "...") } else { fmt.Fprintln(fs) } if fs.Flag('+') { s.formatDescLineTo(fs, '+') } else { fmt.Fprintln(fs, "+") } e := seq.DefaultQphred.Encode(seq.DefaultEncoding) if e >= unicode.MaxASCII { e = unicode.MaxASCII - 1 } for range buf { fmt.Fprintf(fs, "%c", e) } if pOk && p < s.Len() { fmt.Fprint(fs, "...") } default: fmt.Fprintf(fs, "%%!%c(linear.Seq=%.10s)", c, s) } } func (s *Seq) formatDescLineTo(fs fmt.State, p rune) { fmt.Fprintf(fs, "%c%s", p, s.ID) if s.Desc != "" { fmt.Fprintf(fs, " %s", s.Desc) } fmt.Fprintln(fs) } biogo-1.0.4/seq/linear/qseq_example_test.go0000644000175000017500000000346214136731467020276 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package linear import ( "fmt" "strings" "github.com/biogo/biogo/alphabet" ) func ExampleNewQSeq() { d := NewQSeq("example DNA", []alphabet.QLetter{{'A', 40}, {'C', 39}, {'G', 40}, {'C', 38}, {'T', 35}, {'G', 20}}, alphabet.DNA, alphabet.Sanger) fmt.Printf("%-s %v\n", d, d.Moltype()) // Output: // ACGCTG DNA } func ExampleQSeq_Validate() { r := NewQSeq("example RNA", []alphabet.QLetter{{'A', 40}, {'C', 39}, {'G', 40}, {'C', 38}, {'T', 35}, {'G', 20}}, alphabet.RNA, alphabet.Sanger) fmt.Printf("%-s %v\n", r, r.Moltype()) if ok, pos := r.Validate(); ok { fmt.Println("valid RNA") } else { fmt.Println(strings.Repeat(" ", pos-1), "^ first invalid RNA position") } // Output: // ACGCTG RNA // ^ first invalid RNA position } func ExampleQSeq_AppendQLetters() { q := []alphabet.Qphred{ 1, 13, 19, 22, 19, 18, 20, 23, 23, 20, 16, 21, 24, 22, 22, 18, 17, 18, 22, 23, 22, 24, 22, 24, 20, 15, 18, 18, 19, 19, 20, 12, 18, 17, 20, 20, 20, 18, 15, 18, 24, 21, 13, 8, 15, 20, 20, 19, 20, 20, 20, 18, 16, 16, 16, 10, 15, 18, 18, 18, 11, 1, 11, 20, 19, 18, 18, 16, 10, 12, 22, 0, 0, 0, 0} l := []alphabet.Letter("NTTTCTTCTATATCCTTTTCATCTTTTAATCCATTCACCATTTTTTTCCCTCCACCTACCTNTCCTTCTCTTTCT") s := NewQSeq("example DNA", nil, alphabet.DNA, alphabet.Sanger) for i := range l { s.AppendQLetters(alphabet.QLetter{L: l[i], Q: q[i]}) } fmt.Println("Forward:") fmt.Printf("%-s\n", s) s.RevComp() fmt.Println("Reverse:") fmt.Printf("%-s\n", s) // Output: // Forward: // nTTTCTTCTATATCCTTTTCATCTTTTAATCCATTCACCATTTTTTTCCCTCCACCTACCTnTCCTTCTCTnnnn // Reverse: // nnnnAGAGAAGGAnAGGTAGGTGGAGGGAAAAAAATGGTGAATGGATTAAAAGATGAAAAGGATATAGAAGAAAn } biogo-1.0.4/seq/seq.go0000644000175000017500000001564214136731467014074 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package seq provides the base for storage and manipulation of biological sequence information. // // A variety of sequence types are provided by derived packages including linear and protein sequence // with and without quality scores. Multiple sequence data is also supported as unaligned sets and aligned sequences. // // Quality scoring is based on Phred scores, although there is the capacity to interconvert between Phred and // Solexa scores and a Solexa quality package is provided, though not integrated. package seq import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "math" ) const ( Start = 1 << iota End ) var ( // The default value for Qphred scores from non-quality sequences. DefaultQphred alphabet.Qphred = 40 // The default encoding for Qphred scores from non-quality sequences. DefaultEncoding alphabet.Encoding = alphabet.Sanger ) type Alphabeter interface { Alphabet() alphabet.Alphabet } // A QFilter returns a letter based on an alphabet, quality letter and quality threshold. type QFilter func(a alphabet.Alphabet, thresh alphabet.Qphred, ql alphabet.QLetter) alphabet.Letter var ( // AmbigFilter is a QFilter function that returns the given alphabet's ambiguous position // letter for quality letters with a quality score below the specified threshold. AmbigFilter QFilter = func(a alphabet.Alphabet, thresh alphabet.Qphred, l alphabet.QLetter) alphabet.Letter { if l.L == a.Gap() || l.Q >= thresh { return l.L } return a.Ambiguous() } // CaseFilter is a QFilter function that returns a lower case letter for quality letters // with a quality score below the specified threshold and upper case equal to or above the threshold. CaseFilter QFilter = func(a alphabet.Alphabet, thresh alphabet.Qphred, l alphabet.QLetter) alphabet.Letter { switch { case l.L == a.Gap(): return l.L case l.Q >= thresh: return l.L &^ ('a' - 'A') } return l.L | ('a' - 'A') } ) // A Sequence is a feature that stores sequence information. type Sequence interface { Feature At(int) alphabet.QLetter // Return the letter at a specific position. Set(int, alphabet.QLetter) error // Set the letter at a specific position. Alphabet() alphabet.Alphabet // Return the Alphabet being used. RevComp() // Reverse complement the sequence. Reverse() // Reverse the order of elements in the sequence. New() Sequence // Return a zero value of the sequence type, with the same alphabet. Clone() Sequence // Return a copy of the Sequence. CloneAnnotation() *Annotation // Return a copy of the sequence's annotation. Slicer Conformationer ConformationSetter } // A Feature describes the basis for sequence features. type Feature interface { feat.Feature feat.Offsetter } // A Conformationer can give information regarding the sequence's conformation. For the // purposes of sequtils, types that are not a Conformationer are treated as linear. type Conformationer interface { Conformation() feat.Conformation } // A ConformationSetter can set its sequence conformation. type ConformationSetter interface { SetConformation(feat.Conformation) error } // A Slicer returns and sets a Slice. type Slicer interface { Slice() alphabet.Slice SetSlice(alphabet.Slice) } // A Scorer is a sequence type that provides Phred-based scoring information. type Scorer interface { Feature EAt(int) float64 // Return the p(Error) for a specific position. SetE(int, float64) error // Set the p(Error) for a specific position. Encoding() alphabet.Encoding // Return the score encoding scheme. SetEncoding(alphabet.Encoding) error // Set the score encoding scheme. QEncode(int) byte // Encode the quality at the specified position according the the encoding scheme. } // A Quality is a feature whose elements are Phred scores. type Quality interface { Scorer Copy() Quality // Return a copy of the Quality. } // Rower describes the interface for sets of sequences or aligned multiple sequences. type Rower interface { Rows() int Row(i int) Sequence } // RowAppender is a type for sets of sequences or aligned multiple sequences that can append letters to individual or grouped sequences. type RowAppender interface { Rower AppendEach(a [][]alphabet.QLetter) (err error) } // An Appender can append letters. type Appender interface { AppendLetters(...alphabet.Letter) error AppendQLetters(...alphabet.QLetter) error } // Aligned describes the interface for aligned multiple sequences. type Aligned interface { Start() int End() int Rows() int Column(pos int, fill bool) []alphabet.Letter ColumnQL(pos int, fill bool) []alphabet.QLetter } // An AlignedAppender is a multiple sequence alignment that can append letters. type AlignedAppender interface { Aligned AppendColumns(a ...[]alphabet.QLetter) (err error) AppendEach(a [][]alphabet.QLetter) (err error) } // ConsenseFunc is a function type that returns the consensus letter for a column of an alignment. type ConsenseFunc func(a Aligned, alpha alphabet.Alphabet, pos int, fill bool) alphabet.QLetter var ( // The default ConsenseFunc function. DefaultConsensus ConsenseFunc = func(a Aligned, alpha alphabet.Alphabet, pos int, fill bool) alphabet.QLetter { w := make([]int, alpha.Len()) c := a.Column(pos, fill) for _, l := range c { if alpha.IsValid(l) { w[alpha.IndexOf(l)]++ } } var max, maxi int for i, v := range w { if v > max { max, maxi = v, i } } return alphabet.QLetter{ L: alpha.Letter(maxi), Q: alphabet.Ephred(1 - (float64(max) / float64(len(c)))), } } // A default ConsenseFunc function that takes letter quality into account. // http://staden.sourceforge.net/manual/gap4_unix_120.html DefaultQConsensus ConsenseFunc = func(a Aligned, alpha alphabet.Alphabet, pos int, fill bool) alphabet.QLetter { w := make([]float64, alpha.Len()) for i := range w { w[i] = 1 } others := float64(alpha.Len() - 1) c := a.ColumnQL(pos, fill) for _, l := range c { if alpha.IsValid(l.L) { i, alt := alpha.IndexOf(l.L), l.Q.ProbE() p := (1 - alt) alt /= others for b := range w { if i == b { w[b] *= p } else { w[b] *= alt } } } } var ( max = 0. sum float64 best, count int ) for _, p := range w { sum += p } for i, v := range w { if v /= sum; v > max { max, best = v, i count = 0 } if v == max || math.Abs(max-v) < FloatTolerance { count++ } } if count > 1 { return alphabet.QLetter{ L: alpha.Ambiguous(), Q: 0, } } return alphabet.QLetter{ L: alpha.Letter(best), Q: alphabet.Ephred(1 - max), } } ) // Tolerance on float comparison for DefaultQConsensus. var FloatTolerance float64 = 1e-10 biogo-1.0.4/seq/alignment/0000755000175000017500000000000014136731467014723 5ustar nileshnileshbiogo-1.0.4/seq/alignment/alignment_test.go0000644000175000017500000000064314136731467020272 0ustar nileshnilesh// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package alignment import ( "testing" "gopkg.in/check.v1" ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) func (s *S) TestWarning(c *check.C) { c.Log("\nFIXME: Tests only in example tests.\n") } biogo-1.0.4/seq/alignment/alignment.go0000644000175000017500000003252314136731467017235 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package alignment handles aligned sequences stored as columns. package alignment import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/util" "errors" "fmt" "strings" "unicode" ) // A Seq is an aligned sequence. type Seq struct { seq.Annotation SubAnnotations []seq.Annotation Seq alphabet.Columns ColumnConsense seq.ConsenseFunc } // NewSeq creates a new Seq with the given id, letter sequence and alphabet. func NewSeq(id string, subids []string, b [][]alphabet.Letter, alpha alphabet.Alphabet, cons seq.ConsenseFunc) (*Seq, error) { var ( lids, lseq = len(subids), len(b) subann []seq.Annotation ) switch { case lids == 0 && len(b) == 0: case lseq != 0 && lids == len(b[0]): if lids == 0 { subann = make([]seq.Annotation, len(b[0])) for i := range subids { subann[i].ID = fmt.Sprintf("%s:%d", id, i) } } else { subann = make([]seq.Annotation, lids) for i, sid := range subids { subann[i].ID = sid } } default: return nil, errors.New("alignment: id/seq number mismatch") } return &Seq{ Annotation: seq.Annotation{ ID: id, Alpha: alpha, }, SubAnnotations: subann, Seq: append([][]alphabet.Letter(nil), b...), ColumnConsense: cons, }, nil } // Interface guarantees var ( _ feat.Feature = (*Seq)(nil) _ feat.Feature = Row{} _ seq.Sequence = Row{} ) // Slice returns the sequence data as a alphabet.Slice. func (s *Seq) Slice() alphabet.Slice { return s.Seq } // SetSlice sets the sequence data represented by the Seq. SetSlice will panic if sl // is not a Columns. func (s *Seq) SetSlice(sl alphabet.Slice) { s.Seq = sl.(alphabet.Columns) } // Len returns the length of the alignment. func (s *Seq) Len() int { return len(s.Seq) } // Rows returns the number of rows in the alignment. func (s *Seq) Rows() int { return s.Seq.Rows() } // Start returns the start position of the sequence in coordinates relative to the // sequence location. func (s *Seq) Start() int { return s.Offset } // End returns the end position of the sequence in coordinates relative to the // sequence location. func (s *Seq) End() int { return s.Offset + s.Len() } // Clone returns a copy of the sequence. func (s *Seq) Clone() seq.Rower { c := *s c.Seq = make(alphabet.Columns, len(s.Seq)) for i, cs := range s.Seq { c.Seq[i] = append([]alphabet.Letter(nil), cs...) } return &c } // New returns an empty *Seq sequence with the same alphabet. func (s *Seq) New() *Seq { return &Seq{Annotation: seq.Annotation{Alpha: s.Alpha}} } // RevComp reverse complements the sequence. RevComp will panic if the alphabet used by // the receiver is not a Complementor. func (s *Seq) RevComp() { rs, comp := s.Seq, s.Alpha.(alphabet.Complementor).ComplementTable() i, j := 0, len(rs)-1 for ; i < j; i, j = i+1, j-1 { for r := range rs[i] { rs[i][r], rs[j][r] = comp[rs[j][r]], comp[rs[i][r]] } } if i == j { for r := range rs[i] { rs[i][r] = comp[rs[i][r]] } } s.Strand = -s.Strand } // Reverse reverses the order of letters in the the sequence without complementing them. func (s *Seq) Reverse() { l := s.Seq for i, j := 0, len(l)-1; i < j; i, j = i+1, j-1 { l[i], l[j] = l[j], l[i] } s.Strand = seq.None } func (s *Seq) String() string { return s.Consensus(false).String() } // Add adds the sequences n to Seq. Sequences in n should align start and end with the receiving alignment. // Additional sequence will be clipped and missing sequence will be filled with the gap letter. func (s *Seq) Add(n ...seq.Sequence) error { for i := s.Start(); i < s.End(); i++ { s.Seq[i] = append(s.Seq[i], s.column(n, i)...) } for i := range n { s.SubAnnotations = append(s.SubAnnotations, *n[i].CloneAnnotation()) } return nil } func (s *Seq) column(m []seq.Sequence, pos int) []alphabet.Letter { c := make([]alphabet.Letter, 0, s.Rows()) for _, ss := range m { if a, ok := ss.(seq.Aligned); ok { if a.Start() <= pos && pos < a.End() { c = append(c, a.Column(pos, true)...) } else { c = append(c, s.Alpha.Gap().Repeat(a.Rows())...) } } else { if ss.Start() <= pos && pos < ss.End() { c = append(c, ss.At(pos).L) } else { c = append(c, s.Alpha.Gap()) } } } return c } // Delete removes the sequence represented at row i of the alignment. It panics if i is out of range. func (s *Seq) Delete(i int) { if i >= s.Rows() { panic("alignment: index out of range") } cs := s.Seq for j, c := range cs { cs[j] = c[:i+copy(c[i:], c[i+1:])] } sa := s.SubAnnotations s.SubAnnotations = sa[:i+copy(sa[i:], sa[i+1:])] } // Row returns the sequence represented at row i of the alignment. It panics is i is out of range. func (s *Seq) Row(i int) seq.Sequence { if i < 0 || i >= s.Rows() { panic("alignment: index out of range") } return Row{Align: s, Row: i} } // AppendColumns appends each Qletter of each element of a to the appropriate sequence in the receiver. func (s *Seq) AppendColumns(a ...[]alphabet.QLetter) error { for i, r := range a { if len(r) != s.Rows() { return fmt.Errorf("alignment: column %d does not match Rows(): %d != %d.", i, len(r), s.Rows()) } } s.Seq = append(s.Seq, make([][]alphabet.Letter, len(a))...)[:len(s.Seq)] for _, r := range a { c := make([]alphabet.Letter, len(r)) for i := range r { c[i] = r[i].L } s.Seq = append(s.Seq, c) } return nil } // AppendEach appends each []alphabet.QLetter in a to the appropriate sequence in the receiver. func (s *Seq) AppendEach(a [][]alphabet.QLetter) error { if len(a) != s.Rows() { return fmt.Errorf("alignment: number of sequences does not match Rows(): %d != %d.", len(a), s.Rows()) } max := util.MinInt for _, ss := range a { if l := len(ss); l > max { max = l } } s.Seq = append(s.Seq, make([][]alphabet.Letter, max)...)[:len(s.Seq)] for i, b := 0, make([]alphabet.QLetter, 0, len(a)); i < max; i, b = i+1, b[:0] { for _, ss := range a { if i < len(ss) { b = append(b, ss[i]) } else { b = append(b, alphabet.QLetter{L: s.Alpha.Gap()}) } } s.AppendColumns(b) } return nil } // Column returns a slice of letters reflecting the column at pos. func (s *Seq) Column(pos int, _ bool) []alphabet.Letter { return s.Seq[pos] } // ColumnQL returns a slice of quality letters reflecting the column at pos. func (s *Seq) ColumnQL(pos int, _ bool) []alphabet.QLetter { c := make([]alphabet.QLetter, s.Rows()) for i, l := range s.Seq[pos] { c[i] = alphabet.QLetter{ L: l, Q: seq.DefaultQphred, } } return c } // Consensus returns a quality sequence reflecting the consensus of the receiver determined by the // ColumnConsense field. func (s *Seq) Consensus(_ bool) *linear.QSeq { cs := make([]alphabet.QLetter, 0, s.Len()) alpha := s.Alphabet() for i := range s.Seq { cs = append(cs, s.ColumnConsense(s, alpha, i, false)) } qs := linear.NewQSeq("Consensus:"+s.ID, cs, s.Alpha, alphabet.Sanger) qs.Strand = s.Strand qs.SetOffset(s.Offset) qs.Conform = s.Conform return qs } // Format is a support routine for fmt.Formatter. It accepts the formats 'v' and 's' // (string), 'a' (fasta) and 'q' (fastq). String, fasta and fastq formats support // truncated output via the verb's precision. Fasta format supports sequence line // specification via the verb's width field. Fastq format supports optional inclusion // of the '+' line descriptor line with the '+' flag. The 'v' verb supports the '#' // flag for Go syntax output. The 's' and 'v' formats support the '-' flag for // omission of the sequence name. func (s *Seq) Format(fs fmt.State, c rune) { if s == nil { fmt.Fprint(fs, "") return } switch c { case 'v': if fs.Flag('#') { fmt.Fprintf(fs, "&%#v", *s) return } fallthrough case 's', 'a', 'q': r := Row{Align: s} for r.Row = 0; r.Row < s.Rows(); r.Row++ { r.Format(fs, c) if r.Row < s.Rows()-1 { fmt.Fprintln(fs) } } default: fmt.Fprintf(fs, "%%!%c(*alignment.Seq=%.10s)", c, s) } } // A Row is a pointer into an alignment that satisfies the seq.Sequence interface. type Row struct { Align *Seq Row int } // At returns the letter at position i. func (r Row) At(i int) alphabet.QLetter { return alphabet.QLetter{ L: r.Align.Seq[i-r.Align.Offset][r.Row], Q: seq.DefaultQphred, } } // Set sets the letter at position i to l. func (r Row) Set(i int, l alphabet.QLetter) error { r.Align.Seq[i-r.Align.Offset][r.Row] = l.L return nil } // Len returns the length of the row. func (r Row) Len() int { return len(r.Align.Seq) } // Start returns the start position of the sequence in coordinates relative to the // sequence location. func (r Row) Start() int { return r.Align.SubAnnotations[r.Row].Offset } // End returns the end position of the sequence in coordinates relative to the // sequence location. func (r Row) End() int { return r.Start() + r.Len() } // Location returns the feature containing the row's sequence. func (r Row) Location() feat.Feature { return r.Align.SubAnnotations[r.Row].Loc } func (r Row) Alphabet() alphabet.Alphabet { return r.Align.Alpha } func (r Row) Conformation() feat.Conformation { return r.Align.Conform } func (r Row) SetConformation(c feat.Conformation) error { r.Align.SubAnnotations[r.Row].Conform = c return nil } func (r Row) Name() string { return r.Align.SubAnnotations[r.Row].ID } func (r Row) Description() string { return r.Align.SubAnnotations[r.Row].Desc } func (r Row) SetOffset(o int) error { r.Align.SubAnnotations[r.Row].Offset = o; return nil } func (r Row) RevComp() { rs, comp := r.Align.Seq, r.Alphabet().(alphabet.Complementor).ComplementTable() i, j := 0, len(rs)-1 for ; i < j; i, j = i+1, j-1 { rs[i][r.Row], rs[j][r.Row] = comp[rs[j][r.Row]], comp[rs[i][r.Row]] } if i == j { rs[i][r.Row] = comp[rs[i][r.Row]] } r.Align.SubAnnotations[r.Row].Strand = -r.Align.SubAnnotations[r.Row].Strand } func (r Row) Reverse() { l := r.Align.Seq for i, j := 0, len(l)-1; i < j; i, j = i+1, j-1 { l[i][r.Row], l[j][r.Row] = l[j][r.Row], l[i][r.Row] } r.Align.SubAnnotations[r.Row].Strand = seq.None } func (r Row) New() seq.Sequence { return Row{Align: &Seq{Annotation: seq.Annotation{Alpha: r.Align.Alpha}}} } func (r Row) Clone() seq.Sequence { b := make([]alphabet.Letter, r.Len()) for i, c := range r.Align.Seq { b[i] = c[r.Row] } switch { case r.Row < 0: panic("under") case r.Row >= r.Align.Rows(): panic("bang over Rows()") case r.Row >= len(r.Align.SubAnnotations): panic(fmt.Sprintf("bang over len(SubAnns): %d %d", r.Row, len(r.Align.SubAnnotations))) } return linear.NewSeq(r.Name(), b, r.Alphabet()) } func (r Row) CloneAnnotation() *seq.Annotation { return r.Align.SubAnnotations[r.Row].CloneAnnotation() } // String returns a string representation of the sequence data only. func (r Row) String() string { return fmt.Sprintf("%-s", r) } // Format is a support routine for fmt.Formatter. It accepts the formats 'v' and 's' // (string), 'a' (fasta) and 'q' (fastq). String, fasta and fastq formats support // truncated output via the verb's precision. Fasta format supports sequence line // specification via the verb's width field. Fastq format supports optional inclusion // of the '+' line descriptor line with the '+' flag. The 'v' verb supports the '#' // flag for Go syntax output. The 's' and 'v' formats support the '-' flag for // omission of the sequence name. func (r Row) Format(fs fmt.State, c rune) { var ( s = r.Align w, wOk = fs.Width() p, pOk = fs.Precision() buf alphabet.Columns ) if s != nil { if pOk { buf = s.Seq[:min(p, len(s.Seq))] } else { buf = s.Seq } } switch c { case 'v': if fs.Flag('#') { type shadowRow Row sr := fmt.Sprintf("%#v", shadowRow(r)) fmt.Fprintf(fs, "%T%s", r, sr[strings.Index(sr, "{"):]) return } fallthrough case 's': if s == nil { fmt.Fprint(fs, "") return } if !fs.Flag('-') { fmt.Fprintf(fs, "%q ", r.Name()) } for _, lc := range buf { fmt.Fprintf(fs, "%c", lc[r.Row]) } if pOk && s != nil && p < s.Len() { fmt.Fprint(fs, "...") } case 'a': if s == nil { return } r.formatDescLineTo(fs, '>') for i, lc := range buf { fmt.Fprintf(fs, "%c", lc[r.Row]) if wOk && i < s.Len()-1 && i%w == w-1 { fmt.Fprintln(fs) } } if pOk && p < s.Len() { fmt.Fprint(fs, "...") } case 'q': if s == nil { return } r.formatDescLineTo(fs, '@') for _, lc := range buf { fmt.Fprintf(fs, "%c", lc[r.Row]) } if pOk && p < s.Len() { fmt.Fprintln(fs, "...") } else { fmt.Fprintln(fs) } if fs.Flag('+') { r.formatDescLineTo(fs, '+') } else { fmt.Fprintln(fs, "+") } e := seq.DefaultQphred.Encode(seq.DefaultEncoding) if e >= unicode.MaxASCII { e = unicode.MaxASCII - 1 } for range buf { fmt.Fprintf(fs, "%c", e) } if pOk && p < s.Len() { fmt.Fprint(fs, "...") } default: fmt.Fprintf(fs, "%%!%c(alignment.Row=%.10s)", c, s) } } func (r Row) formatDescLineTo(fs fmt.State, p rune) { fmt.Fprintf(fs, "%c%s", p, r.Name()) if d := r.Description(); d != "" { fmt.Fprintf(fs, " %s", d) } fmt.Fprintln(fs) } // SetSlice unconditionally panics. func (r Row) SetSlice(_ alphabet.Slice) { panic("alignment: cannot alter row slice") } // Slice unconditionally panics. func (r Row) Slice() alphabet.Slice { panic("alignment: cannot get row slice") } biogo-1.0.4/seq/alignment/alignment_example_test.go0000644000175000017500000001244014136731467022003 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package alignment import ( "fmt" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/seq/sequtils" ) var m, n *Seq func init() { var err error m, err = NewSeq("example alignment", []string{"seq 1", "seq 2", "seq 3"}, [][]alphabet.Letter{ []alphabet.Letter("AAA"), []alphabet.Letter("CCC"), []alphabet.Letter("GGG"), []alphabet.Letter("CGA"), []alphabet.Letter("TTT"), []alphabet.Letter("GGG"), []alphabet.Letter("AAA"), []alphabet.Letter("CCC"), []alphabet.Letter("TCG"), []alphabet.Letter("TTT"), []alphabet.Letter("GGG"), []alphabet.Letter("GGG"), []alphabet.Letter("TCC"), []alphabet.Letter("GGG"), []alphabet.Letter("CCC"), []alphabet.Letter("AGT"), []alphabet.Letter("CCC"), []alphabet.Letter("GAA"), []alphabet.Letter("TTT"), }, alphabet.DNA, seq.DefaultConsensus) if err != nil { panic(err) } } func ExampleNewSeq() { m, err := NewSeq("example alignment", []string{"seq 1", "seq 2", "seq 3"}, [][]alphabet.Letter{ []alphabet.Letter("AAA"), []alphabet.Letter("CCC"), []alphabet.Letter("GGG"), []alphabet.Letter("CGA"), []alphabet.Letter("TTT"), []alphabet.Letter("GGG"), []alphabet.Letter("AAA"), []alphabet.Letter("CCC"), []alphabet.Letter("TCG"), []alphabet.Letter("TTT"), []alphabet.Letter("GGG"), []alphabet.Letter("GGG"), []alphabet.Letter("TCC"), []alphabet.Letter("GGG"), []alphabet.Letter("CCC"), []alphabet.Letter("AGT"), []alphabet.Letter("CCC"), []alphabet.Letter("GAA"), []alphabet.Letter("TTT"), }, alphabet.DNA, seq.DefaultConsensus) if err == nil { fmt.Printf("%-s\n\n%-s\n", m, m.Consensus(false)) } // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGATGACGTGGCGCTCAT // // acgntgacntggcgcncat } func ExampleSeq_Add() { fmt.Printf("%v %-s\n", m.Rows(), m.Consensus(false)) m.Add(linear.NewQSeq("example DNA", []alphabet.QLetter{{'a', 40}, {'c', 39}, {'g', 40}, {'C', 38}, {'t', 35}, {'g', 20}}, alphabet.DNA, alphabet.Sanger)) fmt.Printf("%v %-s\n", m.Rows(), m.Consensus(false)) // Output: // 3 acgntgacntggcgcncat // 4 acgctgacntggcgcncat } func ExampleSeq_Clone() { n = m.Clone().(*Seq) n.Row(2).Set(3, alphabet.QLetter{L: 't'}) fmt.Printf("%-s\n\n%-s\n\n", m, m.Consensus(false)) fmt.Printf("%-s\n\n%-s\n", n, n.Consensus(false)) // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGATGACGTGGCGCTCAT // acgCtg------------- // // acgctgacntggcgcncat // // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGtTGACGTGGCGCTCAT // acgCtg------------- // // acgctgacntggcgcncat } func ExampleSeq_Rows() { fmt.Println(m.Rows()) // Output: // 4 } func ExampleSeq_join() { fmt.Printf("%-s\n\n%-s\n", n, n.Consensus(false)) err := sequtils.Join(n, m, seq.End) if err == nil { fmt.Printf("\n%-s\n\n%-s\n", n, n.Consensus(false)) } // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGtTGACGTGGCGCTCAT // acgCtg------------- // // acgctgacntggcgcncat // // ACGCTGACTTGGTGCACGTACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCATACGGTGACCTGGCGCGCAT // ACGtTGACGTGGCGCTCATACGATGACGTGGCGCTCAT // acgCtg-------------acgCtg------------- // // acgctgacntggcgcncatacgctgacntggcgcncat } func ExampleSeq_Len() { fmt.Println(m.Len()) // Output: // 19 } func ExampleSeq_RevComp() { fmt.Printf("%-s\n\n%-s\n", m, m.Consensus(false)) fmt.Println() m.RevComp() fmt.Printf("%-s\n\n%-s\n", m, m.Consensus(false)) // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGATGACGTGGCGCTCAT // acgCtg------------- // // acgctgacntggcgcncat // // ACGTGCACCAAGTCAGCGT // ATGCGCGCCAGGTCACCGT // ATGAGCGCCACGTCATCGT // -------------caGcgt // // atgngcgccangtcagcgt } type fe struct { s, e int st seq.Strand feat.Feature } func (f fe) Start() int { return f.s } func (f fe) End() int { return f.e } func (f fe) Len() int { return f.e - f.s } func (f fe) Orientation() feat.Orientation { return feat.Orientation(f.st) } type fs []feat.Feature func (f fs) Features() []feat.Feature { return []feat.Feature(f) } func ExampleSeq_stitch() { f := fs{ &fe{s: -1, e: 4}, &fe{s: 30, e: 38}, } fmt.Printf("%-s\n\n%-s\n", n, n.Consensus(false)) if err := sequtils.Stitch(n, n, f); err == nil { fmt.Printf("\n%-s\n\n%-s\n", n, n.Consensus(false)) } else { fmt.Println(err) } // Output: // ACGCTGACTTGGTGCACGTACGTGCACCAAGTCAGCGT // ACGGTGACCTGGCGCGCATATGCGCGCCAGGTCACCGT // ACGtTGACGTGGCGCTCATATGAGCGCCACGTCATCGT // acgCtg--------------------------caGcgt // // acgctgacntggcgcncatatgngcgccangtcagcgt // // ACGCGTCAGCGT // ACGGGTCACCGT // ACGtGTCATCGT // acgC--caGcgt // // acgcgtcagcgt } func ExampleSeq_truncate() { fmt.Printf("%-s\n\n%-s\n", m, m.Consensus(false)) err := sequtils.Truncate(m, m, 4, 12) if err == nil { fmt.Printf("\n%-s\n\n%-s\n", m, m.Consensus(false)) } // Output: // ACGTGCACCAAGTCAGCGT // ATGCGCGCCAGGTCACCGT // ATGAGCGCCACGTCATCGT // -------------caGcgt // // atgngcgccangtcagcgt // // GCACCAAG // GCGCCAGG // GCGCCACG // -------- // // gcgccang } biogo-1.0.4/seq/alignment/qalignment.go0000644000175000017500000003511014136731467017411 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package alignment import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/util" "errors" "fmt" "strings" "unicode" ) // A QSeq is an aligned sequence with quality scores. type QSeq struct { seq.Annotation SubAnnotations []seq.Annotation Seq alphabet.QColumns ColumnConsense seq.ConsenseFunc Threshold alphabet.Qphred // Threshold for returning valid letter. QFilter seq.QFilter // How to represent below threshold letter. Encode alphabet.Encoding } // NewSeq creates a new Seq with the given id, letter sequence and alphabet. func NewQSeq(id string, subids []string, ql [][]alphabet.QLetter, alpha alphabet.Alphabet, enc alphabet.Encoding, cons seq.ConsenseFunc) (*QSeq, error) { var ( lids, lseq = len(subids), len(ql) subann []seq.Annotation ) switch { case lids == 0 && len(ql) == 0: case lseq != 0 && lids == len(ql[0]): if lids == 0 { subann = make([]seq.Annotation, len(ql[0])) for i := range subids { subann[i].ID = fmt.Sprintf("%s:%d", id, i) } } else { subann = make([]seq.Annotation, lids) for i, sid := range subids { subann[i].ID = sid } } default: return nil, errors.New("alignment: id/seq number mismatch") } return &QSeq{ Annotation: seq.Annotation{ ID: id, Alpha: alpha, }, SubAnnotations: subann, Seq: append([][]alphabet.QLetter(nil), ql...), Encode: enc, ColumnConsense: cons, Threshold: 2, QFilter: seq.AmbigFilter, }, nil } // Interface guarantees var ( _ feat.Feature = (*QSeq)(nil) _ feat.Feature = QRow{} _ seq.Sequence = QRow{} _ seq.Scorer = QRow{} ) // Slice returns the sequence data as a alphabet.Slice. func (s *QSeq) Slice() alphabet.Slice { return s.Seq } // SetSlice sets the sequence data represented by the Seq. SetSlice will panic if sl // is not a QColumns. func (s *QSeq) SetSlice(sl alphabet.Slice) { s.Seq = sl.(alphabet.QColumns) } // Encoding returns the quality encoding scheme. func (s *QSeq) Encoding() alphabet.Encoding { return s.Encode } // SetEncoding sets the quality encoding scheme to e. func (s *QSeq) SetEncoding(e alphabet.Encoding) error { s.Encode = e; return nil } // Len returns the length of the alignment. func (s *QSeq) Len() int { return len(s.Seq) } // Rows returns the number of rows in the alignment. func (s *QSeq) Rows() int { return s.Seq.Rows() } // Start returns the start position of the sequence in coordinates relative to the // sequence location. func (s *QSeq) Start() int { return s.Offset } // End returns the end position of the sequence in coordinates relative to the // sequence location. func (s *QSeq) End() int { return s.Offset + s.Len() } // Clone returns a copy of the sequence. func (s *QSeq) Clone() seq.Rower { c := *s c.Seq = make([][]alphabet.QLetter, len(s.Seq)) for i, s := range s.Seq { c.Seq[i] = append([]alphabet.QLetter(nil), s...) } return &c } // New returns an empty *QSeq sequence with the same alphabet. func (s *QSeq) New() *QSeq { return &QSeq{Annotation: seq.Annotation{Alpha: s.Alpha}} } // RevComp reverse complements the sequence. RevComp will panic if the alphabet used by // the receiver is not a Complementor. func (s *QSeq) RevComp() { rs, comp := s.Seq, s.Alpha.(alphabet.Complementor).ComplementTable() i, j := 0, len(rs)-1 for ; i < j; i, j = i+1, j-1 { for r := range rs[i] { rs[i][r].L, rs[j][r].L = comp[rs[j][r].L], comp[rs[i][r].L] rs[i][r].Q, rs[j][r].Q = rs[j][r].Q, rs[i][r].Q } } if i == j { for r := range rs[i] { rs[i][r].L = comp[rs[i][r].L] } } s.Strand = -s.Strand } // Reverse reverses the order of letters in the the sequence without complementing them. func (s *QSeq) Reverse() { l := s.Seq for i, j := 0, len(l)-1; i < j; i, j = i+1, j-1 { l[i], l[j] = l[j], l[i] } s.Strand = seq.None } func (s *QSeq) String() string { t := s.Consensus(false) t.Threshold = s.Threshold t.QFilter = s.QFilter return t.String() } // Add sequences n to Alignment. Sequences in n must align start and end with the receiving alignment. // Additional sequence will be clipped. func (s *QSeq) Add(n ...seq.Sequence) error { for i := s.Start(); i < s.End(); i++ { s.Seq[i] = append(s.Seq[i], s.column(n, i)...) } for i := range n { s.SubAnnotations = append(s.SubAnnotations, *n[i].CloneAnnotation()) } return nil } func (s *QSeq) column(m []seq.Sequence, pos int) []alphabet.QLetter { c := make([]alphabet.QLetter, 0, s.Rows()) for _, r := range m { if a, ok := r.(seq.Aligned); ok { if a.Start() <= pos && pos < a.End() { c = append(c, a.ColumnQL(pos, true)...) } else { c = append(c, alphabet.QLetter{L: s.Alpha.Gap()}.Repeat(a.Rows())...) } } else { if r.Start() <= pos && pos < r.End() { c = append(c, r.At(pos)) } else { c = append(c, alphabet.QLetter{L: s.Alpha.Gap()}) } } } return c } // Delete removes the sequence represented at row i of the alignment. It panics if i is out of range. func (s *QSeq) Delete(i int) { if i >= s.Rows() { panic("alignment: index out of range") } cs := s.Seq for j, c := range cs { cs[j] = c[:i+copy(c[i:], c[i+1:])] } sa := s.SubAnnotations s.SubAnnotations = sa[:i+copy(sa[i:], sa[i+1:])] } // Row returns the sequence represented at row i of the alignment. It panics is i is out of range. func (s *QSeq) Row(i int) seq.Sequence { if i < 0 || i >= s.Rows() { panic("alignment: index out of range") } return QRow{Align: s, Row: i} } // AppendColumns appends each Qletter of each element of a to the appropriate sequence in the receiver. func (s *QSeq) AppendColumns(a ...[]alphabet.QLetter) error { for i, c := range a { if len(c) != s.Rows() { return fmt.Errorf("alignment: column %d does not match Rows(): %d != %d.", i, len(c), s.Rows()) } } s.Seq = append(s.Seq, a...) return nil } // AppendEach appends each []alphabet.QLetter in a to the appropriate sequence in the receiver. func (s *QSeq) AppendEach(a [][]alphabet.QLetter) error { if len(a) != s.Rows() { return fmt.Errorf("alignment: number of sequences does not match Rows(): %d != %d.", len(a), s.Rows()) } max := util.MinInt for _, r := range a { if l := len(r); l > max { max = l } } s.Seq = append(s.Seq, make([][]alphabet.QLetter, max)...)[:len(s.Seq)] for i, b := 0, make([]alphabet.QLetter, 0, len(a)); i < max; i, b = i+1, b[:0] { for _, r := range a { if i < len(r) { b = append(b, r[i]) } else { b = append(b, alphabet.QLetter{L: s.Alpha.Gap()}) } } s.AppendColumns(b) } return nil } // Column returns a slice of letters reflecting the column at pos. func (s *QSeq) Column(pos int, _ bool) []alphabet.Letter { c := make([]alphabet.Letter, s.Rows()) for i, l := range s.Seq[pos] { if l.Q >= s.Threshold { c[i] = l.L } else { c[i] = s.QFilter(s.Alpha, 255, alphabet.QLetter{}) } } return c } // ColumnQL returns a slice of quality letters reflecting the column at pos. func (s *QSeq) ColumnQL(pos int, _ bool) []alphabet.QLetter { return s.Seq[pos] } // Consensus returns a quality sequence reflecting the consensus of the receiver determined by the // ColumnConsense field. func (s *QSeq) Consensus(_ bool) *linear.QSeq { cs := make([]alphabet.QLetter, 0, s.Len()) alpha := s.Alphabet() for i := range s.Seq { cs = append(cs, s.ColumnConsense(s, alpha, i, false)) } qs := linear.NewQSeq("Consensus:"+s.ID, cs, s.Alpha, alphabet.Sanger) qs.Strand = s.Strand qs.SetOffset(s.Offset) qs.Conform = s.Conform return qs } // Format is a support routine for fmt.Formatter. It accepts the formats 'v' and 's' // (string), 'a' (fasta) and 'q' (fastq). String, fasta and fastq formats support // truncated output via the verb's precision. Fasta format supports sequence line // specification via the verb's width field. Fastq format supports optional inclusion // of the '+' line descriptor line with the '+' flag. The 'v' verb supports the '#' // flag for Go syntax output. The 's' and 'v' formats support the '-' flag for // omission of the sequence name. func (s *QSeq) Format(fs fmt.State, c rune) { if s == nil { fmt.Fprint(fs, "") return } switch c { case 'v': if fs.Flag('#') { fmt.Fprintf(fs, "&%#v", *s) return } fallthrough case 's', 'a', 'q': r := QRow{Align: s} for r.Row = 0; r.Row < s.Rows(); r.Row++ { r.Format(fs, c) if r.Row < s.Rows()-1 { fmt.Fprintln(fs) } } default: fmt.Fprintf(fs, "%%!%c(*alignment.QSeq=%.10s)", c, s) } } // A Row is a pointer into an alignment that satisfies the seq.Sequence and seq.Scorer interfaces. type QRow struct { Align *QSeq Row int } // At returns the letter at position i. func (r QRow) At(i int) alphabet.QLetter { return r.Align.Seq[i-r.Align.Offset][r.Row] } // Set sets the letter at position i to l. func (r QRow) Set(i int, l alphabet.QLetter) error { r.Align.Seq[i-r.Align.Offset][r.Row] = l return nil } // Len returns the length of the alignment. func (r QRow) Len() int { return len(r.Align.Seq) } // Start returns the start position of the sequence in coordinates relative to the // sequence location. func (r QRow) Start() int { return r.Align.SubAnnotations[r.Row].Offset } // End returns the end position of the sequence in coordinates relative to the // sequence location. func (r QRow) End() int { return r.Start() + r.Len() } // Location returns the feature containing the row's sequence. func (r QRow) Location() feat.Feature { return r.Align.SubAnnotations[r.Row].Loc } // SetE sets the quality at position i to e to reflect the given p(Error). func (r QRow) SetE(i int, e float64) error { r.Align.Seq[i-r.Align.Offset][r.Row].Q = alphabet.Ephred(e) return nil } // QEncode encodes the quality at position i to a letter based on the sequence encoding setting. func (r QRow) QEncode(i int) byte { return r.Align.Seq[i-r.Align.Offset][r.Row].Q.Encode(r.Encoding()) } // EAt returns the probability of a sequence error at position i. func (r QRow) EAt(i int) float64 { return r.Align.Seq[i-r.Align.Offset][r.Row].Q.ProbE() } func (r QRow) Alphabet() alphabet.Alphabet { return r.Align.Alpha } func (r QRow) Encoding() alphabet.Encoding { return r.Align.Encoding() } func (r QRow) SetEncoding(e alphabet.Encoding) error { return r.Align.SetEncoding(e) } func (r QRow) Conformation() feat.Conformation { return r.Align.SubAnnotations[r.Row].Conform } func (r QRow) SetConformation(c feat.Conformation) error { r.Align.SubAnnotations[r.Row].Conform = c return nil } func (r QRow) Name() string { return r.Align.SubAnnotations[r.Row].ID } func (r QRow) Description() string { return r.Align.SubAnnotations[r.Row].Desc } func (r QRow) SetOffset(o int) error { r.Align.SubAnnotations[r.Row].Offset = o; return nil } func (r QRow) RevComp() { rs, comp := r.Align.Seq, r.Alphabet().(alphabet.Complementor).ComplementTable() i, j := 0, len(rs)-1 for ; i < j; i, j = i+1, j-1 { rs[i][r.Row].L, rs[j][r.Row].L = comp[rs[j][r.Row].L], comp[rs[i][r.Row].L] rs[i][r.Row].Q, rs[j][r.Row].Q = rs[j][r.Row].Q, rs[i][r.Row].Q } if i == j { rs[i][r.Row].L = comp[rs[i][r.Row].L] } r.Align.SubAnnotations[r.Row].Strand = -r.Align.SubAnnotations[r.Row].Strand } func (r QRow) Reverse() { l := r.Align.Seq for i, j := 0, len(l)-1; i < j; i, j = i+1, j-1 { l[i][r.Row], l[j][r.Row] = l[j][r.Row], l[i][r.Row] } r.Align.SubAnnotations[r.Row].Strand = seq.None } func (r QRow) New() seq.Sequence { return QRow{Align: &QSeq{Annotation: seq.Annotation{Alpha: r.Align.Alpha}}} } func (r QRow) Clone() seq.Sequence { b := make([]alphabet.QLetter, r.Len()) for i, c := range r.Align.Seq { b[i] = c[r.Row] } return linear.NewQSeq(r.Name(), b, r.Alphabet(), r.Align.Encoding()) } func (r QRow) CloneAnnotation() *seq.Annotation { return r.Align.SubAnnotations[r.Row].CloneAnnotation() } func min(a, b int) int { if a < b { return a } return b } // String returns a string representation of the sequence data only. func (r QRow) String() string { return fmt.Sprintf("%-s", r) } // Format is a support routine for fmt.Formatter. It accepts the formats 'v' and 's' // (string), 'a' (fasta) and 'q' (fastq). String, fasta and fastq formats support // truncated output via the verb's precision. Fasta format supports sequence line // specification via the verb's width field. Fastq format supports optional inclusion // of the '+' line descriptor line with the '+' flag. The 'v' verb supports the '#' // flag for Go syntax output. The 's' and 'v' formats support the '-' flag for // omission of the sequence name. func (r QRow) Format(fs fmt.State, c rune) { var ( s = r.Align w, wOk = fs.Width() p, pOk = fs.Precision() buf alphabet.QColumns ) if s != nil { if pOk { buf = s.Seq[:min(p, len(s.Seq))] } else { buf = s.Seq } } switch c { case 'v': if fs.Flag('#') { type shadowQRow QRow sr := fmt.Sprintf("%#v", shadowQRow(r)) fmt.Fprintf(fs, "%T%s", r, sr[strings.Index(sr, "{"):]) return } fallthrough case 's': if s == nil { fmt.Fprint(fs, "") return } if !fs.Flag('-') { fmt.Fprintf(fs, "%q ", r.Name()) } for _, qc := range buf { fmt.Fprintf(fs, "%c", s.QFilter(s.Alpha, s.Threshold, qc[r.Row])) } if pOk && p < s.Len() { fmt.Fprint(fs, "...") } case 'a': if s == nil { return } r.formatDescLineTo(fs, '>') for i, qc := range buf { fmt.Fprintf(fs, "%c", s.QFilter(s.Alpha, s.Threshold, qc[r.Row])) if wOk && i < s.Len()-1 && i%w == w-1 { fmt.Fprintln(fs) } } if pOk && p < s.Len() { fmt.Fprint(fs, "...") } case 'q': if s == nil { return } r.formatDescLineTo(fs, '@') for _, qc := range buf { fmt.Fprintf(fs, "%c", qc[r.Row].L) } if pOk && p < s.Len() { fmt.Fprintln(fs, "...") } else { fmt.Fprintln(fs) } if fs.Flag('+') { r.formatDescLineTo(fs, '+') } else { fmt.Fprintln(fs, "+") } for _, qc := range buf { e := qc[r.Row].Q.Encode(s.Encode) if e >= unicode.MaxASCII { e = unicode.MaxASCII - 1 } fmt.Fprintf(fs, "%c", e) } if pOk && p < s.Len() { fmt.Fprint(fs, "...") } default: fmt.Fprintf(fs, "%%!%c(alignment.QRow=%.10s)", c, s) } } func (r QRow) formatDescLineTo(fs fmt.State, p rune) { fmt.Fprintf(fs, "%c%s", p, r.Name()) if d := r.Description(); d != "" { fmt.Fprintf(fs, " %s", d) } fmt.Fprintln(fs) } // SetSlice unconditionally panics. func (r QRow) SetSlice(_ alphabet.Slice) { panic("alignment: cannot alter row slice") } // Slice unconditionally panics. func (r QRow) Slice() alphabet.Slice { panic("alignment: cannot get row slice") } biogo-1.0.4/seq/alignment/qalignment_example_test.go0000644000175000017500000001243014136731467022163 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package alignment import ( "fmt" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/seq/sequtils" ) var qm, qn *QSeq func init() { var err error qm, err = NewQSeq("example alignment", []string{"seq 1", "seq 2", "seq 3"}, [][]alphabet.QLetter{ {{'A', 40}, {'A', 40}, {'A', 40}}, {{'C', 40}, {'C', 40}, {'C', 40}}, {{'G', 40}, {'G', 40}, {'G', 40}}, {{'C', 40}, {'G', 40}, {'A', 40}}, {{'T', 40}, {'T', 40}, {'T', 40}}, {{'G', 40}, {'G', 40}, {'G', 40}}, {{'A', 40}, {'A', 40}, {'A', 40}}, {{'C', 40}, {'C', 40}, {'C', 40}}, {{'T', 40}, {'C', 40}, {'G', 40}}, {{'T', 40}, {'T', 40}, {'T', 40}}, {{'G', 40}, {'G', 40}, {'G', 40}}, {{'G', 40}, {'G', 40}, {'G', 40}}, {{'T', 40}, {'C', 40}, {'C', 40}}, {{'G', 40}, {'G', 40}, {'G', 40}}, {{'C', 40}, {'C', 40}, {'C', 40}}, {{'A', 40}, {'G', 40}, {'T', 40}}, {{'C', 40}, {'C', 40}, {'C', 40}}, {{'G', 40}, {'A', 40}, {'A', 40}}, {{'T', 40}, {'T', 40}, {'T', 40}}, }, alphabet.DNA, alphabet.Sanger, seq.DefaultQConsensus) if err != nil { panic(err) } } func ExampleNewQSeq() { qm, err := NewQSeq("example alignment", []string{"seq 1", "seq 2", "seq 3"}, [][]alphabet.QLetter{ {{'A', 40}, {'A', 40}, {'A', 40}}, {{'C', 40}, {'C', 40}, {'C', 40}}, {{'G', 40}, {'G', 40}, {'G', 40}}, {{'C', 40}, {'G', 40}, {'A', 40}}, {{'T', 40}, {'T', 40}, {'T', 40}}, {{'G', 40}, {'G', 40}, {'G', 40}}, {{'A', 40}, {'A', 40}, {'A', 40}}, {{'C', 40}, {'C', 40}, {'C', 40}}, {{'T', 40}, {'C', 40}, {'G', 40}}, {{'T', 40}, {'T', 40}, {'T', 40}}, {{'G', 40}, {'G', 40}, {'G', 40}}, {{'G', 40}, {'G', 40}, {'G', 40}}, {{'T', 40}, {'C', 40}, {'C', 40}}, {{'G', 40}, {'G', 40}, {'G', 40}}, {{'C', 40}, {'C', 40}, {'C', 40}}, {{'A', 40}, {'G', 40}, {'T', 40}}, {{'C', 40}, {'C', 40}, {'C', 40}}, {{'G', 40}, {'A', 40}, {'A', 40}}, {{'T', 40}, {'T', 40}, {'T', 40}}, }, alphabet.DNA, alphabet.Sanger, seq.DefaultQConsensus) if err == nil { fmt.Printf("%-s\n\n%-s\n", qm, qm.Consensus(false)) } // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGATGACGTGGCGCTCAT // // acgntgacntggcgcncat } func ExampleQSeq_Add() { fmt.Printf("%v %-s\n", qm.Rows(), qm.Consensus(false)) qm.Add(linear.NewQSeq("example DNA", []alphabet.QLetter{{'a', 40}, {'c', 39}, {'g', 40}, {'C', 38}, {'t', 35}, {'g', 20}}, alphabet.DNA, alphabet.Sanger)) fmt.Printf("%v %-s\n", qm.Rows(), qm.Consensus(false)) // Output: // 3 acgntgacntggcgcncat // 4 acgctgacntggcgcncat } func ExampleQSeq_Clone() { qn = qm.Clone().(*QSeq) qn.Row(2).Set(3, alphabet.QLetter{L: 't', Q: 40}) fmt.Printf("%-s\n\n%-s\n\n", qm, qm.Consensus(false)) fmt.Printf("%-s\n\n%-s\n", qn, qn.Consensus(false)) // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGATGACGTGGCGCTCAT // acgCtg------------- // // acgctgacntggcgcncat // // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGtTGACGTGGCGCTCAT // acgCtg------------- // // acgctgacntggcgcncat } func ExampleQSeq_Rows() { fmt.Println(qm.Rows()) // Output: // 4 } func ExampleQSeq_join() { fmt.Printf("%-s\n\n%-s\n", qn, qn.Consensus(false)) err := sequtils.Join(qn, qm, seq.End) if err == nil { fmt.Printf("\n%-s\n\n%-s\n", qn, qn.Consensus(false)) } // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGtTGACGTGGCGCTCAT // acgCtg------------- // // acgctgacntggcgcncat // // ACGCTGACTTGGTGCACGTACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCATACGGTGACCTGGCGCGCAT // ACGtTGACGTGGCGCTCATACGATGACGTGGCGCTCAT // acgCtg-------------acgCtg------------- // // acgctgacntggcgcncatacgctgacntggcgcncat } func ExampleQSeq_Len() { fmt.Println(qm.Len()) // Output: // 19 } func ExampleQSeq_RevComp() { fmt.Printf("%-s\n\n%-s\n\n", qm, qm.Consensus(false)) qm.RevComp() fmt.Printf("%-s\n\n%-s\n", qm, qm.Consensus(false)) // Output: // ACGCTGACTTGGTGCACGT // ACGGTGACCTGGCGCGCAT // ACGATGACGTGGCGCTCAT // acgCtg------------- // // acgctgacntggcgcncat // // ACGTGCACCAAGTCAGCGT // ATGCGCGCCAGGTCACCGT // ATGAGCGCCACGTCATCGT // -------------caGcgt // // atgngcgccangtcagcgt } func ExampleQSeq_stitch() { f := fs{ &fe{s: -1, e: 4}, &fe{s: 30, e: 38}, } fmt.Printf("%-s\n\n%-s\n", qn, qn.Consensus(false)) if err := sequtils.Stitch(qn, qn, f); err == nil { fmt.Printf("\n%-s\n\n%-s\n", qn, qn.Consensus(false)) } else { fmt.Println(err) } // Output: // ACGCTGACTTGGTGCACGTACGTGCACCAAGTCAGCGT // ACGGTGACCTGGCGCGCATATGCGCGCCAGGTCACCGT // ACGtTGACGTGGCGCTCATATGAGCGCCACGTCATCGT // acgCtg--------------------------caGcgt // // acgctgacntggcgcncatatgngcgccangtcagcgt // // ACGCGTCAGCGT // ACGGGTCACCGT // ACGtGTCATCGT // acgC--caGcgt // // acgcgtcagcgt } func ExampleQSeq_truncate() { fmt.Printf("%-s\n\n%-s\n", qm, qm.Consensus(false)) err := sequtils.Truncate(qm, qm, 4, 12) if err == nil { fmt.Printf("\n%-s\n\n%-s\n", qm, qm.Consensus(false)) } // Output: // ACGTGCACCAAGTCAGCGT // ATGCGCGCCAGGTCACCGT // ATGAGCGCCACGTCATCGT // -------------caGcgt // // atgngcgccangtcagcgt // // GCACCAAG // GCGCCAGG // GCGCCACG // -------- // // gcgccang } biogo-1.0.4/THIRD_PARTY_LICENSES/0000755000175000017500000000000014136731467015273 5ustar nileshnileshbiogo-1.0.4/THIRD_PARTY_LICENSES/Gonum-LICENSE0000644000175000017500000000277214136731467017373 0ustar nileshnileshCopyright ©2013 The Gonum Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the Gonum project nor the names of its authors and contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.biogo-1.0.4/biogo-glyph.png0000644000175000017500000000552314136731467015110 0ustar nileshnileshPNG  IHDREg^sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxUU? PAL1M2QÚ~h"e2N̊q@391GmĈA&q*MM˦ -0$5 | rZܟww:k}k^{QU`W t"Y}KG9R"7p/+G]HQ!9@K)"khN Hh\ ]%B \[`2SD8BLAu#tw|:B)/]NRDfGh> LBu.w]"2 0|8Wv3Uh&fda{VyBw)" yh@Jz s4{3Qg\`8է,jq?0EA#>-nC+20x՘A'sY SD>JYXR9Z2_8RD0P{=E|+%)"4 zfC`,p*p|9 \ )Tj3gcpIHU5jpIڔka͆lhhl.s$2X E!oC;@aI {:13JXgORl/ȱأBb' A|cF{gQ1]+)o8-%rp-WR^w1W^+)< )VՁ*ky%s夺bQIӱ ܭ@qImh/p"kSn@"/ JfG~p/;{k J xyw"6kaZ|^,k6&Օ$%?6)7UkVE%Ū>sI̢RS|Ʊ{WpPyAkT .*)"7)7)u;79T6L76OgR69ґ[9 ,\K+b .6)\< RphmRf!&Bp1i<{Jq\ݎ&gR{8q?DSpHGK\6 4 L![p~IQ݆`CܻzބC~I Lc"ջQt>IIDMy]q) /Fޱ,P&䋔Gr7~|Z sH5j9 CJ" )lV3'p2L!1+D rL~!]xЪ0?2XDy`Hi$r !o'V69츲-5D{IIdSEih)  \Kl݄rBdA m\|Z +Ⴌn3 a"󁙑/O$OQMy 8ezƌh$r.2 }Մ@#'u'9r/IUSPdOs#4אjl )\JzXK?{F^;TcG !$2Jy4L .ŽjlKՁ,,F:ڏxBk!Vbg6@ L!&"bIId*~b`*3an'Jp:.2V #PlNxʭpgEH%<%5~LWJ1Z[oP})ycmpI]\Sv$2MZ]JߪdzZW<ӑBcÒN~t`k9:AV'\`ܷIM"GϮAӪ0h^e.>B\ـQSN^M3iVUըFd-sI"#OӘ6Hdo!DdCx?_GæcWRxl* '9:wƂvQ)zd.ARSYٙmxC#eZ)ۊJRLk%"3zW6`')7tSo2(1hmBxQqU'$)>G%`FzJb:"f;oT{[dPNx'2vS#ʽ_Gu夌1jZ K?N]bTۺDb&vηEZ=W Kw%O9 {jŭZYzI:)V{)z.YJxkC(b')Uᅪx@HƛR6j+TWeWhGM3Q:%P]ݷ㷔>Y@+3lBlK 뎭i(҃Y;d/4_ex˙l+TW}6chLxoIKR ᄪtht:g!cCJݽ?%IENDB`biogo-1.0.4/CONDUCT.md0000644000175000017500000000057214136731467013602 0ustar nileshnilesh# Working Together The bíogo project welcomes contributions from all. Contributors should foster an open and welcoming environment. When contributing or otherwise participating, please: - Be friendly and welcoming - Be patient - Be thoughtful - Be respectful - Be charitable - Avoid destructive behavior Excerpted from the [Go conduct document](https://golang.org/conduct). biogo-1.0.4/go.mod0000644000175000017500000000037514136731467013270 0ustar nileshnileshmodule github.com/biogo/biogo go 1.14 require ( github.com/biogo/graph v0.0.0-20150317020928-057c1989faed github.com/biogo/hts v1.1.0 github.com/biogo/store v0.0.0-20200104231603-2c6ad937eb83 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 ) biogo-1.0.4/index/0000755000175000017500000000000014136731467013264 5ustar nileshnileshbiogo-1.0.4/index/kmerindex/0000755000175000017500000000000014136731467015252 5ustar nileshnileshbiogo-1.0.4/index/kmerindex/kmerindex_test.go0000644000175000017500000001006314136731467020626 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package kmerindex import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/util" "math/rand" "strings" "testing" "gopkg.in/check.v1" ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct { *linear.Seq } var _ = check.Suite(&S{}) var ( maxKmerLen = 14 testLen = 1000 ) func (s *S) SetUpSuite(c *check.C) { s.Seq = linear.NewSeq("", nil, alphabet.DNA) s.Seq.Seq = make(alphabet.Letters, testLen) for i := range s.Seq.Seq { s.Seq.Seq[i] = [...]alphabet.Letter{'A', 'C', 'G', 'T', 'a', 'c', 'g', 't'}[rand.Int()%8] } } func (s *S) TestKmerIndexCheck(c *check.C) { for k := MinKmerLen; k <= maxKmerLen; k++ { if i, err := New(k, s.Seq); err != nil { c.Fatalf("New KmerIndex failed: %v", err) } else { ok, _ := i.Check() c.Check(ok, check.Equals, false) i.Build() ok, f := i.Check() c.Check(f, check.Equals, s.Seq.Len()-k+1) c.Check(ok, check.Equals, true) } } } func (s *S) TestKmerFrequencies(c *check.C) { for k := MinKmerLen; k <= maxKmerLen; k++ { if i, err := New(k, s.Seq); err != nil { c.Fatalf("New KmerIndex failed: %v", err) } else { freqs, ok := i.KmerFrequencies() c.Check(ok, check.Equals, true) hashFreqs := make(map[string]int) for i := 0; i+k <= s.Seq.Len(); i++ { hashFreqs[strings.ToLower(string(alphabet.LettersToBytes(s.Seq.Seq[i:i+k])))]++ } for key := range freqs { c.Check(freqs[key], check.Equals, hashFreqs[i.Format(key)], check.Commentf("key %x, string of %q\n", key, i.Format(key))) } for key := range hashFreqs { if keyKmer, err := i.KmerOf(key); err != nil { c.Fatal(err) } else { c.Check(freqs[keyKmer], check.Equals, hashFreqs[key], check.Commentf("keyKmer %x, string of %q, key %q\n", keyKmer, i.Format(keyKmer), key)) } } } } } func (s *S) TestKmerPositions(c *check.C) { for k := MinKmerLen; k < maxKmerLen; k++ { // don't test full range to time's sake if i, err := New(k, s.Seq); err != nil { c.Fatalf("New KmerIndex failed: %v", err) } else { i.Build() hashPos := make(map[string][]int) for i := 0; i+k <= s.Seq.Len(); i++ { p := strings.ToLower(string(alphabet.LettersToBytes(s.Seq.Seq[i : i+k]))) hashPos[p] = append(hashPos[p], i) } pos, ok := i.KmerIndex() c.Check(ok, check.Equals, true) for p := range pos { c.Check(pos[p], check.DeepEquals, hashPos[i.Format(p)]) } } } } func (s *S) TestKmerPositionsString(c *check.C) { for k := MinKmerLen; k < maxKmerLen; k++ { // don't test full range to time's sake if i, err := New(k, s.Seq); err != nil { c.Fatalf("New KmerIndex failed: %v", err) } else { i.Build() hashPos := make(map[string][]int) for i := 0; i+k <= s.Seq.Len(); i++ { p := strings.ToLower(string(alphabet.LettersToBytes(s.Seq.Seq[i : i+k]))) hashPos[p] = append(hashPos[p], i) } pos, ok := i.StringKmerIndex() c.Check(ok, check.Equals, true) for p := range pos { c.Check(pos[p], check.DeepEquals, hashPos[p]) } } } } func (s *S) TestKmerKmerUtilities(c *check.C) { for k := MinKmerLen; k <= 8; k++ { // again not testing all exhaustively for kmer := Kmer(0); uint(kmer) <= util.Pow4(k)-1; kmer++ { // Interconversion between string and Kmer s, err := Format(kmer, k, alphabet.DNA) c.Assert(err, check.Equals, nil) rk, err := KmerOf(k, alphabet.DNA.LetterIndex(), s) c.Assert(err, check.Equals, nil) c.Check(rk, check.Equals, kmer) // Complementation dc := ComplementOf(k, ComplementOf(k, kmer)) skmer, _ := Format(kmer, k, alphabet.DNA) sdc, _ := Format(dc, k, alphabet.DNA) c.Check(dc, check.Equals, kmer, check.Commentf("kmer: %s\ndouble complement: %s\n", skmer, sdc)) // GC content ks, _ := Format(kmer, k, alphabet.DNA) gc := 0 for _, b := range ks { if b == 'g' || b == 'c' { gc++ } } c.Check(GCof(k, kmer), check.Equals, float64(gc)/float64(k)) } } } biogo-1.0.4/index/kmerindex/kmerindex.go0000644000175000017500000002466714136731467017606 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package kmerindex performs Kmer indexing package based on Bob Edgar and // Gene Meyers' approach used in PALS. package kmerindex import ( "errors" "fmt" "math" "unsafe" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/util" ) var ( ErrKTooLarge = errors.New("kmerindex: k too large") ErrKTooSmall = errors.New("kmerindex: k too small") ErrShortSeq = errors.New("kmerindex: sequence to short for k") ErrBadAlphabet = errors.New("kmerindex: alphabet size != 4") ErrBadKmer = errors.New("kmerindex: kmer out of range") ErrBadKmerTextLen = errors.New("kmerindex: kmertext length != k") ErrBadKmerText = errors.New("kmerindex: kmertext contains illegal character") ) // Constraints on Kmer length. var ( MinKmerLen = 4 // default minimum // MaxKmerLen is the maximum Kmer length that can be used. // It is 16 on 64 bit architectures and 14 on 32 bit architectures. MaxKmerLen = 16 - offset ) const offset = int(unsafe.Sizeof(int(0))%0x4) / 2 var Debug = false // Set Debug to true to prevent recovering from panics in ForEachKmer f Eval function. // 2-bit per base packed word type Kmer uint32 // Sensible size for word type uint64 will double the size of the index (already large for high k) // Kmer index type type Index struct { finger []Kmer pos []int seq *linear.Seq lookUp alphabet.Index k int kMask Kmer indexed bool } // Create a new Kmer Index with a word size k based on sequence func New(k int, s *linear.Seq) (*Index, error) { switch { case k > MaxKmerLen: return nil, ErrKTooLarge case k < MinKmerLen: return nil, ErrKTooSmall case k+1 > s.Len(): return nil, ErrShortSeq case s.Alpha.Len() != 4: return nil, ErrBadAlphabet } ki := &Index{ finger: make([]Kmer, util.Pow4(k)+1), // Need a Tn+1 finger position so that Tn can be recognised k: k, kMask: Kmer(util.Pow4(k) - 1), seq: s, lookUp: s.Alpha.LetterIndex(), indexed: false, } ki.buildKmerTable() return ki, nil } // Build the table of Kmer frequencies - called by New func (ki *Index) buildKmerTable() { incrementFinger := func(index *Index, _, kmer int) { index.finger[kmer]++ } ki.ForEachKmerOf(ki.seq, 0, ki.seq.Len(), incrementFinger) } // Build the Kmer position table destructively replacing Kmer frequencies func (ki *Index) Build() { var sum Kmer for i, v := range ki.finger { ki.finger[i], sum = sum, sum+v } locatePositions := func(index *Index, position, kmer int) { index.pos[index.finger[kmer]] = position index.finger[kmer]++ } ki.pos = make([]int, ki.seq.Len()-ki.k+1) ki.ForEachKmerOf(ki.seq, 0, ki.seq.Len(), locatePositions) ki.indexed = true } // Return an array of positions for the Kmer string kmertext func (ki *Index) KmerPositionsString(kmertext string) (positions []int, err error) { switch { case len(kmertext) != ki.k: return nil, ErrBadKmerTextLen case !ki.indexed: return nil, errors.New("kmerindex: index not built: call Build()") } var kmer Kmer if kmer, err = ki.KmerOf(kmertext); err != nil { return nil, err } return ki.KmerPositions(kmer) } // Return an array of positions for the Kmer kmer func (ki *Index) KmerPositions(kmer Kmer) (positions []int, err error) { if kmer > ki.kMask { return nil, ErrBadKmer } i := Kmer(0) if kmer > 0 { // special case: An has no predecessor i = ki.finger[kmer-1] } j := ki.finger[kmer] if i == j { return } positions = make([]int, j-i) for l, p := range ki.pos[i:j] { positions[l] = int(p) } return } // Return a map containing absolute Kmer frequencies and true if called before Build(). // If called after Build returns a nil map and false. func (ki *Index) KmerFrequencies() (map[Kmer]int, bool) { if ki.indexed { return nil, false } m := map[Kmer]int{} for i, f := range ki.finger { if f > 0 { m[Kmer(i)] = int(f) // not always safe - perhaps check that Kmer <= MaxInt } } return m, true } // Return a map containing relative Kmer frequencies and true if called before Build(). // If called after Build returns a nil map and false. func (ki *Index) NormalisedKmerFrequencies() (map[Kmer]float64, bool) { if ki.indexed { return nil, false } m := map[Kmer]float64{} l := float64(ki.seq.Len()) for i, f := range ki.finger { if f > 0 { m[Kmer(i)] = float64(f) / l } } return m, true } // Returns a Kmer-keyed map containing slices of kmer positions and true if called after Build, // otherwise nil and false. func (ki *Index) KmerIndex() (map[Kmer][]int, bool) { if !ki.indexed { return nil, false } m := make(map[Kmer][]int) for i := range ki.finger { if p, _ := ki.KmerPositions(Kmer(i)); len(p) > 0 { m[Kmer(i)] = p } } return m, true } // Returns a string-keyed map containing slices of kmer positions and true if called after Build, // otherwise nil and false. func (ki *Index) StringKmerIndex() (map[string][]int, bool) { if !ki.indexed { return nil, false } m := make(map[string][]int) for i := range ki.finger { if p, _ := ki.KmerPositions(Kmer(i)); len(p) > 0 { m[ki.Format(Kmer(i))] = p } } return m, true } // errors should be handled through a panic which will be recovered by ForEachKmerOf type Eval func(index *Index, j, kmer int) // Applies the f Eval func to all kmers in s from start to end. Returns any panic raised by f as an error. func (ki *Index) ForEachKmerOf(s *linear.Seq, start, end int, f Eval) (err error) { if !Debug { defer func() { if r := recover(); r != nil { var ok bool err, ok = r.(error) if !ok { err = fmt.Errorf("kmerindex: %v", r) } } }() } kmer := Kmer(0) high := 0 var currentBase int // Preload the first k-1 bases of the first well defined k-mer or set high to the next position basePosition := start for ; basePosition < start+ki.k-1; basePosition++ { currentBase = ki.lookUp[s.Seq[basePosition]] if currentBase >= 0 { kmer = (kmer << 2) | Kmer(currentBase) } else { kmer = 0 high = basePosition + 1 } } // Call f(position, kmer) for each of the next well defined k-mers for position := basePosition - ki.k + 1; basePosition < end; position++ { currentBase = ki.lookUp[s.Seq[basePosition]] basePosition++ if currentBase >= 0 { kmer = ((kmer << 2) | Kmer(currentBase)) & ki.kMask } else { kmer = 0 high = basePosition } if position >= high { f(ki, position, int(kmer)) } } return } // Return the Kmer length of the Index. func (ki *Index) K() int { return ki.k } // Returns a pointer to the indexed seq.Seq. func (ki *Index) Seq() *linear.Seq { return ki.seq } // Returns the value of the finger slice at p. This signifies the absolute kmer frequency of the Kmer(p) // if called before Build() and points to the relevant position lookup if called after. func (ki *Index) FingerAt(p int) int { return int(ki.finger[p]) } // Returns the value of the pos slice at p. This signifies the position of the pth kmer if called after Build(). // Not valid before Build() - will panic. func (ki *Index) PosAt(p int) int { return ki.pos[p] } // Convert a Kmer into a string of bases func (ki *Index) Format(kmer Kmer) string { s, _ := Format(kmer, ki.k, ki.seq.Alpha) return s } // Convert a string of bases into a len k Kmer, returns an error if string length does not match k. // lookUp is an index lookup table as returned by alphabet.Alphabet.LetterIndex(). func KmerOf(k int, lookUp alphabet.Index, kmertext string) (kmer Kmer, err error) { if len(kmertext) != k { return 0, ErrBadKmerTextLen } for _, v := range kmertext { x := lookUp[v] if x < 0 { return 0, ErrBadKmerText } kmer = (kmer << 2) | Kmer(x) } return } // Return the GC fraction of a Kmer func (ki *Index) GCof(kmer Kmer) float64 { return GCof(ki.k, kmer) } // Return the GC fraction of a Kmer of len k func GCof(k int, kmer Kmer) float64 { gc := 0 for i := k - 1; i >= 0; i, kmer = i-1, kmer>>2 { gc += int((kmer & 1) ^ ((kmer & 2) >> 1)) } return float64(gc) / float64(k) } // Convert a Kmer into a string of bases func Format(kmer Kmer, k int, alpha alphabet.Alphabet) (string, error) { if alpha.Len() != 4 { return "", ErrBadAlphabet } kmertext := make([]byte, k) for i := k - 1; i >= 0; i, kmer = i-1, kmer>>2 { kmertext[i] = byte(alpha.Letter(int(kmer & 3))) } return string(kmertext), nil } // Reverse complement a Kmer. Complementation is performed according to letter index: // // 0, 1, 2, 3 = 3, 2, 1, 0 func (ki *Index) ComplementOf(kmer Kmer) (c Kmer) { return ComplementOf(ki.k, kmer) } // Reverse complement a Kmer of len k. Complementation is performed according to letter index: // // 0, 1, 2, 3 = 3, 2, 1, 0 func ComplementOf(k int, kmer Kmer) (c Kmer) { for i, j := uint(0), uint(k-1)*2; i <= j; i, j = i+2, j-2 { c |= (^(kmer >> (j - i)) & (3 << i)) | (^(kmer>>i)&3)<tsRGBbKGD pHYs B(xtIME8/%g IDATxwUŵǿRD,"""XPc5XcK5z4*v}Q[l,yvE (*bEz\s>{w~pg={f߬Y*ua H/ ^@@@@ @z@jHc. CJ1 MM/lm ZD< ] "-{U"Z>xD;56h38ea l߼"큳"Z-F #=CI3S4qjhmTo,ۢ^sM~oQiA#=M܎|L«v+_D: ͫ鉬 <5's@@JIsms9B\p#J@Hz>%fhuUw8^@@NHo~L@@5LaM/ C9h[۽#~G(M/ =1){\WϚֶϣ:󮫇m@@"1;q~e6+r@@zbnq0S-TUtzYXL)AR =L[fG-0xxXUgnTU߷sy.@w.E|Уȯ&}U]nkH`;& Ձ0Q8ӀLkXLf~ Tn^SկR=İ;vaFjy;AI#E:&aK;O:%.0OfY55w~ x3׏n<._,"ӁUuHkVfp pPTYf8~%LUZ;X9ۿIULnul>YUDܯ?p Mq'pέ¤% =Mw*)Az8{%p-T)y 2 W@GKv&K_hEE-&KoS)NQթyN*3(~p0XDUY Ndmh `OKpI\ ۋJ3p%psFv1G`si}Έ x+*l`7`g8%ο˴+&eoZXxRD$ezb':kӨS^.m[9pj_=."sBxc[>1Z%8h78/"{F}@븤'"+cv< pHJvq5!p-% < m?wUu{y8λ.:*7|+x\6Y`Lb}kF2ζ"?ʍf` UKKv@=~];fu}Lj<>~(쳹QF$~c\ SwW;6g'~1ƣO_vxV3scx; ,u_ô=o0+9 x.bIZ,;i`RQ-Scx摀cW}UYTTHL"CAD`~eccr;U jx݁gqkzh׃U]a2?ѽ>'H&H s_nkR9 v ׉SZdl!Np} P)pDOuXW%VЯYp $#exc^oe^T^UmW .WCt l\x+/_/qTd<6qcT"ޥ>ޘImgᐫ)c_c\E\1JU+ӭ=7\VDd5 `_U*iqv9/QIϮ'$W#Tݘێ j*w\Q:J{S71)m{)v>]q^c$B<Ǣjܤ[م%z8dSHWkq{Hu{Qز.q4ܪ5z"}cK)v[/!< <ю=|JtGsk*vJxo%;;*VO:zT҄װ\(ױ(|Io`\lm$؄8]%-U]X»/&$zZdI tx086m/UI6]/X߀)MI&ygPUi]G@؁]I~e=M(N'w*-{+NH^JኻUZ4HKӛ CTuJJ/e|d8IsU^ey_}OŸ=9@DvLylkiO1?6BslZ{b3YJogwVGz8)cwD˫Ό&)DGw`}~߭ ~1]U8q!.a9ͪdߦWK`Tu6&;8N^nTUz0y"M<7qjb_ [}=qMQ-\z?w%=ᚕAq;nڛ2,bKG+e>1hپkAwl&bxH&dqjdq1.:LrrM=UǺڿzz5'Az>f U _Kˌ4w(/ga!hk"NG?Ϥg_s˺ԝu+N/!z]%uj{}91H/]Bh4@kzߔ&bsd$rp՞/Wf,<*Ÿ⣟dNzu;歫H/qi!gYd샃p]ӳ\㫔I1zydU%5B tZcpF!טZ N)#!Fh  ,qG_%p]C0OX\lwB9xLiIrGzZ=bwriŎ3/"/Tu^ߧ*I>8B@ !3Ijz2|qUoNu<5KJ20 ޱ{ӂW]y)"?}Kx`]_ᯱ*3ue& ~,IϷVB,Niԕ_ekgMon}[K~O/1<_W+wb>Uɭ ɳ}9"6;T,ڵ  nO=.y)G2WfrDzqOnizQ(> >i&exϪYS=ڶOGx]v;xeffR^փcVUKx\ ?RC'_z7W,^iquQ*0ʺ ? yCtTk<{WPֱfWl䴝e+W?4`l$_հLTբ^-﹧ϚGpdEۊfTRWQ94`F_GյloRv_ü-JI3fjϋ1i.魃_+ܖ qKd&aJ{` p_&_Y`+*=!Fo~R^ObekkEv_ѧaWR٪z<;D)RUW2~q\#/.鵬`keVC/oX/kw[i-,b~FkTxfT]`c1tUr0q 0"㒗DhJzN7雪DLh5gkvU`IMţ`HpD|oeKzy=)_2)o*jek{Ц-{1jiz5%\ES{GMg1] O%PNI=&HODvN힄$KLcm#^e; 㰛y VeBxж4 <^Y/Pʰ.a!YU  ok21jn+3Dd|Q-4ƤckcvJxGc b+zѠ_;` ǶabVO]h-3?Nfr#"+ᗝf͛X|y]&]NRuHY/-1 %˯ x b<پyBxWį%YM=Jj9,qwc%)bk{iup8chyU/[,f%m2p/9pCF<7B\P'"=Qۘ[i{ 30wh1 o;U9}>fyqCIOIҳEOz#nq9>r[[/1?#Fn!Hx]s]gN3Yow_DzW"2s0)%=O-o)euyQջ#o%aLm(,gR==^az}/VtUk.7rl:)&t&";|ࡼ.|jʦ@z>nXwW{,܏[Jπ(h'ҫZ- ~%m4]1]J.8aH7 "r=hUi]ž{BkT5ބ*}$-ATZ VU!_:U`0-PB*{Cb{U}'+raN Sl\hmq'ᗉz3ٺ K܋O0vB>;q˗8HUhwÖ4~Rƾ%l]e~?6"24np7e=b\HD.fj )svt Dף?sR~Zb_6ʎnvG(ݾ|Mj@OgOD'\N\8j~a'dXHwU}u|a>ȵ62"s OZ쯪D^[LJi`o Nׯڡ;WlLLIh"r)p-nտ&(q+L67D UWc˙w-l [e;:S~ٵ0984_ ZU];^ %`x׀1Ne3.!6ϭL9$\ xK^꬜p@^wv.[C곞vp`u~p'"k'Xwf/U#[v*P cw8n+"bEED.ɘb3 [P2$_/"W8gp_2IUIpgDTHPJ+Y[1o#"g( _Eʐ?B\ϗ I>U@oo2C)}^(bj{ ƕe&16CuYh"M0{^!}̾G+U:@Dza,}Ngcg1Snc{%Iׄ&ayTU-0)3GzrPx :S ZZoQeYKzuD'x^:;pT-0#+&-ӑYΖd؍%RUͺjø z~U依nG3^E5EpQ“nedE:ܙ^XM\x`G "~3#F}>00c`?^ӀXt `L o6Nk8|U[Ǿ{O1a}-jbD^ Ry$~ٓ"K{o$M`|32TC#2>ᒅ!;,"-&=*~%KtoYD6Nd5^` Ψ ;5 [0vu3EߊuuL*e ܝD7 Ug߻]ԏҦ`pL;<=p]p'abq2j&.'"[a~ tKN6j$#Cj>zRL۰6' * )=bn0SJûnJ3[wLG})>?xWEz6퉘kҪ-Q$j#$v8 oۈ$rzyVy옳+ A.b%1bFB8cxRs";S`;2 26U+|JSH>ARLr0}v;<Vf:Ws~y1 1w)# (5=VS/_DIDATb`/5)3%4"id]`=~4a'5`bɼho ƕsp@`~x"'hd1s[$k#WdU*GcǒnVWk+/ r3 W5mjW0V[.cj)l~/m]@>zT7;s̢2gw"aF)cK~CtU=7.VVFNUE3&I)ڥȞ}E40SC@o}k_5n|y)yjV>ҫV)B"ɯWC~tK5#Ĕݓv LJUfuѻlOybHh[Ei g t$Mx:UUļW⠽ hƤ0˔PU-566F^:YUb2yͮ}~MzŜ|A'b^SD; a㉮ا!6 WMv=GonW/R>[%<dlg9~Iʓp./ij.9~גK= I/ʐ[N녛-BT냸y/ 5]X]^ҋ-(S`&#L)\j89lI,=0qlCeG4#{BDZ+C|Cb鸯B &5P;C1)[IM(LeƕFzRΑ~* K\I^:R}%T}%& A^TT^ 5qU/mַ5(0?ZC.Ԇ߼@zA]@z)cjeIENDB`biogo-1.0.4/CONTRIBUTORS0000644000175000017500000000212314136731467014033 0ustar nileshnilesh# This is the official list of people who can contribute # (and typically have contributed) code to the bíogo repository. # # The AUTHORS file lists the copyright holders; this file # lists people. For example, Google employees would be listed here # but not in AUTHORS, if Google held the copyright. # # When adding J Random Contributor's name to this file, # either J's name or J's organization's name should be # added to the AUTHORS file. # # Names should be added to this file like so: # Name # # Please keep the list sorted. Brent Pedersen Clayton Wheeler Davor Kapsa Dan Kortschak David Rook Emmanouil "Manolis" Maragkakis Gordon Gremme Harry Scells Jason Travis Josh Bleecher Snyder Olga Botvinnik Peter Mattis Senthil Murugapiran Yaz Saito biogo-1.0.4/doc.go0000644000175000017500000002023614136731467013254 0ustar nileshnilesh/* bíogo is a bioinformatics library for the Go language. It is a work in progress. The Purpose of bíogo bíogo stems from the need to address the size and structure of modern genomic and metagenomic data sets. These properties enforce requirements on the libraries and languages used for analysis: • speed - size of data sets • concurrency - problems often embarrassingly parallelisable In addition to the computational burden of massive data set sizes in modern genomics there is an increasing need for complex pipelines to resolve questions in tightening problem space and also a developing need to be able to develop new algorithms to allow novel approaches to interesting questions. These issues suggest the need for a simplicity in syntax to facilitate: • ease of coding • checking for correctness in development and particularly in peer review Related to the second issue is the reluctance of some researchers to release code because of quality concerns http://www.nature.com/news/2010/101013/full/467753a.html The issue of code release is the first of the principles formalised in the Science Code Manifesto http://sciencecodemanifesto.org/ Code All source code written specifically to process data for a published paper must be available to the reviewers and readers of the paper. A language with a simple, yet expressive, syntax should facilitate development of higher quality code and thus help reduce this barrier to research code release. Yet Another Bioinformatics Library It seems that nearly every language has it own bioinformatics library, some of which are very mature, for example BioPerl and BioPython. Why add another one? The different libraries excel in different fields, acting as scripting glue for applications in a pipeline (much of [1-3]) and interacting with external hosts [1, 2, 4, 5], wrapping lower level high performance languages with more user friendly syntax [1-4] or providing bioinformatics functions for high performance languages [5, 6]. The intended niche for bíogo lies somewhere between the scripting libraries and high performance language libraries in being easy to use for both small and large projects while having reasonable performance with computationally intensive tasks. The intent is to reduce the level of investment required to develop new research software for computationally intensive tasks. [1] BioPerl http://bioperl.org/ http://genome.cshlp.org/content/12/10/1611.full http://www.springerlink.com/content/pp72033m171568p2 [2] BioPython http://biopython.org/ http://bioinformatics.oxfordjournals.org/content/25/11/1422 [3] BioRuby http://bioruby.org/ http://bioinformatics.oxfordjournals.org/content/26/20/2617 [4] PyCogent http://pycogent.sourceforge.net/ http://genomebiology.com/2007/8/8/R171 [5] BioJava http://biojava.org/ http://bioinformatics.oxfordjournals.org/content/24/18/2096 [6] SeqAn http://www.seqan.de/ http://www.biomedcentral.com/1471-2105/9/11 Library Structure and Coding Style The bíogo library structure is influenced both by the structure of BioPerl and the Go core libraries. The coding style should be aligned with normal Go idioms as represented in the Go core libraries. Position Numbering Position numbering in the bíogo library conforms to the zero-based indexing of Go and range indexing conforms to Go's half-open zero-based slice indexing. This is at odds with the 'normal' inclusive indexing used by molecular biologists. This choice was made to avoid inconsistent indexing spaces being used — one-based inclusive for bíogo functions and methods and zero-based for native Go slices and arrays — and so avoid errors that this would otherwise facilitate. Note that the GFF package does allow, and defaults to, one-based inclusive indexing in its input and output of GFF files. EWD831 Why numbering should start at zero To denote the subsequence of natural numbers 2, 3, ..., 12 without the pernicious three dots, four conventions are open to us a) 2 ≤ i< 13 b) 1 < i≤ 12 c) 2 ≤ i≤ 12 d) 1 < i< 13 Are there reasons to prefer one convention to the other? Yes, there are. The observation that conventions a) and b) have the advantage that the difference between the bounds as mentioned equals the length of the subsequence is valid. So is the observation that, as a consequence, in either convention two subsequences are adjacent means that the upper bound of the one equals the lower bound of the other. Valid as these observations are, they don't enable us to choose between a) and b); so let us start afresh. There is a smallest natural number. Exclusion of the lower bound —as in b) and d)— forces for a subsequence starting at the smallest natural number the lower bound as mentioned into the realm of the unnatural numbers. That is ugly, so for the lower bound we prefer the ≤ as in a) and c). Consider now the subsequences starting at the smallest natural number: inclusion of the upper bound would then force the latter to be unnatural by the time the sequence has shrunk to the empty one. That is ugly, so for the upper bound we prefer < as in a) and d). We conclude that convention a) is to be preferred. Remark The programming language Mesa, developed at Xerox PARC, has special notations for intervals of integers in all four conventions. Extensive experience with Mesa has shown that the use of the other three conventions has been a constant source of clumsiness and mistakes, and on account of that experience Mesa programmers are now strongly advised not to use the latter three available features. I mention this experimental evidence —for what it is worth— because some people feel uncomfortable with conclusions that have not been confirmed in practice. (End of Remark.) * * * When dealing with a sequence of length N, the elements of which we wish to distinguish by subscript, the next vexing question is what subscript value to assign to its starting element. Adhering to convention a) yields, when starting with subscript 1, the subscript range 1 ≤ i < N+1; starting with 0, however, gives the nicer range 0 ≤ i < N. So let us let our ordinals start at zero: an element's ordinal (subscript) equals the number of elements preceding it in the sequence. And the moral of the story is that we had better regard —after all those centuries!— zero as a most natural number. Remark Many programming languages have been designed without due attention to this detail. In FORTRAN subscripts always start at 1; in ALGOL 60 and in PASCAL, convention c) has been adopted; the more recent SASL has fallen back on the FORTRAN convention: a sequence in SASL is at the same time a function on the positive integers. Pity! (End of Remark.) * * * The above has been triggered by a recent incident, when, in an emotional outburst, one of my mathematical colleagues at the University —not a computing scientist— accused a number of younger computing scientists of "pedantry" because —as they do by habit— they started numbering at zero. He took consciously adopting the most sensible convention as a provocation. (Also the "End of ..." convention is viewed of as provocative; but the convention is useful: I know of a student who almost failed at an examination by the tacit assumption that the questions ended at the bottom of the first page.) I think Antony Jay is right when he states: "In corporate religions as in others, the heretic must be cast out not because of the probability that he is wrong but because of the possibility that he is right." Plataanstraat 5 11 August 1982 5671 AL NUENEN prof.dr. Edsger W. Dijkstra The Netherlands Burroughs Research Fellow Quality Scores Quality scores are supported for all sequence types, including protein. Phred and Solexa scoring systems are able to be read from files, however internal representation of quality scores is with Phred, so there will be precision loss in conversion. A Solexa quality score type is provided for use where this will be a problem. Copyright ©2011-2012 The bíogo Authors except where otherwise noted. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. */ package biogo biogo-1.0.4/CONTRIBUTING.md0000644000175000017500000001007714136731467014413 0ustar nileshnilesh# Contributing This contributing guidelines document is derived from the The Gonum Project's guidelines. ## Working Together When contributing or otherwise participating please follow the [bíogo community's conduct expectations](CONDUCT.md). ## Reporting Bugs When you encounter a bug, please open an issue on the corresponding repository. Start the issue title with the repository/sub-repository name, like `seq/linear: issue description`. Be specific about the environment you encountered the bug in. If you are able to write a test that reproduces the bug, please include it in the issue. As a rule we keep all tests OK. ## Suggesting Enhancements If the scope of the enhancement is small, open an issue. If it is large, such as suggesting a new package, or interface refactoring, then please start a discussion on [the biogo-dev list](https://groups.google.com/forum/#!forum/biogo-dev). ## Your First Code Contribution If you are a new contributor, thank you! Before your first merge, you will need to be added to the [CONTRIBUTORS](https://github.com/biogo/biogo/blob/master/CONTRIBUTORS) and [AUTHORS](https://github.com/biogo/biogo/blob/master/AUTHORS) file. Open a pull request adding yourself to them. All bíogo code follows the BSD license in the [license document](https://github.com/biogo/biogo/blob/master/LICENSE). We prefer that code contributions do not come with additional licensing. For exceptions, added code must also follow a BSD license. ## Code Contribution If it is possible to split a large pull request into two or more smaller pull requests, please try to do so. Pull requests should include tests for any new code before merging. It is ok to start a pull request on partially implemented code to get feedback, and see if your approach to a problem is sound. You don't need to have tests, or even have code that compiles to open a pull request, although both will be needed before merge. When tests use magic numbers, please include a comment explaining the source of the number. Benchmarks are optional for new features, but if you are submitting a pull request justified by performance improvement, you will need benchmarks to measure the impact of your change, and the pull request should include a report from [benchcmp](https://godoc.org/golang.org/x/tools/cmd/benchcmp) or, preferably, [benchstat](https://github.com/rsc/benchstat). ## Code Review If you are a contributor, please be welcoming to new contributors. [Here](http://sarah.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/) is a good guide. There are several terms code reviews may use that you should become familiar with. * ` LGTM ` — looks good to me * ` SGTM ` — sounds good to me * ` s/foo/bar/ ` — please replace ` foo ` with ` bar `; this is [sed syntax](http://en.wikipedia.org/wiki/Sed#Usage) * ` s/foo/bar/g ` — please replace ` foo ` with ` bar ` throughout your entire change We follow the convention of requiring at least 1 reviewer to say LGTM before a merge. When code is tricky or controversial, submitters and reviewers can request additional review from others and more LGTMs before merge. You can ask for more review by saying PTAL in a comment in a pull request. You can follow a PTAL with one or more @someone to get the attention of particular people. If you don't know who to ask, and aren't getting enough review after saying PTAL, then PTAL @biogo/ contributors will get more attention. Also note that you do not have to be the pull request submitter to request additional review. ## What Can I Do to Help? If you are looking for some way to help the bíogo project, there are good places to start, depending on what you are comfortable with. You can [search](https://github.com/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+user%3Abiogo) for open issues in need of resolution. You can improve documentation, or improve examples. You can add and improve tests. You can improve performance, either by improving accuracy, speed, or both. You can suggest and implement new features that you think belong in bíogo. ## Style We use [Go style](https://github.com/golang/go/wiki/CodeReviewComments). biogo-1.0.4/.gitignore0000644000175000017500000000006314136731467014144 0ustar nileshnilesh*.[568] [568].out bin/ pkg/ misc/ cmd/cmd *.swp _* biogo-1.0.4/align/0000755000175000017500000000000014136731467013247 5ustar nileshnileshbiogo-1.0.4/align/fitted_qletters.go0000644000175000017500000001067114136731467017005 0ustar nileshnilesh// This file is automatically generated. Do not edit - make changes to relevant got file. // Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line fitted_type.got:17 func drawFittedTableQLetters(rSeq, qSeq alphabet.QLetters, index alphabet.Index, table []int, a [][]int) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) fmt.Fprint(tw, "\tqSeq\t") for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1].L) } for j := 0; j < c; j++ { p := pointerFittedQLetters(rSeq, qSeq, i, j, table, index, a, c) if p != "" { fmt.Fprintf(tw, "%s % 3v\t", p, table[i*c+j]) } else { fmt.Fprintf(tw, "%v\t", table[i*c+j]) } } fmt.Fprintln(tw) } tw.Flush() } func pointerFittedQLetters(rSeq, qSeq alphabet.QLetters, i, j int, table []int, index alphabet.Index, a [][]int, c int) string { if i == 0 || j == 0 { return "" } rVal := index[rSeq[i-1].L] qVal := index[qSeq[j-1].L] if rVal < 0 || qVal < 0 { return "" } switch p := i*c + j; table[p] { case table[p-c-1] + a[rVal][qVal]: return "⬉" case table[p-c] + a[rVal][gap]: return "⬆" case table[p-1] + a[gap][qVal]: return "⬅" default: return "" } } func (a Fitted) alignQLetters(rSeq, qSeq alphabet.QLetters, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a) la := make([]int, 0, let*let) for _, row := range a { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } index := alpha.LetterIndex() r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([]int, r*c) for j := range table[1:c] { table[j+1] = table[j] + la[index[qSeq[j].L]] } for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1].L] qVal = index[qSeq[j-1].L] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1].L, i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1].L, j-1) } p := i*c + j diagScore := table[p-c-1] + la[rVal*let+qVal] upScore := table[p-c] + la[rVal*let] leftScore := table[p-1] + la[qVal] table[p] = max3(diagScore, upScore, leftScore) } } if debugFitted { drawFittedTableQLetters(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last := 0, diag max := minInt var ( i int j = c - 1 qVal int ) for { qVal = index[qSeq[j-1].L] if qVal >= 0 { break } j-- } for y := 1; y < r; y++ { v := table[(y*c)+c-1] rVal := index[rSeq[y-1].L] if rVal < 0 { continue } if v >= max && la[rVal*let+qVal] >= 0 { i = y max = v } } maxI, maxJ := i, j for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1].L] qVal = index[qSeq[j-1].L] ) switch p := i*c + j; table[p] { case table[p-c-1] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c-1] i-- j-- last = diag case table[p-c] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c] i-- last = up case table[p-1] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-1] j-- last = left default: panic(fmt.Sprintf("align: fitted nw internal error: no path at row: %d col:%d\n", i, j)) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/sw_type.got0000644000175000017500000001027114136731467015455 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line sw_type.got:17 func drawSWTableType(rSeq, qSeq Type, index alphabet.Index, table []int, a [][]int) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) fmt.Fprint(tw, "\tqSeq\t") for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1]) } for j := 0; j < c; j++ { p := pointerSWType(rSeq, qSeq, i, j, table, index, a, c) fmt.Fprintf(tw, "%s %3v\t", p, table[i*c+j]) } fmt.Fprintln(tw) } tw.Flush() } func pointerSWType(rSeq, qSeq Type, i, j int, table []int, index alphabet.Index, a [][]int, c int) string { if i == 0 || j == 0 { return " " } rVal := index[rSeq[i-1]] qVal := index[qSeq[j-1]] if rVal < 0 || qVal < 0 { return " " } switch p := i*c + j; { case table[p] == 0: return " " case table[p-c-1]+a[rVal][qVal] == table[p] && table[p-c-1] != 0: return "⬉" case table[p-c]+a[rVal][gap] == table[p] && table[p-c] != 0: return "⬆" case table[p-1]+a[gap][qVal] == table[p] && table[p-1] != 0: return "⬅" default: return "⌜" } } func (a SW) alignType(rSeq, qSeq Type, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a) if let < alpha.Len() { return nil, ErrMatrixWrongSize{Size: let, Len: alpha.Len()} } la := make([]int, 0, let*let) for _, row := range a { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([]int, r*c) var ( index = alpha.LetterIndex() maxS, maxI, maxJ = 0, 0, 0 score int ) for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1], i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1], j-1) } p := i*c + j diagScore := table[p-c-1] + la[rVal*let+qVal] upScore := table[p-c] + la[rVal*let] leftScore := table[p-1] + la[qVal] score = max3(diagScore, upScore, leftScore) switch { case score > 0: if score >= maxS && score == diagScore { maxS, maxI, maxJ = score, i, j } default: score = 0 } table[p] = score } } if debugSmith { drawSWTableType(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last := 0, diag i, j := maxI, maxJ loop: for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) switch p := i*c + j; table[p] { case 0: break loop case table[p-c-1] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c-1] i-- j-- last = diag case table[p-c] + la[rVal*let]: if last != up { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c] i-- last = up case table[p-1] + la[qVal]: if last != left { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-1] j-- last = left default: panic(fmt.Sprintf("align: sw internal error: no path at row: %d col:%d\n", i, j)) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/pals/0000755000175000017500000000000014136731467014206 5ustar nileshnileshbiogo-1.0.4/align/pals/packseqs.go0000644000175000017500000000713614136731467016356 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package pals import ( "errors" "fmt" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/util" ) var ( binSize int = 1 << 10 minPadding int = 50 ) // A Packer collects a set of sequence into a Packed sequence. type Packer struct { packed *Packed lastPad int length int } type Packed struct { *linear.Seq seqMap } // Convert coordinates in a packed sequence into a feat.Feature. func (pa *Packed) feature(from, to int, comp bool) (*Feature, error) { if comp { from, to = pa.Len()-to, pa.Len()-from } if from >= to { return nil, errors.New("pals: from > to") } // DPHit coordinates sometimes over/underflow. // This is a lazy hack to work around it, should really figure // out what is going on. if from < 0 { from = 0 } if to > pa.Len() { to = pa.Len() } // Take midpoint of segment -- lazy hack again, endpoints // sometimes under / overflow bin := (from + to) / (2 * binSize) binCount := (pa.Len() + binSize - 1) / binSize if bin < 0 || bin >= binCount { return nil, fmt.Errorf("pals: bin %d out of range 0..%d", bin, binCount-1) } contigIndex := pa.seqMap.binMap[bin] if contigIndex < 0 || contigIndex >= len(pa.seqMap.contigs) { return nil, fmt.Errorf("pals: contig %s index %d out of range 0..%d", pa.ID, contigIndex, len(pa.seqMap.contigs)) } length := to - from if length < 0 { return nil, errors.New("pals: length < 0") } contig := pa.seqMap.contigs[contigIndex] contigFrom := from - contig.from contigTo := contigFrom + length if contigFrom < 0 { contigFrom = 0 } if contigTo > contig.Len() { contigTo = contig.Len() } return &Feature{ ID: contig.ID, From: contigFrom, To: contigTo, Loc: Contig(contig.ID), }, nil } // Create a new Packer. func NewPacker(id string) *Packer { return &Packer{ packed: &Packed{ Seq: &linear.Seq{Annotation: seq.Annotation{ID: id}}, seqMap: seqMap{}, }, } } // Pack a sequence into the Packed sequence. Returns a string giving diagnostic information. func (pa *Packer) Pack(seq *linear.Seq) (string, error) { if pa.packed.Alpha == nil { pa.packed.Alpha = seq.Alpha } else if pa.packed.Alpha != seq.Alpha { return "", errors.New("pals: alphabet mismatch") } c := contig{Seq: seq} padding := binSize - seq.Len()%binSize if padding < minPadding { padding += binSize } pa.length += pa.lastPad c.from = pa.length pa.length += seq.Len() pa.lastPad = padding m := &pa.packed.seqMap bins := make([]int, (padding+seq.Len())/binSize) for i := 0; i < len(bins); i++ { bins[i] = len(m.contigs) } m.binMap = append(m.binMap, bins...) m.contigs = append(m.contigs, c) return fmt.Sprintf("%20s\t%10d\t%7d-%-d", seq.ID[:util.Min(20, len(seq.ID))], seq.Len(), len(m.binMap)-len(bins), len(m.binMap)-1), nil } // Finalise the sequence packing. func (pa *Packer) FinalisePack() *Packed { lastPad := 0 seq := make(alphabet.Letters, 0, pa.length) for _, c := range pa.packed.seqMap.contigs { padding := binSize - c.Len()%binSize if padding < minPadding { padding += binSize } seq = append(seq, alphabet.Letter('N').Repeat(lastPad)...) seq = append(seq, c.Seq.Seq...) lastPad = padding } pa.packed.Seq.Seq = seq return pa.packed } // A contig holds a sequence within a SeqMap. type contig struct { *linear.Seq from int } // A seqMap is a collection of sequences mapped to a Packed sequence. type seqMap struct { contigs []contig binMap []int } biogo-1.0.4/align/pals/pile_test.go0000644000175000017500000000304214136731467016524 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package pals import ( "gopkg.in/check.v1" ) var ( testChr = Contig("testchr") testPairs = []*Pair{ { A: &Feature{ID: "a", Loc: testChr, From: 2, To: 4}, B: &Feature{ID: "g", Loc: testChr, From: 7, To: 9}, Score: 1, }, { A: &Feature{ID: "b", Loc: testChr, From: 3, To: 4}, B: &Feature{ID: "i", Loc: testChr, From: 7, To: 8}, Score: 1, }, { A: &Feature{ID: "c", Loc: testChr, From: 1, To: 3}, B: &Feature{ID: "j", Loc: testChr, From: 8, To: 9}, Score: 1, }, { A: &Feature{ID: "d", Loc: testChr, From: 1, To: 4}, B: &Feature{ID: "f", Loc: testChr, From: 6, To: 9}, Score: 1, }, { A: &Feature{ID: "k", Loc: testChr, From: 10, To: 11}, B: &Feature{ID: "e", Loc: testChr, From: 4, To: 5}, Score: 1, }, } ) func (s *S) TestPiler(c *check.C) { epsilon := 0.95 for _, f := range []PairFilter{ nil, func(p *Pair) bool { return float64(p.A.Len()) >= float64(p.A.Loc.Len())*epsilon || float64(p.B.Len()) >= float64(p.B.Loc.Len())*epsilon }, } { p := NewPiler(0) for _, fp := range testPairs { fp.A.Pair = fp fp.B.Pair = fp err := p.Add(fp) if err != nil { c.Fatal(err) } } for i, pi := range p.Piles(f) { c.Logf("%d %v", i, pi) for _, f := range pi.Images { c.Logf("\t%v", f.Pair) c.Check(f.Location(), check.DeepEquals, pi) } } } } biogo-1.0.4/align/pals/pals_test.go0000644000175000017500000001250314136731467016534 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package pals import ( "github.com/biogo/biogo/align/pals/dp" "github.com/biogo/biogo/align/pals/filter" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/util" "bytes" "fmt" "math" "testing" "gopkg.in/check.v1" ) const ( Q = 4 ) var ( maxk byte = 8 l [Q]byte = [Q]byte{'A', 'C', 'G', 'T'} ps *Packed ) // Helpers type B struct { *bytes.Buffer } func (b *B) Close() error { return nil } // Checkers type floatApproxChecker struct { *check.CheckerInfo } var floatApprox check.Checker = &floatApproxChecker{ &check.CheckerInfo{Name: "Approximately", Params: []string{"obtained", "expected", "epsilon"}}, } func (checker *floatApproxChecker) Check(params []interface{}, names []string) (result bool, error string) { return math.Abs(params[0].(float64)-params[1].(float64))/params[0].(float64) < params[2].(float64), "" } // Tests func Test(t *testing.T) { check.TestingT(t) } type ft struct { start, end int result *Feature } // 1: deBruijn1 4 0-0 // 2: deBruijn2 16 1-1 // 3: deBruijn3 64 2-2 // 4: deBruijn4 256 3-3 // 5: deBruijn5 1024 4-5 // 6: deBruijn6 4096 6-10 // 7: deBruijn7 16384 11-27 // 8: deBruijn8 65536 28-92 var T []ft = []ft{ {1020, 1030, &Feature{"deBruijn2", 0, 6, Contig("deBruijn2"), nil}}, {1025, 1030, &Feature{"deBruijn2", 1, 6, Contig("deBruijn2"), nil}}, {1010, 1060, &Feature{"deBruijn2", 0, 16, Contig("deBruijn2"), nil}}, {0, 1060, &Feature{"deBruijn1", 0, 4, Contig("deBruijn1"), nil}}, {4 * binSize, 4*binSize + 904, &Feature{"deBruijn5", 0, 904, Contig("deBruijn5"), nil}}, {29 * binSize, 32*binSize - 1, &Feature{"deBruijn8", 1024, 4095, Contig("deBruijn8"), nil}}, } type pt struct { l int id float64 k, s, d, t int list float64 } var P []pt = []pt{ {l: 50, id: 0.1, k: 6, s: 6, d: 0, t: 32, list: 7.3}, {l: 60, id: 0.1, k: 7, s: 7, d: 0, t: 32, list: 1.8}, {l: 70, id: 0.1, k: 8, s: 8, d: 0, t: 32, list: 0.46}, {l: 80, id: 0.1, k: 10, s: 10, d: 0, t: 32, list: 0.029}, {l: 90, id: 0.1, k: 11, s: 11, d: 0, t: 32, list: 0.0071}, {l: 100, id: 0.1, k: 6, s: 12, d: 1, t: 33, list: 7.3}, {l: 200, id: 0.5, k: 6, s: 25, d: 3, t: 35, list: 7.3}, {l: 200, id: 0.9, k: 10, s: 200, d: 19, t: 51, list: 0.029}, {l: 400, id: 0.8, k: 6, s: 50, d: 7, t: 39, list: 7.3}, {l: 400, id: 0.9, k: 10, s: 400, d: 39, t: 71, list: 0.029}, {l: 400, id: 0.99, k: 15, s: 400, d: 4, t: 36, list: 2.8e-05}, } type S struct{} var _ = check.Suite(&S{}) func (s *S) SetUpSuite(c *check.C) { p := NewPacker("") for k := byte(1); k <= maxk; k++ { a := &linear.Seq{ Annotation: seq.Annotation{ ID: fmt.Sprintf("deBruijn%d", k), }, Seq: make(alphabet.Letters, 0, util.Pow(Q, k)), } for _, i := range util.DeBruijn(byte(Q), k) { a.Seq = append(a.Seq, alphabet.Letter(l[i])) } a.Loc = Contig(a.ID) p.Pack(a) } ps = p.FinalisePack() } func (s *S) TestOptimise(c *check.C) { // minHitLen int, minId float64, target, query *seq.Seq, tubeOffset int, maxMem uint64 t := &linear.Seq{Seq: make(alphabet.Letters, 29940)} for _, p := range P { pa := New(t, t, true, nil, 0, nil, nil) err := pa.Optimise(p.l, p.id) if err == nil { c.Check(*pa.FilterParams, check.Equals, filter.Params{WordSize: p.k, MinMatch: p.s, MaxError: p.d, TubeOffset: p.t}) c.Check(*pa.DPParams, check.Equals, dp.Params{MinHitLength: p.l, MinId: p.id}) c.Check(pa.AvgIndexListLength(pa.FilterParams), floatApprox, p.list, 0.05) } } } func (s *S) TestPack(c *check.C) { p := NewPacker("") for k := byte(1); k <= maxk; k++ { a := &linear.Seq{ Annotation: seq.Annotation{ ID: fmt.Sprintf("deBruijn%d", k), }, Seq: make(alphabet.Letters, 0, util.Pow(Q, k)), } for _, i := range util.DeBruijn(byte(Q), k) { a.Seq = append(a.Seq, alphabet.Letter(l[i])) } ps, _ := p.Pack(a) c.Logf("%d: %s", k, ps) } c.Check(p.FinalisePack().Len(), check.Equals, 94208) } func (s *S) TestFeaturise(c *check.C) { for _, t := range T { f, err := ps.feature(t.start, t.end, false) if err != nil { c.Fatal(err) } c.Check(f, check.DeepEquals, t.result) } } func (s *S) TestWrite(c *check.C) { b := &B{&bytes.Buffer{}} w := NewWriter(b, 4, 60, false) for _, t := range T { if f1, err := ps.feature(t.start, t.end, false); err != nil { c.Fatal(err) } else { if f2, err := ps.feature(t.start, t.end, false); err != nil { c.Fatal(err) } else { n, err := w.Write(&Pair{A: f1, B: f2}) c.Check(n, check.Not(check.Equals), 0) c.Check(err, check.Equals, nil) } } } c.Check(string(b.Bytes()), check.Equals, `deBruijn2 pals hit 1 6 0.0000 . . Target deBruijn2 1 6; maxe 0 deBruijn2 pals hit 2 6 0.0000 . . Target deBruijn2 2 6; maxe 0 deBruijn2 pals hit 1 16 0.0000 . . Target deBruijn2 1 16; maxe 0 deBruijn1 pals hit 1 4 0.0000 . . Target deBruijn1 1 4; maxe 0 deBruijn5 pals hit 1 904 0.0000 . . Target deBruijn5 1 904; maxe 0 deBruijn8 pals hit 1025 4095 0.0000 . . Target deBruijn8 1025 4095; maxe 0 `) } biogo-1.0.4/align/pals/filter/0000755000175000017500000000000014136731467015473 5ustar nileshnileshbiogo-1.0.4/align/pals/filter/merge.go0000644000175000017500000001355114136731467017126 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package filter import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/index/kmerindex" "github.com/biogo/biogo/seq/linear" "sort" ) const ( diagonalPadding = 2 ) // A Merger aggregates and clips an ordered set of trapezoids. type Merger struct { target, query *linear.Seq filterParams *Params maxIGap int leftPadding, bottomPadding int binWidth int selfComparison bool freeTraps, trapList *trapezoid trapOrder, tail *trapezoid eoTerm *trapezoid trapCount int valueToCode alphabet.Index } // Create a new Merger using the provided kmerindex, query sequence, filter parameters and maximum inter-segment gap length. // If selfCompare is true only the upper diagonal of the comparison matrix is examined. func NewMerger(ki *kmerindex.Index, query *linear.Seq, filterParams *Params, maxIGap int, selfCompare bool) *Merger { tubeWidth := filterParams.TubeOffset + filterParams.MaxError binWidth := tubeWidth - 1 leftPadding := diagonalPadding + binWidth eoTerm := &trapezoid{Trapezoid: Trapezoid{ Left: query.Len() + 1 + leftPadding, Right: query.Len() + 1, Bottom: -1, Top: query.Len() + 1, }} return &Merger{ target: ki.Seq(), filterParams: filterParams, maxIGap: maxIGap, query: query, selfComparison: selfCompare, bottomPadding: ki.K() + 2, leftPadding: leftPadding, binWidth: binWidth, eoTerm: eoTerm, trapOrder: eoTerm, valueToCode: ki.Seq().Alpha.LetterIndex(), } } // Merge a filter hit into the collection. func (m *Merger) MergeFilterHit(h *Hit) { Left := -h.Diagonal if m.selfComparison && Left <= m.filterParams.MaxError { return } Top := h.To Bottom := h.From var temp, free *trapezoid for base := m.trapOrder; ; base = temp { temp = base.next switch { case Bottom-m.bottomPadding > base.Top: if free == nil { m.trapOrder = temp } else { free.join(temp) } m.trapList = base.join(m.trapList) m.trapCount++ case Left-diagonalPadding > base.Right: free = base case Left+m.leftPadding >= base.Left: if Left+m.binWidth > base.Right { base.Right = Left + m.binWidth } if Left < base.Left { base.Left = Left } if Top > base.Top { base.Top = Top } if free != nil && free.Right+diagonalPadding >= base.Left { free.Right = base.Right if free.Bottom > base.Bottom { free.Bottom = base.Bottom } if free.Top < base.Top { free.Top = base.Top } free.join(temp) m.freeTraps = base.join(m.freeTraps) } else if temp != nil && temp.Left-diagonalPadding <= base.Right { base.Right = temp.Right if base.Bottom > temp.Bottom { base.Bottom = temp.Bottom } if base.Top < temp.Top { base.Top = temp.Top } base.join(temp.next) m.freeTraps = temp.join(m.freeTraps) temp = base.next } return default: if m.freeTraps == nil { m.freeTraps = &trapezoid{} } if free == nil { m.trapOrder = m.freeTraps } else { free.join(m.freeTraps) } free, m.freeTraps = m.freeTraps.decapitate() free.join(base) free.Top = Top free.Bottom = Bottom free.Left = Left free.Right = Left + m.binWidth return } } } func (m *Merger) clipVertical() { for base := m.trapList; base != nil; base = base.next { lagPosition := base.Bottom - m.maxIGap + 1 if lagPosition < 0 { lagPosition = 0 } lastPosition := base.Top + m.maxIGap if lastPosition > m.query.Len() { lastPosition = m.query.Len() } var pos int for pos = lagPosition; pos < lastPosition; pos++ { if m.valueToCode[m.query.Seq[pos]] >= 0 { if pos-lagPosition >= m.maxIGap { if lagPosition-base.Bottom > 0 { if m.freeTraps == nil { m.freeTraps = &trapezoid{} } m.freeTraps = m.freeTraps.prependFrontTo(base) base.Top = lagPosition base = base.next base.Bottom = pos m.trapCount++ } else { base.Bottom = pos } } lagPosition = pos + 1 } } if pos-lagPosition >= m.maxIGap { base.Top = lagPosition } } } func (m *Merger) clipTrapezoids() { for base := m.trapList; base != nil; base = base.next { if base.Top-base.Bottom < m.bottomPadding-2 { continue } aBottom := base.Bottom - base.Right aTop := base.Top - base.Left lagPosition := aBottom - m.maxIGap + 1 if lagPosition < 0 { lagPosition = 0 } lastPosition := aTop + m.maxIGap if lastPosition > m.target.Len() { lastPosition = m.target.Len() } lagClip := aBottom var pos int for pos = lagPosition; pos < lastPosition; pos++ { if m.valueToCode[m.target.Seq[pos]] >= 0 { if pos-lagPosition >= m.maxIGap { if lagPosition > lagClip { if m.freeTraps == nil { m.freeTraps = &trapezoid{} } m.freeTraps = m.freeTraps.prependFrontTo(base) base.clip(lagPosition, lagClip) base = base.next m.trapCount++ } lagClip = pos } lagPosition = pos + 1 } } if pos-lagPosition < m.maxIGap { lagPosition = aTop } base.clip(lagPosition, lagClip) m.tail = base } } // Finalise the merged collection and return a sorted slice of Trapezoids. func (m *Merger) FinaliseMerge() Trapezoids { var next *trapezoid for base := m.trapOrder; base != m.eoTerm; base = next { next = base.next m.trapList = base.join(m.trapList) m.trapCount++ } m.clipVertical() m.clipTrapezoids() if m.tail != nil { m.freeTraps = m.tail.join(m.freeTraps) } traps := make(Trapezoids, m.trapCount) for i, z := 0, m.trapList; i < m.trapCount; i++ { traps[i] = z.Trapezoid z, z.next = z.next, nil } sort.Sort(traps) return traps } biogo-1.0.4/align/pals/filter/fhits.go0000644000175000017500000000127114136731467017140 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package filter // Type to store individual q-gram query filter hits. type Hit struct { From int To int Diagonal int } // This is a direct translation of the qsort compar function used by PALS. // However it results in a different sort order (with respect to the non-key // fields) for Hits because of differences in the underlying sort algorithms // and their respective sort stability. // This appears to have some impact on Hit merging. func (h Hit) Less(y interface{}) bool { return h.From < y.(Hit).From } biogo-1.0.4/align/pals/filter/trapezoid.go0000644000175000017500000000414114136731467020023 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package filter // Type to store a successfully filtered w × e Parallelogram type Trapezoid struct { Top, Bottom int // B (query) coords of top and bottom of trapzoidal zone Left, Right int // Left and right diagonals of trapzoidal zone } type trapezoid struct { next *trapezoid // Organized in a list linked on this field Trapezoid } // prependFrontTo prepends a copy of front of list onto the front of the list // taking the allocation from the receiver which acts as a pool. It returns the // next element of the pool. func (tr *trapezoid) prependFrontTo(list *trapezoid) *trapezoid { next := tr.next *tr = *list list.join(tr) return next } // join joins list to the receiver, returning the receiver. func (tr *trapezoid) join(list *trapezoid) *trapezoid { tr.next = list return tr } // Return the receiver and the subsequent trapezoid in the list. func (tr *trapezoid) decapitate() (*trapezoid, *trapezoid) { return tr, tr.next } // clip is the trapezoid trimming method used during merge. func (tr *trapezoid) clip(lagPosition, lagClip int) { if bottom := lagClip + tr.Left; tr.Bottom < bottom { tr.Bottom = bottom } if top := lagPosition + tr.Right; tr.Top > top { tr.Top = top } midPosition := (tr.Bottom + tr.Top) / 2 if left := midPosition - lagPosition; tr.Left < left { tr.Left = left } if right := midPosition - lagClip; tr.Right > right { tr.Right = right } } // Trapezoids implements the sort.Sort interface. type Trapezoids []Trapezoid // Return the sum of all Trapezoids in the slice. func (tr Trapezoids) Sum() (a, b int) { for _, t := range tr { la, lb := t.Top-t.Bottom, t.Right-t.Left a, b = a+la, b+lb } return } // Required for sort.Interface func (tr Trapezoids) Len() int { return len(tr) } // Required for sort.Interface func (tr Trapezoids) Less(i, j int) bool { return tr[i].Bottom < tr[j].Bottom } // Required for sort.Interface func (tr Trapezoids) Swap(i, j int) { tr[i], tr[j] = tr[j], tr[i] } biogo-1.0.4/align/pals/filter/filter_test.go0000644000175000017500000000617314136731467020355 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package filter import ( "sort" "testing" "gopkg.in/check.v1" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/index/kmerindex" "github.com/biogo/biogo/morass" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/util" ) var k byte = 6 // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) func (s *S) TestFilterAndMerge(c *check.C) { l := [...]byte{'A', 'C', 'G', 'T'} Q := len(l) a := &linear.Seq{Seq: make(alphabet.Letters, 0, util.Pow(Q, k))} a.Alpha = alphabet.DNA for _, i := range util.DeBruijn(byte(Q), k) { a.Seq = append(a.Seq, alphabet.Letter(l[i])) } b := &linear.Seq{Seq: make(alphabet.Letters, 0, util.Pow(Q, k-1))} // b.Alpha = alphabet.DNA // Not actually required for this use. for _, i := range util.DeBruijn(byte(Q), k-1) { b.Seq = append(b.Seq, alphabet.Letter(l[i])) } i, err := kmerindex.New(int(k), a) if err != nil { c.Fatalf("Failed to create kmerindex: %v", err) } i.Build() p := &Params{WordSize: int(k), MinMatch: 50, MaxError: 4, TubeOffset: 32} f := New(i, p) var sorter *morass.Morass if sorter, err = morass.New(Hit{}, "", "", 2<<20, false); err != nil { c.Fatalf("Failed to create morass: %v", err) } f.Filter(b, false, false, sorter) c.Check(sorter.Len(), check.Equals, int64(12)) r := make([]Hit, 1, sorter.Len()) for { err = sorter.Pull(&r[len(r)-1]) if err != nil { r = r[:len(r)-1] break } r = append(r, Hit{}) } want := map[Hit]bool{ {From: 0, To: 163, Diagonal: 32}: true, {From: 141, To: 247, Diagonal: 64}: true, {From: 237, To: 433, Diagonal: 1120}: true, {From: 241, To: 347, Diagonal: 96}: true, {From: 341, To: 452, Diagonal: 128}: true, {From: 447, To: 565, Diagonal: 1952}: true, {From: 542, To: 628, Diagonal: 1984}: true, {From: 627, To: 814, Diagonal: 2592}: true, {From: 786, To: 898, Diagonal: 2624}: true, {From: 868, To: 939, Diagonal: 2880}: true, {From: 938, To: 997, Diagonal: 3040}: true, {From: 938, To: 1024, Diagonal: 3072}: true, } got := make(map[Hit]bool) for _, h := range r { got[h] = true } c.Check(got, check.DeepEquals, want) c.Check(sort.IsSorted(hits(r)), check.Equals, true) m := NewMerger(i, b, p, 5, false) for _, h := range r { m.MergeFilterHit(&h) } t := m.FinaliseMerge() sorter.CleanUp() c.Check(len(t), check.Equals, 6) la, lb := t.Sum() c.Check(la, check.Equals, 1257) c.Check(lb, check.Equals, 402) c.Check(t, check.DeepEquals, Trapezoids{ {Top: 452, Bottom: 0, Left: -128, Right: 3}, {Top: 433, Bottom: 237, Left: -1120, Right: -1085}, {Top: 628, Bottom: 447, Left: -1984, Right: -1917}, {Top: 898, Bottom: 627, Left: -2624, Right: -2557}, {Top: 939, Bottom: 868, Left: -2880, Right: -2845}, {Top: 1024, Bottom: 938, Left: -3072, Right: -3005}, }) } type hits []Hit func (h hits) Len() int { return len(h) } func (h hits) Less(i, j int) bool { return h[i].Less(h[j]) } func (h hits) Swap(i, j int) { h[i], h[j] = h[j], h[i] } biogo-1.0.4/align/pals/filter/filter.go0000644000175000017500000001370514136731467017315 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package providing PALS sequence hit filter routines based on // 'Efficient q-gram filters for finding all 𝛜-matches over a given length.' // Kim R. Rasmussen, Jens Stoye, and Eugene W. Myers. J. of Computational Biology 13:296–308 (2006). package filter import ( "github.com/biogo/biogo/index/kmerindex" "github.com/biogo/biogo/morass" "github.com/biogo/biogo/seq/linear" "errors" ) // Ukonnen's Lemma: U(n, q, 𝛜) := (n + 1) - q(⌊𝛜n⌋ + 1) func MinWordsPerFilterHit(hitLength, wordLength, maxErrors int) int { return hitLength + 1 - wordLength*(maxErrors+1) } // Type for passing filter parameters. type Params struct { WordSize int MinMatch int MaxError int TubeOffset int } // Filter implements a q-gram filter similar to that described in Rassmussen 2005. // This implementation is a translation of the C++ code written by Edgar and Myers. type Filter struct { target *linear.Seq ki *kmerindex.Index tubes []tubeState morass *morass.Morass k int minMatch int maxError int maxKmerDist int minKmersPerHit int tubeOffset int selfAlign bool complement bool } // Return a new Filter using ki as the target, and filter parameters in params. func New(ki *kmerindex.Index, params *Params) (f *Filter) { f = &Filter{ ki: ki, target: ki.Seq(), k: ki.K(), minMatch: params.MinMatch, maxError: params.MaxError, tubeOffset: params.TubeOffset, } return } // Filter a query sequence against the stored index. If query and the target are the same sequence, // selfAlign can be used to avoid double searching - behavior is undefined if the the sequences are not the same. // A morass is used to store and sort individual filter hits. func (f *Filter) Filter(query *linear.Seq, selfAlign, complement bool, morass *morass.Morass) error { f.selfAlign = selfAlign f.complement = complement f.morass = morass f.k = f.ki.K() // Ukonnen's Lemma f.minKmersPerHit = MinWordsPerFilterHit(f.minMatch, f.k, f.maxError) // Maximum distance between SeqQ positions of two k-mers in a match // (More stringent bounds may be possible, but not a big problem // if two adjacent matches get merged). f.maxKmerDist = f.minMatch - f.k tubeWidth := f.tubeOffset + f.maxError if f.tubeOffset < f.maxError { return errors.New("filter: TubeOffset < MaxError") } maxActiveTubes := (f.target.Len()+tubeWidth-1)/f.tubeOffset + 1 f.tubes = make([]tubeState, maxActiveTubes) // Ticker tracks cycling of circular list of active tubes. ticker := tubeWidth var err error err = f.ki.ForEachKmerOf(query, 0, query.Len(), func(ki *kmerindex.Index, position, kmer int) { from := 0 if kmer > 0 { from = ki.FingerAt(kmer - 1) } to := ki.FingerAt(kmer) for i := from; i < to; i++ { f.commonKmer(ki.PosAt(i), position) } if ticker--; ticker == 0 { if e := f.tubeEnd(position); e != nil { panic(e) // Caught by fastkmerindex.ForEachKmerOf and returned } ticker = f.tubeOffset } }) if err != nil { return err } err = f.tubeEnd(query.Len() - 1) if err != nil { return err } diagFrom := f.diagIndex(f.target.Len()-1, query.Len()-1) - tubeWidth diagTo := f.diagIndex(0, query.Len()-1) + tubeWidth tubeFrom := f.tubeIndex(diagFrom) if tubeFrom < 0 { tubeFrom = 0 } tubeTo := f.tubeIndex(diagTo) for tubeIndex := tubeFrom; tubeIndex <= tubeTo; tubeIndex++ { err = f.tubeFlush(tubeIndex) if err != nil { return err } } f.tubes = nil return f.morass.Finalise() } // A tubeState stores active filter bin states. // tubeState is repeated in the pals package to allow memory calculation without exporting tubeState from filter package. type tubeState struct { QLo int QHi int Count int } // Called when q=Qlen - 1 to flush any hits in each tube. func (f *Filter) tubeFlush(tubeIndex int) error { tube := &f.tubes[tubeIndex%cap(f.tubes)] if tube.Count < f.minKmersPerHit { return nil } err := f.addHit(tubeIndex, tube.QLo, tube.QHi) if err != nil { return err } tube.Count = 0 return nil } func (f *Filter) diagIndex(t, q int) int { return f.target.Len() - t + q } func (f *Filter) tubeIndex(d int) int { return d / f.tubeOffset } // Found a common k-mer SeqT[t] and SeqQ[q]. func (f *Filter) commonKmer(t, q int) error { if f.selfAlign && ((f.complement && (q < f.target.Len()-t)) || (!f.complement && (q <= t))) { return nil } diagIndex := f.diagIndex(t, q) tubeIndex := f.tubeIndex(diagIndex) err := f.hitTube(tubeIndex, q) if err != nil { return err } // Hit in overlapping tube preceding this one? if diagIndex%f.tubeOffset < f.maxError { if tubeIndex == 0 { tubeIndex = cap(f.tubes) - 1 } else { tubeIndex-- } err = f.hitTube(tubeIndex, q) } return err } func (f *Filter) hitTube(tubeIndex, q int) error { tube := &f.tubes[tubeIndex%cap(f.tubes)] if tube.Count == 0 { tube.Count = 1 tube.QLo = q tube.QHi = q return nil } if q-tube.QHi > f.maxKmerDist { if tube.Count >= f.minKmersPerHit { err := f.addHit(tubeIndex, tube.QLo, tube.QHi) if err != nil { return err } } tube.Count = 1 tube.QLo = q tube.QHi = q return nil } tube.Count++ tube.QHi = q return nil } // Called when end of a tube is reached // A point in the tube -- the point with maximal q -- is (Tlen-1,q-1). func (f *Filter) tubeEnd(q int) error { diagIndex := f.diagIndex(f.target.Len()-1, q-1) tubeIndex := f.tubeIndex(diagIndex) tube := &f.tubes[tubeIndex%cap(f.tubes)] if tube.Count >= f.minKmersPerHit { err := f.addHit(tubeIndex, tube.QLo, tube.QHi) if err != nil { return err } } tube.Count = 0 return nil } func (f *Filter) addHit(tubeIndex, QLo, QHi int) error { fh := Hit{ From: QLo, To: QHi + f.k, Diagonal: f.target.Len() - tubeIndex*f.tubeOffset, } return f.morass.Push(fh) } biogo-1.0.4/align/pals/features.go0000644000175000017500000000567314136731467016366 0ustar nileshnilesh// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package pals import ( "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "github.com/biogo/graph" "fmt" ) // A Contig is a base feature type. Other features in the pals package point to this type in // their location fields. type Contig string // Name returns the value of the receiver as a string. func (c Contig) Name() string { return string(c) } // Description returns the string "contig". func (c Contig) Description() string { return "contig" } // Start returns the value 0. func (c Contig) Start() int { return 0 } // End returns the value 0. func (c Contig) End() int { return 0 } // Len returns the value 0. func (c Contig) Len() int { return 0 } // Location returns a nil feat.Feature. func (c Contig) Location() feat.Feature { return nil } // String returns the value of the receiver as a string. func (c Contig) String() string { return string(c) } // A Feature is a description of a pals feature interval. type Feature struct { ID string From int To int Loc feat.Feature Pair *Pair } func (f *Feature) Name() string { if f == nil { return "" } return f.ID } // Description returns the string "pals feature". func (f *Feature) Description() string { return "pals feature" } func (f *Feature) Start() int { return f.From } func (f *Feature) End() int { return f.To } func (f *Feature) Len() int { return f.To - f.From } func (f *Feature) Location() feat.Feature { return f.Loc } func (f *Feature) String() string { if f == nil { return "" } return fmt.Sprintf("%s[%d,%d)", f.Loc.Name(), f.From, f.To) } // Mate returns the feature pair mate of the receiver. func (f *Feature) Mate() *Feature { switch f { case f.Pair.A: return f.Pair.B case f.Pair.B: return f.Pair.A } return nil } // A Pile is a collection of features covering a maximal (potentially contiguous, depending on // the value of overlap used for creation of the Piler) region of copy count > 0. // // The graph.Node interface support of Pile is subject to change. // TODO(kortschak): Replace biogo/graph use with gonum/graph. type Pile struct { From int To int Strand seq.Strand Loc feat.Feature Images []*Feature graph.Node } func (p *Pile) Name() string { if p == nil { return "" } return fmt.Sprintf("%s[%d,%d)", p.Loc.Name(), p.From, p.To) } // Description returns the string "pile". func (p *Pile) Description() string { return "pile" } func (p *Pile) Start() int { return p.From } func (p *Pile) End() int { return p.To } func (p *Pile) Len() int { return p.To - p.From } func (p *Pile) Location() feat.Feature { return p.Loc } func (p *Pile) String() string { if p == nil { return "" } return fmt.Sprintf("{%s[%d,%d): %v}", p.Loc.Name(), p.From, p.To, p.Images) } biogo-1.0.4/align/pals/pals.go0000644000175000017500000002417414136731467015504 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package pals implements functions and methods required for PALS sequence alignment. package pals import ( "github.com/biogo/biogo/align/pals/dp" "github.com/biogo/biogo/align/pals/filter" "github.com/biogo/biogo/index/kmerindex" "github.com/biogo/biogo/morass" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/util" "errors" "io" "unsafe" ) // Default thresholds for filter and alignment. var ( DefaultLength = 400 DefaultMinIdentity = 0.94 MaxAvgIndexListLen = 15.0 TubeOffsetDelta = 32 ) // Default filter and dynamic programming Cost values. const ( MaxIGap = 5 DiffCost = 3 SameCost = 1 MatchCost = DiffCost + SameCost BlockCost = DiffCost * MaxIGap RMatchCost = float64(DiffCost) + 1 ) // A dp.Costs based on the default cost values. var defaultCosts = dp.Costs{ MaxIGap: MaxIGap, DiffCost: DiffCost, SameCost: SameCost, MatchCost: MatchCost, BlockCost: BlockCost, RMatchCost: RMatchCost, } // Default word characteristics. var ( MinWordLength = 4 // For minimum word length, choose k=4 arbitrarily. MaxKmerLen = 15 // Currently limited to 15 due to 32 bit int limit for indexing slices ) // PALS is a type that can perform pairwise alignments of large sequences based on the papers: // PILER: identification and classification of genomic repeats. // Robert C. Edgar and Eugene W. Myers. Bioinformatics Suppl. 1:i152-i158 (2005) // Efficient q-gram filters for finding all 𝛜-matches over a given length. // Kim R. Rasmussen, Jens Stoye, and Eugene W. Myers. J. of Computational Biology 13:296–308 (2006). type PALS struct { target, query *linear.Seq selfCompare bool index *kmerindex.Index FilterParams *filter.Params DPParams *dp.Params dp.Costs log Logger timer *util.Timer tubeOffset int maxMem *uintptr hitFilter *filter.Filter morass *morass.Morass trapezoids filter.Trapezoids err error threads int } // Return a new PALS aligner. Requires func New(target, query *linear.Seq, selfComp bool, m *morass.Morass, tubeOffset int, mem *uintptr, log Logger) *PALS { return &PALS{ target: target, query: query, selfCompare: selfComp, log: log, tubeOffset: tubeOffset, Costs: defaultCosts, maxMem: mem, morass: m, } } // Optimise the PALS parameters for given memory, kmer length, hit length and sequence identity. // An error is returned if no satisfactory parameters can be found. func (p *PALS) Optimise(minHitLen int, minId float64) error { if minId < 0 || minId > 1.0 { return errors.New("pals: minimum identity out of range") } if minHitLen <= MinWordLength { return errors.New("pals: minimum hit length too short") } if p.log != nil { p.log.Print("Optimising filter parameters") } filterParams := &filter.Params{} // Lower bound on word length k by requiring manageable index. // Given kmer occurs once every 4^k positions. // Hence average number of index entries is i = N/(4^k) for random // string of length N. // Require i <= I, then k > log_4(N/i). minWordSize := int(util.Log4(float64(p.target.Len())) - util.Log4(MaxAvgIndexListLen) + 0.5) // First choice is that filter criteria are same as DP criteria, // but this may not be possible. seedLength := minHitLen seedDiffs := int(float64(minHitLen) * (1 - minId)) // Find filter valid filter parameters, starting from preferred case. for { minWords := -1 if MaxKmerLen < minWordSize { if p.log != nil { p.log.Printf("Word size too small: %d < %d\n", MaxKmerLen, minWordSize) } } for wordSize := MaxKmerLen; wordSize >= minWordSize; wordSize-- { filterParams.WordSize = wordSize filterParams.MinMatch = seedLength filterParams.MaxError = seedDiffs if p.tubeOffset > 0 { filterParams.TubeOffset = p.tubeOffset } else { filterParams.TubeOffset = filterParams.MaxError + TubeOffsetDelta } mem := p.MemRequired(filterParams) if p.maxMem != nil && mem > *p.maxMem { if p.log != nil { p.log.Printf("Parameters n=%d k=%d e=%d, mem=%d MB > maxmem=%d MB\n", filterParams.MinMatch, filterParams.WordSize, filterParams.MaxError, mem/1e6, *p.maxMem/1e6) } minWords = -1 continue } minWords = filter.MinWordsPerFilterHit(seedLength, wordSize, seedDiffs) if minWords <= 0 { if p.log != nil { p.log.Printf("Parameters n=%d k=%d e=%d, B=%d\n", filterParams.MinMatch, filterParams.WordSize, filterParams.MaxError, minWords) } minWords = -1 continue } length := p.AvgIndexListLength(filterParams) if length > MaxAvgIndexListLen { if p.log != nil { p.log.Printf("Parameters n=%d k=%d e=%d, B=%d avgixlen=%.2f > max = %.2f\n", filterParams.MinMatch, filterParams.WordSize, filterParams.MaxError, minWords, length, MaxAvgIndexListLen) } minWords = -1 continue } break } if minWords > 0 { break } // Failed to find filter parameters, try // fewer errors and shorter seed. if seedLength >= minHitLen/4 { seedLength /= 2 continue } if seedDiffs > 0 { seedDiffs-- continue } return errors.New("pals: failed to find filter parameters") } p.FilterParams = filterParams p.DPParams = &dp.Params{ MinHitLength: minHitLen, MinId: minId, } return nil } // Return an estimate of the average number of hits for any given kmer. func (p *PALS) AvgIndexListLength(filterParams *filter.Params) float64 { d := int(1) << (uint(filterParams.WordSize) * 2) return float64(p.target.Len()) / float64(d) } // Return an estimate of the amount of memory required for the filter. func (p *PALS) filterMemRequired(filterParams *filter.Params) uintptr { words := util.Pow4(filterParams.WordSize) tubeWidth := filterParams.TubeOffset + filterParams.MaxError maxActiveTubes := (p.target.Len()+tubeWidth-1)/filterParams.TubeOffset + 1 tubes := uintptr(maxActiveTubes) * unsafe.Sizeof(tubeState{}) finger := unsafe.Sizeof(uint32(0)) * uintptr(words) pos := unsafe.Sizeof(0) * uintptr(p.target.Len()) return finger + pos + tubes } // filter.tubeState is repeated here to allow memory calculation without // exporting tubeState from filter package. type tubeState struct { QLo int QHi int Count int } // Return an estimate of the total amount of memory required. func (p *PALS) MemRequired(filterParams *filter.Params) uintptr { filter := p.filterMemRequired(filterParams) sequence := uintptr(p.target.Len()) + unsafe.Sizeof(p.target) if p.target != p.query { sequence += uintptr(p.query.Len()) + unsafe.Sizeof(p.query) } return filter + sequence } // Build the kmerindex for filtering. func (p *PALS) BuildIndex() error { p.notify("Indexing") ki, err := kmerindex.New(p.FilterParams.WordSize, p.target) if err != nil { return err } else { ki.Build() p.notify("Indexed") } p.index = ki p.hitFilter = filter.New(p.index, p.FilterParams) return nil } // Share allows the receiver to use the index and parameters of m. func (p *PALS) Share(m *PALS) { p.index = m.index p.FilterParams = m.FilterParams p.DPParams = m.DPParams p.hitFilter = filter.New(p.index, p.FilterParams) } // Align performs filtering and alignment for one strand of query. func (p *PALS) Align(complement bool) (dp.Hits, error) { if p.err != nil { return nil, p.err } var ( working *linear.Seq err error ) if complement { p.notify("Complementing query") working = p.query.Clone().(*linear.Seq) working.RevComp() p.notify("Complemented query") } else { working = p.query } p.notify("Filtering") err = p.hitFilter.Filter(working, p.selfCompare, complement, p.morass) if err != nil { return nil, err } p.notifyf("Identified %d filter hits", p.morass.Len()) p.notify("Merging") merger := filter.NewMerger(p.index, working, p.FilterParams, p.MaxIGap, p.selfCompare) var h filter.Hit for { if err = p.morass.Pull(&h); err != nil { break } merger.MergeFilterHit(&h) } if err != nil && err != io.EOF { return nil, err } p.err = p.morass.Clear() p.trapezoids = merger.FinaliseMerge() lt, lq := p.trapezoids.Sum() p.notifyf("Merged %d trapezoids covering %d x %d", len(p.trapezoids), lt, lq) p.notify("Aligning") aligner := dp.NewAligner( p.target, working, p.FilterParams.WordSize, p.DPParams.MinHitLength, p.DPParams.MinId, ) aligner.Costs = &p.Costs hits := aligner.AlignTraps(p.trapezoids) hitCoverageA, hitCoverageB, err := hits.Sum() if err != nil { return nil, err } p.notifyf("Aligned %d hits covering %d x %d", len(hits), hitCoverageA, hitCoverageB) return hits, nil } // Trapezoids returns the filter trapezoids identified during a call to Align. func (p *PALS) Trapezoids() filter.Trapezoids { return p.trapezoids } // AlignFrom performs filtering and alignment for one strand of query using the // provided filter trapezoids as seeds. func (p *PALS) AlignFrom(traps filter.Trapezoids, complement bool) (dp.Hits, error) { if p.err != nil { return nil, p.err } var ( working *linear.Seq err error ) if complement { p.notify("Complementing query") working = p.query.Clone().(*linear.Seq) working.RevComp() p.notify("Complemented query") } else { working = p.query } p.notify("Aligning") aligner := dp.NewAligner( p.target, working, p.FilterParams.WordSize, p.DPParams.MinHitLength, p.DPParams.MinId, ) aligner.Costs = &p.Costs hits := aligner.AlignTraps(traps) hitCoverageA, hitCoverageB, err := hits.Sum() if err != nil { return nil, err } p.notifyf("Aligned %d hits covering %d x %d", len(hits), hitCoverageA, hitCoverageB) return hits, nil } // Remove file system components of filter. This should be called after // the last use of the aligner. func (p *PALS) CleanUp() error { return p.morass.CleanUp() } // Interface for logger used by PALS. type Logger interface { Print(v ...interface{}) Printf(format string, v ...interface{}) } func (p *PALS) notify(n string) { if p.log != nil { p.log.Print(n) } } func (p *PALS) notifyf(f string, n ...interface{}) { if p.log != nil { p.log.Printf(f, n...) } } biogo-1.0.4/align/pals/dp/0000755000175000017500000000000014136731467014611 5ustar nileshnileshbiogo-1.0.4/align/pals/dp/sort.go0000644000175000017500000000117414136731467016132 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package dp // Sort DPHits on start position. type starts Hits func (s starts) Len() int { return len(s) } func (s starts) Less(i, j int) bool { return s[i].Abpos < s[j].Abpos } func (s starts) Swap(i, j int) { s[i], s[j] = s[j], s[i] } // Sort DPHits on end position. type ends Hits func (e ends) Len() int { return len(e) } func (e ends) Less(i, j int) bool { return e[i].Aepos < e[j].Aepos } func (e ends) Swap(i, j int) { e[i], e[j] = e[j], e[i] } biogo-1.0.4/align/pals/dp/kernel.go0000644000175000017500000002266314136731467016431 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package dp import ( "github.com/biogo/biogo/align/pals/filter" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq/linear" ) // A kernel handles the actual dp alignment process. type kernel struct { target, query *linear.Seq minLen int maxDiff float64 valueToCode alphabet.Index Costs lowEnd Hit highEnd Hit vectors [2][]int trapezoids []filter.Trapezoid covered []bool slot int result chan Hit } // An offset slice seems to be the easiest way to implement the C idiom used in PALS to implement // an offset (by o) view (v) on an array (a): // // int *v, o; // int [n]a; // v = a - o; // // now v[i] is a view on a[i-o] type offsetSlice struct { offset int slice []int } func (o *offsetSlice) at(i int) int { return o.slice[i-o.offset] } func (o *offsetSlice) set(i, v int) { o.slice[i-o.offset] = v } var vecBuffering int = 100000 // Handle the recursive search for alignable segments. func (k *kernel) alignRecursion(t filter.Trapezoid) { mid := (t.Bottom + t.Top) / 2 k.traceForward(mid, mid-t.Right, mid-t.Left) for x := 1; x == 1 || k.highEnd.Bbpos > mid+x*k.MaxIGap && k.highEnd.Score < k.lowEnd.Score; x++ { k.traceReverse(k.lowEnd.Bepos, k.lowEnd.Aepos, k.lowEnd.Aepos, mid+k.MaxIGap, k.BlockCost+2*x*k.DiffCost) } k.highEnd.Aepos, k.highEnd.Bepos = k.lowEnd.Aepos, k.lowEnd.Bepos lowTrap, highTrap := t, t lowTrap.Top = k.highEnd.Bbpos - k.MaxIGap highTrap.Bottom = k.highEnd.Bepos + k.MaxIGap if k.highEnd.Bepos-k.highEnd.Bbpos >= k.minLen && k.highEnd.Aepos-k.highEnd.Abpos >= k.minLen { indel := (k.highEnd.Abpos - k.highEnd.Bbpos) - (k.highEnd.Aepos - k.highEnd.Bepos) if indel < 0 { if indel == -indel { panic("dp: weird number overflow") } indel = -indel } identity := ((1 / k.RMatchCost) - float64(k.highEnd.Score-indel)/(k.RMatchCost*float64(k.highEnd.Bepos-k.highEnd.Bbpos))) if identity <= k.maxDiff { k.highEnd.Error = identity for i, trap := range k.trapezoids[k.slot+1:] { var trapAProjection, trapBProjection, coverageA, coverageB int if trap.Bottom >= k.highEnd.Bepos { break } trapBProjection = trap.Top - trap.Bottom + 1 trapAProjection = trap.Right - trap.Left + 1 if trap.Left < k.highEnd.LowDiagonal { coverageA = k.highEnd.LowDiagonal } else { coverageA = trap.Left } if trap.Right > k.highEnd.HighDiagonal { coverageB = k.highEnd.HighDiagonal } else { coverageB = trap.Right } if coverageA > coverageB { continue } coverageA = coverageB - coverageA + 1 if trap.Top > k.highEnd.Bepos { coverageB = k.highEnd.Bepos - trap.Bottom + 1 } else { coverageB = trapBProjection } if (float64(coverageA)/float64(trapAProjection))*(float64(coverageB)/float64(trapBProjection)) > 0.99 { k.covered[i] = true } } // Diagonals to this point are query-target, not target-query. k.highEnd.LowDiagonal, k.highEnd.HighDiagonal = -k.highEnd.HighDiagonal, -k.highEnd.LowDiagonal k.result <- k.highEnd } } if lowTrap.Top-lowTrap.Bottom > k.minLen && lowTrap.Top < t.Top-k.MaxIGap { k.alignRecursion(lowTrap) } if highTrap.Top-highTrap.Bottom > k.minLen { k.alignRecursion(highTrap) } } func (k *kernel) allocateVectors(required int) { vecMax := required + required>>2 + vecBuffering k.vectors[0] = make([]int, vecMax) k.vectors[1] = make([]int, vecMax) } // Forward and Reverse D.P. Extension Routines // Called at the mid-point of trapezoid -- mid X [low,high], the extension // is computed to an end point and the lowest and highest diagonals // are recorded. These are returned in a partially filled DPHit // record, that will be merged with that returned for extension in the // opposite direction. func (k *kernel) traceForward(mid, low, high int) { odd := false var ( maxScore int maxLeft, maxRight int maxI, maxJ int i, j int ) // Set basis from (mid,low) .. (mid,high). if low < 0 { low = 0 } if low > k.target.Len() { low = k.target.Len() } if high > k.target.Len() { high = k.target.Len() } if high < low { high = low } if required := (high - low) + k.MaxIGap; required >= len(k.vectors[0]) { k.allocateVectors(required) } thisVector := &offsetSlice{ slice: k.vectors[0], offset: low, } for j = low; j <= high; j++ { thisVector.set(j, 0) } high += k.MaxIGap if high > k.target.Len() { high = k.target.Len() } for ; j <= high; j++ { thisVector.set(j, thisVector.at(j-1)-k.DiffCost) } maxScore = 0 maxRight = mid - low maxLeft = mid - high maxI = mid maxJ = low // Advance to next row. thatVector := &offsetSlice{} for i = mid; low <= high && i < k.query.Len(); i++ { var cost, score int *thatVector = *thisVector if !odd { thisVector.slice = k.vectors[1] } else { thisVector.slice = k.vectors[0] } thisVector.offset = low odd = !odd score = thatVector.at(low) thisVector.set(low, score-k.DiffCost) cost = thisVector.at(low) for j = low + 1; j <= high; j++ { var ratchet, temp int temp = cost cost = score score = thatVector.at(j) if k.query.Seq[i] == k.target.Seq[j-1] && k.valueToCode[k.query.Seq[i]] >= 0 { cost += k.MatchCost } ratchet = cost if score > ratchet { ratchet = score } if temp > ratchet { ratchet = temp } cost = ratchet - k.DiffCost thisVector.set(j, cost) if cost >= maxScore { maxScore = cost maxI = i + 1 maxJ = j } } if j <= k.target.Len() { var ratchet int if k.query.Seq[i] == k.target.Seq[j-1] && k.valueToCode[k.query.Seq[i]] >= 0 { score += k.MatchCost } ratchet = score if cost > ratchet { ratchet = cost } score = ratchet - k.DiffCost thisVector.set(j, score) if score > maxScore { maxScore = score maxI = i + 1 maxJ = j } for j++; j <= k.target.Len(); j++ { score -= k.DiffCost if score < maxScore-k.BlockCost { break } thisVector.set(j, score) } } high = j - 1 for low <= high && thisVector.at(low) < maxScore-k.BlockCost { low++ } for low <= high && thisVector.at(high) < maxScore-k.BlockCost { high-- } if required := (high - low) + 2; required > len(k.vectors[0]) { k.allocateVectors(required) } if (i+1)-low > maxRight { maxRight = (i + 1) - low } if (i+1)-high < maxLeft { maxLeft = (i + 1) - high } } k.lowEnd.Aepos = maxJ k.lowEnd.Bepos = maxI k.lowEnd.LowDiagonal = maxLeft k.lowEnd.HighDiagonal = maxRight k.lowEnd.Score = maxScore } func (k *kernel) traceReverse(top, low, high, bottom, xfactor int) { odd := false var ( maxScore int maxLeft, maxRight int maxI, maxJ int i, j int ) // Set basis from (top,low) .. (top,high). if low < 0 { low = 0 } if low > k.target.Len() { low = k.target.Len() } if high > k.target.Len() { high = k.target.Len() } if high < low { high = low } if required := (high - low) + k.MaxIGap; required >= len(k.vectors[0]) { k.allocateVectors(required) } thisVector := &offsetSlice{ slice: k.vectors[0], offset: high - (len(k.vectors[0]) - 1), } for j = high; j >= low; j-- { thisVector.set(j, 0) } low -= k.MaxIGap if low < 0 { low = 0 } for ; j >= low; j-- { thisVector.set(j, thisVector.at(j+1)-k.DiffCost) } maxScore = 0 maxRight = top - low maxLeft = top - high maxI = top maxJ = low // Advance to next row. if top-1 <= bottom { xfactor = k.BlockCost } thatVector := &offsetSlice{} for i = top - 1; low <= high && i >= 0; i-- { var cost, score int *thatVector = *thisVector if !odd { thisVector.slice = k.vectors[1] } else { thisVector.slice = k.vectors[0] } thisVector.offset = high - (len(k.vectors[0]) - 1) odd = !odd score = thatVector.at(high) thisVector.set(high, score-k.DiffCost) cost = thisVector.at(high) for j = high - 1; j >= low; j-- { var ratchet, temp int temp = cost cost = score score = thatVector.at(j) if k.query.Seq[i] == k.target.Seq[j] && k.valueToCode[k.query.Seq[i]] >= 0 { cost += k.MatchCost } ratchet = cost if score > ratchet { ratchet = score } if temp > ratchet { ratchet = temp } cost = ratchet - k.DiffCost thisVector.set(j, cost) if cost >= maxScore { maxScore = cost maxI = i maxJ = j } } if j >= 0 { var ratchet int if k.query.Seq[i] == k.target.Seq[j] && k.valueToCode[k.query.Seq[i]] >= 0 { score += k.MatchCost } ratchet = score if cost > ratchet { ratchet = cost } score = ratchet - k.DiffCost thisVector.set(j, score) if score > maxScore { maxScore = score maxI = i maxJ = j } for j--; j >= 0; j-- { score -= k.DiffCost if score < maxScore-xfactor { break } thisVector.set(j, score) } } low = j + 1 for low <= high && thisVector.at(low) < maxScore-xfactor { low++ } for low <= high && thisVector.at(high) < maxScore-xfactor { high-- } if i == bottom { xfactor = k.BlockCost } if required := (high - low) + 2; required > len(k.vectors[0]) { k.allocateVectors(required) } if i-low > maxRight { maxRight = i - low } if i-high < maxLeft { maxLeft = i - high } } k.highEnd.Abpos = maxJ k.highEnd.Bbpos = maxI k.highEnd.LowDiagonal = maxLeft k.highEnd.HighDiagonal = maxRight k.highEnd.Score = maxScore } biogo-1.0.4/align/pals/dp/align.go0000644000175000017500000000737714136731467016250 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package providing PALS dynamic programming alignment routines. package dp import ( "github.com/biogo/biogo/align/pals/filter" "github.com/biogo/biogo/seq/linear" "errors" "sort" "sync" ) // A Params holds dynamic programming alignment parameters. type Params struct { MinHitLength int MinId float64 } // A Costs specifies dynamic programming behaviour. type Costs struct { MaxIGap int DiffCost int SameCost int MatchCost int BlockCost int RMatchCost float64 } // An Aligner provides allows local alignment of subsections of long sequences. type Aligner struct { target, query *linear.Seq k int minHitLength int minId float64 segs Hits Costs *Costs } // Create a new Aligner based on target and query sequences. func NewAligner(target, query *linear.Seq, k, minLength int, minId float64) *Aligner { return &Aligner{ target: target, query: query, k: k, minHitLength: minLength, minId: minId, } } // Align pairs of sequence segments defined by trapezoids. // Returns aligning segment pairs satisfying length and identity requirements. func (a *Aligner) AlignTraps(trapezoids filter.Trapezoids) Hits { covered := make([]bool, len(trapezoids)) dp := &kernel{ target: a.target, query: a.query, valueToCode: a.target.Alpha.LetterIndex(), trapezoids: trapezoids, covered: covered, minLen: a.minHitLength, maxDiff: 1 - a.minId, Costs: *a.Costs, result: make(chan Hit), } wg := &sync.WaitGroup{} wg.Add(1) var segs Hits go func() { defer wg.Done() for h := range dp.result { segs = append(segs, h) } }() for i, t := range trapezoids { if !dp.covered[i] && t.Top-t.Bottom >= a.k { dp.slot = i dp.alignRecursion(t) } } close(dp.result) wg.Wait() /* Remove lower scoring segments that begin or end at the same point as a higher scoring segment. */ if len(segs) > 0 { var i, j int sort.Sort(starts(segs)) for i = 0; i < len(segs); i = j { for j = i + 1; j < len(segs); j++ { if segs[j].Abpos != segs[i].Abpos { break } if segs[j].Bbpos != segs[i].Bbpos { break } if segs[j].Score > segs[i].Score { segs[i].Score = -1 i = j } else { segs[j].Score = -1 } } } sort.Sort(ends(segs)) for i = 0; i < len(segs); i = j { for j = i + 1; j < len(segs); j++ { if segs[j].Aepos != segs[i].Aepos { break } if segs[j].Bepos != segs[i].Bepos { break } if segs[j].Score > segs[i].Score { segs[i].Score = -1 i = j } else { segs[j].Score = -1 } } } found := 0 for i = 0; i < len(segs); i++ { if segs[i].Score >= 0 { segs[found] = segs[i] found++ } } segs = segs[:found] } return segs } // Hit holds details of alignment result. type Hit struct { Abpos, Bbpos int // Start coordinate of local alignment Aepos, Bepos int // End coordinate of local alignment LowDiagonal, HighDiagonal int // Alignment is between (anti)diagonals LowDiagonal & HighDiagonal Score int // Score of alignment where match = SameCost, difference = -DiffCost Error float64 // Lower bound on error rate of match } // DPHits is a collection of alignment results. type Hits []Hit // Returns the sums of alignment lengths. func (h Hits) Sum() (a, b int, err error) { for _, hit := range h { la, lb := hit.Aepos-hit.Abpos, hit.Bepos-hit.Bbpos if la < 0 || lb < 0 { return 0, 0, errors.New("dp: negative trapezoid area") } a, b = a+la, b+lb } return } biogo-1.0.4/align/pals/dp/dp_test.go0000644000175000017500000000573614136731467016615 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package dp import ( "testing" "gopkg.in/check.v1" "github.com/biogo/biogo/align" "github.com/biogo/biogo/align/pals/filter" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/util" ) var ( k byte = 6 T = filter.Trapezoids{ {Top: 452, Bottom: 0, Left: -128, Right: 3}, {Top: 433, Bottom: 237, Left: -1120, Right: -1085}, {Top: 628, Bottom: 447, Left: -1984, Right: -1917}, {Top: 898, Bottom: 627, Left: -2624, Right: -2557}, {Top: 939, Bottom: 868, Left: -2880, Right: -2845}, {Top: 1024, Bottom: 938, Left: -3072, Right: -3005}, } H = Hits{ {Abpos: 1, Bbpos: 0, Aepos: 290, Bepos: 242, LowDiagonal: -3, HighDiagonal: 54, Score: 101, Error: 0.19421487603305784}, {Abpos: 365, Bbpos: 286, Aepos: 435, Bepos: 345, LowDiagonal: 74, HighDiagonal: 96, Score: 26, Error: 0.1864406779661017}, {Abpos: 437, Bbpos: 341, Aepos: 507, Bepos: 400, LowDiagonal: 91, HighDiagonal: 113, Score: 26, Error: 0.1864406779661017}, {Abpos: 3201, Bbpos: 642, Aepos: 3477, Bepos: 873, LowDiagonal: 2553, HighDiagonal: 2610, Score: 96, Error: 0.19480519480519481}, {Abpos: 3980, Bbpos: 948, Aepos: 4066, Bepos: 1021, LowDiagonal: 3026, HighDiagonal: 3054, Score: 30, Error: 0.1917808219178082}, } ) var ( maxIGap = 5 diffCost = 3 sameCost = 1 matchCost = diffCost + sameCost blockCost = diffCost * maxIGap rMatchCost = float64(diffCost) + 1 ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) func (s *S) TestAlignment(c *check.C) { l := [...]byte{'A', 'C', 'G', 'T'} Q := len(l) a := &linear.Seq{Seq: make(alphabet.Letters, 0, util.Pow(Q, k))} a.Alpha = alphabet.DNA for _, i := range util.DeBruijn(byte(Q), k) { a.Seq = append(a.Seq, alphabet.Letter(l[i])) } b := &linear.Seq{Seq: make(alphabet.Letters, 0, util.Pow(Q, k-1))} b.Alpha = alphabet.DNA for _, i := range util.DeBruijn(byte(Q), k-1) { b.Seq = append(b.Seq, alphabet.Letter(l[i])) } aligner := NewAligner(a, b, int(k), 50, 0.80) aligner.Costs = &Costs{ MaxIGap: maxIGap, DiffCost: diffCost, SameCost: sameCost, MatchCost: matchCost, BlockCost: blockCost, RMatchCost: rMatchCost, } hits := aligner.AlignTraps(T) c.Check(hits, check.DeepEquals, H) la, lb, err := hits.Sum() c.Check(la, check.Equals, 791) c.Check(lb, check.Equals, 664) c.Check(err, check.Equals, nil) for _, h := range H { sa, sb := &linear.Seq{Seq: a.Seq[h.Abpos:h.Aepos]}, &linear.Seq{Seq: b.Seq[h.Bbpos:h.Bepos]} sa.Alpha = alphabet.DNAgapped sb.Alpha = alphabet.DNAgapped smith := align.SW{ {0, -1, -1, -1, -1}, {-1, 2, -1, -1, -1}, {-1, -1, 2, -1, -1}, {-1, -1, -1, 2, -1}, {-1, -1, -1, -1, 2}, } swa, _ := smith.Align(sa, sb) fa := align.Format(sa, sb, swa, sa.Alpha.Gap()) c.Logf("%v\n", swa) c.Logf("%s\n%s\n", fa[0], fa[1]) } } biogo-1.0.4/align/pals/pair.go0000644000175000017500000000504214136731467015471 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package pals import ( "github.com/biogo/biogo/align/pals/dp" "github.com/biogo/biogo/io/featio/gff" "github.com/biogo/biogo/seq" "fmt" "strconv" "strings" ) // A Pair holds a pair of features with additional information relating the two. type Pair struct { A, B *Feature Score int // Score of alignment between features. Error float64 // Identity difference between feature sequences. Strand seq.Strand // Strand relationship: seq.Plus indicates same strand, seq.Minus indicates opposite strand. } func (fp *Pair) String() string { if fp == nil { return "" } return fmt.Sprintf("%s/%s[%d,%d)--%s/%s[%d,%d)", fp.A.Location().Name(), fp.A.Name(), fp.A.Start(), fp.A.End(), fp.B.Location().Name(), fp.B.Name(), fp.B.Start(), fp.B.End(), ) } // NewPair converts a dp.Hit and two packed sequences into a Pair. func NewPair(target, query *Packed, hit dp.Hit, comp bool) (*Pair, error) { t, err := target.feature(hit.Abpos, hit.Aepos, false) if err != nil { return nil, err } q, err := query.feature(hit.Bbpos, hit.Bepos, comp) if err != nil { return nil, err } var strand seq.Strand if comp { strand = -1 } else { strand = 1 } return &Pair{ A: t, B: q, Score: hit.Score, Error: hit.Error, Strand: strand, }, nil } // ExpandFeature converts a *gff.Feature containing PALS-type feature attributes into a Pair. func ExpandFeature(f *gff.Feature) (*Pair, error) { targ := f.FeatAttributes.Get("Target") if targ == "" { return nil, fmt.Errorf("pals: not a feature pair") } fields := strings.Fields(targ) if len(fields) != 3 { return nil, fmt.Errorf("pals: not a feature pair") } s, err := strconv.Atoi(fields[1]) if err != nil { return nil, err } s-- e, err := strconv.Atoi(fields[2]) if err != nil { return nil, err } maxe, err := strconv.ParseFloat(f.FeatAttributes.Get("maxe"), 64) if err != nil { return nil, err } fp := &Pair{ A: &Feature{ ID: fmt.Sprintf("%s:%d..%d", f.SeqName, f.FeatStart, f.FeatEnd), Loc: Contig(f.SeqName), From: f.FeatStart, To: f.FeatEnd, }, B: &Feature{ ID: fmt.Sprintf("%s:%d..%s", fields[0], s, fields[2]), Loc: Contig(fields[0]), From: s, To: e, }, Score: int(*f.FeatScore), Error: maxe, Strand: f.FeatStrand, } fp.A.Pair = fp fp.B.Pair = fp f.FeatScore = nil f.FeatAttributes = nil f.FeatStrand = seq.None return fp, nil } biogo-1.0.4/align/pals/write.go0000644000175000017500000000260514136731467015672 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package pals import ( "github.com/biogo/biogo/feat" "github.com/biogo/biogo/io/featio/gff" "fmt" "io" ) // Writer is a type that writes PALS pair feature in GFFv2 format. type Writer struct { w *gff.Writer t *gff.Feature } // NewWriter returns a new PALS writer that write PALS alignment features to the io.Writer w. func NewWriter(w io.Writer, prec, width int, header bool) *Writer { gw := gff.NewWriter(w, width, header) gw.Precision = prec return &Writer{ w: gw, t: &gff.Feature{Source: "pals", Feature: "hit"}, } } // Write writes a single feature and return the number of bytes written and any error. func (w *Writer) Write(pair *Pair) (n int, err error) { t := w.t t.SeqName = pair.B.Location().Name() t.FeatStart = pair.B.Start() t.FeatEnd = pair.B.End() t.FeatScore = floatPtr(float64(pair.Score)) t.FeatStrand = pair.Strand t.FeatFrame = gff.NoFrame t.FeatAttributes = append(t.FeatAttributes[:0], gff.Attribute{ Tag: "Target", Value: fmt.Sprintf("%s %d %d", pair.A.Location().Name(), feat.ZeroToOne(pair.A.Start()), pair.A.End()), }, gff.Attribute{ Tag: "maxe", Value: fmt.Sprintf("%.2g", pair.Error), }, ) return w.w.Write(t) } func floatPtr(f float64) *float64 { return &f } biogo-1.0.4/align/pals/piler.go0000644000175000017500000001351014136731467015650 0ustar nileshnilesh// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package pals import ( "fmt" "log" "github.com/biogo/biogo/feat" "github.com/biogo/store/interval" ) var duplicatePair = fmt.Errorf("pals: attempt to add duplicate feature pair to pile") // Note Location must be comparable according to http://golang.org/ref/spec#Comparison_operators. type pileInterval struct { id uintptr start, end int pile *Pile location feat.Feature images []*Feature overlap int } func (i *pileInterval) Overlap(b interval.IntRange) bool { return i.end-i.overlap >= b.Start && i.start <= b.End-i.overlap } func (i *pileInterval) ID() uintptr { return i.id } func (i *pileInterval) Range() interval.IntRange { return interval.IntRange{Start: i.start + i.overlap, End: i.end - i.overlap} } // A Piler performs the aggregation of feature pairs according to the description in section 2.3 // of Edgar and Myers (2005) using an interval tree, giving O(nlogn) time but better space complexity // and flexibility with feature overlap. type Piler struct { // Logger logs pile construction during // Piles calls if non-nil. Logger *log.Logger // LogFreq specifies how frequently // log lines are witten if not zero. LogFreq int intervals map[feat.Feature]*interval.IntTree seen map[[2]sf]struct{} overlap int piled bool // next provides the next ID // for merged intervals. IDs // are unique across all intervals. next uintptr } type sf struct { loc feat.Feature s, e int } // NewPiler creates a Piler object ready for piling feature pairs. func NewPiler(overlap int) *Piler { return &Piler{ intervals: make(map[feat.Feature]*interval.IntTree), seen: make(map[[2]sf]struct{}), overlap: overlap, } } // Add adds a feature pair to the piler incorporating the features into piles where appropriate. func (p *Piler) Add(fp *Pair) error { a := sf{loc: fp.A.Location(), s: fp.A.Start(), e: fp.A.End()} b := sf{loc: fp.B.Location(), s: fp.B.Start(), e: fp.B.End()} ab, ba := [2]sf{a, b}, [2]sf{b, a} if _, ok := p.seen[ab]; ok { return duplicatePair } if _, ok := p.seen[ba]; ok { return duplicatePair } p.merge(&pileInterval{id: p.nextID(), start: fp.A.Start(), end: fp.A.End(), location: fp.A.Location(), images: []*Feature{fp.A}, overlap: p.overlap}) p.merge(&pileInterval{id: p.nextID(), start: fp.B.Start(), end: fp.B.End(), location: fp.B.Location(), images: []*Feature{fp.B}, overlap: p.overlap}) p.seen[ab] = struct{}{} return nil } func (p *Piler) nextID() uintptr { id := p.next p.next++ return id } func min(a, b int) int { if a < b { return a } return b } func max(a, b int) int { if a > b { return a } return b } // merge merges an interval into the tree moving location meta data from the replaced intervals // into the new interval. func (p *Piler) merge(pi *pileInterval) { var ( f = true r []interval.IntInterface qi = &pileInterval{start: pi.start, end: pi.end} ) t, ok := p.intervals[pi.location] if !ok { t = &interval.IntTree{} p.intervals[pi.location] = t } t.DoMatching( func(e interval.IntInterface) (done bool) { r = append(r, e) iv := e.(*pileInterval) pi.images = append(pi.images, iv.images...) if f { pi.start = min(iv.start, pi.start) f = false } pi.end = max(iv.end, pi.end) return }, qi, ) for _, d := range r { t.Delete(d, false) } t.Insert(pi, false) } // A PairFilter is used to determine whether a Pair's images are included in a Pile. type PairFilter func(*Pair) bool // Piles returns a slice of piles determined by application of the filter function f to // the feature pairs that have been added to the piler. Piles may be called more than once, // but the piles returned in earlier invocations will be altered by subsequent calls. func (p *Piler) Piles(f PairFilter) []*Pile { var n int if !p.piled { for _, t := range p.intervals { t.Do(func(e interval.IntInterface) (done bool) { pa := e.(*pileInterval) if pa.pile == nil { pa.pile = &Pile{Loc: pa.location, From: pa.start, To: pa.end} } for _, im := range pa.images { if checkSanity { assertPileSanity(t, im, pa.pile) } im.Loc = pa.pile } return }) n++ if p.Logger != nil && p.LogFreq != 0 && n%p.LogFreq == 0 { p.Logger.Printf("piled %d intervals of %d", n, len(p.intervals)) } } p.piled = true } n = 0 var piles []*Pile for _, t := range p.intervals { t.Do(func(e interval.IntInterface) (done bool) { pa := e.(*pileInterval) pa.pile.Images = pa.pile.Images[:0] for _, im := range pa.images { if f != nil && !f(im.Pair) { continue } if checkSanity { assertPairSanity(im) } pa.pile.Images = append(pa.pile.Images, im) } piles = append(piles, pa.pile) return }) n++ if p.Logger != nil && p.LogFreq != 0 && n%p.LogFreq == 0 { p.Logger.Printf("filtered %d intervals of %d", n, len(p.intervals)) } } return piles } const checkSanity = false func assertPileSanity(t *interval.IntTree, im *Feature, pi *Pile) { if im.Start() < pi.Start() || im.End() > pi.End() { panic(fmt.Sprintf("image extends beyond pile: %#v", im)) } if foundPiles := t.Get(&pileInterval{start: im.Start(), end: im.End()}); len(foundPiles) > 1 { var containing int for _, pile := range foundPiles { r := pile.Range() if (r.Start <= im.Start() && r.End > im.End()) || (r.Start < im.Start() && r.End >= im.End()) { containing++ } } if containing > 1 { panic(fmt.Sprintf("found too many piles for %#v", im)) } } } func assertPairSanity(im *Feature) { if _, ok := im.Loc.(*Pile); !ok { panic(fmt.Sprintf("image not allocated to pile %#v", im)) } if _, ok := im.Mate().Loc.(*Pile); !ok { panic(fmt.Sprintf("image mate not allocated to pile %#v", im.Mate())) } } biogo-1.0.4/align/align_test.go0000644000175000017500000000565614136731467015743 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "fmt" "strings" "testing" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/io/seqio/fasta" "github.com/biogo/biogo/seq/linear" "gopkg.in/check.v1" ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) func (s *S) TestWarning(c *check.C) { c.Log("\nFIXME: Tests only in example tests.\n") } // https://github.com/biogo/biogo/issues/58 func (s *S) TestIssue58(c *check.C) { a := "GCTCACTAAAAACACAATCTACAACAGACGTTGCACTAACACTGTAATTGCCTTTAGTCC" b := "ACTGCGTA" nwsa := &linear.Seq{Seq: alphabet.BytesToLetters([]byte(a))} nwsa.Alpha = alphabet.DNAgapped nwsb := &linear.Seq{Seq: alphabet.BytesToLetters([]byte(b))} nwsb.Alpha = alphabet.DNAgapped needle := NWAffine{ Matrix: Linear{ {0, -1, -1, -1, -1}, {-1, 1, -1, -1, -1}, {-1, -1, 1, -1, -1}, {-1, -1, -1, 1, -1}, {-1, -1, -1, -1, 1}, }, GapOpen: -1, } aln, err := needle.Align(nwsa, nwsb) c.Check(err, check.Equals, nil) c.Check(fmt.Sprint(aln), check.Equals, "[[0,4)/-=-5 [4,7)/[0,3)=3 [7,32)/-=-26 [32,34)/[3,5)=2 [34,43)/-=-10 [43,46)/[5,8)=3 [46,60)/-=-15]") } func BenchmarkSWAlign(b *testing.B) { t := &linear.Seq{} t.Alpha = alphabet.DNAgapped r := fasta.NewReader(strings.NewReader(crspFa), t) swsa, _ := r.Read() swsb, _ := r.Read() smith := SW{ {2, -1, -1, -1, -1}, {-1, 2, -1, -1, -1}, {-1, -1, 2, -1, -1}, {-1, -1, -1, 2, -1}, {-1, -1, -1, -1, 0}, } b.ResetTimer() for i := 0; i < b.N; i++ { smith.Align(swsa, swsb) } } func BenchmarkNWAlign(b *testing.B) { t := &linear.Seq{} t.Alpha = alphabet.DNAgapped r := fasta.NewReader(strings.NewReader(crspFa), t) nwsa, _ := r.Read() nwsb, _ := r.Read() needle := NW{ {10, -3, -1, -4, -5}, {-3, 9, -5, 0, -5}, {-1, -5, 7, -3, -5}, {-4, 0, -3, 8, -5}, {-4, -4, -4, -4, 0}, } b.ResetTimer() for i := 0; i < b.N; i++ { needle.Align(nwsa, nwsb) } } func BenchmarkSWAffineAlign(b *testing.B) { t := &linear.Seq{} t.Alpha = alphabet.DNAgapped r := fasta.NewReader(strings.NewReader(crspFa), t) swsa, _ := r.Read() swsb, _ := r.Read() smith := SWAffine{ Matrix: Linear{ {2, -1, -1, -1, -1}, {-1, 2, -1, -1, -1}, {-1, -1, 2, -1, -1}, {-1, -1, -1, 2, -1}, {-1, -1, -1, -1, 0}, }, GapOpen: -5, } b.ResetTimer() for i := 0; i < b.N; i++ { smith.Align(swsa, swsb) } } func BenchmarkNWAffineAlign(b *testing.B) { t := &linear.Seq{} t.Alpha = alphabet.DNAgapped r := fasta.NewReader(strings.NewReader(crspFa), t) nwsa, _ := r.Read() nwsb, _ := r.Read() needle := NWAffine{ Matrix: Linear{ {10, -3, -1, -4, -5}, {-3, 9, -5, 0, -5}, {-1, -5, 7, -3, -5}, {-4, 0, -3, 8, -5}, {-4, -4, -4, -4, 0}, }, GapOpen: -10, } b.ResetTimer() for i := 0; i < b.N; i++ { needle.Align(nwsa, nwsb) } } biogo-1.0.4/align/nw_affine_qletters.go0000644000175000017500000001711514136731467017462 0ustar nileshnilesh// This file is automatically generated. Do not edit - make changes to relevant got file. // Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line nw_affine_type.got:17 func drawNWAffineTableQLetters(rSeq, qSeq alphabet.QLetters, index alphabet.Index, table [][3]int, a NWAffine) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) for l := 0; l < 3; l++ { fmt.Fprintf(tw, "%c\tqSeq\t", "MUL"[l]) for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1].L) } for j := 0; j < c; j++ { p := pointerNWAffineQLetters(rSeq, qSeq, i, j, l, table, index, a, c) var vi interface{} if vi = table[i*c+j][l]; vi == minInt { vi = "-Inf" } if p != "" { fmt.Fprintf(tw, "%s % 4v\t", p, vi) } else { fmt.Fprintf(tw, "%v\t", vi) } } fmt.Fprintln(tw) } fmt.Fprintln(tw) } tw.Flush() } func pointerNWAffineQLetters(rSeq, qSeq alphabet.QLetters, i, j, l int, table [][3]int, index alphabet.Index, a NWAffine, c int) string { switch { case i == 0 && j == 0: return "" case i == 0: if j == 1 { return "⬅ m" } return "⬅ l" case j == 0: if i == 1 { return "⬆ m" } return "⬆ u" } rVal := index[rSeq[i-1].L] qVal := index[qSeq[j-1].L] if rVal < 0 || qVal < 0 { return "" } switch p := i*c + j; table[p][l] { case table[p-c][up] + a.Matrix[rVal][gap]: return "⬆ u" case table[p-1][left] + a.Matrix[gap][qVal]: return "⬅ l" case table[p-c][diag] + a.GapOpen + a.Matrix[rVal][gap]: return "⬆ m" case table[p-1][diag] + a.GapOpen + a.Matrix[gap][qVal]: return "⬅ m" case table[p-c-1][up] + a.Matrix[rVal][qVal]: return "⬉ u" case table[p-c-1][left] + a.Matrix[rVal][qVal]: return "⬉ l" case table[p-c-1][diag] + a.Matrix[rVal][qVal]: return "⬉ m" default: return [3]string{"", "⬆ u", "⬅ l"}[l] } } func (a NWAffine) alignQLetters(rSeq, qSeq alphabet.QLetters, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a.Matrix) if let < alpha.Len() { return nil, ErrMatrixWrongSize{Size: let, Len: alpha.Len()} } la := make([]int, 0, let*let) for _, row := range a.Matrix { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } index := alpha.LetterIndex() r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([][3]int, r*c) table[0] = [3]int{ diag: 0, up: minInt, left: minInt, } table[1] = [3]int{ diag: minInt, up: minInt, left: a.GapOpen + la[index[qSeq[0].L]], } for j := range table[2:c] { table[j+2] = [3]int{ diag: minInt, up: minInt, left: table[j+1][left] + la[index[qSeq[j+1].L]], } } table[c] = [3]int{ diag: minInt, up: a.GapOpen + la[index[rSeq[0].L]*let], left: minInt, } for i := 2; i < r; i++ { table[i*c] = [3]int{ diag: minInt, up: table[(i-1)*c][up] + la[index[rSeq[i-1].L]*let], left: minInt, } } for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1].L] qVal = index[qSeq[j-1].L] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1].L, i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1].L, j-1) } p := i*c + j diagScore := table[p-c-1][diag] upScore := table[p-c-1][up] leftScore := table[p-c-1][left] table[p][diag] = max3(diagScore, upScore, leftScore) + la[rVal*let+qVal] table[p][up] = max2( add(table[p-c][diag], a.GapOpen+la[rVal*let]), add(table[p-c][up], la[rVal*let]), ) table[p][left] = max2( add(table[p-1][diag], a.GapOpen+la[qVal]), add(table[p-1][left], la[qVal]), ) } } if debugNeedleAffine { drawNWAffineTableQLetters(rSeq, qSeq, index, table, a) } var ( aln []feat.Pair layer int ) score, last := 0, diag i, j := r-1, c-1 t := table[i*c+j] best := t[0] for i, s := range t[1:] { if s > best { best, layer = s, i+1 } } maxI, maxJ := i, j for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1].L] qVal = index[qSeq[j-1].L] ) switch p := i*c + j; table[p][layer] { case table[p-c][up] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][up] i-- layer = up last = up case table[p-1][left] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][left] j-- layer = left last = left case table[p-c][diag] + a.GapOpen + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][diag] i-- layer = diag last = up case table[p-1][diag] + a.GapOpen + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][diag] j-- layer = diag last = left case table[p-c-1][up] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][up] i-- j-- layer = up last = diag case table[p-c-1][left] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][left] i-- j-- layer = left last = diag case table[p-c-1][diag] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][diag] i-- j-- layer = diag last = diag default: panic(fmt.Sprintf("align: nw affine internal error: no path at row: %d col:%d layer:%s\n", i, j, "mul"[layer:layer+1])) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) if i != j { switch 0 { case i: last = left case j: last = up default: panic(fmt.Sprintf("align: nw affine internal error: unexpected final segment: row: %d col: %d", i, j)) } aln = append(aln, &featPair{ a: feature{start: 0, end: i}, b: feature{start: 0, end: j}, score: table[i*c+j][last], }) } for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/sw_affine_letters.go0000644000175000017500000001602314136731467017303 0ustar nileshnilesh// This file is automatically generated. Do not edit - make changes to relevant got file. // Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line sw_affine_type.got:17 func drawSWAffineTableLetters(rSeq, qSeq alphabet.Letters, index alphabet.Index, table [][3]int, a SWAffine) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) for l := 0; l < 3; l++ { fmt.Fprintf(tw, "%c\tqSeq\t", "MUL"[l]) for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1]) } for j := 0; j < c; j++ { p := pointerSWAffineLetters(rSeq, qSeq, i, j, l, table, index, a, c) var vi interface{} if vi = table[i*c+j][l]; vi == minInt { vi = "-Inf" } fmt.Fprintf(tw, "%s % 4v\t", p, vi) } fmt.Fprintln(tw) } fmt.Fprintln(tw) } tw.Flush() } func pointerSWAffineLetters(rSeq, qSeq alphabet.Letters, i, j, l int, table [][3]int, index alphabet.Index, a SWAffine, c int) string { if i == 0 || j == 0 { return " " } rVal := index[rSeq[i-1]] qVal := index[qSeq[j-1]] if rVal < 0 || qVal < 0 { return " " } switch p := i*c + j; { case table[p][l] == 0: return " " case table[p-c][up]+a.Matrix[rVal][gap] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬆ u" case table[p-1][left]+a.Matrix[gap][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬅ l" case table[p-c][diag]+a.GapOpen+a.Matrix[rVal][gap] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬆ m" case table[p-1][diag]+a.GapOpen+a.Matrix[gap][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬅ m" case table[p-c-1][diag]+a.Matrix[rVal][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬉ m" case table[p-c-1][up]+a.Matrix[rVal][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬉ u" case table[p-c-1][left]+a.Matrix[rVal][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬉ l" default: return [3]string{"⌜ ", "⬆ u", "⬅ l"}[l] } } func (a SWAffine) alignLetters(rSeq, qSeq alphabet.Letters, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a.Matrix) if let < alpha.Len() { return nil, ErrMatrixWrongSize{Size: let, Len: alpha.Len()} } la := make([]int, 0, let*let) for _, row := range a.Matrix { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([][3]int, r*c) var ( index = alpha.LetterIndex() maxS, maxI, maxJ = 0, 0, 0 score int ) for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1], i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1], j-1) } p := i*c + j diagScore := table[p-c-1][diag] upScore := table[p-c-1][up] leftScore := table[p-c-1][left] score = max3(diagScore, upScore, leftScore) matched := score == diagScore score += la[rVal*let+qVal] switch { case score > 0: if score >= maxS && matched { maxS, maxI, maxJ = score, i, j } default: score = 0 } table[p][diag] = score score = max2( table[p-c][diag]+a.GapOpen+la[rVal*let], table[p-c][up]+la[rVal*let], ) if score < 0 { score = 0 } table[p][up] = score score = max2( table[p-1][diag]+a.GapOpen+la[qVal], table[p-1][left]+la[qVal], ) if score < 0 { score = 0 } table[p][left] = score } } if debugSmithAffine { drawSWAffineTableLetters(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last, layer := 0, diag, diag i, j := maxI, maxJ loop: for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) switch p := i*c + j; table[p][layer] { case 0: break loop case table[p-c][up] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][up] i-- layer = up last = up case table[p-1][left] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][left] j-- layer = left last = left case table[p-c][diag] + a.GapOpen + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][diag] i-- layer = diag last = up case table[p-1][diag] + a.GapOpen + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][diag] j-- layer = diag last = left case table[p-c-1][diag] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][diag] i-- j-- layer = diag last = diag case table[p-c-1][up] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][up] i-- j-- layer = up last = diag case table[p-c-1][left] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][left] i-- j-- layer = left last = diag default: panic(fmt.Sprintf("align: sw affine internal error: no path at row: %d col:%d layer:%s\n", i, j, "mul"[layer:layer+1])) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/nw_affine_type.got0000644000175000017500000001663514136731467016772 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line nw_affine_type.got:17 func drawNWAffineTableType(rSeq, qSeq Type, index alphabet.Index, table [][3]int, a NWAffine) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) for l := 0; l < 3; l++ { fmt.Fprintf(tw, "%c\tqSeq\t", "MUL"[l]) for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1]) } for j := 0; j < c; j++ { p := pointerNWAffineType(rSeq, qSeq, i, j, l, table, index, a, c) var vi interface{} if vi = table[i*c+j][l]; vi == minInt { vi = "-Inf" } if p != "" { fmt.Fprintf(tw, "%s % 4v\t", p, vi) } else { fmt.Fprintf(tw, "%v\t", vi) } } fmt.Fprintln(tw) } fmt.Fprintln(tw) } tw.Flush() } func pointerNWAffineType(rSeq, qSeq Type, i, j, l int, table [][3]int, index alphabet.Index, a NWAffine, c int) string { switch { case i == 0 && j == 0: return "" case i == 0: if j == 1 { return "⬅ m" } return "⬅ l" case j == 0: if i == 1 { return "⬆ m" } return "⬆ u" } rVal := index[rSeq[i-1]] qVal := index[qSeq[j-1]] if rVal < 0 || qVal < 0 { return "" } switch p := i*c + j; table[p][l] { case table[p-c][up] + a.Matrix[rVal][gap]: return "⬆ u" case table[p-1][left] + a.Matrix[gap][qVal]: return "⬅ l" case table[p-c][diag] + a.GapOpen + a.Matrix[rVal][gap]: return "⬆ m" case table[p-1][diag] + a.GapOpen + a.Matrix[gap][qVal]: return "⬅ m" case table[p-c-1][up] + a.Matrix[rVal][qVal]: return "⬉ u" case table[p-c-1][left] + a.Matrix[rVal][qVal]: return "⬉ l" case table[p-c-1][diag] + a.Matrix[rVal][qVal]: return "⬉ m" default: return [3]string{"", "⬆ u", "⬅ l"}[l] } } func (a NWAffine) alignType(rSeq, qSeq Type, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a.Matrix) if let < alpha.Len() { return nil, ErrMatrixWrongSize{Size: let, Len: alpha.Len()} } la := make([]int, 0, let*let) for _, row := range a.Matrix { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } index := alpha.LetterIndex() r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([][3]int, r*c) table[0] = [3]int{ diag: 0, up: minInt, left: minInt, } table[1] = [3]int{ diag: minInt, up: minInt, left: a.GapOpen + la[index[qSeq[0]]], } for j := range table[2:c] { table[j+2] = [3]int{ diag: minInt, up: minInt, left: table[j+1][left] + la[index[qSeq[j+1]]], } } table[c] = [3]int{ diag: minInt, up: a.GapOpen + la[index[rSeq[0]]*let], left: minInt, } for i := 2; i < r; i++ { table[i*c] = [3]int{ diag: minInt, up: table[(i-1)*c][up] + la[index[rSeq[i-1]]*let], left: minInt, } } for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1], i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1], j-1) } p := i*c + j diagScore := table[p-c-1][diag] upScore := table[p-c-1][up] leftScore := table[p-c-1][left] table[p][diag] = max3(diagScore, upScore, leftScore) + la[rVal*let+qVal] table[p][up] = max2( add(table[p-c][diag], a.GapOpen+la[rVal*let]), add(table[p-c][up], la[rVal*let]), ) table[p][left] = max2( add(table[p-1][diag], a.GapOpen+la[qVal]), add(table[p-1][left], la[qVal]), ) } } if debugNeedleAffine { drawNWAffineTableType(rSeq, qSeq, index, table, a) } var ( aln []feat.Pair layer int ) score, last := 0, diag i, j := r-1, c-1 t := table[i*c+j] best := t[0] for i, s := range t[1:] { if s > best { best, layer = s, i+1 } } maxI, maxJ := i, j for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) switch p := i*c + j; table[p][layer] { case table[p-c][up] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][up] i-- layer = up last = up case table[p-1][left] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][left] j-- layer = left last = left case table[p-c][diag] + a.GapOpen + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][diag] i-- layer = diag last = up case table[p-1][diag] + a.GapOpen + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][diag] j-- layer = diag last = left case table[p-c-1][up] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][up] i-- j-- layer = up last = diag case table[p-c-1][left] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][left] i-- j-- layer = left last = diag case table[p-c-1][diag] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][diag] i-- j-- layer = diag last = diag default: panic(fmt.Sprintf("align: nw affine internal error: no path at row: %d col:%d layer:%s\n", i, j, "mul"[layer:layer+1])) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) if i != j { switch 0 { case i: last = left case j: last = up default: panic(fmt.Sprintf("align: nw affine internal error: unexpected final segment: row: %d col: %d", i, j)) } aln = append(aln, &featPair{ a: feature{start: 0, end: i}, b: feature{start: 0, end: j}, score: table[i*c+j][last], }) } for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/nw_qletters.go0000644000175000017500000001077414136731467016156 0ustar nileshnilesh// This file is automatically generated. Do not edit - make changes to relevant got file. // Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line nw_type.got:17 func drawNWTableQLetters(rSeq, qSeq alphabet.QLetters, index alphabet.Index, table []int, a [][]int) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) fmt.Fprint(tw, "\tqSeq\t") for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1].L) } for j := 0; j < c; j++ { p := pointerNWQLetters(rSeq, qSeq, i, j, table, index, a, c) if p != "" { fmt.Fprintf(tw, "%s % 3v\t", p, table[i*c+j]) } else { fmt.Fprintf(tw, "%v\t", table[i*c+j]) } } fmt.Fprintln(tw) } tw.Flush() } func pointerNWQLetters(rSeq, qSeq alphabet.QLetters, i, j int, table []int, index alphabet.Index, a [][]int, c int) string { switch { case i == 0 && j == 0: return "" case i == 0: return "⬅" case j == 0: return "⬆" } rVal := index[rSeq[i-1].L] qVal := index[qSeq[j-1].L] if rVal < 0 || qVal < 0 { return "" } switch p := i*c + j; table[p] { case table[p-c-1] + a[rVal][qVal]: return "⬉" case table[p-c] + a[rVal][gap]: return "⬆" case table[p-1] + a[gap][qVal]: return "⬅" default: return "" } } func (a NW) alignQLetters(rSeq, qSeq alphabet.QLetters, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a) if let < alpha.Len() { return nil, ErrMatrixWrongSize{Size: let, Len: alpha.Len()} } la := make([]int, 0, let*let) for _, row := range a { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } index := alpha.LetterIndex() r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([]int, r*c) for j := range table[1:c] { table[j+1] = table[j] + la[index[qSeq[j].L]] } for i := 1; i < r; i++ { table[i*c] = table[(i-1)*c] + la[index[rSeq[i-1].L]*let] } for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1].L] qVal = index[qSeq[j-1].L] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1].L, i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1].L, j-1) } p := i*c + j diagScore := table[p-c-1] + la[rVal*let+qVal] upScore := table[p-c] + la[rVal*let] leftScore := table[p-1] + la[qVal] table[p] = max3(diagScore, upScore, leftScore) } } if debugNeedle { drawNWTableQLetters(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last := 0, diag i, j := r-1, c-1 maxI, maxJ := i, j for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1].L] qVal = index[qSeq[j-1].L] ) switch p := i*c + j; table[p] { case table[p-c-1] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c-1] i-- j-- last = diag case table[p-c] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c] i-- last = up case table[p-1] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-1] j-- last = left default: panic(fmt.Sprintf("align: nw internal error: no path at row: %d col:%d\n", i, j)) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) if i != j { aln = append(aln, &featPair{ a: feature{start: 0, end: i}, b: feature{start: 0, end: j}, score: table[i*c+j], }) } for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/sw_affine_qletters.go0000644000175000017500000001605514136731467017471 0ustar nileshnilesh// This file is automatically generated. Do not edit - make changes to relevant got file. // Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line sw_affine_type.got:17 func drawSWAffineTableQLetters(rSeq, qSeq alphabet.QLetters, index alphabet.Index, table [][3]int, a SWAffine) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) for l := 0; l < 3; l++ { fmt.Fprintf(tw, "%c\tqSeq\t", "MUL"[l]) for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1].L) } for j := 0; j < c; j++ { p := pointerSWAffineQLetters(rSeq, qSeq, i, j, l, table, index, a, c) var vi interface{} if vi = table[i*c+j][l]; vi == minInt { vi = "-Inf" } fmt.Fprintf(tw, "%s % 4v\t", p, vi) } fmt.Fprintln(tw) } fmt.Fprintln(tw) } tw.Flush() } func pointerSWAffineQLetters(rSeq, qSeq alphabet.QLetters, i, j, l int, table [][3]int, index alphabet.Index, a SWAffine, c int) string { if i == 0 || j == 0 { return " " } rVal := index[rSeq[i-1].L] qVal := index[qSeq[j-1].L] if rVal < 0 || qVal < 0 { return " " } switch p := i*c + j; { case table[p][l] == 0: return " " case table[p-c][up]+a.Matrix[rVal][gap] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬆ u" case table[p-1][left]+a.Matrix[gap][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬅ l" case table[p-c][diag]+a.GapOpen+a.Matrix[rVal][gap] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬆ m" case table[p-1][diag]+a.GapOpen+a.Matrix[gap][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬅ m" case table[p-c-1][diag]+a.Matrix[rVal][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬉ m" case table[p-c-1][up]+a.Matrix[rVal][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬉ u" case table[p-c-1][left]+a.Matrix[rVal][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬉ l" default: return [3]string{"⌜ ", "⬆ u", "⬅ l"}[l] } } func (a SWAffine) alignQLetters(rSeq, qSeq alphabet.QLetters, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a.Matrix) if let < alpha.Len() { return nil, ErrMatrixWrongSize{Size: let, Len: alpha.Len()} } la := make([]int, 0, let*let) for _, row := range a.Matrix { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([][3]int, r*c) var ( index = alpha.LetterIndex() maxS, maxI, maxJ = 0, 0, 0 score int ) for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1].L] qVal = index[qSeq[j-1].L] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1].L, i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1].L, j-1) } p := i*c + j diagScore := table[p-c-1][diag] upScore := table[p-c-1][up] leftScore := table[p-c-1][left] score = max3(diagScore, upScore, leftScore) matched := score == diagScore score += la[rVal*let+qVal] switch { case score > 0: if score >= maxS && matched { maxS, maxI, maxJ = score, i, j } default: score = 0 } table[p][diag] = score score = max2( table[p-c][diag]+a.GapOpen+la[rVal*let], table[p-c][up]+la[rVal*let], ) if score < 0 { score = 0 } table[p][up] = score score = max2( table[p-1][diag]+a.GapOpen+la[qVal], table[p-1][left]+la[qVal], ) if score < 0 { score = 0 } table[p][left] = score } } if debugSmithAffine { drawSWAffineTableQLetters(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last, layer := 0, diag, diag i, j := maxI, maxJ loop: for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1].L] qVal = index[qSeq[j-1].L] ) switch p := i*c + j; table[p][layer] { case 0: break loop case table[p-c][up] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][up] i-- layer = up last = up case table[p-1][left] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][left] j-- layer = left last = left case table[p-c][diag] + a.GapOpen + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][diag] i-- layer = diag last = up case table[p-1][diag] + a.GapOpen + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][diag] j-- layer = diag last = left case table[p-c-1][diag] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][diag] i-- j-- layer = diag last = diag case table[p-c-1][up] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][up] i-- j-- layer = up last = diag case table[p-c-1][left] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][left] i-- j-- layer = left last = diag default: panic(fmt.Sprintf("align: sw affine internal error: no path at row: %d col:%d layer:%s\n", i, j, "mul"[layer:layer+1])) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/nw_letters.go0000644000175000017500000001073614136731467015773 0ustar nileshnilesh// This file is automatically generated. Do not edit - make changes to relevant got file. // Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line nw_type.got:17 func drawNWTableLetters(rSeq, qSeq alphabet.Letters, index alphabet.Index, table []int, a [][]int) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) fmt.Fprint(tw, "\tqSeq\t") for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1]) } for j := 0; j < c; j++ { p := pointerNWLetters(rSeq, qSeq, i, j, table, index, a, c) if p != "" { fmt.Fprintf(tw, "%s % 3v\t", p, table[i*c+j]) } else { fmt.Fprintf(tw, "%v\t", table[i*c+j]) } } fmt.Fprintln(tw) } tw.Flush() } func pointerNWLetters(rSeq, qSeq alphabet.Letters, i, j int, table []int, index alphabet.Index, a [][]int, c int) string { switch { case i == 0 && j == 0: return "" case i == 0: return "⬅" case j == 0: return "⬆" } rVal := index[rSeq[i-1]] qVal := index[qSeq[j-1]] if rVal < 0 || qVal < 0 { return "" } switch p := i*c + j; table[p] { case table[p-c-1] + a[rVal][qVal]: return "⬉" case table[p-c] + a[rVal][gap]: return "⬆" case table[p-1] + a[gap][qVal]: return "⬅" default: return "" } } func (a NW) alignLetters(rSeq, qSeq alphabet.Letters, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a) if let < alpha.Len() { return nil, ErrMatrixWrongSize{Size: let, Len: alpha.Len()} } la := make([]int, 0, let*let) for _, row := range a { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } index := alpha.LetterIndex() r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([]int, r*c) for j := range table[1:c] { table[j+1] = table[j] + la[index[qSeq[j]]] } for i := 1; i < r; i++ { table[i*c] = table[(i-1)*c] + la[index[rSeq[i-1]]*let] } for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1], i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1], j-1) } p := i*c + j diagScore := table[p-c-1] + la[rVal*let+qVal] upScore := table[p-c] + la[rVal*let] leftScore := table[p-1] + la[qVal] table[p] = max3(diagScore, upScore, leftScore) } } if debugNeedle { drawNWTableLetters(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last := 0, diag i, j := r-1, c-1 maxI, maxJ := i, j for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) switch p := i*c + j; table[p] { case table[p-c-1] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c-1] i-- j-- last = diag case table[p-c] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c] i-- last = up case table[p-1] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-1] j-- last = left default: panic(fmt.Sprintf("align: nw internal error: no path at row: %d col:%d\n", i, j)) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) if i != j { aln = append(aln, &featPair{ a: feature{start: 0, end: i}, b: feature{start: 0, end: j}, score: table[i*c+j], }) } for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/align.go0000644000175000017500000001042714136731467014674 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:generate ./genCode.sh // Package align provide basic sequence alignment types and helpers. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "errors" "fmt" ) type AlphabetSlicer interface { Alphabet() alphabet.Alphabet Slice() alphabet.Slice } // An Aligner aligns the sequence data of two type-matching Slicers, returning an ordered // slice of features describing matching and mismatching segments. The sequences to be aligned // must have a valid gap letter in the first position of their alphabet; the alphabets // {DNA,RNA}{gapped,redundant} and Protein provided by the alphabet package satisfy this. type Aligner interface { Align(reference, query AlphabetSlicer) ([]feat.Pair, error) } // A Linear is a basic linear gap penalty alignment description. // It is a square scoring matrix with the first column and first row specifying gap penalties. type Linear [][]int // An Affine is a basic affine gap penalty alignment description. type Affine struct { Matrix Linear GapOpen int } var ( _ Aligner = SW{} _ Aligner = NW{} ) const ( diag = iota up left gap = 0 minInt = -int(^uint(0)>>1) - 1 ) var ( ErrMismatchedTypes = errors.New("align: mismatched sequence types") ErrMismatchedAlphabets = errors.New("align: mismatched alphabets") ErrNoAlphabet = errors.New("align: no alphabet") ErrNotGappedAlphabet = errors.New("align: alphabet does not have gap at position 0") ErrTypeNotHandled = errors.New("align: sequence type not handled") ErrMatrixNotSquare = errors.New("align: scoring matrix is not square") ) type ErrMatrixWrongSize struct { Size int // size of the matrix Len int // length of the alphabet } func (e ErrMatrixWrongSize) Error() string { return fmt.Sprintf("align: scoring matrix size %d does not match alphabet length %d", e.Size, e.Len) } func max3(a, b, c int) int { if b > a { a = b } if c > a { return c } return a } func max2(a, b int) int { if a > b { return a } return b } func add(a, b int) int { if a == minInt || b == minInt { return minInt } return a + b } type feature struct { start, end int loc feat.Feature } func (f feature) Name() string { if f.loc != nil { return f.loc.Name() } return "" } func (f feature) Description() string { if f.loc != nil { return f.loc.Description() } return "" } func (f feature) Location() feat.Feature { return f.loc } func (f feature) Start() int { return f.start } func (f feature) End() int { return f.end } func (f feature) Len() int { return f.end - f.start } type featPair struct { a, b feature score int } func (fp *featPair) Features() [2]feat.Feature { return [2]feat.Feature{fp.a, fp.b} } func (fp *featPair) Score() int { return fp.score } func (fp *featPair) Invert() { fp.a, fp.b = fp.b, fp.a } func (fp *featPair) String() string { switch { case fp.a.start == fp.a.end: return fmt.Sprintf("-/%s[%d,%d)=%d", fp.b.Name(), fp.b.start, fp.b.end, fp.score) case fp.b.start == fp.b.end: return fmt.Sprintf("%s[%d,%d)/-=%d", fp.a.Name(), fp.a.start, fp.a.end, fp.score) } return fmt.Sprintf("%s[%d,%d)/%s[%d,%d)=%d", fp.a.Name(), fp.a.start, fp.a.end, fp.b.Name(), fp.b.start, fp.b.end, fp.score) } // Format returns a [2]alphabet.Slice representing the formatted alignment of a and b described by the // list of feature pairs in f, with gap used to fill gaps in the alignment. func Format(a, b seq.Slicer, f []feat.Pair, gap alphabet.Letter) [2]alphabet.Slice { var as, aln [2]alphabet.Slice for i, s := range [2]seq.Slicer{a, b} { as[i] = s.Slice() aln[i] = as[i].Make(0, 0) } for _, fs := range f { fc := fs.Features() for i := range aln { if fc[i].Len() == 0 { switch aln[i].(type) { case alphabet.Letters: aln[i] = aln[i].Append(alphabet.Letters(gap.Repeat(fc[1-i].Len()))) case alphabet.QLetters: aln[i] = aln[i].Append(alphabet.QLetters(alphabet.QLetter{L: gap}.Repeat(fc[1-i].Len()))) } } else { aln[i] = aln[i].Append(as[i].Slice(fc[i].Start(), fc[i].End())) } } } return aln } biogo-1.0.4/align/nw.go0000644000175000017500000000256514136731467014232 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" ) // Setting debugNeedle to true gives verbose scoring table output for the dynamic programming. const debugNeedle = false // NW is the linear gap penalty Needleman-Wunsch aligner type. type NW Linear // Align aligns two sequences using the Needleman-Wunsch algorithm. It returns an alignment description // or an error if the scoring matrix is not square, or the sequence data types or alphabets do not match. func (a NW) Align(reference, query AlphabetSlicer) ([]feat.Pair, error) { alpha := reference.Alphabet() if alpha == nil { return nil, ErrNoAlphabet } if alpha != query.Alphabet() { return nil, ErrMismatchedAlphabets } if alpha.IndexOf(alpha.Gap()) != 0 { return nil, ErrNotGappedAlphabet } switch rSeq := reference.Slice().(type) { case alphabet.Letters: qSeq, ok := query.Slice().(alphabet.Letters) if !ok { return nil, ErrMismatchedTypes } return a.alignLetters(rSeq, qSeq, alpha) case alphabet.QLetters: qSeq, ok := query.Slice().(alphabet.QLetters) if !ok { return nil, ErrMismatchedTypes } return a.alignQLetters(rSeq, qSeq, alpha) default: return nil, ErrTypeNotHandled } } biogo-1.0.4/align/crsp_test.go0000644000175000017500000001023614136731467015606 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align var crspFa = `>platypusX_curated [gene=crspx] [protein=mediator of RNA polymerase II transcription subunit 26] join(Contig8610:13667..13596,Contig6275:9957..9883,8367..6703) O.anatinus atgacagcggctccggcctccccgcagcagatcagggaccggctgctgcaggccatctac taccagagcaacATCCATAACATGGTGGCAGTGCTGGAGGTTATCTCCAGCTTGGAGAAA TATCCCATTACCAAAGAGGCGCTGGAGGAGACGAGATTAGGTAAGCTCATCAACGATGTC CGCAAAAAGACGAAGAACGAGGAGCTTGCCAAACGTGCCAAGAAGTTGTTGCGGAATTGG CAGAAGCTGATCGAACCCGTCGCCCAGAATGAAGCGGTGCCTCGAGGATTGCCCAACCCA GCCGGGTCGGCCAACGGCGGCGCTCACAACTGTCGGCAAGAGGGGTCGCCGGCTACGGTC GCCGGCCCCAAACCGGCCAACGAGTTCAAGAACAGGAATGACATCCAGAAGCTGAACTCT CCGAAAGCCGAGAAAGCGGGGAATCGGAAGAGGAAAGGTGACCACAGAGATGGGCACCAG GGCCCACCTTCCAAAGTGTCCAAAGCCAGTCACGAACCGTTGCAAAACTCCTCTCCGCTC CCGACCAACGGAATCGGGGGCAGCCCCGAAAGCTTTCCCAGTCCTCCGGAGGCGGGCACG CTCCCGGGGCCCGAAGGCAGCTGGACCGACCTGGGCGAGAACGATAAACACAGCAAAATC CCAGTCAACGCCGTGAGACCTCACACGAGTTCCCCCGGGCCCGGAAAACCTTCAAGCACT TGCTCCCAGGGCAAGGCGGCGGGGCTTCAGCCGCTCGACAAGCCCGAAGAGGCCGCCGGG CCGCACCAGCCCAAGAGCCCGCTCTGCTCCTTCAGCCCCCGGAACGCGCGACCCGAGACC TCGGTCCGACAGCACAGTACGTGTGCGCCGAAGGGGTCGGTGCCCAGCCCGTCCCGGAGG CCCCAGGTCCTGGACCCGAGCCGGGCAGTGTCCTCCCCTCCGCCGCCGGTGGCGACCAAA AGACTGGAGGCCGGGCAGCAGCCGGGCCCCGAGGCATCTCAGCCCTGGCAGGAGCACCTG TCTTCCGAAAGCCACCACCGGCACCCGGCCGGGACCCCGCTCCAGCCCCCGGCCCCGGGC TGTAAGGTGAGCTTACCCCCCGGGGAGCCCCCAATGCTGCGGATCGGGTTTTCCCCAGAC GCCGCCTCAAAAATGGACAGCGACGATGCCGCCTCGGGGTCAGACAGTAAAAAGAAGAAA AGGTACCGGCCCAAAGACTACACGGTGAACTTGGAGGGACAGGTGGTGGAAGGGGGGGTG AAGCCTGTAAGGTTAAAAGAGAGGAAGCTCACGTTCGATCCCATGACCGGGCAGATCAAG CCTCTCACCCACAAAGAGTCCCTGCAGGTGGACATCCCTGCAGTCGCCGAGCAGCACAGG ACAGAACCGGATCCGCAGGAGCAGAAATCCAACCTGCCGAGCCCTTTCGAGCAGACGAAC TGGAAAGAGCTGTCCCGGAACGAGATCATTCAGTCCTATTTAAACAGACAGAGTAGTTTG CTCTCCTCGTCGGGAGTACAGACCCCCGGGGCTCACTATTTCATGAATGAATATTTAAAG CAGGAAGAGAGCACTAGACGGGAAGCTCGGAAAACTCACGTTCTTGTGCCGGACAGTAGA GCTGCAGATCTGCCCGGGGTCAGTAGAGAGGTCACGGGTGACGACCTCAACAGAATACAG GAGGGTCACTGGCCGGGTGTGAACGGTTGTTACGATACACAGGGTAATTGGTATGATTGG ACTCAGTGCATATCTTTAGATCCACACGGCGACGATGGGAAATTGAACGTCCTACCTTAC GTCTGTCTAGAC >platypusY_curated [gene=crspy] [protein=mediator of RNA polymerase II transcription subunit 26] join(1..72=Contig26_6-27:414..343,73..147=Contig24_6-24:2521..2595,148..1797=Contig26_6-36:459..2108)) O.anatinus ATGACTGCGGATCCGGCCTCCCCGCTGCGGATAAGGGACCGACTGCTTCAGGCCATCGAC CCCGAGAGCAACATCCATAACCTGGTGGCTGTTTTGGAAGTTATCAGTAGCTTGGAGAAA TATCCCATTACCAAAGAGGCACTTGAGGAAACAAGATTAGGGAAACTCATCAACGATGTA AGAAAGAAGACAAGAAATGAAGAGCTTGCCAAACGAGCCAAGAAATTGCTGCGAAGTTGG CAAAAATTAATTGAACCTGTAACATCTGAGCCGGTGCCCCACTTATCAAATCCACATGGA TCAGCCAACAGTGGTGCTCCTAACTGTAGGCAAGATATGTTACCTACTACACTTGCTGGT TCAAAGTTGAAAAGCATGAATGCCATCCCAGAAGTAAGCACCCCAAAATCTGTAAAAGTG AGAAATAAGGAAAAAAAAATTGTTCCAAGAGAAGGACATCAAAGCACTCCTTCCAAAGTA TCTAAAGCCAACTCTGAGTCATTACAAAGCTCTTTTCCCAGTCCAACTACTGGGATCAGA GGAAACTCTGAGAGTTTTCCCAGTTCTCTCGACTTCAAGATGCGCCCAGACTCTGAAAAC CTCAGGACGGAACGTAGTGAAAATGATAAGTATAGCAAAATACCAGTAAATGCTGTGAAA CCTCAGCCAAGGTCTCCAGGAATTTTAAAGTGTACAAGCACTTCTCCACAGTTTAGGGCT GCAGTACTTCAGCAACCTGATAATATAGAAGAAACCACAGGGCAGCAGCAAACCAGAAAT CTGTGTTCATTTAGTCCTACGAATTTAAAAAATGAAACATTTGTCCGACAACAGGATGTC TGTCATGTGAAGCAGTCAATGGCCAATCTTTCGCAAAGATCACAGGTTCCAGGCCTTTCC CAGGTGCTAGCCTTGTCCCCACCTCTAATTTTACTTCCATCAATGGCTCCTAAGGCAGTA AAATTACTGGAAACTTCCCCTCAGTCGGGAACTGTTACAACTCAACCCTGTCGGGAATGT GTGTCTTCTGAAAATTTCCTTTGCCATTCGGAACAACTACCTTTCCAGAGCACATCTCCC AACTTTGAGGTCAGTTTTCATCCTGAAGAATCACAATATGGGTTTTCCCCAGGTGCTATA AAAGTGGACACTGTTGATTCTCCCTCAGAACCAGCCAATAAAAAGAAAAAAAGGTACAGC TCTAGAGATTATTTAATGAATTTAGATGAACTAGTGAGAGAAGGGGGTCTTAAACCTGTA AGATTAAAAGAAAGGAAGCTTACATTTGATCCAATGACAAGACGAATCAAGCCCCTAATG CAGAAGGACTCTTCACAGAGTGATATCCCCGCACCTATTGAACAGCCTAGAGTGGAAAGG CAGGAGCAAAAAAACATTCTGCACAATCCATTTGAACAAGCAAATTGGAAAGAACTGTCC AGAAATGAAATGATTCAGACCTATTTCAACCGACAGAATAGTCTGCTTTCCACTTCAGGC ATACAAACCCCAGGAGCTCATTATTTTATGAGTGAACATTTGAAAAGGGAAGAAAACATT AGAAAAGAAACTAGAATGACTCATGCGCAGATATCAAAGAGCATACCCACAGACCCACCT GGCCTCAATAGAGAGGTTACAAGCAATGATCTACGCAGCTTATGGGAATTTTACTGGCCA GGTGTGAATGGTTGTTATGATACACAGGGTAATTGGTATAATTGGACACAGTGCATATCT GCAGATCCACATGGTGCTGACAGTAGATTGAATATTTTACCTTATGTCTGCCTAGAC ` biogo-1.0.4/align/sw_letters.go0000644000175000017500000001050614136731467015773 0ustar nileshnilesh// This file is automatically generated. Do not edit - make changes to relevant got file. // Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line sw_type.got:17 func drawSWTableLetters(rSeq, qSeq alphabet.Letters, index alphabet.Index, table []int, a [][]int) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) fmt.Fprint(tw, "\tqSeq\t") for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1]) } for j := 0; j < c; j++ { p := pointerSWLetters(rSeq, qSeq, i, j, table, index, a, c) fmt.Fprintf(tw, "%s %3v\t", p, table[i*c+j]) } fmt.Fprintln(tw) } tw.Flush() } func pointerSWLetters(rSeq, qSeq alphabet.Letters, i, j int, table []int, index alphabet.Index, a [][]int, c int) string { if i == 0 || j == 0 { return " " } rVal := index[rSeq[i-1]] qVal := index[qSeq[j-1]] if rVal < 0 || qVal < 0 { return " " } switch p := i*c + j; { case table[p] == 0: return " " case table[p-c-1]+a[rVal][qVal] == table[p] && table[p-c-1] != 0: return "⬉" case table[p-c]+a[rVal][gap] == table[p] && table[p-c] != 0: return "⬆" case table[p-1]+a[gap][qVal] == table[p] && table[p-1] != 0: return "⬅" default: return "⌜" } } func (a SW) alignLetters(rSeq, qSeq alphabet.Letters, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a) if let < alpha.Len() { return nil, ErrMatrixWrongSize{Size: let, Len: alpha.Len()} } la := make([]int, 0, let*let) for _, row := range a { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([]int, r*c) var ( index = alpha.LetterIndex() maxS, maxI, maxJ = 0, 0, 0 score int ) for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1], i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1], j-1) } p := i*c + j diagScore := table[p-c-1] + la[rVal*let+qVal] upScore := table[p-c] + la[rVal*let] leftScore := table[p-1] + la[qVal] score = max3(diagScore, upScore, leftScore) switch { case score > 0: if score >= maxS && score == diagScore { maxS, maxI, maxJ = score, i, j } default: score = 0 } table[p] = score } } if debugSmith { drawSWTableLetters(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last := 0, diag i, j := maxI, maxJ loop: for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) switch p := i*c + j; table[p] { case 0: break loop case table[p-c-1] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c-1] i-- j-- last = diag case table[p-c] + la[rVal*let]: if last != up { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c] i-- last = up case table[p-1] + la[qVal]: if last != left { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-1] j-- last = left default: panic(fmt.Sprintf("align: sw internal error: no path at row: %d col:%d\n", i, j)) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/matrix/0000755000175000017500000000000014136731467014553 5ustar nileshnileshbiogo-1.0.4/align/matrix/generated.go0000644000175000017500000000132714136731467017043 0ustar nileshnileshpackage matrix import "github.com/biogo/biogo/alphabet" // Match generates a penalty matrix for a. // Perfect matches have penalty match. // Gaps have penalty gap. // Everything else has penalty mismatch. // For example, Match(alphabet.DNA, 0, 1, -1) generates the original Needleman-Wunsch penalty matrix. func Match(a alphabet.Alphabet, gap, match, mismatch int) [][]int { l := a.Len() arr := make([]int, l*l) g := a.IndexOf(a.Gap()) for i := 0; i < l; i++ { for j := 0; j < l; j++ { score := mismatch switch { case i == g, j == g: score = gap case i == j: score = match } arr[i*l+j] = score } } x := make([][]int, l) for i := 0; i < l; i++ { x[i] = arr[i*l : (i+1)*l] } return x } biogo-1.0.4/align/matrix/matrices/0000755000175000017500000000000014136731467016362 5ustar nileshnileshbiogo-1.0.4/align/matrix/matrices/BLOSUM550000644000175000017500000000411214136731467017456 0ustar nileshnilesh# Matrix made by matblas from blosum55.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 55 # Entropy = 0.5637, Expected = -0.4179 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 5 -2 -2 -2 0 -1 -1 0 -2 -2 -2 -1 -1 -3 -1 2 0 -4 -2 0 -2 -1 -1 -5 R -2 8 -1 -2 -4 1 0 -3 0 -4 -3 3 -2 -3 -3 -1 -1 -3 -2 -3 -1 0 -1 -5 N -2 -1 8 2 -3 0 0 0 1 -4 -4 0 -3 -4 -2 1 0 -5 -2 -4 4 0 -1 -5 D -2 -2 2 8 -4 0 2 -2 -1 -4 -5 -1 -4 -5 -2 0 -1 -5 -3 -4 5 1 -2 -5 C 0 -4 -3 -4 13 -4 -4 -3 -4 -2 -2 -4 -2 -3 -3 -1 -1 -4 -3 -1 -4 -4 -2 -5 Q -1 1 0 0 -4 7 2 -2 1 -4 -3 2 0 -4 -1 0 -1 -2 -1 -3 0 4 -1 -5 E -1 0 0 2 -4 2 7 -3 -1 -4 -4 1 -3 -4 -1 0 -1 -3 -2 -3 1 5 -1 -5 G 0 -3 0 -2 -3 -2 -3 8 -2 -5 -5 -2 -3 -4 -3 0 -2 -3 -4 -4 -1 -3 -2 -5 H -2 0 1 -1 -4 1 -1 -2 11 -4 -3 0 -2 -1 -3 -1 -2 -3 2 -4 0 0 -1 -5 I -2 -4 -4 -4 -2 -4 -4 -5 -4 6 2 -4 2 0 -3 -3 -1 -3 -1 4 -4 -4 -1 -5 L -2 -3 -4 -5 -2 -3 -4 -5 -3 2 6 -3 3 1 -4 -3 -2 -3 -1 1 -4 -3 -1 -5 K -1 3 0 -1 -4 2 1 -2 0 -4 -3 6 -2 -4 -1 0 -1 -4 -2 -3 0 1 -1 -5 M -1 -2 -3 -4 -2 0 -3 -3 -2 2 3 -2 8 0 -3 -2 -1 -2 -1 1 -3 -2 -1 -5 F -3 -3 -4 -5 -3 -4 -4 -4 -1 0 1 -4 0 9 -5 -3 -3 2 4 -1 -5 -4 -2 -5 P -1 -3 -2 -2 -3 -1 -1 -3 -3 -3 -4 -1 -3 -5 10 -1 -1 -5 -4 -3 -2 -1 -2 -5 S 2 -1 1 0 -1 0 0 0 -1 -3 -3 0 -2 -3 -1 5 2 -4 -2 -2 0 0 -1 -5 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -2 -1 -1 -3 -1 2 6 -3 -2 0 -1 -1 -1 -5 W -4 -3 -5 -5 -4 -2 -3 -3 -3 -3 -3 -4 -2 2 -5 -4 -3 15 3 -4 -5 -3 -3 -5 Y -2 -2 -2 -3 -3 -1 -2 -4 2 -1 -1 -2 -1 4 -4 -2 -2 3 9 -2 -3 -2 -1 -5 V 0 -3 -4 -4 -1 -3 -3 -4 -4 4 1 -3 1 -1 -3 -2 0 -4 -2 5 -4 -3 -1 -5 B -2 -1 4 5 -4 0 1 -1 0 -4 -4 0 -3 -5 -2 0 -1 -5 -3 -4 5 2 -1 -5 Z -1 0 0 1 -4 4 5 -3 0 -4 -3 1 -2 -4 -1 0 -1 -3 -2 -3 2 5 -1 -5 X -1 -1 -1 -2 -2 -1 -1 -2 -1 -1 -1 -1 -1 -2 -2 -1 -1 -3 -1 -1 -1 -1 -1 -5 * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 biogo-1.0.4/align/matrix/matrices/PAM4700000644000175000017500000000515714136731467017165 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 470 substitution matrix, scale = ln(2)/7 = 0.0990210 # # Expected score = -0.520, Entropy = 0.0942 bits # # Lowest score = -10, Highest score = 35 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 1 1 -2 0 1 2 -1 0 -2 0 -1 -4 1 1 1 -7 -4 0 1 0 0 -10 R -1 6 1 0 -4 2 0 -1 2 -2 -3 4 0 -5 0 0 0 4 -5 -2 0 1 0 -10 N 1 1 1 2 -4 1 2 1 1 -2 -3 1 -1 -4 0 1 0 -5 -3 -1 2 1 0 -10 D 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -6 0 1 0 -8 -5 -2 3 3 0 -10 C -2 -4 -4 -5 22 -6 -5 -3 -4 -2 -6 -6 -6 -4 -3 0 -2 -10 2 -2 -5 -6 -3 -10 Q 0 2 1 2 -6 3 2 0 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -1 2 2 0 -10 E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -6 0 1 0 -8 -5 -1 2 3 0 -10 G 2 -1 1 1 -3 0 1 5 -1 -2 -4 -1 -2 -6 1 1 1 -8 -6 -1 1 1 0 -10 H -1 2 1 1 -4 3 1 -1 5 -2 -2 1 -1 -2 0 0 0 -3 0 -2 1 2 0 -10 I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 4 -2 3 2 -1 -1 0 -5 0 3 -2 -2 0 -10 L -2 -3 -3 -4 -6 -2 -3 -4 -2 4 8 -3 5 4 -2 -2 -1 -2 1 3 -3 -3 -1 -10 K 0 4 1 1 -6 1 1 -1 1 -2 -3 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -10 M -1 0 -1 -2 -6 -1 -2 -2 -1 3 5 0 4 1 -1 -1 0 -4 -1 2 -2 -1 0 -10 F -4 -5 -4 -6 -4 -5 -6 -6 -2 2 4 -5 1 14 -5 -4 -3 3 13 0 -5 -5 -2 -10 P 1 0 0 0 -3 1 0 1 0 -1 -2 0 -1 -5 5 1 1 -6 -5 -1 0 1 0 -10 S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -4 1 1 1 -4 -3 -1 1 0 0 -10 T 1 0 0 0 -2 0 0 1 0 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -10 W -7 4 -5 -8 -10 -5 -8 -8 -3 -5 -2 -3 -4 3 -6 -4 -6 35 2 -7 -6 -7 -4 -10 Y -4 -5 -3 -5 2 -4 -5 -6 0 0 1 -5 -1 13 -5 -3 -3 2 16 -2 -4 -5 -2 -10 V 0 -2 -1 -2 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -7 -2 4 -1 -1 0 -10 B 1 0 2 3 -5 2 2 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -1 2 2 0 -10 Z 0 1 1 3 -6 2 3 1 2 -2 -3 1 -1 -5 1 0 0 -7 -5 -1 2 3 0 -10 X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 0 -10 * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 biogo-1.0.4/align/matrix/matrices/README.matrices0000644000175000017500000000150414136731467021050 0ustar nileshnileshREADME for blast/matrices. Last updated 09/10/12. This directory contains matrices produced by various programs. These matrices should be useable with BLAST and other programs. BLAST binaries produced within the last few years store matrix information for BLOSUM45, BLOSUM50, BLOSUM62, BLOSUM80, BLOSUM90, PAM30, PAM70, and PAM250 as part of the program and do not need external files. The directory also contains a tar ball (pam.tar.gz) with source code to produce the PAM matrices. The output from this program differs from the PAM matrices in this directory. It does not produce comments and does not produce scores for B, Z, X or *. In the near future, the NCBI plans to update this code so as to produce comments similar to those of the PAM matrices in this directory and also to include values for B, Z, X and *. biogo-1.0.4/align/matrix/matrices/PAM3300000644000175000017500000000402414136731467017150 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 330 substitution matrix, scale = ln(2)/4 = 0.173287 # # Expected score = -0.693, Entropy = 0.210 bits # # Lowest score = -8, Highest score = 22 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 0 1 -1 0 -2 -1 -1 -3 1 1 1 -6 -3 0 0 0 0 -8 R -1 6 0 -1 -4 1 -1 -2 2 -2 -3 4 0 -4 0 0 -1 3 -4 -2 0 0 -1 -8 N 0 0 2 2 -4 1 2 1 1 -2 -3 1 -1 -3 0 1 0 -4 -2 -1 2 1 0 -8 D 1 -1 2 3 -5 2 3 1 1 -2 -4 0 -2 -5 0 0 0 -7 -4 -2 3 3 0 -8 C -2 -4 -4 -5 15 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3 0 -2 -8 1 -2 -4 -5 -3 -8 Q 0 1 1 2 -5 3 2 -1 3 -2 -2 1 -1 -4 0 0 0 -5 -4 -2 1 3 0 -8 E 0 -1 2 3 -5 2 3 1 1 -2 -3 0 -2 -5 0 0 0 -7 -4 -2 2 3 0 -8 G 1 -2 1 1 -3 -1 1 5 -2 -2 -4 -1 -2 -5 0 1 0 -7 -5 -1 1 0 -1 -8 H -1 2 1 1 -3 3 1 -2 6 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 0 -8 I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 2 1 -2 -1 0 -5 0 4 -2 -2 0 -8 L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 6 -3 4 3 -2 -3 -1 -2 0 2 -3 -2 -1 -8 K -1 4 1 0 -5 1 0 -1 0 -2 -3 5 0 -5 -1 0 0 -3 -4 -2 1 1 -1 -8 M -1 0 -1 -2 -5 -1 -2 -2 -2 2 4 0 5 1 -2 -1 0 -4 -2 2 -2 -1 0 -8 F -3 -4 -3 -5 -4 -4 -5 -5 -2 1 3 -5 1 10 -5 -3 -3 1 9 -1 -4 -5 -2 -8 P 1 0 0 0 -3 0 0 0 0 -2 -2 -1 -2 -5 6 1 1 -6 -5 -1 0 0 0 -8 S 1 0 1 0 0 0 0 1 -1 -1 -3 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -8 T 1 -1 0 0 -2 0 0 0 -1 0 -1 0 0 -3 1 1 2 -5 -3 0 0 0 0 -8 W -6 3 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4 1 -6 -3 -5 22 1 -6 -5 -6 -4 -8 Y -3 -4 -2 -4 1 -4 -4 -5 0 0 0 -4 -2 9 -5 -3 -3 1 12 -2 -3 -4 -2 -8 V 0 -2 -1 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 0 -8 B 0 0 2 3 -4 1 2 1 1 -2 -3 1 -2 -4 0 1 0 -5 -3 -2 2 2 0 -8 Z 0 0 1 3 -5 3 3 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -2 2 3 0 -8 X 0 -1 0 0 -3 0 0 -1 0 0 -1 -1 0 -2 0 0 0 -4 -2 0 0 0 -1 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/BLOSUM400000644000175000017500000000411214136731467017450 0ustar nileshnilesh# Matrix made by matblas from blosum40.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/4 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 40 # Entropy = 0.2851, Expected = -0.2090 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 5 -2 -1 -1 -2 0 -1 1 -2 -1 -2 -1 -1 -3 -2 1 0 -3 -2 0 -1 -1 0 -6 R -2 9 0 -1 -3 2 -1 -3 0 -3 -2 3 -1 -2 -3 -1 -2 -2 -1 -2 -1 0 -1 -6 N -1 0 8 2 -2 1 -1 0 1 -2 -3 0 -2 -3 -2 1 0 -4 -2 -3 4 0 -1 -6 D -1 -1 2 9 -2 -1 2 -2 0 -4 -3 0 -3 -4 -2 0 -1 -5 -3 -3 6 1 -1 -6 C -2 -3 -2 -2 16 -4 -2 -3 -4 -4 -2 -3 -3 -2 -5 -1 -1 -6 -4 -2 -2 -3 -2 -6 Q 0 2 1 -1 -4 8 2 -2 0 -3 -2 1 -1 -4 -2 1 -1 -1 -1 -3 0 4 -1 -6 E -1 -1 -1 2 -2 2 7 -3 0 -4 -2 1 -2 -3 0 0 -1 -2 -2 -3 1 5 -1 -6 G 1 -3 0 -2 -3 -2 -3 8 -2 -4 -4 -2 -2 -3 -1 0 -2 -2 -3 -4 -1 -2 -1 -6 H -2 0 1 0 -4 0 0 -2 13 -3 -2 -1 1 -2 -2 -1 -2 -5 2 -4 0 0 -1 -6 I -1 -3 -2 -4 -4 -3 -4 -4 -3 6 2 -3 1 1 -2 -2 -1 -3 0 4 -3 -4 -1 -6 L -2 -2 -3 -3 -2 -2 -2 -4 -2 2 6 -2 3 2 -4 -3 -1 -1 0 2 -3 -2 -1 -6 K -1 3 0 0 -3 1 1 -2 -1 -3 -2 6 -1 -3 -1 0 0 -2 -1 -2 0 1 -1 -6 M -1 -1 -2 -3 -3 -1 -2 -2 1 1 3 -1 7 0 -2 -2 -1 -2 1 1 -3 -2 0 -6 F -3 -2 -3 -4 -2 -4 -3 -3 -2 1 2 -3 0 9 -4 -2 -1 1 4 0 -3 -4 -1 -6 P -2 -3 -2 -2 -5 -2 0 -1 -2 -2 -4 -1 -2 -4 11 -1 0 -4 -3 -3 -2 -1 -2 -6 S 1 -1 1 0 -1 1 0 0 -1 -2 -3 0 -2 -2 -1 5 2 -5 -2 -1 0 0 0 -6 T 0 -2 0 -1 -1 -1 -1 -2 -2 -1 -1 0 -1 -1 0 2 6 -4 -1 1 0 -1 0 -6 W -3 -2 -4 -5 -6 -1 -2 -2 -5 -3 -1 -2 -2 1 -4 -5 -4 19 3 -3 -4 -2 -2 -6 Y -2 -1 -2 -3 -4 -1 -2 -3 2 0 0 -1 1 4 -3 -2 -1 3 9 -1 -3 -2 -1 -6 V 0 -2 -3 -3 -2 -3 -3 -4 -4 4 2 -2 1 0 -3 -1 1 -3 -1 5 -3 -3 -1 -6 B -1 -1 4 6 -2 0 1 -1 0 -3 -3 0 -3 -3 -2 0 0 -4 -3 -3 5 2 -1 -6 Z -1 0 0 1 -3 4 5 -2 0 -4 -2 1 -2 -4 -1 0 -1 -2 -2 -3 2 5 -1 -6 X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 0 -1 -2 0 0 -2 -1 -1 -1 -1 -1 -6 * -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 1 biogo-1.0.4/align/matrix/matrices/PAM120.cdi0000644000175000017500000000514314136731467017706 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 120 substitution matrix, scale = 0.0693200 # # Expected score = -8.22, Entropy = 0.979 bits # # Lowest score = -42, Highest score = 62 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 16 -14 -3 -2 -14 -6 -1 3 -13 -6 -14 -12 -9 -21 3 6 6 -33 -20 0 -2 -3 -4 -42 R -14 32 -6 -16 -20 3 -14 -20 4 -12 -20 12 -5 -25 -4 -4 -10 4 -26 -17 -11 -4 -9 -42 N -3 -6 20 12 -23 -1 4 -2 8 -12 -18 4 -15 -21 -8 5 1 -22 -10 -15 16 2 -4 -42 D -2 -16 12 25 -33 4 17 -2 -2 -16 -27 -5 -21 -35 -13 -2 -6 -39 -26 -17 20 13 -8 -42 C -14 -20 -23 -33 44 -33 -33 -22 -20 -14 -37 -34 -32 -29 -18 -2 -16 -42 -4 -13 -28 -33 -20 -42 Q -6 3 -1 4 -33 28 12 -13 13 -16 -11 0 -7 -30 -2 -8 -9 -30 -26 -14 2 21 -6 -42 E -1 -14 4 17 -33 12 24 -4 -3 -13 -22 -5 -15 -34 -9 -5 -8 -42 -24 -13 13 20 -7 -42 G 3 -20 -2 -2 -22 -13 -4 25 -18 -20 -26 -15 -19 -26 -9 3 -7 -39 -32 -11 -2 -8 -9 -42 H -13 4 8 -2 -20 13 -3 -18 35 -19 -13 -8 -19 -13 -5 -9 -13 -17 -3 -15 4 6 -8 -42 I -6 -12 -12 -16 -14 -16 -13 -20 -19 28 6 -13 7 1 -17 -12 -1 -32 -11 17 -14 -14 -7 -42 L -14 -20 -18 -27 -37 -11 -22 -26 -13 6 27 -19 13 2 -17 -19 -13 -13 -12 3 -22 -16 -11 -42 K -12 12 4 -5 -34 0 -5 -15 -8 -13 -19 25 2 -33 -12 -4 -3 -24 -25 -19 0 -3 -8 -42 M -9 -5 -15 -21 -32 -7 -15 -19 -19 7 13 2 40 -4 -16 -11 -6 -28 -21 5 -18 -11 -8 -42 F -21 -25 -21 -35 -29 -30 -34 -26 -13 1 2 -33 -4 38 -26 -17 -20 -5 22 -13 -27 -32 -17 -42 P 3 -4 -8 -13 -18 -2 -9 -9 -5 -17 -17 -12 -16 -26 31 3 -3 -33 -31 -11 -11 -5 -8 -42 S 6 -4 5 -2 -2 -8 -5 3 -9 -12 -19 -4 -11 -17 3 16 8 -12 -16 -10 1 -6 -3 -42 T 6 -10 1 -6 -16 -9 -8 -7 -13 -1 -13 -3 -6 -20 -3 8 21 -30 -16 -1 -2 -9 -4 -42 W -33 4 -22 -39 -42 -30 -42 -39 -17 -32 -13 -24 -28 -5 -33 -12 -30 62 -8 -38 -29 -35 -25 -42 Y -20 -26 -10 -26 -4 -26 -24 -32 -3 -11 -12 -25 -21 22 -31 -16 -16 -8 42 -17 -16 -25 -16 -42 V 0 -17 -15 -17 -13 -14 -13 -11 -15 17 3 -19 5 -13 -11 -10 -1 -38 -17 25 -16 -14 -7 -42 B -2 -11 16 20 -28 2 13 -2 4 -14 -22 0 -18 -27 -11 1 -2 -29 -16 -16 18 9 -6 -42 Z -3 -4 2 13 -33 21 20 -8 6 -14 -16 -3 -11 -32 -5 -6 -9 -35 -25 -14 9 21 -7 -42 X -4 -9 -4 -8 -20 -6 -7 -9 -8 -7 -11 -8 -8 -17 -8 -3 -4 -25 -16 -7 -6 -7 -8 -42 * -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 1 biogo-1.0.4/align/matrix/matrices/PAM3200000644000175000017500000000402414136731467017147 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 320 substitution matrix, scale = ln(2)/4 = 0.173287 # # Expected score = -0.741, Entropy = 0.224 bits # # Lowest score = -8, Highest score = 22 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 0 1 -1 0 -2 -1 -1 -4 1 1 1 -6 -4 0 0 0 0 -8 R -1 6 0 -1 -4 1 -1 -2 2 -2 -3 4 0 -5 0 0 -1 3 -4 -2 0 0 -1 -8 N 0 0 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 0 -4 -2 -2 2 1 0 -8 D 1 -1 2 4 -5 2 3 1 1 -2 -4 0 -2 -6 0 0 0 -7 -5 -2 3 3 -1 -8 C -2 -4 -4 -5 15 -5 -5 -3 -4 -2 -6 -6 -5 -4 -3 0 -2 -8 1 -2 -4 -5 -3 -8 Q 0 1 1 2 -5 4 2 -1 3 -2 -2 1 -1 -5 0 0 0 -5 -4 -2 2 3 0 -8 E 0 -1 2 3 -5 2 4 1 1 -2 -3 0 -2 -5 0 0 0 -7 -5 -2 3 3 0 -8 G 1 -2 1 1 -3 -1 1 5 -2 -2 -4 -1 -3 -5 0 1 0 -7 -5 -1 1 0 -1 -8 H -1 2 2 1 -4 3 1 -2 6 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 0 -8 I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 2 1 -2 -1 0 -5 -1 4 -2 -2 0 -8 L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 7 -3 4 3 -2 -3 -2 -2 0 2 -3 -3 -1 -8 K -1 4 1 0 -6 1 0 -1 0 -2 -3 5 0 -5 -1 0 0 -3 -5 -2 1 1 -1 -8 M -1 0 -2 -2 -5 -1 -2 -3 -2 2 4 0 6 1 -2 -1 -1 -4 -2 2 -2 -2 0 -8 F -4 -5 -4 -6 -4 -5 -5 -5 -2 1 3 -5 1 11 -5 -3 -3 1 9 -1 -5 -5 -2 -8 P 1 0 0 0 -3 0 0 0 0 -2 -2 -1 -2 -5 6 1 1 -6 -5 -1 0 0 0 -8 S 1 0 1 0 0 0 0 1 -1 -1 -3 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -8 T 1 -1 0 0 -2 0 0 0 -1 0 -2 0 -1 -3 1 1 2 -5 -3 0 0 0 0 -8 W -6 3 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4 1 -6 -3 -5 22 1 -6 -6 -6 -4 -8 Y -4 -4 -2 -5 1 -4 -5 -5 0 -1 0 -5 -2 9 -5 -3 -3 1 12 -2 -3 -4 -2 -8 V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 0 -8 B 0 0 2 3 -4 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -6 -3 -2 2 2 0 -8 Z 0 0 1 3 -5 3 3 0 2 -2 -3 1 -2 -5 0 0 0 -6 -4 -2 2 3 0 -8 X 0 -1 0 -1 -3 0 0 -1 0 0 -1 -1 0 -2 0 0 0 -4 -2 0 0 0 -1 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/PAM4800000644000175000017500000000515714136731467017166 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 480 substitution matrix, scale = ln(2)/7 = 0.0990210 # # Expected score = -0.494, Entropy = 0.0893 bits # # Lowest score = -10, Highest score = 35 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 1 1 -2 0 1 2 0 0 -2 0 -1 -4 1 1 1 -7 -4 0 1 0 0 -10 R -1 5 1 0 -4 2 0 -1 2 -2 -3 4 0 -5 0 0 0 4 -4 -2 0 1 0 -10 N 1 1 1 2 -4 1 2 1 1 -1 -3 1 -1 -4 0 1 0 -5 -3 -1 2 1 0 -10 D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -6 0 1 0 -7 -5 -1 2 2 0 -10 C -2 -4 -4 -5 22 -5 -5 -3 -4 -2 -6 -6 -5 -4 -3 0 -2 -10 2 -2 -4 -5 -3 -10 Q 0 2 1 2 -5 3 2 0 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -1 2 2 0 -10 E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -8 -5 -1 2 3 0 -10 G 2 -1 1 1 -3 0 1 4 -1 -2 -4 -1 -2 -5 1 1 1 -8 -5 -1 1 1 0 -10 H 0 2 1 1 -4 3 1 -1 5 -2 -2 1 -1 -2 0 0 0 -3 0 -2 1 2 0 -10 I 0 -2 -1 -2 -2 -2 -2 -2 -2 4 4 -2 3 2 -1 -1 0 -5 0 3 -2 -2 0 -10 L -2 -3 -3 -3 -6 -2 -3 -4 -2 4 7 -3 5 4 -2 -2 -1 -2 1 3 -3 -3 -1 -10 K 0 4 1 1 -6 1 1 -1 1 -2 -3 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -10 M -1 0 -1 -2 -5 -1 -2 -2 -1 3 5 0 4 1 -1 -1 0 -4 -1 2 -2 -1 0 -10 F -4 -5 -4 -6 -4 -5 -5 -5 -2 2 4 -5 1 14 -5 -4 -3 3 13 0 -5 -5 -2 -10 P 1 0 0 0 -3 1 0 1 0 -1 -2 0 -1 -5 5 1 1 -6 -5 -1 0 1 0 -10 S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -10 T 1 0 0 0 -2 0 0 1 0 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -10 W -7 4 -5 -7 -10 -5 -8 -8 -3 -5 -2 -3 -4 3 -6 -3 -6 35 2 -7 -6 -6 -4 -10 Y -4 -4 -3 -5 2 -4 -5 -5 0 0 1 -5 -1 13 -5 -3 -3 2 16 -2 -4 -5 -2 -10 V 0 -2 -1 -1 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -7 -2 3 -1 -1 0 -10 B 1 0 2 2 -4 2 2 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -1 2 2 0 -10 Z 0 1 1 2 -5 2 3 1 2 -2 -3 1 -1 -5 1 0 0 -6 -5 -1 2 2 0 -10 X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 0 -10 * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 biogo-1.0.4/align/matrix/matrices/PAM2100000644000175000017500000000402314136731467017144 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 210 substitution matrix, scale = ln(2)/3 = 0.231049 # # Expected score = -1.12, Entropy = 0.470 bits # # Lowest score = -9, Highest score = 18 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -2 0 0 -2 -1 0 1 -2 -1 -2 -2 -1 -4 1 1 1 -7 -4 0 0 0 0 -9 R -2 7 0 -2 -4 1 -2 -3 2 -2 -4 4 -1 -5 0 0 -1 2 -5 -3 -1 0 -1 -9 N 0 0 3 2 -4 1 2 0 2 -2 -3 1 -2 -4 -1 1 0 -5 -2 -2 3 1 0 -9 D 0 -2 2 5 -6 2 4 0 1 -3 -5 0 -3 -7 -1 0 0 -8 -5 -3 4 3 -1 -9 C -2 -4 -4 -6 12 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -3 -9 0 -2 -5 -6 -4 -9 Q -1 1 1 2 -6 5 3 -2 3 -3 -2 1 -1 -6 0 -1 -1 -6 -5 -2 1 4 -1 -9 E 0 -2 2 4 -6 3 5 0 0 -2 -4 0 -3 -6 -1 0 -1 -8 -5 -2 3 4 -1 -9 G 1 -3 0 0 -4 -2 0 5 -3 -3 -5 -2 -3 -5 -1 1 0 -8 -6 -2 0 -1 -1 -9 H -2 2 2 1 -4 3 0 -3 8 -3 -2 0 -3 -2 0 -1 -2 -3 0 -3 1 2 -1 -9 I -1 -2 -2 -3 -3 -3 -2 -3 -3 5 2 -2 2 1 -3 -2 0 -6 -1 4 -3 -3 -1 -9 L -2 -4 -3 -5 -7 -2 -4 -5 -2 2 7 -3 4 2 -3 -3 -2 -2 -1 2 -4 -3 -2 -9 K -2 4 1 0 -6 1 0 -2 0 -2 -3 5 1 -6 -2 0 0 -4 -5 -3 0 0 -1 -9 M -1 -1 -2 -3 -6 -1 -3 -3 -3 2 4 1 8 0 -3 -2 -1 -5 -3 2 -3 -2 -1 -9 F -4 -5 -4 -7 -5 -6 -6 -5 -2 1 2 -6 0 10 -5 -4 -4 0 7 -2 -5 -6 -3 -9 P 1 0 -1 -1 -3 0 -1 -1 0 -3 -3 -2 -3 -5 7 1 0 -7 -6 -2 -1 0 -1 -9 S 1 0 1 0 0 -1 0 1 -1 -2 -3 0 -2 -4 1 2 2 -3 -3 -1 1 0 0 -9 T 1 -1 0 0 -3 -1 -1 0 -2 0 -2 0 -1 -4 0 2 3 -6 -3 0 0 -1 0 -9 W -7 2 -5 -8 -9 -6 -8 -8 -3 -6 -2 -4 -5 0 -7 -3 -6 18 -1 -7 -6 -7 -5 -9 Y -4 -5 -2 -5 0 -5 -5 -6 0 -1 -1 -5 -3 7 -6 -3 -3 -1 11 -3 -4 -5 -3 -9 V 0 -3 -2 -3 -2 -2 -2 -2 -3 4 2 -3 2 -2 -2 -1 0 -7 -3 5 -2 -2 -1 -9 B 0 -1 3 4 -5 1 3 0 1 -3 -4 0 -3 -5 -1 1 0 -6 -4 -2 3 2 -1 -9 Z 0 0 1 3 -6 4 4 -1 2 -3 -3 0 -2 -6 0 0 -1 -7 -5 -2 2 4 -1 -9 X 0 -1 0 -1 -4 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -5 -3 -1 -1 -1 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/PAM3900000644000175000017500000000402414136731467017156 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 390 substitution matrix, scale = ln(2)/5 = 0.138629 # # Expected score = -0.581, Entropy = 0.147 bits # # Lowest score = -9, Highest score = 26 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 1 -1 0 -2 -1 -1 -3 1 1 1 -6 -4 0 1 0 0 -9 R -1 6 1 0 -4 1 0 -2 2 -2 -3 4 0 -5 0 0 0 3 -4 -2 0 1 0 -9 N 0 1 1 2 -4 1 2 1 1 -2 -3 1 -1 -4 0 1 0 -4 -3 -1 2 1 0 -9 D 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -5 0 1 0 -7 -5 -2 3 3 0 -9 C -2 -4 -4 -5 17 -5 -5 -3 -4 -2 -6 -5 -5 -4 -3 0 -2 -9 1 -2 -4 -5 -3 -9 Q 0 1 1 2 -5 3 2 0 3 -2 -2 1 -1 -4 0 0 0 -5 -4 -1 2 3 0 -9 E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 0 0 -7 -5 -1 2 3 0 -9 G 1 -2 1 1 -3 0 1 5 -1 -2 -4 -1 -2 -5 0 1 1 -7 -5 -1 1 0 0 -9 H -1 2 1 1 -4 3 1 -1 6 -2 -2 1 -2 -2 0 0 -1 -3 0 -2 1 2 0 -9 I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 3 2 -1 -1 0 -5 0 4 -2 -2 0 -9 L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 7 -3 4 3 -2 -2 -1 -2 0 3 -3 -2 -1 -9 K -1 4 1 1 -5 1 1 -1 1 -2 -3 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 M -1 0 -1 -2 -5 -1 -2 -2 -2 3 4 0 5 1 -2 -1 0 -4 -1 2 -2 -1 0 -9 F -3 -5 -4 -5 -4 -4 -5 -5 -2 2 3 -5 1 12 -5 -3 -3 2 10 0 -5 -5 -2 -9 P 1 0 0 0 -3 0 0 0 0 -1 -2 0 -2 -5 5 1 1 -6 -5 -1 0 0 0 -9 S 1 0 1 1 0 0 0 1 0 -1 -2 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -9 T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 1 -5 -3 0 0 0 0 -9 W -6 3 -4 -7 -9 -5 -7 -7 -3 -5 -2 -3 -4 2 -6 -3 -5 26 1 -6 -6 -6 -4 -9 Y -4 -4 -3 -5 1 -4 -5 -5 0 0 0 -5 -1 10 -5 -3 -3 1 13 -2 -4 -4 -2 -9 V 0 -2 -1 -2 -2 -1 -1 -1 -2 4 3 -2 2 0 -1 -1 0 -6 -2 4 -2 -1 0 -9 B 1 0 2 3 -4 2 2 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -2 2 2 0 -9 Z 0 1 1 3 -5 3 3 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -1 2 3 0 -9 X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/PAM2500000644000175000017500000000402414136731467017151 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 250 substitution matrix, scale = ln(2)/3 = 0.231049 # # Expected score = -0.844, Entropy = 0.354 bits # # Lowest score = -8, Highest score = 17 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -2 0 0 -2 0 0 1 -1 -1 -2 -1 -1 -3 1 1 1 -6 -3 0 0 0 0 -8 R -2 6 0 -1 -4 1 -1 -3 2 -2 -3 3 0 -4 0 0 -1 2 -4 -2 -1 0 -1 -8 N 0 0 2 2 -4 1 1 0 2 -2 -3 1 -2 -3 0 1 0 -4 -2 -2 2 1 0 -8 D 0 -1 2 4 -5 2 3 1 1 -2 -4 0 -3 -6 -1 0 0 -7 -4 -2 3 3 -1 -8 C -2 -4 -4 -5 12 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3 0 -2 -8 0 -2 -4 -5 -3 -8 Q 0 1 1 2 -5 4 2 -1 3 -2 -2 1 -1 -5 0 -1 -1 -5 -4 -2 1 3 -1 -8 E 0 -1 1 3 -5 2 4 0 1 -2 -3 0 -2 -5 -1 0 0 -7 -4 -2 3 3 -1 -8 G 1 -3 0 1 -3 -1 0 5 -2 -3 -4 -2 -3 -5 0 1 0 -7 -5 -1 0 0 -1 -8 H -1 2 2 1 -3 3 1 -2 6 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 -1 -8 I -1 -2 -2 -2 -2 -2 -2 -3 -2 5 2 -2 2 1 -2 -1 0 -5 -1 4 -2 -2 -1 -8 L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 6 -3 4 2 -3 -3 -2 -2 -1 2 -3 -3 -1 -8 K -1 3 1 0 -5 1 0 -2 0 -2 -3 5 0 -5 -1 0 0 -3 -4 -2 1 0 -1 -8 M -1 0 -2 -3 -5 -1 -2 -3 -2 2 4 0 6 0 -2 -2 -1 -4 -2 2 -2 -2 -1 -8 F -3 -4 -3 -6 -4 -5 -5 -5 -2 1 2 -5 0 9 -5 -3 -3 0 7 -1 -4 -5 -2 -8 P 1 0 0 -1 -3 0 -1 0 0 -2 -3 -1 -2 -5 6 1 0 -6 -5 -1 -1 0 -1 -8 S 1 0 1 0 0 -1 0 1 -1 -1 -3 0 -2 -3 1 2 1 -2 -3 -1 0 0 0 -8 T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 0 1 3 -5 -3 0 0 -1 0 -8 W -6 2 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4 0 -6 -2 -5 17 0 -6 -5 -6 -4 -8 Y -3 -4 -2 -4 0 -4 -4 -5 0 -1 -1 -4 -2 7 -5 -3 -3 0 10 -2 -3 -4 -2 -8 V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 -1 -8 B 0 -1 2 3 -4 1 3 0 1 -2 -3 1 -2 -4 -1 0 0 -5 -3 -2 3 2 -1 -8 Z 0 0 1 3 -5 3 3 0 2 -2 -3 0 -2 -5 0 0 -1 -6 -4 -2 2 3 -1 -8 X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -1 -1 -1 -2 -1 0 0 -4 -2 -1 -1 -1 -1 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/PAM4100000644000175000017500000000515514136731467017155 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 410 substitution matrix, scale = ln(2)/6 = 0.115525 # # Expected score = -0.617, Entropy = 0.131 bits # # Lowest score = -10, Highest score = 31 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 2 -1 0 -2 -1 -1 -4 1 1 1 -7 -4 0 1 0 0 -10 R -1 6 1 0 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 4 -5 -2 0 1 0 -10 N 0 1 1 2 -4 1 2 1 1 -2 -3 1 -2 -4 0 1 1 -5 -3 -1 2 2 0 -10 D 1 0 2 3 -6 2 3 1 1 -2 -4 1 -2 -6 0 1 0 -8 -5 -2 3 3 0 -10 C -2 -4 -4 -6 20 -6 -6 -4 -4 -3 -7 -6 -6 -4 -3 0 -2 -10 1 -2 -5 -6 -3 -10 Q 0 2 1 2 -6 3 2 0 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -2 2 3 0 -10 E 1 0 2 3 -6 2 3 1 1 -2 -3 1 -2 -6 0 1 0 -8 -5 -2 3 3 0 -10 G 2 -2 1 1 -4 0 1 5 -1 -2 -4 -1 -3 -6 0 1 1 -8 -6 -1 1 0 0 -10 H -1 2 1 1 -4 3 1 -1 6 -2 -2 1 -2 -2 0 0 -1 -3 0 -2 1 2 0 -10 I 0 -2 -2 -2 -3 -2 -2 -2 -2 4 4 -2 3 2 -2 -1 0 -6 0 4 -2 -2 0 -10 L -2 -3 -3 -4 -7 -2 -3 -4 -2 4 8 -3 5 4 -3 -3 -1 -2 1 3 -3 -3 -1 -10 K -1 4 1 1 -6 1 1 -1 1 -2 -3 5 0 -6 0 0 0 -3 -5 -2 1 1 0 -10 M -1 0 -2 -2 -6 -1 -2 -3 -2 3 5 0 5 1 -2 -1 0 -4 -2 2 -2 -2 0 -10 F -4 -5 -4 -6 -4 -5 -6 -6 -2 2 4 -6 1 14 -5 -4 -3 2 12 0 -5 -5 -2 -10 P 1 0 0 0 -3 1 0 0 0 -2 -3 0 -2 -5 6 1 1 -7 -5 -1 0 0 0 -10 S 1 0 1 1 0 0 1 1 0 -1 -3 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -10 T 1 0 1 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 2 -6 -3 0 0 0 0 -10 W -7 4 -5 -8 -10 -5 -8 -8 -3 -6 -2 -3 -4 2 -7 -3 -6 31 2 -7 -6 -7 -4 -10 Y -4 -5 -3 -5 1 -4 -5 -6 0 0 1 -5 -2 12 -5 -3 -3 2 15 -2 -4 -5 -2 -10 V 0 -2 -1 -2 -2 -2 -2 -1 -2 4 3 -2 2 0 -1 -1 0 -7 -2 4 -2 -2 0 -10 B 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -2 2 2 0 -10 Z 0 1 2 3 -6 3 3 0 2 -2 -3 1 -2 -5 0 0 0 -7 -5 -2 2 3 0 -10 X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -10 * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 biogo-1.0.4/align/matrix/matrices/BLOSUM600000644000175000017500000000411214136731467017452 0ustar nileshnilesh# Matrix made by matblas from blosum60.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 60 # Entropy = 0.6603, Expected = -0.4917 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 4 -1 -1 -2 0 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 0 -4 R -1 5 0 -1 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -2 -1 0 -1 -4 N -1 0 6 1 -2 0 0 0 1 -3 -3 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1 -4 D -2 -1 1 6 -3 0 2 -1 -1 -3 -3 -1 -3 -3 -1 0 -1 -4 -3 -3 4 1 -1 -4 C 0 -3 -2 -3 9 -3 -3 -2 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4 Q -1 1 0 0 -3 5 2 -2 1 -3 -2 1 0 -3 -1 0 -1 -2 -1 -2 0 3 -1 -4 E -1 0 0 2 -3 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4 G 0 -2 0 -1 -2 -2 -2 6 -2 -3 -4 -1 -2 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 -4 H -2 0 1 -1 -3 1 0 -2 7 -3 -3 -1 -1 -1 -2 -1 -2 -2 2 -3 0 0 -1 -4 I -1 -3 -3 -3 -1 -3 -3 -3 -3 4 2 -3 1 0 -3 -2 -1 -2 -1 3 -3 -3 -1 -4 L -1 -2 -3 -3 -1 -2 -3 -4 -3 2 4 -2 2 0 -3 -2 -1 -2 -1 1 -3 -2 -1 -4 K -1 2 0 -1 -3 1 1 -1 -1 -3 -2 4 -1 -3 -1 0 -1 -3 -2 -2 0 1 -1 -4 M -1 -1 -2 -3 -1 0 -2 -2 -1 1 2 -1 5 0 -2 -1 -1 -1 -1 1 -3 -1 -1 -4 F -2 -3 -3 -3 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -1 -4 P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4 7 -1 -1 -4 -3 -2 -2 -1 -2 -4 S 1 -1 1 0 -1 0 0 0 -1 -2 -2 0 -1 -2 -1 4 1 -3 -2 -2 0 0 0 -4 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 4 -2 -2 0 0 -1 0 -4 W -3 -3 -4 -4 -2 -2 -3 -2 -2 -2 -2 -3 -1 1 -4 -3 -2 10 2 -3 -4 -2 -2 -4 Y -2 -2 -2 -3 -2 -1 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 6 -1 -2 -2 -1 -4 V 0 -2 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1 -4 B -2 -1 3 4 -3 0 1 -1 0 -3 -3 0 -3 -3 -2 0 0 -4 -2 -3 4 1 -1 -4 Z -1 0 0 1 -3 3 4 -2 0 -3 -2 1 -1 -3 -1 0 -1 -2 -2 -2 1 3 -1 -4 X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 0 0 -2 -1 -1 -1 -1 -1 -4 * -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 1 biogo-1.0.4/align/matrix/matrices/PAM2300000644000175000017500000000402414136731467017147 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 230 substitution matrix, scale = ln(2)/3 = 0.231049 # # Expected score = -0.991, Entropy = 0.407 bits # # Lowest score = -8, Highest score = 17 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -2 0 0 -2 -1 0 1 -2 -1 -2 -1 -1 -4 1 1 1 -6 -4 0 0 0 0 -8 R -2 7 0 -2 -4 1 -1 -3 2 -2 -3 4 -1 -5 0 0 -1 2 -5 -3 -1 0 -1 -8 N 0 0 2 2 -4 1 1 0 2 -2 -3 1 -2 -4 -1 1 0 -4 -2 -2 2 1 0 -8 D 0 -2 2 4 -6 2 4 1 1 -3 -4 0 -3 -6 -1 0 0 -7 -5 -2 3 3 -1 -8 C -2 -4 -4 -6 12 -6 -6 -4 -4 -2 -7 -6 -6 -5 -3 0 -2 -8 0 -2 -5 -6 -3 -8 Q -1 1 1 2 -6 5 3 -1 3 -2 -2 1 -1 -5 0 -1 -1 -5 -4 -2 1 4 -1 -8 E 0 -1 1 4 -6 3 4 0 1 -2 -4 0 -2 -6 -1 0 -1 -8 -5 -2 3 4 -1 -8 G 1 -3 0 1 -4 -1 0 5 -2 -3 -4 -2 -3 -5 -1 1 0 -7 -6 -2 0 -1 -1 -8 H -2 2 2 1 -4 3 1 -2 7 -3 -2 0 -2 -2 0 -1 -2 -3 0 -2 1 2 -1 -8 I -1 -2 -2 -3 -2 -2 -2 -3 -3 5 2 -2 2 1 -2 -2 0 -6 -1 4 -2 -2 -1 -8 L -2 -3 -3 -4 -7 -2 -4 -4 -2 2 6 -3 4 2 -3 -3 -2 -2 -1 2 -4 -3 -2 -8 K -1 4 1 0 -6 1 0 -2 0 -2 -3 5 0 -6 -1 0 0 -4 -5 -3 1 0 -1 -8 M -1 -1 -2 -3 -6 -1 -2 -3 -2 2 4 0 7 0 -2 -2 -1 -5 -3 2 -2 -2 -1 -8 F -4 -5 -4 -6 -5 -5 -6 -5 -2 1 2 -6 0 9 -5 -3 -3 0 7 -1 -5 -6 -3 -8 P 1 0 -1 -1 -3 0 -1 -1 0 -2 -3 -1 -2 -5 6 1 0 -6 -5 -1 -1 0 -1 -8 S 1 0 1 0 0 -1 0 1 -1 -2 -3 0 -2 -3 1 2 2 -3 -3 -1 0 0 0 -8 T 1 -1 0 0 -2 -1 -1 0 -2 0 -2 0 -1 -3 0 2 3 -6 -3 0 0 -1 0 -8 W -6 2 -4 -7 -8 -5 -8 -7 -3 -6 -2 -4 -5 0 -6 -3 -6 17 0 -7 -6 -6 -4 -8 Y -4 -5 -2 -5 0 -4 -5 -6 0 -1 -1 -5 -3 7 -5 -3 -3 0 10 -3 -3 -5 -3 -8 V 0 -3 -2 -2 -2 -2 -2 -2 -2 4 2 -3 2 -1 -1 -1 0 -7 -3 5 -2 -2 -1 -8 B 0 -1 2 3 -5 1 3 0 1 -2 -4 1 -2 -5 -1 0 0 -6 -3 -2 3 2 -1 -8 Z 0 0 1 3 -6 4 4 -1 2 -2 -3 0 -2 -6 0 0 -1 -6 -5 -2 2 4 -1 -8 X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -4 -3 -1 -1 -1 -1 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/PAM3800000644000175000017500000000402414136731467017155 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 380 substitution matrix, scale = ln(2)/5 = 0.138629 # # Expected score = -0.612, Entropy = 0.156 bits # # Lowest score = -9, Highest score = 26 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 2 -1 0 -2 -1 -1 -4 1 1 1 -6 -4 0 1 0 0 -9 R -1 6 1 0 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 3 -4 -2 0 1 0 -9 N 0 1 1 2 -4 1 2 1 1 -2 -3 1 -1 -4 0 1 0 -5 -3 -1 2 1 0 -9 D 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -6 0 1 0 -7 -5 -2 3 3 0 -9 C -2 -4 -4 -5 17 -5 -5 -3 -4 -2 -6 -6 -5 -4 -3 0 -2 -9 1 -2 -4 -5 -3 -9 Q 0 2 1 2 -5 3 2 -1 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -2 2 3 0 -9 E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 0 0 -7 -5 -2 3 3 0 -9 G 2 -2 1 1 -3 -1 1 5 -1 -2 -4 -1 -2 -5 0 1 1 -8 -5 -1 1 0 0 -9 H -1 2 1 1 -4 3 1 -1 6 -2 -2 1 -2 -2 0 0 -1 -3 0 -2 1 2 0 -9 I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 3 2 -2 -1 0 -5 0 4 -2 -2 0 -9 L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 7 -3 4 3 -2 -3 -1 -2 0 3 -3 -3 -1 -9 K -1 4 1 1 -6 1 1 -1 1 -2 -3 5 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 M -1 0 -1 -2 -5 -1 -2 -2 -2 3 4 0 5 1 -2 -1 0 -4 -2 2 -2 -1 0 -9 F -4 -5 -4 -6 -4 -5 -5 -5 -2 2 3 -5 1 12 -5 -4 -3 2 10 0 -5 -5 -2 -9 P 1 0 0 0 -3 1 0 0 0 -2 -2 0 -2 -5 5 1 1 -6 -5 -1 0 0 0 -9 S 1 0 1 1 0 0 0 1 0 -1 -3 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -9 T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 2 -6 -3 0 0 0 0 -9 W -6 3 -5 -7 -9 -5 -7 -8 -3 -5 -2 -3 -4 2 -6 -3 -6 26 1 -6 -6 -6 -4 -9 Y -4 -4 -3 -5 1 -4 -5 -5 0 0 0 -5 -2 10 -5 -3 -3 1 13 -2 -4 -4 -2 -9 V 0 -2 -1 -2 -2 -2 -2 -1 -2 4 3 -2 2 0 -1 -1 0 -6 -2 4 -2 -2 0 -9 B 1 0 2 3 -4 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -2 2 2 0 -9 Z 0 1 1 3 -5 3 3 0 2 -2 -3 1 -1 -5 0 0 0 -6 -4 -2 2 3 0 -9 X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/BLOSUM500000644000175000017500000000411214136731467017451 0ustar nileshnilesh# Matrix made by matblas from blosum50.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 50 # Entropy = 0.4808, Expected = -0.3573 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 5 -2 -1 -2 -1 -1 -1 0 -2 -1 -2 -1 -1 -3 -1 1 0 -3 -2 0 -2 -1 -1 -5 R -2 7 -1 -2 -4 1 0 -3 0 -4 -3 3 -2 -3 -3 -1 -1 -3 -1 -3 -1 0 -1 -5 N -1 -1 7 2 -2 0 0 0 1 -3 -4 0 -2 -4 -2 1 0 -4 -2 -3 4 0 -1 -5 D -2 -2 2 8 -4 0 2 -1 -1 -4 -4 -1 -4 -5 -1 0 -1 -5 -3 -4 5 1 -1 -5 C -1 -4 -2 -4 13 -3 -3 -3 -3 -2 -2 -3 -2 -2 -4 -1 -1 -5 -3 -1 -3 -3 -2 -5 Q -1 1 0 0 -3 7 2 -2 1 -3 -2 2 0 -4 -1 0 -1 -1 -1 -3 0 4 -1 -5 E -1 0 0 2 -3 2 6 -3 0 -4 -3 1 -2 -3 -1 -1 -1 -3 -2 -3 1 5 -1 -5 G 0 -3 0 -1 -3 -2 -3 8 -2 -4 -4 -2 -3 -4 -2 0 -2 -3 -3 -4 -1 -2 -2 -5 H -2 0 1 -1 -3 1 0 -2 10 -4 -3 0 -1 -1 -2 -1 -2 -3 2 -4 0 0 -1 -5 I -1 -4 -3 -4 -2 -3 -4 -4 -4 5 2 -3 2 0 -3 -3 -1 -3 -1 4 -4 -3 -1 -5 L -2 -3 -4 -4 -2 -2 -3 -4 -3 2 5 -3 3 1 -4 -3 -1 -2 -1 1 -4 -3 -1 -5 K -1 3 0 -1 -3 2 1 -2 0 -3 -3 6 -2 -4 -1 0 -1 -3 -2 -3 0 1 -1 -5 M -1 -2 -2 -4 -2 0 -2 -3 -1 2 3 -2 7 0 -3 -2 -1 -1 0 1 -3 -1 -1 -5 F -3 -3 -4 -5 -2 -4 -3 -4 -1 0 1 -4 0 8 -4 -3 -2 1 4 -1 -4 -4 -2 -5 P -1 -3 -2 -1 -4 -1 -1 -2 -2 -3 -4 -1 -3 -4 10 -1 -1 -4 -3 -3 -2 -1 -2 -5 S 1 -1 1 0 -1 0 -1 0 -1 -3 -3 0 -2 -3 -1 5 2 -4 -2 -2 0 0 -1 -5 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 2 5 -3 -2 0 0 -1 0 -5 W -3 -3 -4 -5 -5 -1 -3 -3 -3 -3 -2 -3 -1 1 -4 -4 -3 15 2 -3 -5 -2 -3 -5 Y -2 -1 -2 -3 -3 -1 -2 -3 2 -1 -1 -2 0 4 -3 -2 -2 2 8 -1 -3 -2 -1 -5 V 0 -3 -3 -4 -1 -3 -3 -4 -4 4 1 -3 1 -1 -3 -2 0 -3 -1 5 -4 -3 -1 -5 B -2 -1 4 5 -3 0 1 -1 0 -4 -4 0 -3 -4 -2 0 0 -5 -3 -4 5 2 -1 -5 Z -1 0 0 1 -3 4 5 -2 0 -3 -3 1 -1 -4 -1 0 -1 -2 -2 -3 2 5 -1 -5 X -1 -1 -1 -1 -2 -1 -1 -2 -1 -1 -1 -1 -1 -2 -2 -1 0 -3 -1 -1 -1 -1 -1 -5 * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 biogo-1.0.4/align/matrix/matrices/IDENTITY0000644000175000017500000000773114136731467017546 0ustar nileshnilesh A R N B D C Q Z E G H I L K M F P S T W Y V X * A 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 R -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 N -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 B -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 D -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 C -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 Q -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 Z -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 E -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 G -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 H -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 I -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 L -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 K -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 M -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 F -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 P -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 S -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 T -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 W -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 Y -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 V -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 X -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 0 -10000 * -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 0 biogo-1.0.4/align/matrix/matrices/PAM4200000644000175000017500000000515514136731467017156 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 420 substitution matrix, scale = ln(2)/6 = 0.115525 # # Expected score = -0.599, Entropy = 0.124 bits # # Lowest score = -10, Highest score = 31 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 2 -1 0 -2 0 -1 -4 1 1 1 -7 -4 0 1 0 0 -10 R -1 6 1 0 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 4 -5 -2 0 1 0 -10 N 0 1 1 2 -4 1 2 1 1 -2 -3 1 -1 -4 0 1 0 -5 -3 -1 2 2 0 -10 D 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -6 0 1 0 -8 -5 -2 3 3 0 -10 C -2 -4 -4 -5 20 -6 -6 -3 -4 -3 -7 -6 -6 -4 -3 0 -2 -10 1 -2 -5 -6 -3 -10 Q 0 2 1 2 -6 3 2 0 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -2 2 3 0 -10 E 1 0 2 3 -6 2 3 1 1 -2 -3 1 -2 -6 0 1 0 -8 -5 -2 3 3 0 -10 G 2 -2 1 1 -3 0 1 5 -1 -2 -4 -1 -2 -6 0 1 1 -8 -6 -1 1 0 0 -10 H -1 2 1 1 -4 3 1 -1 6 -2 -2 1 -2 -2 0 0 -1 -3 0 -2 1 2 0 -10 I 0 -2 -2 -2 -3 -2 -2 -2 -2 4 4 -2 3 2 -2 -1 0 -6 0 4 -2 -2 0 -10 L -2 -3 -3 -4 -7 -2 -3 -4 -2 4 7 -3 5 4 -2 -3 -1 -2 1 3 -3 -3 -1 -10 K 0 4 1 1 -6 1 1 -1 1 -2 -3 5 0 -6 0 0 0 -3 -5 -2 1 1 0 -10 M -1 0 -1 -2 -6 -1 -2 -2 -2 3 5 0 5 1 -2 -1 0 -4 -1 2 -2 -1 0 -10 F -4 -5 -4 -6 -4 -5 -6 -6 -2 2 4 -6 1 13 -5 -4 -3 2 12 0 -5 -5 -2 -10 P 1 0 0 0 -3 1 0 0 0 -2 -2 0 -2 -5 5 1 1 -6 -5 -1 0 0 0 -10 S 1 0 1 1 0 0 1 1 0 -1 -3 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -10 T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -10 W -7 4 -5 -8 -10 -5 -8 -8 -3 -6 -2 -3 -4 2 -6 -3 -6 31 2 -7 -6 -7 -4 -10 Y -4 -5 -3 -5 1 -4 -5 -6 0 0 1 -5 -1 12 -5 -3 -3 2 15 -2 -4 -5 -2 -10 V 0 -2 -1 -2 -2 -2 -2 -1 -2 4 3 -2 2 0 -1 -1 0 -7 -2 4 -2 -2 0 -10 B 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -2 2 2 0 -10 Z 0 1 2 3 -6 3 3 0 2 -2 -3 1 -1 -5 0 0 0 -7 -5 -2 2 3 0 -10 X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -10 * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 biogo-1.0.4/align/matrix/matrices/PAM500000644000175000017500000000515214136731467017072 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 50 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -3.70, Entropy = 2.00 bits # # Lowest score = -13, Highest score = 13 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 5 -5 -2 -2 -5 -3 -1 -1 -5 -3 -5 -5 -4 -7 0 0 0 -11 -6 -1 -2 -2 -2 -13 R -5 8 -4 -7 -6 0 -7 -7 0 -4 -7 1 -3 -8 -3 -2 -5 -1 -8 -6 -5 -2 -4 -13 N -2 -4 7 2 -8 -2 -1 -2 1 -4 -6 0 -6 -7 -4 1 -1 -7 -3 -6 5 -1 -2 -13 D -2 -7 2 7 -11 -1 3 -2 -2 -6 -10 -3 -8 -12 -6 -2 -3 -12 -9 -6 6 2 -4 -13 C -5 -6 -8 -11 9 -11 -11 -7 -6 -5 -12 -11 -11 -10 -6 -2 -6 -13 -3 -5 -9 -11 -7 -13 Q -3 0 -2 -1 -11 8 2 -5 2 -6 -4 -2 -3 -10 -2 -4 -4 -10 -9 -5 -2 6 -3 -13 E -1 -7 -1 3 -11 2 7 -3 -3 -4 -7 -3 -5 -11 -4 -3 -4 -13 -7 -5 2 6 -3 -13 G -1 -7 -2 -2 -7 -5 -3 6 -7 -8 -9 -6 -7 -8 -4 -1 -4 -12 -11 -4 -2 -4 -4 -13 H -5 0 1 -2 -6 2 -3 -7 9 -7 -5 -4 -8 -5 -3 -4 -5 -6 -2 -5 0 0 -4 -13 I -3 -4 -4 -6 -5 -6 -4 -8 -7 8 0 -5 0 -1 -7 -5 -1 -11 -5 3 -5 -5 -3 -13 L -5 -7 -6 -10 -12 -4 -7 -9 -5 0 6 -6 2 -1 -6 -7 -5 -5 -5 -1 -7 -5 -5 -13 K -5 1 0 -3 -11 -2 -3 -6 -4 -5 -6 6 -1 -11 -5 -3 -2 -9 -8 -7 -1 -2 -4 -13 M -4 -3 -6 -8 -11 -3 -5 -7 -8 0 2 -1 10 -3 -6 -4 -3 -10 -8 0 -7 -4 -4 -13 F -7 -8 -7 -12 -10 -10 -11 -8 -5 -1 -1 -11 -3 9 -8 -5 -7 -3 3 -6 -9 -11 -6 -13 P 0 -3 -4 -6 -6 -2 -4 -4 -3 -7 -6 -5 -6 -8 8 -1 -3 -11 -11 -4 -5 -3 -4 -13 S 0 -2 1 -2 -2 -4 -3 -1 -4 -5 -7 -3 -4 -5 -1 6 1 -4 -5 -4 -1 -3 -2 -13 T 0 -5 -1 -3 -6 -4 -4 -4 -5 -1 -5 -2 -3 -7 -3 1 6 -10 -5 -2 -2 -4 -2 -13 W -11 -1 -7 -12 -13 -10 -13 -12 -6 -11 -5 -9 -10 -3 -11 -4 -10 13 -4 -12 -8 -11 -9 -13 Y -6 -8 -3 -9 -3 -9 -7 -11 -2 -5 -5 -8 -8 3 -11 -5 -5 -4 9 -6 -5 -8 -6 -13 V -1 -6 -6 -6 -5 -5 -5 -4 -5 3 -1 -7 0 -6 -4 -4 -2 -12 -6 7 -6 -5 -3 -13 B -2 -5 5 6 -9 -2 2 -2 0 -5 -7 -1 -7 -9 -5 -1 -2 -8 -5 -6 5 1 -3 -13 Z -2 -2 -1 2 -11 6 6 -4 0 -5 -5 -2 -4 -11 -3 -3 -4 -11 -8 -5 1 6 -3 -13 X -2 -4 -2 -4 -7 -3 -3 -4 -4 -3 -5 -4 -4 -6 -4 -2 -2 -9 -6 -3 -3 -3 -4 -13 * -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 1 biogo-1.0.4/align/matrix/matrices/PAM2000000644000175000017500000000402314136731467017143 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 200 substitution matrix, scale = ln(2)/3 = 0.231049 # # Expected score = -1.23, Entropy = 0.507 bits # # Lowest score = -9, Highest score = 18 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 3 -2 0 0 -3 -1 0 1 -2 -1 -2 -2 -2 -4 1 1 1 -7 -4 0 0 0 0 -9 R -2 7 0 -2 -4 1 -2 -4 2 -2 -4 4 -1 -5 0 -1 -1 2 -5 -3 -1 0 -1 -9 N 0 0 3 3 -5 1 2 0 2 -2 -4 1 -2 -4 -1 1 0 -5 -2 -2 3 1 0 -9 D 0 -2 3 5 -6 2 4 0 0 -3 -5 0 -4 -7 -2 0 0 -8 -5 -3 4 3 -1 -9 C -3 -4 -5 -6 12 -7 -7 -4 -4 -3 -7 -7 -6 -6 -4 0 -3 -9 0 -2 -5 -7 -4 -9 Q -1 1 1 2 -7 5 3 -2 3 -3 -2 1 -1 -6 0 -1 -1 -6 -5 -3 1 4 -1 -9 E 0 -2 2 4 -7 3 5 0 0 -3 -4 0 -3 -7 -1 0 -1 -9 -5 -2 3 4 -1 -9 G 1 -4 0 0 -4 -2 0 6 -3 -3 -5 -2 -4 -6 -1 1 0 -8 -6 -2 0 -1 -1 -9 H -2 2 2 0 -4 3 0 -3 8 -3 -3 -1 -3 -2 -1 -1 -2 -3 0 -3 1 2 -1 -9 I -1 -2 -2 -3 -3 -3 -3 -3 -3 6 2 -2 2 1 -3 -2 0 -6 -2 4 -3 -3 -1 -9 L -2 -4 -4 -5 -7 -2 -4 -5 -3 2 7 -4 4 2 -3 -4 -2 -2 -2 2 -4 -3 -2 -9 K -2 4 1 0 -7 1 0 -2 -1 -2 -4 6 1 -7 -2 0 0 -4 -5 -3 0 0 -1 -9 M -2 -1 -2 -4 -6 -1 -3 -4 -3 2 4 1 8 0 -3 -2 -1 -5 -3 2 -3 -2 -1 -9 F -4 -5 -4 -7 -6 -6 -7 -6 -2 1 2 -7 0 10 -6 -4 -4 0 7 -2 -6 -6 -3 -9 P 1 0 -1 -2 -4 0 -1 -1 -1 -3 -3 -2 -3 -6 7 1 0 -7 -6 -2 -1 -1 -1 -9 S 1 -1 1 0 0 -1 0 1 -1 -2 -4 0 -2 -4 1 2 2 -3 -3 -1 1 -1 0 -9 T 1 -1 0 0 -3 -1 -1 0 -2 0 -2 0 -1 -4 0 2 4 -6 -3 0 0 -1 0 -9 W -7 2 -5 -8 -9 -6 -9 -8 -3 -6 -2 -4 -5 0 -7 -3 -6 18 -1 -8 -6 -7 -5 -9 Y -4 -5 -2 -5 0 -5 -5 -6 0 -2 -2 -5 -3 7 -6 -3 -3 -1 11 -3 -4 -5 -3 -9 V 0 -3 -2 -3 -2 -3 -2 -2 -3 4 2 -3 2 -2 -2 -1 0 -8 -3 5 -3 -2 -1 -9 B 0 -1 3 4 -5 1 3 0 1 -3 -4 0 -3 -6 -1 1 0 -6 -4 -3 3 2 -1 -9 Z 0 0 1 3 -7 4 4 -1 2 -3 -3 0 -2 -6 -1 -1 -1 -7 -5 -2 2 4 -1 -9 X 0 -1 0 -1 -4 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -5 -3 -1 -1 -1 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/PAM4500000644000175000017500000000402414136731467017153 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 450 substitution matrix, scale = ln(2)/6 = 0.115525 # # Expected score = -0.476, Entropy = 0.105 bits # # Lowest score = -9, Highest score = 30 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 1 -1 0 -2 0 -1 -3 1 1 1 -6 -4 0 1 0 0 -9 R -1 5 1 0 -4 2 0 -1 2 -2 -3 4 0 -4 0 0 0 4 -4 -2 0 1 0 -9 N 0 1 1 2 -4 1 2 1 1 -1 -2 1 -1 -4 0 1 0 -4 -3 -1 1 1 0 -9 D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -5 -1 2 2 0 -9 C -2 -4 -4 -5 20 -5 -5 -3 -4 -2 -6 -5 -5 -4 -2 0 -2 -9 1 -2 -4 -5 -2 -9 Q 0 2 1 2 -5 3 2 0 3 -1 -2 1 -1 -4 1 0 0 -5 -4 -1 2 2 0 -9 E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -5 -1 2 3 0 -9 G 1 -1 1 1 -3 0 1 4 -1 -2 -3 -1 -2 -5 0 1 1 -8 -5 -1 1 0 0 -9 H -1 2 1 1 -4 3 1 -1 5 -2 -2 1 -1 -2 0 0 -1 -2 0 -2 1 2 0 -9 I 0 -2 -1 -2 -2 -1 -2 -2 -2 4 3 -2 3 2 -1 -1 0 -5 0 3 -2 -2 0 -9 L -2 -3 -2 -3 -6 -2 -3 -3 -2 3 7 -2 4 4 -2 -2 -1 -1 1 3 -3 -2 -1 -9 K 0 4 1 1 -5 1 1 -1 1 -2 -2 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 M -1 0 -1 -2 -5 -1 -2 -2 -1 3 4 0 4 1 -1 -1 0 -4 -1 2 -2 -1 0 -9 F -3 -4 -4 -5 -4 -4 -5 -5 -2 2 4 -5 1 13 -5 -3 -3 2 12 0 -4 -5 -2 -9 P 1 0 0 0 -2 1 0 0 0 -1 -2 0 -1 -5 5 1 1 -6 -5 -1 0 0 0 -9 S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -9 T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 1 -5 -3 0 0 0 0 -9 W -6 4 -4 -7 -9 -5 -7 -8 -2 -5 -1 -3 -4 2 -6 -3 -5 30 2 -6 -6 -6 -4 -9 Y -4 -4 -3 -5 1 -4 -5 -5 0 0 1 -5 -1 12 -5 -3 -3 2 14 -2 -4 -4 -2 -9 V 0 -2 -1 -1 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -6 -2 3 -1 -1 0 -9 B 1 0 1 2 -4 2 2 1 1 -2 -3 1 -2 -4 0 1 0 -6 -4 -1 2 2 0 -9 Z 0 1 1 2 -5 2 3 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -1 2 2 0 -9 X 0 0 0 0 -2 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 0 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/PAM2900000644000175000017500000000402414136731467017155 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 290 substitution matrix, scale = ln(2)/4 = 0.173287 # # Expected score = -0.877, Entropy = 0.271 bits # # Lowest score = -9, Highest score = 22 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -2 0 0 -2 0 0 2 -1 -1 -2 -1 -1 -4 1 1 1 -7 -4 0 0 0 0 -9 R -2 7 0 -1 -4 2 -1 -3 2 -2 -3 4 0 -5 0 0 -1 3 -5 -3 0 0 -1 -9 N 0 0 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 1 -5 -3 -2 2 1 0 -9 D 0 -1 2 4 -6 2 4 1 1 -3 -4 0 -3 -6 -1 0 0 -8 -5 -2 3 3 -1 -9 C -2 -4 -4 -6 15 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -2 -9 1 -2 -5 -6 -3 -9 Q 0 2 1 2 -6 4 3 -1 3 -2 -2 1 -1 -5 0 0 -1 -5 -5 -2 2 3 0 -9 E 0 -1 2 4 -6 3 4 0 1 -2 -4 0 -2 -6 0 0 0 -8 -5 -2 3 4 -1 -9 G 2 -3 1 1 -4 -1 0 5 -2 -3 -4 -2 -3 -6 0 1 0 -8 -6 -1 1 0 -1 -9 H -1 2 2 1 -4 3 1 -2 7 -3 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 -1 -9 I -1 -2 -2 -3 -3 -2 -2 -3 -3 5 3 -2 3 1 -2 -1 0 -6 -1 4 -2 -2 -1 -9 L -2 -3 -3 -4 -7 -2 -4 -4 -2 3 7 -3 5 3 -3 -3 -2 -2 -1 2 -4 -3 -1 -9 K -1 4 1 0 -6 1 0 -2 0 -2 -3 5 0 -6 -1 0 0 -4 -5 -3 1 1 -1 -9 M -1 0 -2 -3 -6 -1 -2 -3 -2 3 5 0 7 0 -2 -2 -1 -5 -2 2 -2 -2 -1 -9 F -4 -5 -4 -6 -5 -5 -6 -6 -2 1 3 -6 0 11 -5 -4 -3 1 9 -1 -5 -6 -3 -9 P 1 0 0 -1 -3 0 0 0 0 -2 -3 -1 -2 -5 7 1 1 -6 -6 -1 -1 0 -1 -9 S 1 0 1 0 0 0 0 1 -1 -1 -3 0 -2 -4 1 2 1 -3 -3 -1 1 0 0 -9 T 1 -1 1 0 -2 -1 0 0 -1 0 -2 0 -1 -3 1 1 3 -6 -3 0 0 0 0 -9 W -7 3 -5 -8 -9 -5 -8 -8 -3 -6 -2 -4 -5 1 -6 -3 -6 22 0 -7 -6 -7 -5 -9 Y -4 -5 -3 -5 1 -5 -5 -6 0 -1 -1 -5 -2 9 -6 -3 -3 0 13 -3 -4 -5 -2 -9 V 0 -3 -2 -2 -2 -2 -2 -1 -2 4 2 -3 2 -1 -1 -1 0 -7 -3 5 -2 -2 -1 -9 B 0 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -5 -1 1 0 -6 -4 -2 3 2 0 -9 Z 0 0 1 3 -6 3 4 0 2 -2 -3 1 -2 -6 0 0 0 -7 -5 -2 2 4 -1 -9 X 0 -1 0 -1 -3 0 -1 -1 -1 -1 -1 -1 -1 -3 -1 0 0 -5 -2 -1 0 -1 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/PAM4900000644000175000017500000000402614136731467017161 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 490 substitution matrix, scale = ln(2)/7 = 0.0990210 # # Expected score = -0.431, Entropy = 0.0847 bits # # Lowest score = -9, Highest score = 34 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 2 0 0 -1 0 -1 -3 1 1 1 -6 -4 0 1 0 0 -9 R -1 5 1 0 -4 2 0 -1 2 -2 -3 4 0 -5 0 0 0 4 -4 -2 0 1 0 -9 N 0 1 1 2 -4 1 2 1 1 -1 -2 1 -1 -4 0 1 0 -5 -3 -1 1 1 0 -9 D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -5 -1 2 2 0 -9 C -2 -4 -4 -5 22 -5 -5 -3 -4 -2 -6 -5 -5 -4 -3 0 -2 -9 2 -2 -4 -5 -2 -9 Q 0 2 1 2 -5 2 2 0 2 -1 -2 1 -1 -4 1 0 0 -5 -4 -1 2 2 0 -9 E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -5 -1 2 2 0 -9 G 2 -1 1 1 -3 0 1 4 -1 -2 -3 -1 -2 -5 1 1 1 -8 -5 -1 1 1 0 -9 H 0 2 1 1 -4 2 1 -1 5 -2 -2 1 -1 -2 0 0 0 -3 0 -2 1 2 0 -9 I 0 -2 -1 -2 -2 -1 -2 -2 -2 3 4 -2 3 2 -1 -1 0 -5 0 3 -2 -2 0 -9 L -1 -3 -2 -3 -6 -2 -3 -3 -2 4 7 -2 5 4 -2 -2 -1 -1 1 3 -3 -2 -1 -9 K 0 4 1 1 -5 1 1 -1 1 -2 -2 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 M -1 0 -1 -2 -5 -1 -2 -2 -1 3 5 0 4 1 -1 -1 0 -4 -1 2 -2 -1 0 -9 F -3 -5 -4 -5 -4 -4 -5 -5 -2 2 4 -5 1 14 -5 -4 -3 3 13 0 -5 -5 -2 -9 P 1 0 0 0 -3 1 0 1 0 -1 -2 0 -1 -5 4 1 1 -6 -5 -1 0 1 0 -9 S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -9 T 1 0 0 0 -2 0 0 1 0 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -9 W -6 4 -5 -7 -9 -5 -7 -8 -3 -5 -1 -3 -4 3 -6 -3 -6 34 2 -6 -6 -6 -4 -9 Y -4 -4 -3 -5 2 -4 -5 -5 0 0 1 -5 -1 13 -5 -3 -3 2 15 -2 -4 -4 -2 -9 V 0 -2 -1 -1 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -6 -2 3 -1 -1 0 -9 B 1 0 1 2 -4 2 2 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -1 2 2 0 -9 Z 0 1 1 2 -5 2 2 1 2 -2 -2 1 -1 -5 1 0 0 -6 -4 -1 2 2 0 -9 X 0 0 0 0 -2 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 0 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/PAM250.cdi0000644000175000017500000000514314136731467017712 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 250 substitution matrix, scale = 0.0693200 # # Expected score = -2.81, Entropy = 0.354 bits # # Lowest score = -26, Highest score = 57 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 6 -5 1 1 -7 -1 1 4 -4 -2 -6 -4 -4 -12 4 4 4 -19 -12 1 1 0 -1 -26 R -5 20 0 -4 -12 4 -4 -8 5 -7 -10 11 -1 -15 -1 -1 -3 7 -14 -8 -2 0 -3 -26 N 1 0 7 7 -12 3 5 1 5 -6 -10 3 -6 -12 -2 2 1 -13 -7 -6 7 4 -1 -26 D 1 -4 7 13 -17 5 11 2 2 -8 -13 0 -9 -19 -3 1 0 -22 -14 -7 10 9 -2 -26 C -7 -12 -12 -17 40 -18 -18 -11 -11 -8 -20 -18 -17 -14 -9 0 -7 -26 1 -6 -15 -18 -10 -26 Q -1 4 3 5 -18 13 8 -4 10 -7 -6 2 -3 -15 1 -2 -3 -16 -13 -6 4 11 -2 -26 E 1 -4 5 11 -18 8 13 1 2 -7 -11 0 -7 -18 -2 0 -1 -23 -14 -6 9 11 -2 -26 G 4 -8 1 2 -11 -4 1 16 -7 -8 -13 -6 -9 -16 -2 4 0 -23 -17 -4 2 -1 -3 -26 H -4 5 5 2 -11 10 2 -7 22 -8 -7 0 -7 -6 -1 -3 -4 -9 0 -7 4 6 -2 -26 I -2 -7 -6 -8 -8 -7 -7 -8 -8 15 8 -6 7 3 -7 -5 0 -17 -3 12 -7 -7 -2 -26 L -6 -10 -10 -13 -20 -6 -11 -13 -7 8 20 -9 12 6 -8 -9 -6 -6 -3 6 -11 -9 -4 -26 K -4 11 3 0 -18 2 0 -6 0 -6 -9 15 1 -17 -4 -1 0 -12 -15 -8 2 1 -3 -26 M -4 -1 -6 -9 -17 -3 -7 -9 -7 7 12 1 21 1 -7 -5 -2 -14 -8 6 -7 -5 -2 -26 F -12 -15 -12 -19 -14 -15 -18 -16 -6 3 6 -17 1 30 -15 -11 -10 1 23 -4 -15 -17 -8 -26 P 4 -1 -2 -3 -9 1 -2 -2 -1 -7 -8 -4 -7 -15 19 3 1 -19 -16 -4 -2 -1 -2 -26 S 4 -1 2 1 0 -2 0 4 -3 -5 -9 -1 -5 -11 3 5 4 -8 -9 -3 2 -1 -1 -26 T 4 -3 1 0 -7 -3 -1 0 -4 0 -6 0 -2 -10 1 4 9 -17 -9 1 0 -2 -1 -26 W -19 7 -13 -22 -26 -16 -23 -23 -9 -17 -6 -12 -14 1 -19 -8 -17 57 0 -21 -18 -19 -13 -26 Y -12 -14 -7 -14 1 -13 -14 -17 0 -3 -3 -15 -8 23 -16 -9 -9 0 34 -8 -10 -14 -8 -26 V 1 -8 -6 -7 -6 -6 -6 -4 -7 12 6 -8 6 -4 -4 -3 1 -21 -8 14 -6 -6 -2 -26 B 1 -2 7 10 -15 4 9 2 4 -7 -11 2 -7 -15 -2 2 0 -18 -10 -6 9 7 -2 -26 Z 0 0 4 9 -18 11 11 -1 6 -7 -9 1 -5 -17 -1 -1 -2 -19 -14 -6 7 11 -2 -26 X -1 -3 -1 -2 -10 -2 -2 -3 -2 -2 -4 -3 -2 -8 -2 -1 -1 -13 -8 -2 -2 -2 -3 -26 * -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 1 biogo-1.0.4/align/matrix/matrices/BLOSUM300000644000175000017500000000411214136731467017447 0ustar nileshnilesh# Matrix made by matblas from blosum30.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/5 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 30 # Entropy = 0.1424, Expected = -0.1074 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 4 -1 0 0 -3 1 0 0 -2 0 -1 0 1 -2 -1 1 1 -5 -4 1 0 0 0 -7 R -1 8 -2 -1 -2 3 -1 -2 -1 -3 -2 1 0 -1 -1 -1 -3 0 0 -1 -2 0 -1 -7 N 0 -2 8 1 -1 -1 -1 0 -1 0 -2 0 0 -1 -3 0 1 -7 -4 -2 4 -1 0 -7 D 0 -1 1 9 -3 -1 1 -1 -2 -4 -1 0 -3 -5 -1 0 -1 -4 -1 -2 5 0 -1 -7 C -3 -2 -1 -3 17 -2 1 -4 -5 -2 0 -3 -2 -3 -3 -2 -2 -2 -6 -2 -2 0 -2 -7 Q 1 3 -1 -1 -2 8 2 -2 0 -2 -2 0 -1 -3 0 -1 0 -1 -1 -3 -1 4 0 -7 E 0 -1 -1 1 1 2 6 -2 0 -3 -1 2 -1 -4 1 0 -2 -1 -2 -3 0 5 -1 -7 G 0 -2 0 -1 -4 -2 -2 8 -3 -1 -2 -1 -2 -3 -1 0 -2 1 -3 -3 0 -2 -1 -7 H -2 -1 -1 -2 -5 0 0 -3 14 -2 -1 -2 2 -3 1 -1 -2 -5 0 -3 -2 0 -1 -7 I 0 -3 0 -4 -2 -2 -3 -1 -2 6 2 -2 1 0 -3 -1 0 -3 -1 4 -2 -3 0 -7 L -1 -2 -2 -1 0 -2 -1 -2 -1 2 4 -2 2 2 -3 -2 0 -2 3 1 -1 -1 0 -7 K 0 1 0 0 -3 0 2 -1 -2 -2 -2 4 2 -1 1 0 -1 -2 -1 -2 0 1 0 -7 M 1 0 0 -3 -2 -1 -1 -2 2 1 2 2 6 -2 -4 -2 0 -3 -1 0 -2 -1 0 -7 F -2 -1 -1 -5 -3 -3 -4 -3 -3 0 2 -1 -2 10 -4 -1 -2 1 3 1 -3 -4 -1 -7 P -1 -1 -3 -1 -3 0 1 -1 1 -3 -3 1 -4 -4 11 -1 0 -3 -2 -4 -2 0 -1 -7 S 1 -1 0 0 -2 -1 0 0 -1 -1 -2 0 -2 -1 -1 4 2 -3 -2 -1 0 -1 0 -7 T 1 -3 1 -1 -2 0 -2 -2 -2 0 0 -1 0 -2 0 2 5 -5 -1 1 0 -1 0 -7 W -5 0 -7 -4 -2 -1 -1 1 -5 -3 -2 -2 -3 1 -3 -3 -5 20 5 -3 -5 -1 -2 -7 Y -4 0 -4 -1 -6 -1 -2 -3 0 -1 3 -1 -1 3 -2 -2 -1 5 9 1 -3 -2 -1 -7 V 1 -1 -2 -2 -2 -3 -3 -3 -3 4 1 -2 0 1 -4 -1 1 -3 1 5 -2 -3 0 -7 B 0 -2 4 5 -2 -1 0 0 -2 -2 -1 0 -2 -3 -2 0 0 -5 -3 -2 5 0 -1 -7 Z 0 0 -1 0 0 4 5 -2 0 -3 -1 1 -1 -4 0 -1 -1 -1 -2 -3 0 4 0 -7 X 0 -1 0 -1 -2 0 -1 -1 -1 0 0 0 0 -1 -1 0 0 -2 -1 0 -1 0 -1 -7 * -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 1 biogo-1.0.4/align/matrix/matrices/PAM2700000644000175000017500000000515514136731467017161 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 270 substitution matrix, scale = ln(2)/4 = 0.173287 # # Expected score = -0.969, Entropy = 0.309 bits # # Lowest score = -10, Highest score = 23 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -2 0 0 -2 0 0 2 -2 -1 -2 -1 -1 -4 1 1 1 -7 -4 0 0 0 0 -10 R -2 8 0 -1 -5 2 -1 -3 2 -2 -4 4 -1 -5 0 0 -1 3 -5 -3 -1 0 -1 -10 N 0 0 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 1 -5 -3 -2 2 2 0 -10 D 0 -1 2 5 -6 2 4 1 1 -3 -5 0 -3 -7 -1 0 0 -8 -5 -3 4 3 -1 -10 C -2 -5 -4 -6 16 -7 -6 -4 -4 -3 -7 -7 -6 -5 -3 0 -3 -10 1 -2 -5 -7 -4 -10 Q 0 2 1 2 -7 5 3 -1 4 -2 -2 1 -1 -6 0 -1 -1 -6 -5 -2 2 4 -1 -10 E 0 -1 2 4 -6 3 5 0 1 -2 -4 0 -3 -7 -1 0 0 -9 -5 -2 3 4 -1 -10 G 2 -3 1 1 -4 -1 0 6 -2 -3 -5 -2 -3 -6 0 1 0 -9 -6 -2 1 0 -1 -10 H -2 2 2 1 -4 4 1 -2 8 -3 -3 0 -3 -2 0 -1 -1 -3 0 -3 1 2 -1 -10 I -1 -2 -2 -3 -3 -2 -2 -3 -3 5 3 -2 3 1 -2 -2 0 -6 -1 5 -3 -2 -1 -10 L -2 -4 -3 -5 -7 -2 -4 -5 -3 3 8 -3 5 2 -3 -3 -2 -2 -1 2 -4 -3 -2 -10 K -1 4 1 0 -7 1 0 -2 0 -2 -3 6 0 -6 -1 0 0 -4 -5 -3 1 0 -1 -10 M -1 -1 -2 -3 -6 -1 -3 -3 -3 3 5 0 8 0 -2 -2 -1 -5 -3 2 -3 -2 -1 -10 F -4 -5 -4 -7 -5 -6 -7 -6 -2 1 2 -6 0 12 -6 -4 -4 1 9 -1 -6 -6 -3 -10 P 1 0 0 -1 -3 0 -1 0 0 -2 -3 -1 -2 -6 7 1 0 -7 -6 -1 -1 0 -1 -10 S 1 0 1 0 0 -1 0 1 -1 -2 -3 0 -2 -4 1 2 2 -3 -4 -1 1 0 0 -10 T 1 -1 1 0 -3 -1 0 0 -1 0 -2 0 -1 -4 0 2 3 -6 -3 0 0 -1 0 -10 W -7 3 -5 -8 -10 -6 -9 -9 -3 -6 -2 -4 -5 1 -7 -3 -6 23 0 -8 -7 -7 -5 -10 Y -4 -5 -3 -5 1 -5 -5 -6 0 -1 -1 -5 -3 9 -6 -4 -3 0 13 -3 -4 -5 -3 -10 V 0 -3 -2 -3 -2 -2 -2 -2 -3 5 2 -3 2 -1 -1 -1 0 -8 -3 5 -2 -2 -1 -10 B 0 -1 2 4 -5 2 3 1 1 -3 -4 1 -3 -6 -1 1 0 -7 -4 -2 3 3 -1 -10 Z 0 0 2 3 -7 4 4 0 2 -2 -3 0 -2 -6 0 0 -1 -7 -5 -2 3 4 -1 -10 X 0 -1 0 -1 -4 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -5 -3 -1 -1 -1 -1 -10 * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 biogo-1.0.4/align/matrix/matrices/PAM800000644000175000017500000000515214136731467017075 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 80 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -2.55, Entropy = 1.44 bits # # Lowest score = -11, Highest score = 13 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 4 -4 -1 -1 -4 -2 -1 0 -4 -2 -4 -4 -3 -5 0 1 1 -8 -5 0 -1 -1 -1 -11 R -4 7 -2 -5 -5 0 -4 -6 0 -3 -5 2 -2 -6 -2 -1 -3 0 -7 -5 -3 -1 -3 -11 N -1 -2 5 3 -6 -1 0 -1 2 -3 -5 0 -4 -5 -3 1 0 -5 -3 -4 4 0 -1 -11 D -1 -5 3 6 -9 0 4 -1 -1 -4 -7 -2 -6 -9 -4 -1 -2 -10 -7 -5 5 2 -3 -11 C -4 -5 -6 -9 9 -9 -9 -6 -5 -4 -9 -9 -8 -8 -5 -1 -4 -10 -2 -3 -7 -9 -5 -11 Q -2 0 -1 0 -9 7 2 -4 2 -4 -3 -1 -2 -8 -1 -3 -3 -8 -7 -4 0 5 -2 -11 E -1 -4 0 4 -9 2 6 -2 -2 -3 -6 -2 -4 -9 -3 -2 -3 -11 -6 -4 2 5 -2 -11 G 0 -6 -1 -1 -6 -4 -2 6 -5 -6 -7 -4 -5 -6 -3 0 -2 -10 -8 -3 -1 -2 -3 -11 H -4 0 2 -1 -5 2 -2 -5 8 -5 -4 -3 -5 -3 -2 -3 -4 -4 -1 -4 0 1 -2 -11 I -2 -3 -3 -4 -4 -4 -3 -6 -5 7 1 -4 1 0 -5 -4 -1 -8 -3 3 -4 -4 -2 -11 L -4 -5 -5 -7 -9 -3 -6 -7 -4 1 6 -5 2 0 -4 -5 -4 -3 -4 0 -6 -4 -3 -11 K -4 2 0 -2 -9 -1 -2 -4 -3 -4 -5 6 0 -9 -4 -2 -1 -7 -6 -5 -1 -1 -3 -11 M -3 -2 -4 -6 -8 -2 -4 -5 -5 1 2 0 9 -2 -5 -3 -2 -7 -6 1 -5 -3 -2 -11 F -5 -6 -5 -9 -8 -8 -9 -6 -3 0 0 -9 -2 8 -7 -4 -5 -2 4 -4 -7 -8 -5 -11 P 0 -2 -3 -4 -5 -1 -3 -3 -2 -5 -4 -4 -5 -7 7 0 -2 -9 -8 -3 -3 -2 -2 -11 S 1 -1 1 -1 -1 -3 -2 0 -3 -4 -5 -2 -3 -4 0 4 2 -3 -4 -3 0 -2 -1 -11 T 1 -3 0 -2 -4 -3 -3 -2 -4 -1 -4 -1 -2 -5 -2 2 5 -8 -4 -1 -1 -3 -1 -11 W -8 0 -5 -10 -10 -8 -11 -10 -4 -8 -3 -7 -7 -2 -9 -3 -8 13 -2 -10 -7 -9 -7 -11 Y -5 -7 -3 -7 -2 -7 -6 -8 -1 -3 -4 -6 -6 4 -8 -4 -4 -2 9 -5 -4 -6 -4 -11 V 0 -5 -4 -5 -3 -4 -4 -3 -4 3 0 -5 1 -4 -3 -3 -1 -10 -5 6 -4 -4 -2 -11 B -1 -3 4 5 -7 0 2 -1 0 -4 -6 -1 -5 -7 -3 0 -1 -7 -4 -4 5 2 -2 -11 Z -1 -1 0 2 -9 5 5 -2 1 -4 -4 -1 -3 -8 -2 -2 -3 -9 -6 -4 2 5 -2 -11 X -1 -3 -1 -3 -5 -2 -2 -3 -2 -2 -3 -3 -2 -5 -2 -1 -1 -7 -4 -2 -2 -2 -3 -11 * -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 1 biogo-1.0.4/align/matrix/matrices/BLOSUM750000644000175000017500000000411214136731467017460 0ustar nileshnilesh# Matrix made by matblas from blosum75.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 75 # Entropy = 0.9077, Expected = -0.6845 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 4 -2 -2 -2 -1 -1 -1 0 -2 -2 -2 -1 -1 -3 -1 1 0 -3 -2 0 -2 -1 -1 -5 R -2 6 -1 -2 -4 1 0 -3 0 -3 -3 2 -2 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -5 N -2 -1 6 1 -3 0 -1 -1 0 -4 -4 0 -3 -4 -3 0 0 -4 -3 -3 3 0 -1 -5 D -2 -2 1 6 -4 -1 1 -2 -1 -4 -4 -1 -4 -4 -2 -1 -1 -5 -4 -4 4 1 -2 -5 C -1 -4 -3 -4 9 -3 -5 -3 -4 -1 -2 -4 -2 -2 -4 -1 -1 -3 -3 -1 -4 -4 -2 -5 Q -1 1 0 -1 -3 6 2 -2 1 -3 -3 1 0 -4 -2 0 -1 -2 -2 -2 0 3 -1 -5 E -1 0 -1 1 -5 2 5 -3 0 -4 -4 1 -2 -4 -1 0 -1 -4 -3 -3 1 4 -1 -5 G 0 -3 -1 -2 -3 -2 -3 6 -2 -5 -4 -2 -3 -4 -3 -1 -2 -3 -4 -4 -1 -2 -2 -5 H -2 0 0 -1 -4 1 0 -2 8 -4 -3 -1 -2 -2 -2 -1 -2 -2 2 -4 -1 0 -1 -5 I -2 -3 -4 -4 -1 -3 -4 -5 -4 4 1 -3 1 0 -3 -3 -1 -3 -2 3 -4 -4 -2 -5 L -2 -3 -4 -4 -2 -3 -4 -4 -3 1 4 -3 2 0 -3 -3 -2 -2 -1 1 -4 -3 -1 -5 K -1 2 0 -1 -4 1 1 -2 -1 -3 -3 5 -2 -4 -1 0 -1 -4 -2 -3 -1 1 -1 -5 M -1 -2 -3 -4 -2 0 -2 -3 -2 1 2 -2 6 0 -3 -2 -1 -2 -2 1 -3 -2 -1 -5 F -3 -3 -4 -4 -2 -4 -4 -4 -2 0 0 -4 0 6 -4 -3 -2 1 3 -1 -4 -4 -2 -5 P -1 -2 -3 -2 -4 -2 -1 -3 -2 -3 -3 -1 -3 -4 8 -1 -1 -5 -4 -3 -2 -2 -2 -5 S 1 -1 0 -1 -1 0 0 -1 -1 -3 -3 0 -2 -3 -1 5 1 -3 -2 -2 0 0 -1 -5 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -2 -1 -1 -2 -1 1 5 -3 -2 0 -1 -1 -1 -5 W -3 -3 -4 -5 -3 -2 -4 -3 -2 -3 -2 -4 -2 1 -5 -3 -3 11 2 -3 -5 -3 -3 -5 Y -2 -2 -3 -4 -3 -2 -3 -4 2 -2 -1 -2 -2 3 -4 -2 -2 2 7 -2 -3 -3 -2 -5 V 0 -3 -3 -4 -1 -2 -3 -4 -4 3 1 -3 1 -1 -3 -2 0 -3 -2 4 -4 -3 -1 -5 B -2 -1 3 4 -4 0 1 -1 -1 -4 -4 -1 -3 -4 -2 0 -1 -5 -3 -4 4 0 -2 -5 Z -1 0 0 1 -4 3 4 -2 0 -4 -3 1 -2 -4 -2 0 -1 -3 -3 -3 0 4 -1 -5 X -1 -1 -1 -2 -2 -1 -1 -2 -1 -2 -1 -1 -1 -2 -2 -1 -1 -3 -2 -1 -2 -1 -1 -5 * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 biogo-1.0.4/align/matrix/matrices/DAYHOFF0000644000175000017500000000404114136731467017364 0ustar nileshnilesh#Date: Wed, 18 Sep 91 17:36:51 EDT #From: altschul@ray.nlm.nih.gov (Stephen Altschul) #To: gish@ray.nlm.nih.gov #Subject: Vanilla-flavored PAM-250 # # substitution scores for B, Z, X, and * were obtained with "pam" version 1.0.5 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -2 0 0 -2 0 0 1 -1 -1 -2 -1 -1 -4 1 1 1 -6 -3 0 0 0 0 -8 R -2 6 0 -1 -4 1 -1 -3 2 -2 -3 3 0 -4 0 0 -1 2 -4 -2 -1 0 -1 -8 N 0 0 2 2 -4 1 1 0 2 -2 -3 1 -2 -4 -1 1 0 -4 -2 -2 2 1 0 -8 D 0 -1 2 4 -5 2 3 1 1 -2 -4 0 -3 -6 -1 0 0 -7 -4 -2 3 3 -1 -8 C -2 -4 -4 -5 12 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3 0 -2 -8 0 -2 -4 -5 -3 -8 Q 0 1 1 2 -5 4 2 -1 3 -2 -2 1 -1 -5 0 -1 -1 -5 -4 -2 1 3 -1 -8 E 0 -1 1 3 -5 2 4 0 1 -2 -3 0 -2 -5 -1 0 0 -7 -4 -2 3 3 -1 -8 G 1 -3 0 1 -3 -1 0 5 -2 -3 -4 -2 -3 -5 -1 1 0 -7 -5 -1 0 0 -1 -8 H -1 2 2 1 -3 3 1 -2 6 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 -1 -8 I -1 -2 -2 -2 -2 -2 -2 -3 -2 5 2 -2 2 1 -2 -1 0 -5 -1 4 -2 -2 -1 -8 L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 6 -3 4 2 -3 -3 -2 -2 -1 2 -3 -3 -1 -8 K -1 3 1 0 -5 1 0 -2 0 -2 -3 5 0 -5 -1 0 0 -3 -4 -2 1 0 -1 -8 M -1 0 -2 -3 -5 -1 -2 -3 -2 2 4 0 6 0 -2 -2 -1 -4 -2 2 -2 -2 -1 -8 F -4 -4 -4 -6 -4 -5 -5 -5 -2 1 2 -5 0 9 -5 -3 -3 0 7 -1 -4 -5 -2 -8 P 1 0 -1 -1 -3 0 -1 -1 0 -2 -3 -1 -2 -5 6 1 0 -6 -5 -1 -1 0 -1 -8 S 1 0 1 0 0 -1 0 1 -1 -1 -3 0 -2 -3 1 2 1 -2 -3 -1 0 0 0 -8 T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 0 1 3 -5 -3 0 0 -1 0 -8 W -6 2 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4 0 -6 -2 -5 17 0 -6 -5 -6 -4 -8 Y -3 -4 -2 -4 0 -4 -4 -5 0 -1 -1 -4 -2 7 -5 -3 -3 0 10 -2 -3 -4 -2 -8 V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 -1 -8 B 0 -1 2 3 -4 1 3 0 1 -2 -3 1 -2 -4 -1 0 0 -5 -3 -2 3 2 -1 -8 Z 0 0 1 3 -5 3 3 0 2 -2 -3 0 -2 -5 0 0 -1 -6 -4 -2 2 3 -1 -8 X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -1 -1 -1 -2 -1 0 0 -4 -2 -1 -1 -1 -1 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/PAM3600000644000175000017500000000402414136731467017153 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 360 substitution matrix, scale = ln(2)/5 = 0.138629 # # Expected score = -0.697, Entropy = 0.175 bits # # Lowest score = -9, Highest score = 27 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 2 -1 0 -2 -1 -1 -4 1 1 1 -7 -4 0 1 0 0 -9 R -1 6 1 -1 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 4 -5 -2 0 1 -1 -9 N 0 1 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 1 -5 -3 -2 2 2 0 -9 D 1 -1 2 4 -6 2 4 1 1 -2 -4 1 -2 -6 0 1 0 -8 -5 -2 3 3 0 -9 C -2 -4 -4 -6 18 -6 -6 -4 -4 -3 -7 -6 -6 -4 -3 0 -2 -9 1 -2 -5 -6 -3 -9 Q 0 2 1 2 -6 3 3 -1 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -2 2 3 0 -9 E 1 0 2 4 -6 3 4 1 1 -2 -3 0 -2 -6 0 0 0 -8 -5 -2 3 3 0 -9 G 2 -2 1 1 -4 -1 1 5 -2 -2 -4 -1 -3 -6 0 1 1 -8 -6 -1 1 0 -1 -9 H -1 2 2 1 -4 3 1 -2 7 -2 -2 1 -2 -2 0 0 -1 -3 0 -2 1 2 0 -9 I 0 -2 -2 -2 -3 -2 -2 -2 -2 4 3 -2 3 2 -2 -1 0 -6 0 4 -2 -2 0 -9 L -2 -3 -3 -4 -7 -2 -3 -4 -2 3 7 -3 5 3 -3 -3 -2 -2 0 3 -4 -3 -1 -9 K -1 4 1 1 -6 1 0 -1 1 -2 -3 5 0 -6 -1 0 0 -4 -5 -2 1 1 -1 -9 M -1 0 -2 -2 -6 -1 -2 -3 -2 3 5 0 6 1 -2 -2 -1 -4 -2 2 -2 -2 0 -9 F -4 -5 -4 -6 -4 -5 -6 -6 -2 2 3 -6 1 12 -5 -4 -3 2 11 -1 -5 -5 -2 -9 P 1 0 0 0 -3 1 0 0 0 -2 -3 -1 -2 -5 6 1 1 -6 -5 -1 0 0 0 -9 S 1 0 1 1 0 0 0 1 0 -1 -3 0 -2 -4 1 1 1 -3 -3 -1 1 0 0 -9 T 1 0 1 0 -2 0 0 1 -1 0 -2 0 -1 -3 1 1 2 -6 -3 0 0 0 0 -9 W -7 4 -5 -8 -9 -5 -8 -8 -3 -6 -2 -4 -4 2 -6 -3 -6 27 1 -7 -6 -7 -4 -9 Y -4 -5 -3 -5 1 -4 -5 -6 0 0 0 -5 -2 11 -5 -3 -3 1 14 -2 -4 -5 -2 -9 V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 3 -2 2 -1 -1 -1 0 -7 -2 4 -2 -2 0 -9 B 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -5 0 1 0 -6 -4 -2 2 2 0 -9 Z 0 1 2 3 -6 3 3 0 2 -2 -3 1 -2 -5 0 0 0 -7 -5 -2 2 3 0 -9 X 0 -1 0 0 -3 0 0 -1 0 0 -1 -1 0 -2 0 0 0 -4 -2 0 0 0 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/NUC.40000644000175000017500000000034614136731467017077 0ustar nileshnilesh# # This matrix was created by Todd Lowe 12/10/92 # # Probabilities rounded to nearest integer # # Lowest score = -4, Highest score = 5 # A T G C A 5 -4 -4 -4 T -4 5 -4 -4 G -4 -4 5 -4 C -4 -4 -4 5 biogo-1.0.4/align/matrix/matrices/PAM300000644000175000017500000000515214136731467017070 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 30 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -5.06, Entropy = 2.57 bits # # Lowest score = -17, Highest score = 13 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 6 -7 -4 -3 -6 -4 -2 -2 -7 -5 -6 -7 -5 -8 -2 0 -1 -13 -8 -2 -3 -3 -3 -17 R -7 8 -6 -10 -8 -2 -9 -9 -2 -5 -8 0 -4 -9 -4 -3 -6 -2 -10 -8 -7 -4 -6 -17 N -4 -6 8 2 -11 -3 -2 -3 0 -5 -7 -1 -9 -9 -6 0 -2 -8 -4 -8 6 -3 -3 -17 D -3 -10 2 8 -14 -2 2 -3 -4 -7 -12 -4 -11 -15 -8 -4 -5 -15 -11 -8 6 1 -5 -17 C -6 -8 -11 -14 10 -14 -14 -9 -7 -6 -15 -14 -13 -13 -8 -3 -8 -15 -4 -6 -12 -14 -9 -17 Q -4 -2 -3 -2 -14 8 1 -7 1 -8 -5 -3 -4 -13 -3 -5 -5 -13 -12 -7 -3 6 -5 -17 E -2 -9 -2 2 -14 1 8 -4 -5 -5 -9 -4 -7 -14 -5 -4 -6 -17 -8 -6 1 6 -5 -17 G -2 -9 -3 -3 -9 -7 -4 6 -9 -11 -10 -7 -8 -9 -6 -2 -6 -15 -14 -5 -3 -5 -5 -17 H -7 -2 0 -4 -7 1 -5 -9 9 -9 -6 -6 -10 -6 -4 -6 -7 -7 -3 -6 -1 -1 -5 -17 I -5 -5 -5 -7 -6 -8 -5 -11 -9 8 -1 -6 -1 -2 -8 -7 -2 -14 -6 2 -6 -6 -5 -17 L -6 -8 -7 -12 -15 -5 -9 -10 -6 -1 7 -8 1 -3 -7 -8 -7 -6 -7 -2 -9 -7 -6 -17 K -7 0 -1 -4 -14 -3 -4 -7 -6 -6 -8 7 -2 -14 -6 -4 -3 -12 -9 -9 -2 -4 -5 -17 M -5 -4 -9 -11 -13 -4 -7 -8 -10 -1 1 -2 11 -4 -8 -5 -4 -13 -11 -1 -10 -5 -5 -17 F -8 -9 -9 -15 -13 -13 -14 -9 -6 -2 -3 -14 -4 9 -10 -6 -9 -4 2 -8 -10 -13 -8 -17 P -2 -4 -6 -8 -8 -3 -5 -6 -4 -8 -7 -6 -8 -10 8 -2 -4 -14 -13 -6 -7 -4 -5 -17 S 0 -3 0 -4 -3 -5 -4 -2 -6 -7 -8 -4 -5 -6 -2 6 0 -5 -7 -6 -1 -5 -3 -17 T -1 -6 -2 -5 -8 -5 -6 -6 -7 -2 -7 -3 -4 -9 -4 0 7 -13 -6 -3 -3 -6 -4 -17 W -13 -2 -8 -15 -15 -13 -17 -15 -7 -14 -6 -12 -13 -4 -14 -5 -13 13 -5 -15 -10 -14 -11 -17 Y -8 -10 -4 -11 -4 -12 -8 -14 -3 -6 -7 -9 -11 2 -13 -7 -6 -5 10 -7 -6 -9 -7 -17 V -2 -8 -8 -8 -6 -7 -6 -5 -6 2 -2 -9 -1 -8 -6 -6 -3 -15 -7 7 -8 -6 -5 -17 B -3 -7 6 6 -12 -3 1 -3 -1 -6 -9 -2 -10 -10 -7 -1 -3 -10 -6 -8 6 0 -5 -17 Z -3 -4 -3 1 -14 6 6 -5 -1 -6 -7 -4 -5 -13 -4 -5 -6 -14 -9 -6 0 6 -5 -17 X -3 -6 -3 -5 -9 -5 -5 -5 -5 -5 -6 -5 -5 -8 -5 -3 -4 -11 -7 -5 -5 -5 -5 -17 * -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 1 biogo-1.0.4/align/matrix/matrices/MATCH0000644000175000017500000000347214136731467017147 0ustar nileshnilesh A R N B D C Q Z E G H I L K M F P S T W Y V X * A 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 R -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 N -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 B -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 D -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 C -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 Q -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 Z -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 E -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 G -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 H -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 I -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 L -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 K -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 M -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 F -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 P -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 S -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 T -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 W -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 Y -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 V -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 * -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 biogo-1.0.4/align/matrix/matrices/BLOSUM700000644000175000017500000000411214136731467017453 0ustar nileshnilesh# Matrix made by matblas from blosum70.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 70 # Entropy = 0.8391, Expected = -0.6313 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 4 -2 -2 -2 -1 -1 -1 0 -2 -2 -2 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 -1 -5 R -2 6 -1 -2 -4 1 0 -3 0 -3 -3 2 -2 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -5 N -2 -1 6 1 -3 0 0 -1 0 -4 -4 0 -2 -3 -2 0 0 -4 -2 -3 3 0 -1 -5 D -2 -2 1 6 -4 -1 1 -2 -1 -4 -4 -1 -3 -4 -2 0 -1 -5 -4 -4 4 1 -2 -5 C -1 -4 -3 -4 9 -3 -4 -3 -4 -1 -2 -4 -2 -2 -3 -1 -1 -3 -3 -1 -4 -4 -2 -5 Q -1 1 0 -1 -3 6 2 -2 1 -3 -2 1 0 -3 -2 0 -1 -2 -2 -2 0 3 -1 -5 E -1 0 0 1 -4 2 5 -2 0 -4 -3 1 -2 -4 -1 0 -1 -4 -3 -3 1 4 -1 -5 G 0 -3 -1 -2 -3 -2 -2 6 -2 -4 -4 -2 -3 -4 -3 -1 -2 -3 -4 -4 -1 -2 -2 -5 H -2 0 0 -1 -4 1 0 -2 8 -4 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 -1 0 -1 -5 I -2 -3 -4 -4 -1 -3 -4 -4 -4 4 2 -3 1 0 -3 -3 -1 -3 -1 3 -4 -3 -1 -5 L -2 -3 -4 -4 -2 -2 -3 -4 -3 2 4 -3 2 0 -3 -3 -2 -2 -1 1 -4 -3 -1 -5 K -1 2 0 -1 -4 1 1 -2 -1 -3 -3 5 -2 -3 -1 0 -1 -3 -2 -3 -1 1 -1 -5 M -1 -2 -2 -3 -2 0 -2 -3 -2 1 2 -2 6 0 -3 -2 -1 -2 -1 1 -3 -2 -1 -5 F -2 -3 -3 -4 -2 -3 -4 -4 -1 0 0 -3 0 6 -4 -3 -2 1 3 -1 -4 -4 -2 -5 P -1 -2 -2 -2 -3 -2 -1 -3 -2 -3 -3 -1 -3 -4 8 -1 -1 -4 -3 -3 -2 -1 -2 -5 S 1 -1 0 0 -1 0 0 -1 -1 -3 -3 0 -2 -3 -1 4 1 -3 -2 -2 0 0 -1 -5 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -2 -1 -1 -2 -1 1 5 -3 -2 0 -1 -1 -1 -5 W -3 -3 -4 -5 -3 -2 -4 -3 -2 -3 -2 -3 -2 1 -4 -3 -3 11 2 -3 -4 -3 -3 -5 Y -2 -2 -2 -4 -3 -2 -3 -4 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -2 -3 -2 -2 -5 V 0 -3 -3 -4 -1 -2 -3 -4 -3 3 1 -3 1 -1 -3 -2 0 -3 -2 4 -3 -3 -1 -5 B -2 -1 3 4 -4 0 1 -1 -1 -4 -4 -1 -3 -4 -2 0 -1 -4 -3 -3 4 0 -1 -5 Z -1 0 0 1 -4 3 4 -2 0 -3 -3 1 -2 -4 -1 0 -1 -3 -2 -3 0 4 -1 -5 X -1 -1 -1 -2 -2 -1 -1 -2 -1 -1 -1 -1 -1 -2 -2 -1 -1 -3 -2 -1 -1 -1 -1 -5 * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 biogo-1.0.4/align/matrix/matrices/GONNET0000644000175000017500000000321714136731467017302 0ustar nileshnilesh# PAM 250 matrix recommended by Gonnet, Cohen & Benner # Science June 5, 1992. # Values rounded to nearest integer C S T P A G N D E Q H R K M I L V F Y W X * C 12 0 0 -3 0 -2 -2 -3 -3 -2 -1 -2 -3 -1 -1 -2 0 -1 0 -1 -3 -8 S 0 2 2 0 1 0 1 0 0 0 0 0 0 -1 -2 -2 -1 -3 -2 -3 0 -8 T 0 2 2 0 1 -1 0 0 0 0 0 0 0 -1 -1 -1 0 -2 -2 -4 0 -8 P -3 0 0 8 0 -2 -1 -1 0 0 -1 -1 -1 -2 -3 -2 -2 -4 -3 -5 -1 -8 A 0 1 1 0 2 0 0 0 0 0 -1 -1 0 -1 -1 -1 0 -2 -2 -4 0 -8 G -2 0 -1 -2 0 7 0 0 -1 -1 -1 -1 -1 -4 -4 -4 -3 -5 -4 -4 -1 -8 N -2 1 0 -1 0 0 4 2 1 1 1 0 1 -2 -3 -3 -2 -3 -1 -4 0 -8 D -3 0 0 -1 0 0 2 5 3 1 0 0 0 -3 -4 -4 -3 -4 -3 -5 -1 -8 E -3 0 0 0 0 -1 1 3 4 2 0 0 1 -2 -3 -3 -2 -4 -3 -4 -1 -8 Q -2 0 0 0 0 -1 1 1 2 3 1 2 2 -1 -2 -2 -2 -3 -2 -3 -1 -8 H -1 0 0 -1 -1 -1 1 0 0 1 6 1 1 -1 -2 -2 -2 0 2 -1 -1 -8 R -2 0 0 -1 -1 -1 0 0 0 2 1 5 3 -2 -2 -2 -2 -3 -2 -2 -1 -8 K -3 0 0 -1 0 -1 1 0 1 2 1 3 3 -1 -2 -2 -2 -3 -2 -4 -1 -8 M -1 -1 -1 -2 -1 -4 -2 -3 -2 -1 -1 -2 -1 4 2 3 2 2 0 -1 -1 -8 I -1 -2 -1 -3 -1 -4 -3 -4 -3 -2 -2 -2 -2 2 4 3 3 1 -1 -2 -1 -8 L -2 -2 -1 -2 -1 -4 -3 -4 -3 -2 -2 -2 -2 3 3 4 2 2 0 -1 -1 -8 V 0 -1 0 -2 0 -3 -2 -3 -2 -2 -2 -2 -2 2 3 2 3 0 -1 -3 -1 -8 F -1 -3 -2 -4 -2 -5 -3 -4 -4 -3 0 -3 -3 2 1 2 0 7 5 4 -2 -8 Y 0 -2 -2 -3 -2 -4 -1 -3 -3 -2 2 -2 -2 0 -1 0 -1 5 8 4 -2 -8 W -1 -3 -4 -5 -4 -4 -4 -5 -4 -3 -1 -2 -4 -1 -2 -1 -3 4 4 14 -4 -8 X -3 0 0 -1 0 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 -2 -4 -1 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/PAM2800000644000175000017500000000402414136731467017154 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 280 substitution matrix, scale = ln(2)/4 = 0.173287 # # Expected score = -0.916, Entropy = 0.289 bits # # Lowest score = -9, Highest score = 22 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -2 0 0 -2 0 0 2 -1 -1 -2 -1 -1 -4 1 1 1 -7 -4 0 0 0 0 -9 R -2 7 0 -1 -4 2 -1 -3 2 -2 -3 4 0 -5 0 0 -1 3 -5 -3 -1 0 -1 -9 N 0 0 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 1 -5 -3 -2 2 1 0 -9 D 0 -1 2 4 -6 2 4 1 1 -3 -5 0 -3 -7 -1 0 0 -8 -5 -2 4 3 -1 -9 C -2 -4 -4 -6 15 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -3 -9 1 -2 -5 -6 -3 -9 Q 0 2 1 2 -6 4 3 -1 3 -2 -2 1 -1 -5 0 0 -1 -6 -5 -2 2 4 -1 -9 E 0 -1 2 4 -6 3 4 0 1 -2 -4 0 -2 -6 0 0 0 -8 -5 -2 3 4 -1 -9 G 2 -3 1 1 -4 -1 0 6 -2 -3 -5 -2 -3 -6 0 1 0 -8 -6 -1 1 0 -1 -9 H -1 2 2 1 -4 3 1 -2 8 -3 -2 0 -2 -2 0 -1 -1 -3 0 -3 1 2 -1 -9 I -1 -2 -2 -3 -3 -2 -2 -3 -3 5 3 -2 3 1 -2 -2 0 -6 -1 4 -2 -2 -1 -9 L -2 -3 -3 -5 -7 -2 -4 -5 -2 3 7 -3 5 2 -3 -3 -2 -2 -1 2 -4 -3 -1 -9 K -1 4 1 0 -6 1 0 -2 0 -2 -3 6 0 -6 -1 0 0 -4 -5 -3 1 1 -1 -9 M -1 0 -2 -3 -6 -1 -2 -3 -2 3 5 0 7 0 -2 -2 -1 -5 -3 2 -2 -2 -1 -9 F -4 -5 -4 -7 -5 -5 -6 -6 -2 1 2 -6 0 11 -5 -4 -4 1 9 -1 -5 -6 -3 -9 P 1 0 0 -1 -3 0 0 0 0 -2 -3 -1 -2 -5 7 1 1 -7 -6 -1 -1 0 -1 -9 S 1 0 1 0 0 0 0 1 -1 -2 -3 0 -2 -4 1 2 1 -3 -3 -1 1 0 0 -9 T 1 -1 1 0 -3 -1 0 0 -1 0 -2 0 -1 -4 1 1 3 -6 -3 0 0 0 0 -9 W -7 3 -5 -8 -9 -6 -8 -8 -3 -6 -2 -4 -5 1 -7 -3 -6 22 0 -7 -6 -7 -5 -9 Y -4 -5 -3 -5 1 -5 -5 -6 0 -1 -1 -5 -3 9 -6 -3 -3 0 13 -3 -4 -5 -3 -9 V 0 -3 -2 -2 -2 -2 -2 -1 -3 4 2 -3 2 -1 -1 -1 0 -7 -3 5 -2 -2 -1 -9 B 0 -1 2 4 -5 2 3 1 1 -2 -4 1 -2 -5 -1 1 0 -6 -4 -2 3 2 -1 -9 Z 0 0 1 3 -6 4 4 0 2 -2 -3 1 -2 -6 0 0 0 -7 -5 -2 2 4 -1 -9 X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -1 -1 -1 -3 -1 0 0 -5 -3 -1 -1 -1 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/PAM3000000644000175000017500000000402414136731467017145 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 300 substitution matrix, scale = ln(2)/4 = 0.173287 # # Expected score = -0.835, Entropy = 0.254 bits # # Lowest score = -9, Highest score = 22 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -1 0 0 -2 0 0 2 -1 0 -2 -1 -1 -4 1 1 1 -6 -4 0 0 0 0 -9 R -1 7 0 -1 -4 2 -1 -2 2 -2 -3 4 0 -5 0 0 -1 3 -5 -3 0 0 -1 -9 N 0 0 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 0 -5 -2 -2 2 1 0 -9 D 0 -1 2 4 -6 2 4 1 1 -2 -4 0 -3 -6 -1 0 0 -7 -5 -2 3 3 -1 -9 C -2 -4 -4 -6 15 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -2 -9 1 -2 -5 -6 -3 -9 Q 0 2 1 2 -6 4 3 -1 3 -2 -2 1 -1 -5 0 0 -1 -5 -4 -2 2 3 0 -9 E 0 -1 2 4 -6 3 4 0 1 -2 -4 0 -2 -6 0 0 0 -8 -5 -2 3 3 -1 -9 G 2 -2 1 1 -4 -1 0 5 -2 -3 -4 -2 -3 -5 0 1 0 -8 -6 -1 1 0 -1 -9 H -1 2 2 1 -4 3 1 -2 7 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 0 -9 I 0 -2 -2 -2 -3 -2 -2 -3 -2 5 3 -2 3 1 -2 -1 0 -6 -1 4 -2 -2 -1 -9 L -2 -3 -3 -4 -7 -2 -4 -4 -2 3 7 -3 4 3 -3 -3 -2 -2 0 2 -4 -3 -1 -9 K -1 4 1 0 -6 1 0 -2 0 -2 -3 5 0 -6 -1 0 0 -4 -5 -2 1 1 -1 -9 M -1 0 -2 -3 -6 -1 -2 -3 -2 3 4 0 6 1 -2 -2 -1 -5 -2 2 -2 -2 -1 -9 F -4 -5 -4 -6 -5 -5 -6 -5 -2 1 3 -6 1 11 -5 -4 -3 1 9 -1 -5 -5 -2 -9 P 1 0 0 -1 -3 0 0 0 0 -2 -3 -1 -2 -5 6 1 1 -6 -5 -1 0 0 -1 -9 S 1 0 1 0 0 0 0 1 -1 -1 -3 0 -2 -4 1 1 1 -3 -3 -1 1 0 0 -9 T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 1 1 2 -6 -3 0 0 0 0 -9 W -6 3 -5 -7 -9 -5 -8 -8 -3 -6 -2 -4 -5 1 -6 -3 -6 22 0 -7 -6 -6 -4 -9 Y -4 -5 -2 -5 1 -4 -5 -6 0 -1 0 -5 -2 9 -5 -3 -3 0 12 -3 -4 -5 -2 -9 V 0 -3 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -7 -3 5 -2 -2 0 -9 B 0 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -5 0 1 0 -6 -4 -2 3 2 0 -9 Z 0 0 1 3 -6 3 3 0 2 -2 -3 1 -2 -5 0 0 0 -6 -5 -2 2 3 -1 -9 X 0 -1 0 -1 -3 0 -1 -1 0 -1 -1 -1 -1 -2 -1 0 0 -4 -2 0 0 -1 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/BLOSUM650000644000175000017500000000411214136731467017457 0ustar nileshnilesh# Matrix made by matblas from blosum65.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 65 # Entropy = 0.7576, Expected = -0.5675 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 4 -1 -2 -2 0 -1 -1 0 -2 -1 -2 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 -1 -5 R -1 6 0 -2 -4 1 0 -2 0 -3 -2 2 -2 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -5 N -2 0 6 1 -3 0 0 -1 1 -3 -4 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1 -5 D -2 -2 1 6 -4 0 2 -1 -1 -3 -4 -1 -3 -4 -2 0 -1 -5 -3 -3 4 1 -1 -5 C 0 -4 -3 -4 9 -3 -4 -3 -3 -1 -1 -3 -2 -2 -3 -1 -1 -2 -2 -1 -3 -4 -2 -5 Q -1 1 0 0 -3 6 2 -2 1 -3 -2 1 0 -3 -1 0 -1 -2 -2 -2 0 3 -1 -5 E -1 0 0 2 -4 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -3 1 4 -1 -5 G 0 -2 -1 -1 -3 -2 -2 6 -2 -4 -4 -2 -3 -3 -2 0 -2 -3 -3 -3 -1 -2 -2 -5 H -2 0 1 -1 -3 1 0 -2 8 -3 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 0 0 -1 -5 I -1 -3 -3 -3 -1 -3 -3 -4 -3 4 2 -3 1 0 -3 -2 -1 -2 -1 3 -3 -3 -1 -5 L -2 -2 -4 -4 -1 -2 -3 -4 -3 2 4 -3 2 0 -3 -3 -1 -2 -1 1 -4 -3 -1 -5 K -1 2 0 -1 -3 1 1 -2 -1 -3 -3 5 -2 -3 -1 0 -1 -3 -2 -2 0 1 -1 -5 M -1 -2 -2 -3 -2 0 -2 -3 -2 1 2 -2 6 0 -3 -2 -1 -2 -1 1 -3 -2 -1 -5 F -2 -3 -3 -4 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -2 -5 P -1 -2 -2 -2 -3 -1 -1 -2 -2 -3 -3 -1 -3 -4 8 -1 -1 -4 -3 -2 -2 -1 -2 -5 S 1 -1 1 0 -1 0 0 0 -1 -2 -3 0 -2 -2 -1 4 1 -3 -2 -2 0 0 -1 -5 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 5 -3 -2 0 -1 -1 -1 -5 W -3 -3 -4 -5 -2 -2 -3 -3 -2 -2 -2 -3 -2 1 -4 -3 -3 10 2 -3 -4 -3 -2 -5 Y -2 -2 -2 -3 -2 -2 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -1 -3 -2 -1 -5 V 0 -3 -3 -3 -1 -2 -3 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1 -5 B -2 -1 3 4 -3 0 1 -1 0 -3 -4 0 -3 -3 -2 0 -1 -4 -3 -3 4 1 -1 -5 Z -1 0 0 1 -4 3 4 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1 -5 X -1 -1 -1 -1 -2 -1 -1 -2 -1 -1 -1 -1 -1 -2 -2 -1 -1 -2 -1 -1 -1 -1 -1 -5 * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 biogo-1.0.4/align/matrix/matrices/PAM1300000644000175000017500000000402314136731467017145 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 130 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -1.48, Entropy = 0.895 bits # # Lowest score = -8, Highest score = 12 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 3 -3 0 0 -3 -1 0 1 -2 -1 -3 -2 -2 -4 1 1 1 -6 -4 0 0 0 -1 -8 R -3 6 -1 -3 -4 1 -3 -4 1 -2 -4 2 -1 -5 -1 -1 -2 1 -5 -3 -2 -1 -2 -8 N 0 -1 4 2 -4 0 1 0 2 -2 -3 1 -3 -4 -1 1 0 -4 -2 -3 3 0 -1 -8 D 0 -3 2 5 -6 1 3 0 0 -3 -5 -1 -4 -7 -2 0 -1 -7 -5 -3 4 3 -1 -8 C -3 -4 -4 -6 9 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -3 -8 -1 -2 -5 -6 -4 -8 Q -1 1 0 1 -6 5 2 -2 3 -3 -2 0 -1 -6 0 -1 -2 -6 -5 -3 0 4 -1 -8 E 0 -3 1 3 -6 2 5 -1 0 -2 -4 -1 -3 -6 -2 -1 -1 -8 -5 -3 2 4 -1 -8 G 1 -4 0 0 -4 -2 -1 5 -3 -4 -5 -3 -4 -5 -2 1 -1 -7 -6 -2 0 -1 -2 -8 H -2 1 2 0 -4 3 0 -3 7 -3 -3 -1 -3 -2 -1 -2 -2 -3 0 -3 1 1 -1 -8 I -1 -2 -2 -3 -3 -3 -2 -4 -3 5 1 -2 2 0 -3 -2 0 -6 -2 3 -3 -3 -1 -8 L -3 -4 -3 -5 -7 -2 -4 -5 -3 1 5 -4 3 1 -3 -4 -2 -2 -2 1 -4 -3 -2 -8 K -2 2 1 -1 -6 0 -1 -3 -1 -2 -4 5 0 -6 -2 -1 0 -5 -5 -4 0 0 -1 -8 M -2 -1 -3 -4 -6 -1 -3 -4 -3 2 3 0 8 -1 -3 -2 -1 -5 -4 1 -3 -2 -1 -8 F -4 -5 -4 -7 -5 -6 -6 -5 -2 0 1 -6 -1 7 -5 -3 -4 -1 4 -2 -5 -6 -3 -8 P 1 -1 -1 -2 -3 0 -2 -2 -1 -3 -3 -2 -3 -5 6 1 -1 -6 -6 -2 -2 -1 -1 -8 S 1 -1 1 0 0 -1 -1 1 -2 -2 -4 -1 -2 -3 1 3 2 -2 -3 -2 0 -1 -1 -8 T 1 -2 0 -1 -3 -2 -1 -1 -2 0 -2 0 -1 -4 -1 2 4 -6 -3 0 0 -2 -1 -8 W -6 1 -4 -7 -8 -6 -8 -7 -3 -6 -2 -5 -5 -1 -6 -2 -6 12 -1 -7 -5 -7 -5 -8 Y -4 -5 -2 -5 -1 -5 -5 -6 0 -2 -2 -5 -4 4 -6 -3 -3 -1 8 -3 -3 -5 -3 -8 V 0 -3 -3 -3 -2 -3 -3 -2 -3 3 1 -4 1 -2 -2 -2 0 -7 -3 5 -3 -3 -1 -8 B 0 -2 3 4 -5 0 2 0 1 -3 -4 0 -3 -5 -2 0 0 -5 -3 -3 3 2 -1 -8 Z 0 -1 0 3 -6 4 4 -1 1 -3 -3 0 -2 -6 -1 -1 -2 -7 -5 -3 2 4 -1 -8 X -1 -2 -1 -1 -4 -1 -1 -2 -1 -1 -2 -1 -1 -3 -1 -1 -1 -5 -3 -1 -1 -1 -1 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/PAM3500000644000175000017500000000515514136731467017160 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 350 substitution matrix, scale = ln(2)/5 = 0.138629 # # Expected score = -0.701, Entropy = 0.186 bits # # Lowest score = -10, Highest score = 27 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -1 0 1 -2 0 1 2 -1 0 -2 -1 -1 -4 1 1 1 -7 -4 0 1 0 0 -10 R -1 7 1 -1 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 -1 4 -5 -3 0 1 -1 -10 N 0 1 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 1 -5 -3 -2 2 2 0 -10 D 1 -1 2 4 -6 2 4 1 1 -2 -4 1 -3 -6 0 1 0 -8 -5 -2 3 3 -1 -10 C -2 -4 -4 -6 18 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -2 -10 1 -2 -5 -6 -3 -10 Q 0 2 1 2 -6 4 3 -1 3 -2 -2 1 -1 -5 1 0 0 -5 -5 -2 2 3 0 -10 E 1 0 2 4 -6 3 4 1 1 -2 -4 0 -2 -6 0 0 0 -8 -5 -2 3 3 0 -10 G 2 -2 1 1 -4 -1 1 5 -2 -2 -4 -1 -3 -6 0 1 1 -8 -6 -1 1 0 -1 -10 H -1 2 2 1 -4 3 1 -2 7 -2 -2 1 -2 -2 0 -1 -1 -3 0 -2 1 2 0 -10 I 0 -2 -2 -2 -3 -2 -2 -2 -2 5 4 -2 3 2 -2 -1 0 -6 0 4 -2 -2 0 -10 L -2 -3 -3 -4 -7 -2 -4 -4 -2 4 8 -3 5 3 -3 -3 -2 -2 0 3 -4 -3 -1 -10 K -1 4 1 1 -6 1 0 -1 1 -2 -3 5 0 -6 -1 0 0 -4 -5 -2 1 1 -1 -10 M -1 0 -2 -3 -6 -1 -2 -3 -2 3 5 0 6 1 -2 -2 -1 -5 -2 2 -2 -2 0 -10 F -4 -5 -4 -6 -5 -5 -6 -6 -2 2 3 -6 1 13 -5 -4 -3 1 11 -1 -5 -6 -2 -10 P 1 0 0 0 -3 1 0 0 0 -2 -3 -1 -2 -5 6 1 1 -7 -6 -1 0 0 0 -10 S 1 0 1 1 0 0 0 1 -1 -1 -3 0 -2 -4 1 1 1 -3 -3 -1 1 0 0 -10 T 1 -1 1 0 -2 0 0 1 -1 0 -2 0 -1 -3 1 1 2 -6 -3 0 0 0 0 -10 W -7 4 -5 -8 -10 -5 -8 -8 -3 -6 -2 -4 -5 1 -7 -3 -6 27 1 -7 -6 -7 -5 -10 Y -4 -5 -3 -5 1 -5 -5 -6 0 0 0 -5 -2 11 -6 -3 -3 1 14 -2 -4 -5 -2 -10 V 0 -3 -2 -2 -2 -2 -2 -1 -2 4 3 -2 2 -1 -1 -1 0 -7 -2 5 -2 -2 0 -10 B 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -5 0 1 0 -6 -4 -2 3 2 0 -10 Z 0 1 2 3 -6 3 3 0 2 -2 -3 1 -2 -6 0 0 0 -7 -5 -2 2 3 0 -10 X 0 -1 0 -1 -3 0 0 -1 0 0 -1 -1 0 -2 0 0 0 -5 -2 0 0 0 -1 -10 * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 biogo-1.0.4/align/matrix/matrices/PAM3700000644000175000017500000000402414136731467017154 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 370 substitution matrix, scale = ln(2)/5 = 0.138629 # # Expected score = -0.649, Entropy = 0.165 bits # # Lowest score = -9, Highest score = 27 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 2 -1 0 -2 -1 -1 -4 1 1 1 -7 -4 0 1 0 0 -9 R -1 6 1 0 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 3 -4 -2 0 1 -1 -9 N 0 1 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 0 -5 -3 -1 2 1 0 -9 D 1 0 2 4 -5 2 3 1 1 -2 -4 1 -2 -6 0 1 0 -7 -5 -2 3 3 0 -9 C -2 -4 -4 -5 18 -6 -6 -3 -4 -2 -6 -6 -6 -4 -3 0 -2 -9 1 -2 -5 -6 -3 -9 Q 0 2 1 2 -6 3 2 -1 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -2 2 3 0 -9 E 1 0 2 3 -6 2 3 1 1 -2 -3 1 -2 -6 0 0 0 -8 -5 -2 3 3 0 -9 G 2 -2 1 1 -3 -1 1 5 -2 -2 -4 -1 -3 -5 0 1 1 -8 -6 -1 1 0 -1 -9 H -1 2 2 1 -4 3 1 -2 6 -2 -2 1 -2 -2 0 0 -1 -3 0 -2 1 2 0 -9 I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 3 2 -2 -1 0 -5 0 4 -2 -2 0 -9 L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 7 -3 5 3 -3 -3 -1 -2 0 3 -3 -3 -1 -9 K -1 4 1 1 -6 1 1 -1 1 -2 -3 5 0 -6 -1 0 0 -3 -5 -2 1 1 0 -9 M -1 0 -2 -2 -6 -1 -2 -3 -2 3 5 0 5 1 -2 -1 0 -4 -2 2 -2 -2 0 -9 F -4 -5 -4 -6 -4 -5 -6 -5 -2 2 3 -6 1 12 -5 -4 -3 2 11 0 -5 -5 -2 -9 P 1 0 0 0 -3 1 0 0 0 -2 -3 -1 -2 -5 6 1 1 -6 -5 -1 0 0 0 -9 S 1 0 1 1 0 0 0 1 0 -1 -3 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -9 T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 2 -6 -3 0 0 0 0 -9 W -7 3 -5 -7 -9 -5 -8 -8 -3 -5 -2 -3 -4 2 -6 -3 -6 27 1 -7 -6 -6 -4 -9 Y -4 -4 -3 -5 1 -4 -5 -6 0 0 0 -5 -2 11 -5 -3 -3 1 14 -2 -4 -5 -2 -9 V 0 -2 -1 -2 -2 -2 -2 -1 -2 4 3 -2 2 0 -1 -1 0 -7 -2 4 -2 -2 0 -9 B 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -2 2 2 0 -9 Z 0 1 1 3 -6 3 3 0 2 -2 -3 1 -2 -5 0 0 0 -6 -5 -2 2 3 0 -9 X 0 -1 0 0 -3 0 0 -1 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/PAM1800000644000175000017500000000515414136731467017160 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 180 substitution matrix, scale = ln(2)/3 = 0.231049 # # Expected score = -1.51, Entropy = 0.591 bits # # Lowest score = -10, Highest score = 18 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 3 -3 0 0 -3 -1 0 1 -2 -1 -3 -2 -2 -5 1 1 2 -8 -5 0 0 0 -1 -10 R -3 8 -1 -3 -5 1 -2 -4 2 -3 -4 4 -1 -6 -1 -1 -2 2 -6 -4 -2 0 -2 -10 N 0 -1 4 3 -5 0 2 0 2 -3 -4 1 -3 -5 -1 1 0 -5 -2 -3 3 1 -1 -10 D 0 -3 3 5 -7 2 4 0 0 -3 -6 0 -4 -8 -2 0 -1 -9 -6 -3 4 3 -1 -10 C -3 -5 -5 -7 13 -7 -7 -5 -4 -3 -8 -7 -7 -6 -4 0 -3 -10 0 -3 -6 -7 -4 -10 Q -1 1 0 2 -7 6 3 -2 4 -3 -2 0 -1 -6 0 -1 -2 -6 -6 -3 1 5 -1 -10 E 0 -2 2 4 -7 3 5 0 0 -3 -5 -1 -3 -7 -1 -1 -1 -9 -6 -3 3 5 -1 -10 G 1 -4 0 0 -5 -2 0 6 -3 -4 -6 -3 -4 -6 -1 1 -1 -9 -7 -2 0 -1 -2 -10 H -2 2 2 0 -4 4 0 -3 8 -4 -3 -1 -3 -3 -1 -2 -2 -4 0 -3 1 2 -1 -10 I -1 -3 -3 -3 -3 -3 -3 -4 -4 6 2 -3 2 1 -3 -2 0 -7 -2 5 -3 -3 -1 -10 L -3 -4 -4 -6 -8 -2 -5 -6 -3 2 7 -4 4 1 -4 -4 -3 -3 -2 2 -5 -3 -2 -10 K -2 4 1 0 -7 0 -1 -3 -1 -3 -4 6 1 -7 -2 -1 0 -5 -6 -4 0 0 -1 -10 M -2 -1 -3 -4 -7 -1 -3 -4 -3 2 4 1 9 0 -3 -2 -1 -6 -4 2 -3 -2 -1 -10 F -5 -6 -5 -8 -6 -6 -7 -6 -3 1 1 -7 0 10 -6 -4 -4 0 7 -2 -6 -7 -3 -10 P 1 -1 -1 -2 -4 0 -1 -1 -1 -3 -4 -2 -3 -6 8 1 0 -7 -7 -2 -2 -1 -1 -10 S 1 -1 1 0 0 -1 -1 1 -2 -2 -4 -1 -2 -4 1 3 2 -3 -4 -2 1 -1 0 -10 T 2 -2 0 -1 -3 -2 -1 -1 -2 0 -3 0 -1 -4 0 2 4 -7 -4 0 0 -1 -1 -10 W -8 2 -5 -9 -10 -6 -9 -9 -4 -7 -3 -5 -6 0 -7 -3 -7 18 -1 -8 -7 -8 -6 -10 Y -5 -6 -2 -6 0 -6 -6 -7 0 -2 -2 -6 -4 7 -7 -4 -4 -1 11 -4 -4 -6 -3 -10 V 0 -4 -3 -3 -3 -3 -3 -2 -3 5 2 -4 2 -2 -2 -2 0 -8 -4 6 -3 -3 -1 -10 B 0 -2 3 4 -6 1 3 0 1 -3 -5 0 -3 -6 -2 1 0 -7 -4 -3 4 3 -1 -10 Z 0 0 1 3 -7 5 5 -1 2 -3 -3 0 -2 -7 -1 -1 -1 -8 -6 -3 3 5 -1 -10 X -1 -2 -1 -1 -4 -1 -1 -2 -1 -1 -2 -1 -1 -3 -1 0 -1 -6 -3 -1 -1 -1 -1 -10 * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 biogo-1.0.4/align/matrix/matrices/BLOSUM800000644000175000017500000000411414136731467017456 0ustar nileshnilesh# Matrix made by matblas from blosum80_3.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 80 # Entropy = 0.9868, Expected = -0.7442 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 7 -3 -3 -3 -1 -2 -2 0 -3 -3 -3 -1 -2 -4 -1 2 0 -5 -4 -1 -3 -2 -1 -8 R -3 9 -1 -3 -6 1 -1 -4 0 -5 -4 3 -3 -5 -3 -2 -2 -5 -4 -4 -2 0 -2 -8 N -3 -1 9 2 -5 0 -1 -1 1 -6 -6 0 -4 -6 -4 1 0 -7 -4 -5 5 -1 -2 -8 D -3 -3 2 10 -7 -1 2 -3 -2 -7 -7 -2 -6 -6 -3 -1 -2 -8 -6 -6 6 1 -3 -8 C -1 -6 -5 -7 13 -5 -7 -6 -7 -2 -3 -6 -3 -4 -6 -2 -2 -5 -5 -2 -6 -7 -4 -8 Q -2 1 0 -1 -5 9 3 -4 1 -5 -4 2 -1 -5 -3 -1 -1 -4 -3 -4 -1 5 -2 -8 E -2 -1 -1 2 -7 3 8 -4 0 -6 -6 1 -4 -6 -2 -1 -2 -6 -5 -4 1 6 -2 -8 G 0 -4 -1 -3 -6 -4 -4 9 -4 -7 -7 -3 -5 -6 -5 -1 -3 -6 -6 -6 -2 -4 -3 -8 H -3 0 1 -2 -7 1 0 -4 12 -6 -5 -1 -4 -2 -4 -2 -3 -4 3 -5 -1 0 -2 -8 I -3 -5 -6 -7 -2 -5 -6 -7 -6 7 2 -5 2 -1 -5 -4 -2 -5 -3 4 -6 -6 -2 -8 L -3 -4 -6 -7 -3 -4 -6 -7 -5 2 6 -4 3 0 -5 -4 -3 -4 -2 1 -7 -5 -2 -8 K -1 3 0 -2 -6 2 1 -3 -1 -5 -4 8 -3 -5 -2 -1 -1 -6 -4 -4 -1 1 -2 -8 M -2 -3 -4 -6 -3 -1 -4 -5 -4 2 3 -3 9 0 -4 -3 -1 -3 -3 1 -5 -3 -2 -8 F -4 -5 -6 -6 -4 -5 -6 -6 -2 -1 0 -5 0 10 -6 -4 -4 0 4 -2 -6 -6 -3 -8 P -1 -3 -4 -3 -6 -3 -2 -5 -4 -5 -5 -2 -4 -6 12 -2 -3 -7 -6 -4 -4 -2 -3 -8 S 2 -2 1 -1 -2 -1 -1 -1 -2 -4 -4 -1 -3 -4 -2 7 2 -6 -3 -3 0 -1 -1 -8 T 0 -2 0 -2 -2 -1 -2 -3 -3 -2 -3 -1 -1 -4 -3 2 8 -5 -3 0 -1 -2 -1 -8 W -5 -5 -7 -8 -5 -4 -6 -6 -4 -5 -4 -6 -3 0 -7 -6 -5 16 3 -5 -8 -5 -5 -8 Y -4 -4 -4 -6 -5 -3 -5 -6 3 -3 -2 -4 -3 4 -6 -3 -3 3 11 -3 -5 -4 -3 -8 V -1 -4 -5 -6 -2 -4 -4 -6 -5 4 1 -4 1 -2 -4 -3 0 -5 -3 7 -6 -4 -2 -8 B -3 -2 5 6 -6 -1 1 -2 -1 -6 -7 -1 -5 -6 -4 0 -1 -8 -5 -6 6 0 -3 -8 Z -2 0 -1 1 -7 5 6 -4 0 -6 -5 1 -3 -6 -2 -1 -2 -5 -4 -4 0 6 -1 -8 X -1 -2 -2 -3 -4 -2 -2 -3 -2 -2 -2 -2 -2 -3 -3 -1 -1 -5 -3 -2 -3 -1 -2 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/PAM3400000644000175000017500000000402414136731467017151 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 340 substitution matrix, scale = ln(2)/4 = 0.173287 # # Expected score = -0.680, Entropy = 0.198 bits # # Lowest score = -8, Highest score = 22 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 0 1 -1 0 -2 -1 -1 -3 1 1 1 -6 -3 0 0 0 0 -8 R -1 6 0 -1 -4 1 0 -2 2 -2 -3 4 0 -4 0 0 0 3 -4 -2 0 0 -1 -8 N 0 0 1 2 -3 1 1 1 1 -2 -3 1 -1 -3 0 1 0 -4 -2 -1 2 1 0 -8 D 1 -1 2 3 -5 2 3 1 1 -2 -4 0 -2 -5 0 0 0 -7 -4 -2 3 3 0 -8 C -2 -4 -3 -5 15 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3 0 -2 -8 1 -2 -4 -5 -3 -8 Q 0 1 1 2 -5 3 2 -1 3 -2 -2 1 -1 -4 0 0 0 -5 -4 -2 1 3 0 -8 E 0 0 1 3 -5 2 3 1 1 -2 -3 0 -2 -5 0 0 0 -7 -4 -1 2 3 0 -8 G 1 -2 1 1 -3 -1 1 4 -2 -2 -4 -1 -2 -5 0 1 0 -7 -5 -1 1 0 -1 -8 H -1 2 1 1 -3 3 1 -2 6 -2 -2 0 -2 -2 0 0 -1 -2 0 -2 1 2 0 -8 I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 2 1 -2 -1 0 -5 0 3 -2 -2 0 -8 L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 6 -3 4 3 -2 -2 -1 -2 0 2 -3 -2 -1 -8 K -1 4 1 0 -5 1 0 -1 0 -2 -3 4 0 -5 -1 0 0 -3 -4 -2 1 1 0 -8 M -1 0 -1 -2 -5 -1 -2 -2 -2 2 4 0 5 1 -2 -1 0 -4 -2 2 -2 -1 0 -8 F -3 -4 -3 -5 -4 -4 -5 -5 -2 1 3 -5 1 10 -4 -3 -3 1 9 -1 -4 -5 -2 -8 P 1 0 0 0 -3 0 0 0 0 -2 -2 -1 -2 -4 5 1 1 -5 -5 -1 0 0 0 -8 S 1 0 1 0 0 0 0 1 0 -1 -2 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -8 T 1 0 0 0 -2 0 0 0 -1 0 -1 0 0 -3 1 1 2 -5 -3 0 0 0 0 -8 W -6 3 -4 -7 -8 -5 -7 -7 -2 -5 -2 -3 -4 1 -5 -3 -5 22 1 -6 -5 -6 -4 -8 Y -3 -4 -2 -4 1 -4 -4 -5 0 0 0 -4 -2 9 -5 -3 -3 1 12 -2 -3 -4 -2 -8 V 0 -2 -1 -2 -2 -2 -1 -1 -2 3 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 0 -8 B 0 0 2 3 -4 1 2 1 1 -2 -3 1 -2 -4 0 1 0 -5 -3 -2 2 2 0 -8 Z 0 0 1 3 -5 3 3 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -2 2 3 0 -8 X 0 -1 0 0 -3 0 0 -1 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/BLOSUM350000644000175000017500000000411214136731467017454 0ustar nileshnilesh# Matrix made by matblas from blosum35.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/4 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 35 # Entropy = 0.2111, Expected = -0.1550 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 5 -1 -1 -1 -2 0 -1 0 -2 -1 -2 0 0 -2 -2 1 0 -2 -1 0 -1 -1 0 -5 R -1 8 -1 -1 -3 2 -1 -2 -1 -3 -2 2 0 -1 -2 -1 -2 0 0 -1 -1 0 -1 -5 N -1 -1 7 1 -1 1 -1 1 1 -1 -2 0 -1 -1 -2 0 0 -2 -2 -2 4 0 0 -5 D -1 -1 1 8 -3 -1 2 -2 0 -3 -2 -1 -3 -3 -1 -1 -1 -3 -2 -2 5 1 -1 -5 C -2 -3 -1 -3 15 -3 -1 -3 -4 -4 -2 -2 -4 -4 -4 -3 -1 -5 -5 -2 -2 -2 -2 -5 Q 0 2 1 -1 -3 7 2 -2 -1 -2 -2 0 -1 -4 0 0 0 -1 0 -3 0 4 -1 -5 E -1 -1 -1 2 -1 2 6 -2 -1 -3 -1 1 -2 -3 0 0 -1 -1 -1 -2 0 5 -1 -5 G 0 -2 1 -2 -3 -2 -2 7 -2 -3 -3 -1 -1 -3 -2 1 -2 -1 -2 -3 0 -2 -1 -5 H -2 -1 1 0 -4 -1 -1 -2 12 -3 -2 -2 1 -3 -1 -1 -2 -4 0 -4 0 -1 -1 -5 I -1 -3 -1 -3 -4 -2 -3 -3 -3 5 2 -2 1 1 -1 -2 -1 -1 0 4 -2 -3 0 -5 L -2 -2 -2 -2 -2 -2 -1 -3 -2 2 5 -2 3 2 -3 -2 0 0 0 2 -2 -2 0 -5 K 0 2 0 -1 -2 0 1 -1 -2 -2 -2 5 0 -1 0 0 0 0 -1 -2 0 1 0 -5 M 0 0 -1 -3 -4 -1 -2 -1 1 1 3 0 6 0 -3 -1 0 1 0 1 -2 -2 0 -5 F -2 -1 -1 -3 -4 -4 -3 -3 -3 1 2 -1 0 8 -4 -1 -1 1 3 1 -2 -3 -1 -5 P -2 -2 -2 -1 -4 0 0 -2 -1 -1 -3 0 -3 -4 10 -2 0 -4 -3 -3 -1 0 -1 -5 S 1 -1 0 -1 -3 0 0 1 -1 -2 -2 0 -1 -1 -2 4 2 -2 -1 -1 0 0 0 -5 T 0 -2 0 -1 -1 0 -1 -2 -2 -1 0 0 0 -1 0 2 5 -2 -2 1 -1 -1 0 -5 W -2 0 -2 -3 -5 -1 -1 -1 -4 -1 0 0 1 1 -4 -2 -2 16 3 -2 -3 -1 -1 -5 Y -1 0 -2 -2 -5 0 -1 -2 0 0 0 -1 0 3 -3 -1 -2 3 8 0 -2 -1 -1 -5 V 0 -1 -2 -2 -2 -3 -2 -3 -4 4 2 -2 1 1 -3 -1 1 -2 0 5 -2 -2 0 -5 B -1 -1 4 5 -2 0 0 0 0 -2 -2 0 -2 -2 -1 0 -1 -3 -2 -2 5 0 -1 -5 Z -1 0 0 1 -2 4 5 -2 -1 -3 -2 1 -2 -3 0 0 -1 -1 -1 -2 0 4 0 -5 X 0 -1 0 -1 -2 -1 -1 -1 -1 0 0 0 0 -1 -1 0 0 -1 -1 0 -1 0 -1 -5 * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 biogo-1.0.4/align/matrix/matrices/PAM4000000644000175000017500000000402414136731467017146 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 400 substitution matrix, scale = ln(2)/5 = 0.138629 # # Expected score = -0.521, Entropy = 0.139 bits # # Lowest score = -8, Highest score = 26 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 1 -1 0 -2 -1 -1 -3 1 1 1 -6 -3 0 1 0 0 -8 R -1 5 1 0 -4 1 0 -2 2 -2 -3 4 0 -4 0 0 0 3 -4 -2 0 1 0 -8 N 0 1 1 2 -3 1 2 1 1 -1 -3 1 -1 -3 0 1 0 -4 -3 -1 2 1 0 -8 D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -4 -2 2 2 0 -8 C -2 -4 -3 -5 17 -5 -5 -3 -3 -2 -6 -5 -5 -4 -2 0 -2 -8 1 -2 -4 -5 -3 -8 Q 0 1 1 2 -5 3 2 0 3 -2 -2 1 -1 -4 0 0 0 -5 -4 -1 2 2 0 -8 E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 0 0 -7 -4 -1 2 3 0 -8 G 1 -2 1 1 -3 0 1 4 -1 -2 -3 -1 -2 -5 0 1 1 -7 -5 -1 1 0 0 -8 H -1 2 1 1 -3 3 1 -1 5 -2 -2 1 -1 -2 0 0 -1 -2 0 -2 1 2 0 -8 I 0 -2 -1 -2 -2 -2 -2 -2 -2 4 3 -2 2 2 -1 -1 0 -5 0 3 -2 -2 0 -8 L -2 -3 -3 -3 -6 -2 -3 -3 -2 3 7 -2 4 3 -2 -2 -1 -2 0 3 -3 -2 -1 -8 K -1 4 1 1 -5 1 1 -1 1 -2 -2 4 0 -5 0 0 0 -3 -4 -2 1 1 0 -8 M -1 0 -1 -2 -5 -1 -2 -2 -1 2 4 0 5 1 -1 -1 0 -4 -1 2 -2 -1 0 -8 F -3 -4 -3 -5 -4 -4 -5 -5 -2 2 3 -5 1 11 -4 -3 -3 2 10 0 -4 -5 -2 -8 P 1 0 0 0 -2 0 0 0 0 -1 -2 0 -1 -4 5 1 1 -6 -5 -1 0 0 0 -8 S 1 0 1 1 0 0 0 1 0 -1 -2 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -8 T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 1 -5 -3 0 0 0 0 -8 W -6 3 -4 -7 -8 -5 -7 -7 -2 -5 -2 -3 -4 2 -6 -3 -5 26 1 -6 -5 -6 -4 -8 Y -3 -4 -3 -4 1 -4 -4 -5 0 0 0 -4 -1 10 -5 -3 -3 1 13 -2 -3 -4 -2 -8 V 0 -2 -1 -2 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -6 -2 4 -1 -1 0 -8 B 1 0 2 2 -4 2 2 1 1 -2 -3 1 -2 -4 0 1 0 -5 -3 -1 2 2 0 -8 Z 0 1 1 2 -5 2 3 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -1 2 3 0 -8 X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/PAM1200000644000175000017500000000402314136731467017144 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 120 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -1.64, Entropy = 0.979 bits # # Lowest score = -8, Highest score = 12 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 3 -3 -1 0 -3 -1 0 1 -3 -1 -3 -2 -2 -4 1 1 1 -7 -4 0 0 -1 -1 -8 R -3 6 -1 -3 -4 1 -3 -4 1 -2 -4 2 -1 -5 -1 -1 -2 1 -5 -3 -2 -1 -2 -8 N -1 -1 4 2 -5 0 1 0 2 -2 -4 1 -3 -4 -2 1 0 -4 -2 -3 3 0 -1 -8 D 0 -3 2 5 -7 1 3 0 0 -3 -5 -1 -4 -7 -3 0 -1 -8 -5 -3 4 3 -2 -8 C -3 -4 -5 -7 9 -7 -7 -4 -4 -3 -7 -7 -6 -6 -4 0 -3 -8 -1 -3 -6 -7 -4 -8 Q -1 1 0 1 -7 6 2 -3 3 -3 -2 0 -1 -6 0 -2 -2 -6 -5 -3 0 4 -1 -8 E 0 -3 1 3 -7 2 5 -1 -1 -3 -4 -1 -3 -7 -2 -1 -2 -8 -5 -3 3 4 -1 -8 G 1 -4 0 0 -4 -3 -1 5 -4 -4 -5 -3 -4 -5 -2 1 -1 -8 -6 -2 0 -2 -2 -8 H -3 1 2 0 -4 3 -1 -4 7 -4 -3 -2 -4 -3 -1 -2 -3 -3 -1 -3 1 1 -2 -8 I -1 -2 -2 -3 -3 -3 -3 -4 -4 6 1 -3 1 0 -3 -2 0 -6 -2 3 -3 -3 -1 -8 L -3 -4 -4 -5 -7 -2 -4 -5 -3 1 5 -4 3 0 -3 -4 -3 -3 -2 1 -4 -3 -2 -8 K -2 2 1 -1 -7 0 -1 -3 -2 -3 -4 5 0 -7 -2 -1 -1 -5 -5 -4 0 -1 -2 -8 M -2 -1 -3 -4 -6 -1 -3 -4 -4 1 3 0 8 -1 -3 -2 -1 -6 -4 1 -4 -2 -2 -8 F -4 -5 -4 -7 -6 -6 -7 -5 -3 0 0 -7 -1 8 -5 -3 -4 -1 4 -3 -5 -6 -3 -8 P 1 -1 -2 -3 -4 0 -2 -2 -1 -3 -3 -2 -3 -5 6 1 -1 -7 -6 -2 -2 -1 -2 -8 S 1 -1 1 0 0 -2 -1 1 -2 -2 -4 -1 -2 -3 1 3 2 -2 -3 -2 0 -1 -1 -8 T 1 -2 0 -1 -3 -2 -2 -1 -3 0 -3 -1 -1 -4 -1 2 4 -6 -3 0 0 -2 -1 -8 W -7 1 -4 -8 -8 -6 -8 -8 -3 -6 -3 -5 -6 -1 -7 -2 -6 12 -2 -8 -6 -7 -5 -8 Y -4 -5 -2 -5 -1 -5 -5 -6 -1 -2 -2 -5 -4 4 -6 -3 -3 -2 8 -3 -3 -5 -3 -8 V 0 -3 -3 -3 -3 -3 -3 -2 -3 3 1 -4 1 -3 -2 -2 0 -8 -3 5 -3 -3 -1 -8 B 0 -2 3 4 -6 0 3 0 1 -3 -4 0 -4 -5 -2 0 0 -6 -3 -3 4 2 -1 -8 Z -1 -1 0 3 -7 4 4 -2 1 -3 -3 -1 -2 -6 -1 -1 -2 -7 -5 -3 2 4 -1 -8 X -1 -2 -1 -2 -4 -1 -1 -2 -2 -1 -2 -2 -2 -3 -2 -1 -1 -5 -3 -1 -1 -1 -2 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/PAM40.cdi0000644000175000017500000000514114136731467017625 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 40 substitution matrix, scale = 0.0693200 # # Expected score = -21.3, Entropy = 2.26 bits # # Lowest score = -74, Highest score = 64 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 28 -30 -14 -13 -28 -17 -8 -5 -31 -19 -27 -29 -20 -37 -4 1 0 -59 -34 -8 -14 -12 -13 -74 R -30 41 -23 -43 -35 -5 -38 -41 -4 -23 -38 5 -17 -42 -15 -12 -27 -6 -45 -33 -30 -15 -23 -74 N -14 -23 36 10 -47 -14 -7 -12 4 -22 -31 -2 -37 -38 -24 2 -6 -36 -19 -33 28 -10 -14 -74 D -13 -43 10 37 -62 -8 15 -13 -15 -32 -54 -18 -47 -64 -33 -14 -19 -67 -49 -35 29 8 -23 -74 C -28 -35 -47 -62 47 -61 -62 -41 -33 -27 -66 -62 -59 -56 -35 -11 -34 -70 -16 -25 -53 -62 -39 -74 Q -17 -5 -14 -8 -61 40 8 -30 7 -33 -21 -10 -16 -57 -11 -22 -23 -56 -51 -29 -10 30 -19 -74 E -8 -38 -7 15 -62 8 36 -17 -20 -24 -41 -18 -30 -62 -23 -18 -25 -74 -38 -28 8 29 -20 -74 G -5 -41 -12 -13 -41 -30 -17 31 -38 -46 -47 -31 -37 -41 -26 -5 -24 -67 -60 -24 -12 -21 -22 -74 H -31 -4 4 -15 -33 7 -20 -38 44 -39 -26 -25 -44 -25 -17 -25 -31 -32 -13 -28 -3 -2 -21 -74 I -19 -23 -22 -32 -27 -33 -24 -46 -39 40 -3 -26 0 -8 -37 -29 -9 -60 -26 12 -26 -27 -20 -74 L -27 -38 -31 -54 -66 -21 -41 -47 -26 -3 33 -36 6 -9 -31 -36 -29 -26 -29 -8 -39 -29 -26 -74 K -29 5 -2 -18 -62 -10 -18 -31 -25 -26 -36 32 -5 -61 -28 -16 -12 -51 -42 -39 -9 -14 -22 -74 M -20 -17 -37 -47 -59 -16 -30 -37 -44 0 6 -5 54 -16 -35 -23 -16 -55 -48 -3 -41 -22 -21 -74 F -37 -42 -38 -64 -56 -57 -62 -41 -25 -8 -9 -61 -16 43 -44 -28 -38 -18 12 -33 -47 -60 -34 -74 P -4 -15 -24 -33 -35 -11 -23 -26 -17 -37 -31 -28 -35 -44 39 -5 -17 -60 -59 -24 -28 -16 -21 -74 S 1 -12 2 -14 -11 -22 -18 -5 -25 -29 -36 -16 -23 -28 -5 30 4 -22 -30 -26 -5 -19 -12 -74 T 0 -27 -6 -19 -34 -23 -25 -24 -31 -9 -29 -12 -16 -38 -17 4 34 -56 -28 -10 -12 -24 -15 -74 W -59 -6 -36 -67 -70 -56 -74 -67 -32 -60 -26 -51 -55 -18 -60 -22 -56 64 -21 -68 -45 -63 -47 -74 Y -34 -45 -19 -49 -16 -51 -38 -60 -13 -26 -29 -42 -48 12 -59 -30 -28 -21 48 -32 -28 -42 -33 -74 V -8 -33 -33 -35 -25 -29 -28 -24 -28 12 -8 -39 -3 -33 -24 -26 -10 -68 -32 34 -34 -28 -19 -74 B -14 -30 28 29 -53 -10 8 -12 -3 -26 -39 -9 -41 -47 -28 -5 -12 -45 -28 -34 29 3 -19 -74 Z -12 -15 -10 8 -62 30 29 -21 -2 -27 -29 -14 -22 -60 -16 -19 -24 -63 -42 -28 3 30 -20 -74 X -13 -23 -14 -23 -39 -19 -20 -22 -21 -20 -26 -22 -21 -34 -21 -12 -15 -47 -33 -19 -19 -20 -21 -74 * -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 1 biogo-1.0.4/align/matrix/matrices/PAM160.cdi0000644000175000017500000000514314136731467017712 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 160 substitution matrix, scale = 0.0693200 # # Expected score = -5.73, Entropy = 0.694 bits # # Lowest score = -35, Highest score = 60 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 12 -10 -1 -1 -11 -4 0 4 -9 -4 -10 -8 -7 -17 4 5 6 -27 -17 0 -1 -1 -2 -35 R -10 28 -3 -11 -17 4 -9 -15 5 -10 -16 13 -3 -21 -3 -3 -7 6 -21 -14 -7 -2 -6 -35 N -1 -3 14 10 -18 1 5 0 8 -9 -15 4 -11 -17 -5 4 2 -19 -9 -11 12 3 -2 -35 D -1 -11 10 20 -26 5 16 0 1 -13 -21 -2 -15 -28 -8 -1 -3 -32 -21 -13 16 12 -5 -35 C -11 -17 -18 -26 43 -27 -27 -17 -16 -11 -30 -27 -26 -23 -15 -1 -12 -35 -2 -10 -22 -27 -16 -35 Q -4 4 1 5 -27 23 11 -9 12 -12 -8 1 -5 -24 0 -5 -6 -24 -21 -11 3 17 -4 -35 E 0 -9 5 16 -27 11 20 -2 0 -10 -17 -3 -12 -27 -6 -2 -5 -34 -20 -10 12 17 -5 -35 G 4 -15 0 0 -17 -9 -2 22 -13 -15 -21 -11 -15 -22 -6 3 -3 -33 -26 -8 0 -5 -6 -35 H -9 5 8 1 -16 12 0 -13 30 -14 -11 -4 -14 -10 -3 -6 -9 -14 -1 -12 4 7 -5 -35 I -4 -10 -9 -13 -11 -12 -10 -15 -14 23 8 -10 8 2 -12 -9 0 -26 -8 16 -11 -11 -5 -35 L -10 -16 -15 -21 -30 -8 -17 -21 -11 8 25 -15 14 4 -13 -15 -10 -10 -8 5 -18 -13 -8 -35 K -8 13 4 -2 -27 1 -3 -11 -4 -10 -15 22 2 -26 -8 -3 -1 -19 -21 -14 1 -1 -6 -35 M -7 -3 -11 -15 -26 -5 -12 -15 -14 8 14 2 34 -2 -12 -9 -4 -22 -16 6 -13 -8 -5 -35 F -17 -21 -17 -28 -23 -24 -27 -22 -10 2 4 -26 -2 35 -22 -15 -16 -3 23 -9 -22 -26 -13 -35 P 4 -3 -5 -8 -15 0 -6 -6 -3 -12 -13 -8 -12 -22 27 3 -1 -27 -25 -8 -7 -3 -5 -35 S 5 -3 4 -1 -1 -5 -2 3 -6 -9 -15 -3 -9 -15 3 11 7 -11 -13 -7 2 -4 -2 -35 T 6 -7 2 -3 -12 -6 -5 -3 -9 0 -10 -1 -4 -16 -1 7 16 -25 -13 0 -1 -6 -2 -35 W -27 6 -19 -32 -35 -24 -34 -33 -14 -26 -10 -19 -22 -3 -27 -11 -25 60 -5 -31 -24 -29 -20 -35 Y -17 -21 -9 -21 -2 -21 -20 -26 -1 -8 -8 -21 -16 23 -25 -13 -13 -5 39 -14 -14 -20 -13 -35 V 0 -14 -11 -13 -10 -11 -10 -8 -12 16 5 -14 6 -9 -8 -7 0 -31 -14 21 -12 -10 -5 -35 B -1 -7 12 16 -22 3 12 0 4 -11 -18 1 -13 -22 -7 2 -1 -24 -14 -12 15 9 -4 -35 Z -1 -2 3 12 -27 17 17 -5 7 -11 -13 -1 -8 -26 -3 -4 -6 -29 -20 -10 9 17 -4 -35 X -2 -6 -2 -5 -16 -4 -5 -6 -5 -5 -8 -6 -5 -13 -5 -2 -2 -20 -13 -5 -4 -4 -6 -35 * -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 1 biogo-1.0.4/align/matrix/matrices/PAM4300000644000175000017500000000402414136731467017151 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 430 substitution matrix, scale = ln(2)/6 = 0.115525 # # Expected score = -0.543, Entropy = 0.117 bits # # Lowest score = -9, Highest score = 31 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 2 -1 0 -2 0 -1 -4 1 1 1 -7 -4 0 1 0 0 -9 R -1 6 1 0 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 4 -4 -2 0 1 0 -9 N 0 1 1 2 -4 1 2 1 1 -2 -3 1 -1 -4 0 1 0 -5 -3 -1 2 1 0 -9 D 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -6 0 1 0 -7 -5 -2 3 3 0 -9 C -2 -4 -4 -5 20 -6 -5 -3 -4 -2 -6 -6 -5 -4 -3 0 -2 -9 1 -2 -4 -5 -3 -9 Q 0 2 1 2 -6 3 2 0 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -1 2 3 0 -9 E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -6 0 1 0 -8 -5 -1 2 3 0 -9 G 2 -2 1 1 -3 0 1 5 -1 -2 -4 -1 -2 -5 0 1 1 -8 -5 -1 1 0 0 -9 H -1 2 1 1 -4 3 1 -1 5 -2 -2 1 -1 -2 0 0 -1 -3 0 -2 1 2 0 -9 I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 4 -2 3 2 -1 -1 0 -5 0 4 -2 -2 0 -9 L -2 -3 -3 -4 -6 -2 -3 -4 -2 4 7 -3 5 4 -2 -2 -1 -2 1 3 -3 -3 -1 -9 K 0 4 1 1 -6 1 1 -1 1 -2 -3 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 M -1 0 -1 -2 -5 -1 -2 -2 -1 3 5 0 5 1 -2 -1 0 -4 -1 2 -2 -1 0 -9 F -4 -5 -4 -6 -4 -5 -6 -5 -2 2 4 -5 1 13 -5 -4 -3 2 12 0 -5 -5 -2 -9 P 1 0 0 0 -3 1 0 0 0 -1 -2 0 -2 -5 5 1 1 -6 -5 -1 0 0 0 -9 S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -9 T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -9 W -7 4 -5 -7 -9 -5 -8 -8 -3 -5 -2 -3 -4 2 -6 -3 -6 31 2 -7 -6 -6 -4 -9 Y -4 -4 -3 -5 1 -4 -5 -5 0 0 1 -5 -1 12 -5 -3 -3 2 15 -2 -4 -5 -2 -9 V 0 -2 -1 -2 -2 -1 -1 -1 -2 4 3 -2 2 0 -1 -1 0 -7 -2 4 -1 -1 0 -9 B 1 0 2 3 -4 2 2 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -1 2 2 0 -9 Z 0 1 1 3 -5 3 3 0 2 -2 -3 1 -1 -5 0 0 0 -6 -5 -1 2 3 0 -9 X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/PAM900000644000175000017500000000515214136731467017076 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 90 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -2.26, Entropy = 1.30 bits # # Lowest score = -10, Highest score = 13 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 4 -4 -1 -1 -3 -2 0 0 -4 -2 -3 -3 -2 -5 0 1 1 -8 -5 0 -1 -1 -1 -10 R -4 7 -2 -5 -5 0 -4 -5 1 -3 -5 2 -2 -6 -1 -1 -3 0 -6 -4 -3 -1 -2 -10 N -1 -2 5 3 -6 -1 0 -1 2 -3 -4 1 -4 -5 -2 1 0 -5 -2 -4 4 0 -1 -10 D -1 -5 3 6 -8 0 4 -1 -1 -4 -7 -2 -5 -8 -4 -1 -2 -9 -6 -4 5 3 -2 -10 C -3 -5 -6 -8 9 -8 -8 -5 -5 -3 -9 -8 -8 -7 -5 -1 -4 -10 -1 -3 -7 -8 -5 -10 Q -2 0 -1 0 -8 6 2 -3 2 -4 -3 -1 -2 -7 -1 -2 -3 -7 -6 -4 0 5 -2 -10 E 0 -4 0 4 -8 2 6 -1 -1 -3 -5 -2 -4 -8 -2 -2 -2 -10 -6 -3 2 5 -2 -10 G 0 -5 -1 -1 -5 -3 -1 5 -5 -5 -6 -4 -5 -6 -3 0 -2 -9 -8 -3 -1 -2 -2 -10 H -4 1 2 -1 -5 2 -1 -5 8 -5 -3 -2 -5 -3 -2 -3 -3 -4 -1 -4 1 1 -2 -10 I -2 -3 -3 -4 -3 -4 -3 -5 -5 6 1 -3 1 0 -4 -3 0 -8 -3 3 -3 -3 -2 -10 L -3 -5 -4 -7 -9 -3 -5 -6 -3 1 6 -5 2 0 -4 -5 -3 -3 -3 0 -5 -4 -3 -10 K -3 2 1 -2 -8 -1 -2 -4 -2 -3 -5 5 0 -8 -3 -1 -1 -6 -6 -5 0 -1 -2 -10 M -2 -2 -4 -5 -8 -2 -4 -5 -5 1 2 0 9 -1 -4 -3 -2 -7 -6 1 -5 -3 -2 -10 F -5 -6 -5 -8 -7 -7 -8 -6 -3 0 0 -8 -1 8 -6 -4 -5 -2 4 -4 -6 -8 -4 -10 P 0 -1 -2 -4 -5 -1 -2 -3 -2 -4 -4 -3 -4 -6 7 0 -1 -8 -8 -3 -3 -2 -2 -10 S 1 -1 1 -1 -1 -2 -2 0 -3 -3 -5 -1 -3 -4 0 4 2 -3 -4 -3 0 -2 -1 -10 T 1 -3 0 -2 -4 -3 -2 -2 -3 0 -3 -1 -2 -5 -1 2 5 -7 -4 -1 -1 -2 -1 -10 W -8 0 -5 -9 -10 -7 -10 -9 -4 -8 -3 -6 -7 -2 -8 -3 -7 13 -2 -9 -7 -8 -6 -10 Y -5 -6 -2 -6 -1 -6 -6 -8 -1 -3 -3 -6 -6 4 -8 -4 -4 -2 9 -4 -4 -6 -4 -10 V 0 -4 -4 -4 -3 -4 -3 -3 -4 3 0 -5 1 -4 -3 -3 -1 -9 -4 6 -4 -3 -2 -10 B -1 -3 4 5 -7 0 2 -1 1 -3 -5 0 -5 -6 -3 0 -1 -7 -4 -4 4 2 -2 -10 Z -1 -1 0 3 -8 5 5 -2 1 -3 -4 -1 -3 -8 -2 -2 -2 -8 -6 -3 2 5 -2 -10 X -1 -2 -1 -2 -5 -2 -2 -2 -2 -2 -3 -2 -2 -4 -2 -1 -1 -6 -4 -2 -2 -2 -2 -10 * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 biogo-1.0.4/align/matrix/matrices/PAM400000644000175000017500000000515214136731467017071 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 40 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -4.27, Entropy = 2.26 bits # # Lowest score = -15, Highest score = 13 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 6 -6 -3 -3 -6 -3 -2 -1 -6 -4 -5 -6 -4 -7 -1 0 0 -12 -7 -2 -3 -2 -3 -15 R -6 8 -5 -9 -7 -1 -8 -8 -1 -5 -8 1 -3 -8 -3 -2 -5 -1 -9 -7 -6 -3 -5 -15 N -3 -5 7 2 -9 -3 -1 -2 1 -4 -6 0 -7 -8 -5 0 -1 -7 -4 -7 6 -2 -3 -15 D -3 -9 2 7 -12 -2 3 -3 -3 -6 -11 -4 -9 -13 -7 -3 -4 -13 -10 -7 6 2 -5 -15 C -6 -7 -9 -12 9 -12 -12 -8 -7 -5 -13 -12 -12 -11 -7 -2 -7 -14 -3 -5 -11 -12 -8 -15 Q -3 -1 -3 -2 -12 8 2 -6 1 -7 -4 -2 -3 -11 -2 -4 -5 -11 -10 -6 -2 6 -4 -15 E -2 -8 -1 3 -12 2 7 -3 -4 -5 -8 -4 -6 -12 -5 -4 -5 -15 -8 -6 2 6 -4 -15 G -1 -8 -2 -3 -8 -6 -3 6 -8 -9 -9 -6 -7 -8 -5 -1 -5 -13 -12 -5 -2 -4 -4 -15 H -6 -1 1 -3 -7 1 -4 -8 9 -8 -5 -5 -9 -5 -3 -5 -6 -6 -3 -6 -1 0 -4 -15 I -4 -5 -4 -6 -5 -7 -5 -9 -8 8 -1 -5 0 -2 -7 -6 -2 -12 -5 2 -5 -5 -4 -15 L -5 -8 -6 -11 -13 -4 -8 -9 -5 -1 7 -7 1 -2 -6 -7 -6 -5 -6 -2 -8 -6 -5 -15 K -6 1 0 -4 -12 -2 -4 -6 -5 -5 -7 6 -1 -12 -6 -3 -2 -10 -8 -8 -2 -3 -4 -15 M -4 -3 -7 -9 -12 -3 -6 -7 -9 0 1 -1 11 -3 -7 -5 -3 -11 -10 -1 -8 -4 -4 -15 F -7 -8 -8 -13 -11 -11 -12 -8 -5 -2 -2 -12 -3 9 -9 -6 -8 -4 2 -7 -9 -12 -7 -15 P -1 -3 -5 -7 -7 -2 -5 -5 -3 -7 -6 -6 -7 -9 8 -1 -3 -12 -12 -5 -6 -3 -4 -15 S 0 -2 0 -3 -2 -4 -4 -1 -5 -6 -7 -3 -5 -6 -1 6 1 -4 -6 -5 -1 -4 -2 -15 T 0 -5 -1 -4 -7 -5 -5 -5 -6 -2 -6 -2 -3 -8 -3 1 7 -11 -6 -2 -2 -5 -3 -15 W -12 -1 -7 -13 -14 -11 -15 -13 -6 -12 -5 -10 -11 -4 -12 -4 -11 13 -4 -14 -9 -13 -9 -15 Y -7 -9 -4 -10 -3 -10 -8 -12 -3 -5 -6 -8 -10 2 -12 -6 -6 -4 10 -6 -6 -8 -7 -15 V -2 -7 -7 -7 -5 -6 -6 -5 -6 2 -2 -8 -1 -7 -5 -5 -2 -14 -6 7 -7 -6 -4 -15 B -3 -6 6 6 -11 -2 2 -2 -1 -5 -8 -2 -8 -9 -6 -1 -2 -9 -6 -7 6 1 -4 -15 Z -2 -3 -2 2 -12 6 6 -4 0 -5 -6 -3 -4 -12 -3 -4 -5 -13 -8 -6 1 6 -4 -15 X -3 -5 -3 -5 -8 -4 -4 -4 -4 -4 -5 -4 -4 -7 -4 -2 -3 -9 -7 -4 -4 -4 -4 -15 * -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 1 biogo-1.0.4/align/matrix/matrices/PAM1600000644000175000017500000000402314136731467017150 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 160 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -1.14, Entropy = 0.694 bits # # Lowest score = -7, Highest score = 12 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -2 0 0 -2 -1 0 1 -2 -1 -2 -2 -1 -3 1 1 1 -5 -3 0 0 0 0 -7 R -2 6 -1 -2 -3 1 -2 -3 1 -2 -3 3 -1 -4 -1 -1 -1 1 -4 -3 -1 0 -1 -7 N 0 -1 3 2 -4 0 1 0 2 -2 -3 1 -2 -3 -1 1 0 -4 -2 -2 2 1 0 -7 D 0 -2 2 4 -5 1 3 0 0 -3 -4 0 -3 -6 -2 0 -1 -6 -4 -3 3 2 -1 -7 C -2 -3 -4 -5 9 -5 -5 -3 -3 -2 -6 -5 -5 -5 -3 0 -2 -7 0 -2 -4 -5 -3 -7 Q -1 1 0 1 -5 5 2 -2 2 -2 -2 0 -1 -5 0 -1 -1 -5 -4 -2 1 3 -1 -7 E 0 -2 1 3 -5 2 4 0 0 -2 -3 -1 -2 -5 -1 0 -1 -7 -4 -2 2 3 -1 -7 G 1 -3 0 0 -3 -2 0 4 -3 -3 -4 -2 -3 -4 -1 1 -1 -7 -5 -2 0 -1 -1 -7 H -2 1 2 0 -3 2 0 -3 6 -3 -2 -1 -3 -2 -1 -1 -2 -3 0 -2 1 1 -1 -7 I -1 -2 -2 -3 -2 -2 -2 -3 -3 5 2 -2 2 0 -2 -2 0 -5 -2 3 -2 -2 -1 -7 L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 5 -3 3 1 -3 -3 -2 -2 -2 1 -4 -3 -2 -7 K -2 3 1 0 -5 0 -1 -2 -1 -2 -3 4 0 -5 -2 -1 0 -4 -4 -3 0 0 -1 -7 M -1 -1 -2 -3 -5 -1 -2 -3 -3 2 3 0 7 0 -2 -2 -1 -4 -3 1 -3 -2 -1 -7 F -3 -4 -3 -6 -5 -5 -5 -4 -2 0 1 -5 0 7 -4 -3 -3 -1 5 -2 -4 -5 -3 -7 P 1 -1 -1 -2 -3 0 -1 -1 -1 -2 -3 -2 -2 -4 5 1 0 -5 -5 -2 -1 -1 -1 -7 S 1 -1 1 0 0 -1 0 1 -1 -2 -3 -1 -2 -3 1 2 1 -2 -3 -1 0 -1 0 -7 T 1 -1 0 -1 -2 -1 -1 -1 -2 0 -2 0 -1 -3 0 1 3 -5 -3 0 0 -1 0 -7 W -5 1 -4 -6 -7 -5 -7 -7 -3 -5 -2 -4 -4 -1 -5 -2 -5 12 -1 -6 -5 -6 -4 -7 Y -3 -4 -2 -4 0 -4 -4 -5 0 -2 -2 -4 -3 5 -5 -3 -3 -1 8 -3 -3 -4 -3 -7 V 0 -3 -2 -3 -2 -2 -2 -2 -2 3 1 -3 1 -2 -2 -1 0 -6 -3 4 -2 -2 -1 -7 B 0 -1 2 3 -4 1 2 0 1 -2 -4 0 -3 -4 -1 0 0 -5 -3 -2 3 2 -1 -7 Z 0 0 1 2 -5 3 3 -1 1 -2 -3 0 -2 -5 -1 -1 -1 -6 -4 -2 2 3 -1 -7 X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -4 -3 -1 -1 -1 -1 -7 * -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 1 biogo-1.0.4/align/matrix/matrices/PAM100000644000175000017500000000515214136731467017066 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 10 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -8.27, Entropy = 3.43 bits # # Lowest score = -23, Highest score = 13 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 7 -10 -7 -6 -10 -7 -5 -4 -11 -8 -9 -10 -8 -12 -4 -3 -3 -20 -11 -5 -6 -6 -6 -23 R -10 9 -9 -17 -11 -4 -15 -13 -4 -8 -12 -2 -7 -12 -7 -6 -10 -5 -14 -11 -11 -7 -9 -23 N -7 -9 9 -1 -17 -7 -5 -6 -2 -8 -10 -4 -15 -12 -9 -2 -5 -11 -7 -12 7 -6 -6 -23 D -6 -17 -1 8 -21 -6 0 -6 -7 -11 -19 -8 -17 -21 -12 -7 -8 -21 -17 -11 7 -1 -9 -23 C -10 -11 -17 -21 10 -20 -20 -13 -10 -9 -21 -20 -20 -19 -11 -6 -11 -22 -7 -9 -18 -20 -13 -23 Q -7 -4 -7 -6 -20 9 -1 -10 -2 -11 -8 -6 -7 -19 -6 -8 -9 -19 -18 -10 -6 7 -8 -23 E -5 -15 -5 0 -20 -1 8 -7 -9 -8 -13 -7 -10 -20 -9 -7 -9 -23 -11 -10 -1 7 -8 -23 G -4 -13 -6 -6 -13 -10 -7 7 -13 -17 -14 -10 -12 -12 -10 -4 -10 -21 -20 -9 -6 -8 -8 -23 H -11 -4 -2 -7 -10 -2 -9 -13 10 -13 -9 -10 -17 -9 -7 -9 -11 -10 -6 -9 -4 -4 -8 -23 I -8 -8 -8 -11 -9 -11 -8 -17 -13 9 -4 -9 -3 -5 -12 -10 -5 -20 -9 -1 -9 -9 -8 -23 L -9 -12 -10 -19 -21 -8 -13 -14 -9 -4 7 -11 -2 -5 -10 -12 -10 -9 -10 -5 -12 -10 -9 -23 K -10 -2 -4 -8 -20 -6 -7 -10 -10 -9 -11 7 -4 -20 -10 -7 -6 -18 -12 -13 -5 -6 -8 -23 M -8 -7 -15 -17 -20 -7 -10 -12 -17 -3 -2 -4 12 -7 -11 -8 -7 -19 -17 -4 -16 -8 -9 -23 F -12 -12 -12 -21 -19 -19 -20 -12 -9 -5 -5 -20 -7 9 -13 -9 -12 -7 -1 -12 -14 -20 -12 -23 P -4 -7 -9 -12 -11 -6 -9 -10 -7 -12 -10 -10 -11 -13 8 -4 -7 -20 -20 -9 -10 -7 -8 -23 S -3 -6 -2 -7 -6 -8 -7 -4 -9 -10 -12 -7 -8 -9 -4 7 -2 -8 -10 -10 -4 -8 -6 -23 T -3 -10 -5 -8 -11 -9 -9 -10 -11 -5 -10 -6 -7 -12 -7 -2 8 -19 -9 -6 -6 -9 -7 -23 W -20 -5 -11 -21 -22 -19 -23 -21 -10 -20 -9 -18 -19 -7 -20 -8 -19 13 -8 -22 -13 -21 -16 -23 Y -11 -14 -7 -17 -7 -18 -11 -20 -6 -9 -10 -12 -17 -1 -20 -10 -9 -8 10 -10 -9 -13 -11 -23 V -5 -11 -12 -11 -9 -10 -10 -9 -9 -1 -5 -13 -4 -12 -9 -10 -6 -22 -10 8 -11 -10 -8 -23 B -6 -11 7 7 -18 -6 -1 -6 -4 -9 -12 -5 -16 -14 -10 -4 -6 -13 -9 -11 7 -3 -8 -23 Z -6 -7 -6 -1 -20 7 7 -8 -4 -9 -10 -6 -8 -20 -7 -8 -9 -21 -13 -10 -3 7 -8 -23 X -6 -9 -6 -9 -13 -8 -8 -8 -8 -8 -9 -8 -9 -12 -8 -6 -7 -16 -11 -8 -8 -8 -8 -23 * -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 1 biogo-1.0.4/align/matrix/matrices/PAM4400000644000175000017500000000402414136731467017152 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 440 substitution matrix, scale = ln(2)/6 = 0.115525 # # Expected score = -0.529, Entropy = 0.111 bits # # Lowest score = -9, Highest score = 30 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 2 -1 0 -2 0 -1 -4 1 1 1 -6 -4 0 1 0 0 -9 R -1 5 1 0 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 4 -4 -2 0 1 0 -9 N 0 1 1 2 -4 1 2 1 1 -2 -3 1 -1 -4 0 1 0 -5 -3 -1 2 1 0 -9 D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -6 0 1 0 -7 -5 -2 2 2 0 -9 C -2 -4 -4 -5 20 -5 -5 -3 -4 -2 -6 -5 -5 -4 -3 0 -2 -9 1 -2 -4 -5 -3 -9 Q 0 2 1 2 -5 3 2 0 3 -2 -2 1 -1 -4 1 0 0 -5 -4 -1 2 2 0 -9 E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -5 -1 2 3 0 -9 G 2 -2 1 1 -3 0 1 4 -1 -2 -4 -1 -2 -5 0 1 1 -8 -5 -1 1 0 0 -9 H -1 2 1 1 -4 3 1 -1 5 -2 -2 1 -1 -2 0 0 -1 -3 0 -2 1 2 0 -9 I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 4 -2 3 2 -1 -1 0 -5 0 3 -2 -2 0 -9 L -2 -3 -3 -3 -6 -2 -3 -4 -2 4 7 -3 5 4 -2 -2 -1 -2 1 3 -3 -2 -1 -9 K 0 4 1 1 -5 1 1 -1 1 -2 -3 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 M -1 0 -1 -2 -5 -1 -2 -2 -1 3 5 0 4 1 -1 -1 0 -4 -1 2 -2 -1 0 -9 F -4 -5 -4 -6 -4 -4 -5 -5 -2 2 4 -5 1 13 -5 -4 -3 2 12 0 -5 -5 -2 -9 P 1 0 0 0 -3 1 0 0 0 -1 -2 0 -1 -5 5 1 1 -6 -5 -1 0 0 0 -9 S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -9 T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -9 W -6 4 -5 -7 -9 -5 -7 -8 -3 -5 -2 -3 -4 2 -6 -3 -6 30 2 -6 -6 -6 -4 -9 Y -4 -4 -3 -5 1 -4 -5 -5 0 0 1 -5 -1 12 -5 -3 -3 2 15 -2 -4 -4 -2 -9 V 0 -2 -1 -2 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -6 -2 4 -1 -1 0 -9 B 1 0 2 2 -4 2 2 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -1 2 2 0 -9 Z 0 1 1 2 -5 2 3 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -1 2 3 0 -9 X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/PAM200.cdi0000644000175000017500000000514314136731467017705 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 200 substitution matrix, scale = 0.0693200 # # Expected score = -4.12, Entropy = 0.507 bits # # Lowest score = -30, Highest score = 59 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 9 -7 0 0 -9 -3 1 4 -7 -3 -8 -6 -5 -14 4 5 5 -23 -14 1 0 -1 -1 -30 R -7 24 -1 -7 -15 4 -6 -12 5 -8 -13 12 -2 -18 -1 -2 -5 7 -17 -11 -4 -1 -4 -30 N 0 -1 10 9 -15 2 5 1 7 -8 -12 4 -8 -14 -3 3 2 -16 -8 -8 9 4 -2 -30 D 0 -7 9 16 -21 6 14 1 2 -10 -17 -1 -12 -23 -5 0 -2 -27 -17 -10 13 11 -4 -30 C -9 -15 -15 -21 41 -22 -22 -14 -14 -9 -25 -22 -22 -18 -12 -1 -10 -30 0 -8 -18 -22 -13 -30 Q -3 4 2 6 -22 18 10 -6 11 -9 -7 2 -4 -19 0 -3 -4 -20 -17 -8 4 14 -3 -30 E 1 -6 5 14 -22 10 16 0 1 -9 -14 -1 -9 -22 -4 -1 -3 -28 -17 -8 10 14 -3 -30 G 4 -12 1 1 -14 -6 0 19 -10 -12 -17 -8 -12 -19 -3 4 -1 -28 -22 -6 1 -3 -4 -30 H -7 5 7 2 -14 11 1 -10 26 -11 -9 -2 -10 -8 -2 -4 -6 -11 -1 -10 4 7 -3 -30 I -3 -8 -8 -10 -9 -9 -9 -12 -11 19 8 -8 8 3 -9 -6 0 -21 -5 14 -9 -9 -3 -30 L -8 -13 -12 -17 -25 -7 -14 -17 -9 8 22 -12 13 5 -11 -12 -8 -8 -5 6 -15 -11 -6 -30 K -6 12 4 -1 -22 2 -1 -8 -2 -8 -12 19 2 -22 -6 -1 -1 -15 -18 -11 1 0 -4 -30 M -5 -2 -8 -12 -22 -4 -9 -12 -10 8 13 2 28 -1 -9 -7 -3 -18 -12 6 -10 -7 -3 -30 F -14 -18 -14 -23 -18 -19 -22 -19 -8 3 5 -22 -1 33 -18 -13 -13 -1 23 -6 -18 -21 -10 -30 P 4 -1 -3 -5 -12 0 -4 -3 -2 -9 -11 -6 -9 -18 23 3 0 -23 -20 -6 -4 -2 -3 -30 S 5 -2 3 0 -1 -3 -1 4 -4 -6 -12 -1 -7 -13 3 8 6 -9 -11 -5 2 -2 -1 -30 T 5 -5 2 -2 -10 -4 -3 -1 -6 0 -8 -1 -3 -13 0 6 12 -21 -11 1 0 -3 -1 -30 W -23 7 -16 -27 -30 -20 -28 -28 -11 -21 -8 -15 -18 -1 -23 -9 -21 59 -2 -26 -21 -24 -17 -30 Y -14 -17 -8 -17 0 -17 -17 -22 -1 -5 -5 -18 -12 23 -20 -11 -11 -2 37 -11 -12 -17 -10 -30 V 1 -11 -8 -10 -8 -8 -8 -6 -10 14 6 -11 6 -6 -6 -5 1 -26 -11 18 -9 -8 -3 -30 B 0 -4 9 13 -18 4 10 1 4 -9 -15 1 -10 -18 -4 2 0 -21 -12 -9 12 8 -3 -30 Z -1 -1 4 11 -22 14 14 -3 7 -9 -11 0 -7 -21 -2 -2 -3 -24 -17 -8 8 14 -3 -30 X -1 -4 -2 -4 -13 -3 -3 -4 -3 -3 -6 -4 -3 -10 -3 -1 -1 -17 -10 -3 -3 -3 -4 -30 * -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 1 biogo-1.0.4/align/matrix/matrices/BLOSUM850000644000175000017500000000411214136731467017461 0ustar nileshnilesh# Matrix made by matblas from blosum85.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 85 # Entropy = 1.0805, Expected = -0.8153 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 5 -2 -2 -2 -1 -1 -1 0 -2 -2 -2 -1 -2 -3 -1 1 0 -3 -3 -1 -2 -1 -1 -6 R -2 6 -1 -2 -4 1 -1 -3 0 -4 -3 2 -2 -4 -2 -1 -2 -4 -3 -3 -2 0 -2 -6 N -2 -1 7 1 -4 0 -1 -1 0 -4 -4 0 -3 -4 -3 0 0 -5 -3 -4 4 -1 -2 -6 D -2 -2 1 7 -5 -1 1 -2 -2 -5 -5 -1 -4 -4 -2 -1 -2 -6 -4 -4 4 1 -2 -6 C -1 -4 -4 -5 9 -4 -5 -4 -5 -2 -2 -4 -2 -3 -4 -2 -2 -4 -3 -1 -4 -5 -3 -6 Q -1 1 0 -1 -4 6 2 -3 1 -4 -3 1 0 -4 -2 -1 -1 -3 -2 -3 -1 4 -1 -6 E -1 -1 -1 1 -5 2 6 -3 -1 -4 -4 0 -3 -4 -2 -1 -1 -4 -4 -3 0 4 -1 -6 G 0 -3 -1 -2 -4 -3 -3 6 -3 -5 -5 -2 -4 -4 -3 -1 -2 -4 -5 -4 -1 -3 -2 -6 H -2 0 0 -2 -5 1 -1 -3 8 -4 -3 -1 -3 -2 -3 -1 -2 -3 2 -4 -1 0 -2 -6 I -2 -4 -4 -5 -2 -4 -4 -5 -4 5 1 -3 1 -1 -4 -3 -1 -3 -2 3 -5 -4 -2 -6 L -2 -3 -4 -5 -2 -3 -4 -5 -3 1 4 -3 2 0 -4 -3 -2 -3 -2 0 -5 -4 -2 -6 K -1 2 0 -1 -4 1 0 -2 -1 -3 -3 6 -2 -4 -2 -1 -1 -5 -3 -3 -1 1 -1 -6 M -2 -2 -3 -4 -2 0 -3 -4 -3 1 2 -2 7 -1 -3 -2 -1 -2 -2 0 -4 -2 -1 -6 F -3 -4 -4 -4 -3 -4 -4 -4 -2 -1 0 -4 -1 7 -4 -3 -3 0 3 -1 -4 -4 -2 -6 P -1 -2 -3 -2 -4 -2 -2 -3 -3 -4 -4 -2 -3 -4 8 -1 -2 -5 -4 -3 -3 -2 -2 -6 S 1 -1 0 -1 -2 -1 -1 -1 -1 -3 -3 -1 -2 -3 -1 5 1 -4 -2 -2 0 -1 -1 -6 T 0 -2 0 -2 -2 -1 -1 -2 -2 -1 -2 -1 -1 -3 -2 1 5 -4 -2 0 -1 -1 -1 -6 W -3 -4 -5 -6 -4 -3 -4 -4 -3 -3 -3 -5 -2 0 -5 -4 -4 11 2 -3 -5 -4 -3 -6 Y -3 -3 -3 -4 -3 -2 -4 -5 2 -2 -2 -3 -2 3 -4 -2 -2 2 7 -2 -4 -3 -2 -6 V -1 -3 -4 -4 -1 -3 -3 -4 -4 3 0 -3 0 -1 -3 -2 0 -3 -2 5 -4 -3 -1 -6 B -2 -2 4 4 -4 -1 0 -1 -1 -5 -5 -1 -4 -4 -3 0 -1 -5 -4 -4 4 0 -2 -6 Z -1 0 -1 1 -5 4 4 -3 0 -4 -4 1 -2 -4 -2 -1 -1 -4 -3 -3 0 4 -1 -6 X -1 -2 -2 -2 -3 -1 -1 -2 -2 -2 -2 -1 -1 -2 -2 -1 -1 -3 -2 -1 -2 -1 -2 -6 * -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 1 biogo-1.0.4/align/matrix/matrices/PAM2400000644000175000017500000000402414136731467017150 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 240 substitution matrix, scale = ln(2)/3 = 0.231049 # # Expected score = -0.923, Entropy = 0.379 bits # # Lowest score = -8, Highest score = 17 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -2 0 0 -2 0 0 1 -1 -1 -2 -1 -1 -4 1 1 1 -6 -4 0 0 0 0 -8 R -2 6 0 -1 -4 1 -1 -3 2 -2 -3 3 0 -5 0 0 -1 2 -4 -3 -1 0 -1 -8 N 0 0 2 2 -4 1 1 0 2 -2 -3 1 -2 -4 -1 1 0 -4 -2 -2 2 1 0 -8 D 0 -1 2 4 -5 2 4 1 1 -2 -4 0 -3 -6 -1 0 0 -7 -4 -2 3 3 -1 -8 C -2 -4 -4 -5 12 -6 -6 -4 -4 -2 -6 -6 -5 -5 -3 0 -2 -8 0 -2 -5 -6 -3 -8 Q 0 1 1 2 -6 4 3 -1 3 -2 -2 1 -1 -5 0 -1 -1 -5 -4 -2 1 3 -1 -8 E 0 -1 1 4 -6 3 4 0 1 -2 -3 0 -2 -6 -1 0 0 -7 -4 -2 3 3 -1 -8 G 1 -3 0 1 -4 -1 0 5 -2 -3 -4 -2 -3 -5 -1 1 0 -7 -5 -1 0 0 -1 -8 H -1 2 2 1 -4 3 1 -2 7 -3 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 -1 -8 I -1 -2 -2 -2 -2 -2 -2 -3 -3 5 2 -2 2 1 -2 -1 0 -5 -1 4 -2 -2 -1 -8 L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 6 -3 4 2 -3 -3 -2 -2 -1 2 -4 -3 -1 -8 K -1 3 1 0 -6 1 0 -2 0 -2 -3 5 0 -5 -1 0 0 -4 -5 -3 1 0 -1 -8 M -1 0 -2 -3 -5 -1 -2 -3 -2 2 4 0 7 0 -2 -2 -1 -4 -3 2 -2 -2 -1 -8 F -4 -5 -4 -6 -5 -5 -6 -5 -2 1 2 -5 0 9 -5 -3 -3 0 7 -1 -5 -5 -2 -8 P 1 0 -1 -1 -3 0 -1 -1 0 -2 -3 -1 -2 -5 6 1 0 -6 -5 -1 -1 0 -1 -8 S 1 0 1 0 0 -1 0 1 -1 -1 -3 0 -2 -3 1 2 1 -3 -3 -1 0 0 0 -8 T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 0 1 3 -5 -3 0 0 -1 0 -8 W -6 2 -4 -7 -8 -5 -7 -7 -3 -5 -2 -4 -4 0 -6 -3 -5 17 0 -6 -5 -6 -4 -8 Y -4 -4 -2 -4 0 -4 -4 -5 0 -1 -1 -5 -3 7 -5 -3 -3 0 10 -3 -3 -4 -2 -8 V 0 -3 -2 -2 -2 -2 -2 -1 -2 4 2 -3 2 -1 -1 -1 0 -6 -3 4 -2 -2 -1 -8 B 0 -1 2 3 -5 1 3 0 1 -2 -4 1 -2 -5 -1 0 0 -5 -3 -2 3 2 -1 -8 Z 0 0 1 3 -6 3 3 0 2 -2 -3 0 -2 -5 0 0 -1 -6 -4 -2 2 3 -1 -8 X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -1 -1 -1 -2 -1 0 0 -4 -2 -1 -1 -1 -1 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/PAM1900000644000175000017500000000402314136731467017153 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 190 substitution matrix, scale = ln(2)/3 = 0.231049 # # Expected score = -1.35, Entropy = 0.547 bits # # Lowest score = -9, Highest score = 18 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 3 -2 0 0 -3 -1 0 1 -2 -1 -3 -2 -2 -5 1 1 2 -7 -4 0 0 0 0 -9 R -2 8 -1 -2 -5 1 -2 -4 2 -3 -4 4 -1 -6 0 -1 -2 2 -5 -3 -1 0 -1 -9 N 0 -1 3 3 -5 1 2 0 2 -2 -4 1 -3 -4 -1 1 0 -5 -2 -3 3 1 -1 -9 D 0 -2 3 5 -7 2 4 0 0 -3 -5 0 -4 -7 -2 0 -1 -8 -5 -3 4 3 -1 -9 C -3 -5 -5 -7 13 -7 -7 -4 -4 -3 -8 -7 -7 -6 -4 0 -3 -9 0 -3 -6 -7 -4 -9 Q -1 1 1 2 -7 6 3 -2 3 -3 -2 1 -1 -6 0 -1 -1 -6 -5 -3 1 4 -1 -9 E 0 -2 2 4 -7 3 5 0 0 -3 -4 -1 -3 -7 -1 0 -1 -9 -5 -3 3 4 -1 -9 G 1 -4 0 0 -4 -2 0 6 -3 -4 -5 -3 -4 -6 -1 1 -1 -9 -7 -2 0 -1 -1 -9 H -2 2 2 0 -4 3 0 -3 8 -3 -3 -1 -3 -2 -1 -1 -2 -3 0 -3 1 2 -1 -9 I -1 -3 -2 -3 -3 -3 -3 -4 -3 6 2 -3 2 1 -3 -2 0 -7 -2 4 -3 -3 -1 -9 L -3 -4 -4 -5 -8 -2 -4 -5 -3 2 7 -4 4 2 -3 -4 -2 -3 -2 2 -5 -3 -2 -9 K -2 4 1 0 -7 1 -1 -3 -1 -3 -4 6 1 -7 -2 0 0 -5 -6 -3 0 0 -1 -9 M -2 -1 -3 -4 -7 -1 -3 -4 -3 2 4 1 9 0 -3 -2 -1 -6 -4 2 -3 -2 -1 -9 F -5 -6 -4 -7 -6 -6 -7 -6 -2 1 2 -7 0 10 -6 -4 -4 0 7 -2 -6 -7 -3 -9 P 1 0 -1 -2 -4 0 -1 -1 -1 -3 -3 -2 -3 -6 7 1 0 -7 -6 -2 -1 -1 -1 -9 S 1 -1 1 0 0 -1 0 1 -1 -2 -4 0 -2 -4 1 3 2 -3 -4 -2 1 -1 0 -9 T 2 -2 0 -1 -3 -1 -1 -1 -2 0 -2 0 -1 -4 0 2 4 -6 -3 0 0 -1 0 -9 W -7 2 -5 -8 -9 -6 -9 -9 -3 -7 -3 -5 -6 0 -7 -3 -6 18 -1 -8 -6 -7 -5 -9 Y -4 -5 -2 -5 0 -5 -5 -7 0 -2 -2 -6 -4 7 -6 -4 -3 -1 11 -3 -4 -5 -3 -9 V 0 -3 -3 -3 -3 -3 -3 -2 -3 4 2 -3 2 -2 -2 -2 0 -8 -3 6 -3 -3 -1 -9 B 0 -1 3 4 -6 1 3 0 1 -3 -5 0 -3 -6 -1 1 0 -6 -4 -3 4 2 -1 -9 Z 0 0 1 3 -7 4 4 -1 2 -3 -3 0 -2 -7 -1 -1 -1 -7 -5 -3 2 4 -1 -9 X 0 -1 -1 -1 -4 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -5 -3 -1 -1 -1 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/BLOSUMN0000644000175000017500000000411114136731467017421 0ustar nileshnilesh# Matrix made by matblas from blosumn.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= -2 # Entropy = 1.5172, Expected = -1.1484 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 6 -2 -2 -3 -2 -1 -2 -1 -3 -3 -3 -2 -2 -4 -1 1 -1 -4 -4 -1 -3 -2 -1 -7 R -2 7 -1 -3 -6 0 -2 -4 -1 -5 -4 2 -3 -4 -3 -2 -2 -5 -4 -4 -2 -1 -2 -7 N -2 -1 7 1 -4 -1 -1 -2 0 -5 -5 -1 -4 -5 -4 0 -1 -6 -4 -4 4 -1 -2 -7 D -3 -3 1 7 -6 -2 1 -3 -2 -6 -6 -2 -5 -5 -3 -2 -2 -7 -5 -5 4 0 -3 -7 C -2 -6 -4 -6 9 -5 -7 -5 -6 -2 -3 -5 -3 -3 -5 -2 -2 -5 -4 -2 -5 -6 -4 -7 Q -1 0 -1 -2 -5 7 1 -4 0 -4 -3 1 -1 -4 -2 -1 -2 -4 -3 -4 -1 4 -2 -7 E -2 -2 -1 1 -7 1 6 -4 -1 -5 -5 0 -4 -5 -3 -1 -2 -5 -4 -4 0 5 -2 -7 G -1 -4 -2 -3 -5 -4 -4 6 -4 -6 -6 -3 -5 -5 -4 -1 -3 -5 -6 -5 -2 -4 -3 -7 H -3 -1 0 -2 -6 0 -1 -4 9 -5 -4 -2 -3 -3 -4 -2 -3 -4 1 -5 -1 -1 -3 -7 I -3 -5 -5 -6 -2 -4 -5 -6 -5 6 1 -4 1 -1 -5 -4 -2 -4 -3 2 -5 -5 -2 -7 L -3 -4 -5 -6 -3 -3 -5 -6 -4 1 5 -4 2 0 -5 -4 -3 -4 -3 0 -5 -4 -2 -7 K -2 2 -1 -2 -5 1 0 -3 -2 -4 -4 6 -2 -4 -2 -1 -2 -6 -4 -4 -1 0 -2 -7 M -2 -3 -4 -5 -3 -1 -4 -5 -3 1 2 -2 8 -1 -4 -3 -2 -2 -3 0 -5 -3 -2 -7 F -4 -4 -5 -5 -3 -4 -5 -5 -3 -1 0 -4 -1 7 -5 -4 -3 0 3 -2 -5 -5 -3 -7 P -1 -3 -4 -3 -5 -2 -3 -4 -4 -5 -5 -2 -4 -5 8 -2 -3 -5 -5 -4 -4 -3 -3 -7 S 1 -2 0 -2 -2 -1 -1 -1 -2 -4 -4 -1 -3 -4 -2 6 1 -4 -3 -3 -1 -1 -1 -7 T -1 -2 -1 -2 -2 -2 -2 -3 -3 -2 -3 -2 -2 -3 -3 1 6 -5 -3 -1 -2 -2 -1 -7 W -4 -5 -6 -7 -5 -4 -5 -5 -4 -4 -4 -6 -2 0 -5 -4 -5 11 1 -3 -6 -4 -4 -7 Y -4 -4 -4 -5 -4 -3 -4 -6 1 -3 -3 -4 -3 3 -5 -3 -3 1 8 -3 -4 -4 -3 -7 V -1 -4 -4 -5 -2 -4 -4 -5 -5 2 0 -4 0 -2 -4 -3 -1 -3 -3 5 -5 -4 -2 -7 B -3 -2 4 4 -5 -1 0 -2 -1 -5 -5 -1 -5 -5 -4 -1 -2 -6 -4 -5 4 1 -2 -7 Z -2 -1 -1 0 -6 4 5 -4 -1 -5 -4 0 -3 -5 -3 -1 -2 -4 -4 -4 1 4 -2 -7 X -1 -2 -2 -3 -4 -2 -2 -3 -3 -2 -2 -2 -2 -3 -3 -1 -1 -4 -3 -2 -2 -2 -2 -7 * -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 1 biogo-1.0.4/align/matrix/matrices/PAM5000000644000175000017500000000402614136731467017151 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 500 substitution matrix, scale = ln(2)/7 = 0.0990210 # # Expected score = -0.401, Entropy = 0.0803 bits # # Lowest score = -9, Highest score = 34 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 1 0 0 -1 0 -1 -3 1 1 1 -6 -3 0 1 0 0 -9 R -1 5 1 0 -4 2 0 -1 2 -2 -2 4 0 -4 0 0 0 4 -4 -2 0 1 0 -9 N 0 1 1 2 -3 1 1 1 1 -1 -2 1 -1 -4 0 1 0 -5 -3 -1 1 1 0 -9 D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -5 -1 2 2 0 -9 C -2 -4 -3 -5 22 -5 -5 -3 -4 -2 -6 -5 -5 -3 -2 0 -2 -9 2 -2 -4 -5 -2 -9 Q 0 2 1 2 -5 2 2 0 2 -1 -2 1 -1 -4 1 0 0 -5 -4 -1 2 2 0 -9 E 1 0 1 3 -5 2 3 1 1 -2 -3 1 -1 -5 0 1 0 -7 -5 -1 2 2 0 -9 G 1 -1 1 1 -3 0 1 4 -1 -2 -3 0 -2 -5 1 1 1 -8 -5 -1 1 1 0 -9 H 0 2 1 1 -4 2 1 -1 4 -2 -2 1 -1 -2 0 0 0 -2 0 -2 1 2 0 -9 I 0 -2 -1 -2 -2 -1 -2 -2 -2 3 4 -2 3 2 -1 -1 0 -5 0 3 -2 -2 0 -9 L -1 -2 -2 -3 -6 -2 -3 -3 -2 4 7 -2 4 4 -2 -2 -1 -1 1 3 -3 -2 -1 -9 K 0 4 1 1 -5 1 1 0 1 -2 -2 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 M -1 0 -1 -2 -5 -1 -1 -2 -1 3 4 0 4 1 -1 -1 0 -4 -1 2 -1 -1 0 -9 F -3 -4 -4 -5 -3 -4 -5 -5 -2 2 4 -5 1 13 -4 -3 -3 3 13 0 -4 -5 -2 -9 P 1 0 0 0 -2 1 0 1 0 -1 -2 0 -1 -4 4 1 1 -6 -5 -1 0 1 0 -9 S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -9 T 1 0 0 0 -2 0 0 1 0 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -9 W -6 4 -5 -7 -9 -5 -7 -8 -2 -5 -1 -3 -4 3 -6 -3 -6 34 2 -6 -6 -6 -4 -9 Y -3 -4 -3 -5 2 -4 -5 -5 0 0 1 -5 -1 13 -5 -3 -3 2 15 -1 -4 -4 -2 -9 V 0 -2 -1 -1 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -6 -1 3 -1 -1 0 -9 B 1 0 1 2 -4 2 2 1 1 -2 -3 1 -1 -4 0 1 0 -6 -4 -1 2 2 0 -9 Z 0 1 1 2 -5 2 2 1 2 -2 -2 1 -1 -5 1 0 0 -6 -4 -1 2 2 0 -9 X 0 0 0 0 -2 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 0 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/PAM700000644000175000017500000000515214136731467017074 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 70 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -2.77, Entropy = 1.60 bits # # Lowest score = -11, Highest score = 13 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 5 -4 -2 -1 -4 -2 -1 0 -4 -2 -4 -4 -3 -6 0 1 1 -9 -5 -1 -1 -1 -2 -11 R -4 8 -3 -6 -5 0 -5 -6 0 -3 -6 2 -2 -7 -2 -1 -4 0 -7 -5 -4 -2 -3 -11 N -2 -3 6 3 -7 -1 0 -1 1 -3 -5 0 -5 -6 -3 1 0 -6 -3 -5 5 -1 -2 -11 D -1 -6 3 6 -9 0 3 -1 -1 -5 -8 -2 -7 -10 -4 -1 -2 -10 -7 -5 5 2 -3 -11 C -4 -5 -7 -9 9 -9 -9 -6 -5 -4 -10 -9 -9 -8 -5 -1 -5 -11 -2 -4 -8 -9 -6 -11 Q -2 0 -1 0 -9 7 2 -4 2 -5 -3 -1 -2 -9 -1 -3 -3 -8 -8 -4 -1 5 -2 -11 E -1 -5 0 3 -9 2 6 -2 -2 -4 -6 -2 -4 -9 -3 -2 -3 -11 -6 -4 2 5 -3 -11 G 0 -6 -1 -1 -6 -4 -2 6 -6 -6 -7 -5 -6 -7 -3 0 -3 -10 -9 -3 -1 -3 -3 -11 H -4 0 1 -1 -5 2 -2 -6 8 -6 -4 -3 -6 -4 -2 -3 -4 -5 -1 -4 0 1 -3 -11 I -2 -3 -3 -5 -4 -5 -4 -6 -6 7 1 -4 1 0 -5 -4 -1 -9 -4 3 -4 -4 -3 -11 L -4 -6 -5 -8 -10 -3 -6 -7 -4 1 6 -5 2 -1 -5 -6 -4 -4 -4 0 -6 -4 -4 -11 K -4 2 0 -2 -9 -1 -2 -5 -3 -4 -5 6 0 -9 -4 -2 -1 -7 -7 -6 -1 -2 -3 -11 M -3 -2 -5 -7 -9 -2 -4 -6 -6 1 2 0 10 -2 -5 -3 -2 -8 -7 0 -6 -3 -3 -11 F -6 -7 -6 -10 -8 -9 -9 -7 -4 0 -1 -9 -2 8 -7 -4 -6 -2 4 -5 -7 -9 -5 -11 P 0 -2 -3 -4 -5 -1 -3 -3 -2 -5 -5 -4 -5 -7 7 0 -2 -9 -9 -3 -4 -2 -3 -11 S 1 -1 1 -1 -1 -3 -2 0 -3 -4 -6 -2 -3 -4 0 5 2 -3 -5 -3 0 -2 -1 -11 T 1 -4 0 -2 -5 -3 -3 -3 -4 -1 -4 -1 -2 -6 -2 2 6 -8 -4 -1 -1 -3 -2 -11 W -9 0 -6 -10 -11 -8 -11 -10 -5 -9 -4 -7 -8 -2 -9 -3 -8 13 -3 -10 -7 -10 -7 -11 Y -5 -7 -3 -7 -2 -8 -6 -9 -1 -4 -4 -7 -7 4 -9 -5 -4 -3 9 -5 -4 -7 -5 -11 V -1 -5 -5 -5 -4 -4 -4 -3 -4 3 0 -6 0 -5 -3 -3 -1 -10 -5 6 -5 -4 -2 -11 B -1 -4 5 5 -8 -1 2 -1 0 -4 -6 -1 -6 -7 -4 0 -1 -7 -4 -5 5 1 -2 -11 Z -1 -2 -1 2 -9 5 5 -3 1 -4 -4 -2 -3 -9 -2 -2 -3 -10 -7 -4 1 5 -3 -11 X -2 -3 -2 -3 -6 -2 -3 -3 -3 -3 -4 -3 -3 -5 -3 -1 -2 -7 -5 -2 -2 -3 -3 -11 * -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 1 biogo-1.0.4/align/matrix/matrices/BLOSUM900000644000175000017500000000411214136731467017455 0ustar nileshnilesh# Matrix made by matblas from blosum90.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 90 # Entropy = 1.1806, Expected = -0.8887 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 5 -2 -2 -3 -1 -1 -1 0 -2 -2 -2 -1 -2 -3 -1 1 0 -4 -3 -1 -2 -1 -1 -6 R -2 6 -1 -3 -5 1 -1 -3 0 -4 -3 2 -2 -4 -3 -1 -2 -4 -3 -3 -2 0 -2 -6 N -2 -1 7 1 -4 0 -1 -1 0 -4 -4 0 -3 -4 -3 0 0 -5 -3 -4 4 -1 -2 -6 D -3 -3 1 7 -5 -1 1 -2 -2 -5 -5 -1 -4 -5 -3 -1 -2 -6 -4 -5 4 0 -2 -6 C -1 -5 -4 -5 9 -4 -6 -4 -5 -2 -2 -4 -2 -3 -4 -2 -2 -4 -4 -2 -4 -5 -3 -6 Q -1 1 0 -1 -4 7 2 -3 1 -4 -3 1 0 -4 -2 -1 -1 -3 -3 -3 -1 4 -1 -6 E -1 -1 -1 1 -6 2 6 -3 -1 -4 -4 0 -3 -5 -2 -1 -1 -5 -4 -3 0 4 -2 -6 G 0 -3 -1 -2 -4 -3 -3 6 -3 -5 -5 -2 -4 -5 -3 -1 -3 -4 -5 -5 -2 -3 -2 -6 H -2 0 0 -2 -5 1 -1 -3 8 -4 -4 -1 -3 -2 -3 -2 -2 -3 1 -4 -1 0 -2 -6 I -2 -4 -4 -5 -2 -4 -4 -5 -4 5 1 -4 1 -1 -4 -3 -1 -4 -2 3 -5 -4 -2 -6 L -2 -3 -4 -5 -2 -3 -4 -5 -4 1 5 -3 2 0 -4 -3 -2 -3 -2 0 -5 -4 -2 -6 K -1 2 0 -1 -4 1 0 -2 -1 -4 -3 6 -2 -4 -2 -1 -1 -5 -3 -3 -1 1 -1 -6 M -2 -2 -3 -4 -2 0 -3 -4 -3 1 2 -2 7 -1 -3 -2 -1 -2 -2 0 -4 -2 -1 -6 F -3 -4 -4 -5 -3 -4 -5 -5 -2 -1 0 -4 -1 7 -4 -3 -3 0 3 -2 -4 -4 -2 -6 P -1 -3 -3 -3 -4 -2 -2 -3 -3 -4 -4 -2 -3 -4 8 -2 -2 -5 -4 -3 -3 -2 -2 -6 S 1 -1 0 -1 -2 -1 -1 -1 -2 -3 -3 -1 -2 -3 -2 5 1 -4 -3 -2 0 -1 -1 -6 T 0 -2 0 -2 -2 -1 -1 -3 -2 -1 -2 -1 -1 -3 -2 1 6 -4 -2 -1 -1 -1 -1 -6 W -4 -4 -5 -6 -4 -3 -5 -4 -3 -4 -3 -5 -2 0 -5 -4 -4 11 2 -3 -6 -4 -3 -6 Y -3 -3 -3 -4 -4 -3 -4 -5 1 -2 -2 -3 -2 3 -4 -3 -2 2 8 -3 -4 -3 -2 -6 V -1 -3 -4 -5 -2 -3 -3 -5 -4 3 0 -3 0 -2 -3 -2 -1 -3 -3 5 -4 -3 -2 -6 B -2 -2 4 4 -4 -1 0 -2 -1 -5 -5 -1 -4 -4 -3 0 -1 -6 -4 -4 4 0 -2 -6 Z -1 0 -1 0 -5 4 4 -3 0 -4 -4 1 -2 -4 -2 -1 -1 -4 -3 -3 0 4 -1 -6 X -1 -2 -2 -2 -3 -1 -2 -2 -2 -2 -2 -1 -1 -2 -2 -1 -1 -3 -2 -2 -2 -1 -2 -6 * -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 1 biogo-1.0.4/align/matrix/matrices/PAM1700000644000175000017500000000515414136731467017157 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 170 substitution matrix, scale = ln(2)/3 = 0.231049 # # Expected score = -1.57, Entropy = 0.640 bits # # Lowest score = -10, Highest score = 18 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 3 -3 0 0 -3 -1 0 1 -3 -1 -3 -2 -2 -5 1 2 2 -8 -5 0 0 0 -1 -10 R -3 8 -1 -3 -5 1 -2 -4 2 -3 -4 4 -1 -6 -1 -1 -2 2 -6 -4 -2 0 -2 -10 N 0 -1 4 3 -5 0 2 0 2 -3 -4 1 -3 -5 -1 1 0 -5 -3 -3 3 1 -1 -10 D 0 -3 3 6 -7 2 5 0 0 -4 -6 -1 -4 -8 -2 0 -1 -9 -6 -4 5 4 -1 -10 C -3 -5 -5 -7 13 -8 -8 -5 -5 -3 -9 -8 -7 -6 -4 0 -3 -10 0 -3 -6 -8 -4 -10 Q -1 1 0 2 -8 6 3 -2 4 -3 -2 0 -1 -7 0 -1 -2 -7 -6 -3 1 5 -1 -10 E 0 -2 2 5 -8 3 6 0 0 -3 -5 -1 -3 -8 -1 -1 -1 -10 -6 -3 3 5 -1 -10 G 1 -4 0 0 -5 -2 0 6 -4 -4 -6 -3 -4 -6 -2 1 -1 -9 -7 -2 0 -1 -2 -10 H -3 2 2 0 -5 4 0 -4 9 -4 -3 -1 -4 -3 -1 -2 -2 -4 0 -3 1 2 -1 -10 I -1 -3 -3 -4 -3 -3 -3 -4 -4 7 2 -3 2 1 -3 -2 0 -7 -2 5 -3 -3 -1 -10 L -3 -4 -4 -6 -9 -2 -5 -6 -3 2 7 -4 4 1 -4 -4 -3 -3 -2 2 -5 -4 -2 -10 K -2 4 1 -1 -8 0 -1 -3 -1 -3 -4 6 1 -8 -2 -1 0 -5 -6 -4 0 0 -2 -10 M -2 -1 -3 -4 -7 -1 -3 -4 -4 2 4 1 10 0 -3 -2 -1 -6 -4 2 -4 -2 -1 -10 F -5 -6 -5 -8 -6 -7 -8 -6 -3 1 1 -8 0 10 -6 -4 -5 -1 7 -2 -6 -7 -4 -10 P 1 -1 -1 -2 -4 0 -1 -2 -1 -3 -4 -2 -3 -6 8 1 0 -8 -7 -2 -2 -1 -1 -10 S 2 -1 1 0 0 -1 -1 1 -2 -2 -4 -1 -2 -4 1 3 2 -3 -4 -2 1 -1 0 -10 T 2 -2 0 -1 -3 -2 -1 -1 -2 0 -3 0 -1 -5 0 2 5 -7 -4 0 0 -1 -1 -10 W -8 2 -5 -9 -10 -7 -10 -9 -4 -7 -3 -5 -6 -1 -8 -3 -7 18 -1 -9 -7 -8 -6 -10 Y -5 -6 -3 -6 0 -6 -6 -7 0 -2 -2 -6 -4 7 -7 -4 -4 -1 12 -4 -4 -6 -4 -10 V 0 -4 -3 -4 -3 -3 -3 -2 -3 5 2 -4 2 -2 -2 -2 0 -9 -4 6 -3 -3 -1 -10 B 0 -2 3 5 -6 1 3 0 1 -3 -5 0 -4 -6 -2 1 0 -7 -4 -3 4 3 -1 -10 Z 0 0 1 4 -8 5 5 -1 2 -3 -4 0 -2 -7 -1 -1 -1 -8 -6 -3 3 5 -1 -10 X -1 -2 -1 -1 -4 -1 -1 -2 -1 -1 -2 -2 -1 -4 -1 0 -1 -6 -4 -1 -1 -1 -2 -10 * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 biogo-1.0.4/align/matrix/matrices/PAM1100000644000175000017500000000402214136731467017142 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 110 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -1.81, Entropy = 1.07 bits # # Lowest score = -9, Highest score = 12 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 3 -3 -1 -1 -3 -1 0 1 -3 -1 -3 -3 -2 -4 1 1 1 -7 -4 0 -1 -1 -1 -9 R -3 7 -1 -4 -4 1 -3 -4 1 -3 -4 2 -1 -5 -1 -1 -2 1 -5 -4 -2 -1 -2 -9 N -1 -1 4 2 -5 0 1 0 2 -2 -4 1 -3 -4 -2 1 0 -5 -2 -3 3 0 -1 -9 D -1 -4 2 5 -7 1 4 0 0 -3 -6 -1 -5 -7 -3 -1 -1 -8 -5 -4 4 3 -2 -9 C -3 -4 -5 -7 9 -7 -7 -5 -4 -3 -8 -7 -7 -6 -4 -1 -3 -9 -1 -3 -6 -7 -4 -9 Q -1 1 0 1 -7 6 2 -3 3 -3 -2 0 -1 -6 0 -2 -2 -6 -6 -3 0 4 -1 -9 E 0 -3 1 4 -7 2 5 -1 -1 -3 -5 -1 -3 -7 -2 -1 -2 -9 -5 -3 3 4 -2 -9 G 1 -4 0 0 -5 -3 -1 5 -4 -4 -6 -3 -4 -5 -2 0 -2 -8 -7 -2 0 -2 -2 -9 H -3 1 2 0 -4 3 -1 -4 7 -4 -3 -2 -4 -3 -1 -2 -3 -4 -1 -3 1 1 -2 -9 I -1 -3 -2 -3 -3 -3 -3 -4 -4 6 1 -3 1 0 -4 -3 0 -7 -2 3 -3 -3 -2 -9 L -3 -4 -4 -6 -8 -2 -5 -6 -3 1 6 -4 3 0 -4 -4 -3 -3 -3 1 -5 -3 -2 -9 K -3 2 1 -1 -7 0 -1 -3 -2 -3 -4 5 0 -7 -3 -1 -1 -5 -5 -4 0 -1 -2 -9 M -2 -1 -3 -5 -7 -1 -3 -4 -4 1 3 0 8 -1 -4 -2 -1 -6 -5 1 -4 -2 -2 -9 F -4 -5 -4 -7 -6 -6 -7 -5 -3 0 0 -7 -1 8 -6 -4 -4 -1 4 -3 -6 -7 -4 -9 P 1 -1 -2 -3 -4 0 -2 -2 -1 -4 -4 -3 -4 -6 6 0 -1 -7 -7 -2 -2 -1 -2 -9 S 1 -1 1 -1 -1 -2 -1 0 -2 -3 -4 -1 -2 -4 0 3 2 -3 -3 -2 0 -1 -1 -9 T 1 -2 0 -1 -3 -2 -2 -2 -3 0 -3 -1 -1 -4 -1 2 5 -6 -3 0 -1 -2 -1 -9 W -7 1 -5 -8 -9 -6 -9 -8 -4 -7 -3 -5 -6 -1 -7 -3 -6 12 -2 -8 -6 -7 -5 -9 Y -4 -5 -2 -5 -1 -6 -5 -7 -1 -2 -3 -5 -5 4 -7 -3 -3 -2 8 -4 -3 -5 -3 -9 V 0 -4 -3 -4 -3 -3 -3 -2 -3 3 1 -4 1 -3 -2 -2 0 -8 -4 5 -3 -3 -2 -9 B -1 -2 3 4 -6 0 3 0 1 -3 -5 0 -4 -6 -2 0 -1 -6 -3 -3 4 2 -1 -9 Z -1 -1 0 3 -7 4 4 -2 1 -3 -3 -1 -2 -7 -1 -1 -2 -7 -5 -3 2 4 -2 -9 X -1 -2 -1 -2 -4 -1 -2 -2 -2 -2 -2 -2 -2 -4 -2 -1 -1 -5 -3 -2 -1 -2 -2 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/NUC.4.40000644000175000017500000000222314136731467017235 0ustar nileshnilesh# # This matrix was created by Todd Lowe 12/10/92 # # Uses ambiguous nucleotide codes, probabilities rounded to # nearest integer # # Lowest score = -4, Highest score = 5 # A T G C S W R Y K M B V H D N A 5 -4 -4 -4 -4 1 1 -4 -4 1 -4 -1 -1 -1 -2 T -4 5 -4 -4 -4 1 -4 1 1 -4 -1 -4 -1 -1 -2 G -4 -4 5 -4 1 -4 1 -4 1 -4 -1 -1 -4 -1 -2 C -4 -4 -4 5 1 -4 -4 1 -4 1 -1 -1 -1 -4 -2 S -4 -4 1 1 -1 -4 -2 -2 -2 -2 -1 -1 -3 -3 -1 W 1 1 -4 -4 -4 -1 -2 -2 -2 -2 -3 -3 -1 -1 -1 R 1 -4 1 -4 -2 -2 -1 -4 -2 -2 -3 -1 -3 -1 -1 Y -4 1 -4 1 -2 -2 -4 -1 -2 -2 -1 -3 -1 -3 -1 K -4 1 1 -4 -2 -2 -2 -2 -1 -4 -1 -3 -3 -1 -1 M 1 -4 -4 1 -2 -2 -2 -2 -4 -1 -3 -1 -1 -3 -1 B -4 -1 -1 -1 -1 -3 -3 -1 -1 -3 -1 -2 -2 -2 -1 V -1 -4 -1 -1 -1 -3 -1 -3 -3 -1 -2 -1 -2 -2 -1 H -1 -1 -4 -1 -3 -1 -3 -1 -3 -1 -2 -2 -1 -2 -1 D -1 -1 -1 -4 -3 -1 -1 -3 -1 -3 -2 -2 -2 -1 -1 N -2 -2 -2 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 biogo-1.0.4/align/matrix/matrices/PAM2200000644000175000017500000000402314136731467017145 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 220 substitution matrix, scale = ln(2)/3 = 0.231049 # # Expected score = -1.06, Entropy = 0.437 bits # # Lowest score = -8, Highest score = 17 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -2 0 0 -2 -1 0 1 -2 -1 -2 -1 -1 -4 1 1 1 -6 -4 0 0 0 0 -8 R -2 7 0 -2 -4 1 -1 -3 2 -2 -3 4 -1 -5 0 0 -1 2 -5 -3 -1 0 -1 -8 N 0 0 3 2 -4 1 2 0 2 -2 -3 1 -2 -4 -1 1 0 -4 -2 -2 2 1 0 -8 D 0 -2 2 4 -6 2 4 0 1 -3 -5 0 -3 -6 -1 0 0 -8 -5 -3 4 3 -1 -8 C -2 -4 -4 -6 12 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -3 -8 0 -2 -5 -6 -3 -8 Q -1 1 1 2 -6 5 3 -2 3 -2 -2 1 -1 -5 0 -1 -1 -5 -5 -2 1 4 -1 -8 E 0 -1 2 4 -6 3 4 0 1 -2 -4 0 -2 -6 -1 0 -1 -8 -5 -2 3 4 -1 -8 G 1 -3 0 0 -4 -2 0 5 -3 -3 -5 -2 -3 -5 -1 1 0 -8 -6 -2 0 -1 -1 -8 H -2 2 2 1 -4 3 1 -3 7 -3 -2 0 -3 -2 0 -1 -2 -3 0 -3 1 2 -1 -8 I -1 -2 -2 -3 -3 -2 -2 -3 -3 5 2 -2 2 1 -2 -2 0 -6 -1 4 -2 -2 -1 -8 L -2 -3 -3 -5 -7 -2 -4 -5 -2 2 6 -3 4 2 -3 -3 -2 -2 -1 2 -4 -3 -2 -8 K -1 4 1 0 -6 1 0 -2 0 -2 -3 5 1 -6 -1 0 0 -4 -5 -3 0 0 -1 -8 M -1 -1 -2 -3 -6 -1 -2 -3 -3 2 4 1 8 0 -2 -2 -1 -5 -3 2 -3 -2 -1 -8 F -4 -5 -4 -6 -5 -5 -6 -5 -2 1 2 -6 0 10 -5 -4 -4 0 7 -2 -5 -6 -3 -8 P 1 0 -1 -1 -3 0 -1 -1 0 -2 -3 -1 -2 -5 7 1 0 -6 -6 -1 -1 0 -1 -8 S 1 0 1 0 0 -1 0 1 -1 -2 -3 0 -2 -4 1 2 2 -3 -3 -1 0 0 0 -8 T 1 -1 0 0 -3 -1 -1 0 -2 0 -2 0 -1 -4 0 2 3 -6 -3 0 0 -1 0 -8 W -6 2 -4 -8 -8 -5 -8 -8 -3 -6 -2 -4 -5 0 -6 -3 -6 17 0 -7 -6 -7 -5 -8 Y -4 -5 -2 -5 0 -5 -5 -6 0 -1 -1 -5 -3 7 -6 -3 -3 0 11 -3 -3 -5 -3 -8 V 0 -3 -2 -3 -2 -2 -2 -2 -3 4 2 -3 2 -2 -1 -1 0 -7 -3 5 -2 -2 -1 -8 B 0 -1 2 4 -5 1 3 0 1 -2 -4 0 -3 -5 -1 0 0 -6 -3 -2 3 2 -1 -8 Z 0 0 1 3 -6 4 4 -1 2 -2 -3 0 -2 -6 0 0 -1 -7 -5 -2 2 4 -1 -8 X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -5 -3 -1 -1 -1 -1 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/PAM80.cdi0000644000175000017500000000514114136731467017631 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 80 substitution matrix, scale = 0.0693200 # # Expected score = -12.6, Entropy = 1.44 bits # # Lowest score = -53, Highest score = 63 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 21 -19 -6 -6 -19 -10 -3 1 -20 -10 -18 -18 -13 -27 1 5 5 -42 -25 -2 -6 -5 -6 -53 R -19 37 -12 -25 -26 1 -22 -28 2 -16 -26 10 -9 -31 -8 -6 -16 1 -33 -23 -17 -7 -14 -53 N -6 -12 27 13 -31 -5 1 -5 8 -15 -23 2 -22 -27 -14 5 -1 -27 -13 -21 21 -1 -7 -53 D -6 -25 13 30 -43 0 18 -5 -6 -22 -37 -9 -30 -45 -20 -6 -10 -49 -34 -23 24 12 -13 -53 C -19 -26 -31 -43 46 -43 -43 -29 -24 -19 -47 -44 -42 -39 -24 -5 -22 -52 -8 -17 -36 -43 -27 -53 Q -10 1 -5 0 -43 34 12 -19 12 -22 -14 -4 -9 -39 -4 -13 -14 -39 -35 -19 -2 25 -10 -53 E -3 -22 1 18 -43 12 30 -9 -9 -17 -29 -10 -21 -44 -14 -9 -14 -53 -29 -18 12 24 -11 -53 G 1 -28 -5 -5 -29 -19 -9 28 -25 -29 -34 -21 -26 -31 -15 0 -12 -49 -42 -15 -5 -12 -13 -53 H -20 2 8 -6 -24 12 -9 -25 39 -26 -18 -14 -27 -17 -9 -14 -19 -22 -6 -19 2 4 -12 -53 I -10 -16 -15 -22 -19 -22 -17 -29 -26 34 4 -18 5 -1 -24 -18 -3 -42 -16 16 -18 -19 -11 -53 L -18 -26 -23 -37 -47 -14 -29 -34 -18 4 30 -25 12 -1 -22 -25 -19 -17 -19 0 -29 -20 -16 -53 K -18 10 2 -9 -44 -4 -10 -21 -14 -18 -25 28 0 -43 -18 -8 -6 -33 -31 -26 -3 -7 -13 -53 M -13 -9 -22 -30 -42 -9 -21 -26 -27 5 12 0 47 -8 -23 -15 -9 -37 -30 3 -26 -15 -12 -53 F -27 -31 -27 -45 -39 -39 -44 -31 -17 -1 -1 -43 -8 41 -33 -21 -26 -10 19 -20 -34 -42 -23 -53 P 1 -8 -14 -20 -24 -4 -14 -15 -9 -24 -22 -18 -23 -33 35 1 -8 -43 -41 -15 -17 -9 -12 -53 S 5 -6 5 -6 -5 -13 -9 0 -14 -18 -25 -8 -15 -21 1 22 8 -15 -21 -15 0 -10 -6 -53 T 5 -16 -1 -10 -22 -14 -14 -12 -19 -3 -19 -6 -9 -26 -8 8 27 -39 -20 -4 -5 -14 -7 -53 W -42 1 -27 -49 -52 -39 -53 -49 -22 -42 -17 -33 -37 -10 -43 -15 -39 63 -12 -49 -35 -45 -33 -53 Y -25 -33 -13 -34 -8 -35 -29 -42 -6 -16 -19 -31 -30 19 -41 -21 -20 -12 45 -23 -20 -31 -22 -53 V -2 -23 -21 -23 -17 -19 -18 -15 -19 16 0 -26 3 -20 -15 -15 -4 -49 -23 29 -22 -19 -11 -53 B -6 -17 21 24 -36 -2 12 -5 2 -18 -29 -3 -26 -34 -17 0 -5 -35 -20 -22 23 8 -10 -53 Z -5 -7 -1 12 -43 25 24 -12 4 -19 -20 -7 -15 -42 -9 -10 -14 -45 -31 -19 8 25 -11 -53 X -6 -14 -7 -13 -27 -10 -11 -13 -12 -11 -16 -13 -12 -23 -12 -6 -7 -33 -22 -11 -10 -11 -13 -53 * -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 1 biogo-1.0.4/align/matrix/matrices/PAM4600000644000175000017500000000402514136731467017155 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 460 substitution matrix, scale = ln(2)/6 = 0.115525 # # Expected score = -0.429, Entropy = 0.0994 bits # # Lowest score = -9, Highest score = 30 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 1 -1 0 1 -2 0 1 1 0 0 -1 0 -1 -3 1 1 1 -6 -3 0 1 0 0 -9 R -1 5 1 0 -4 1 0 -1 2 -2 -2 4 0 -4 0 0 0 4 -4 -2 0 1 0 -9 N 0 1 1 2 -3 1 1 1 1 -1 -2 1 -1 -3 0 1 0 -4 -3 -1 1 1 0 -9 D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -4 -1 2 2 0 -9 C -2 -4 -3 -5 19 -5 -5 -3 -3 -2 -6 -5 -5 -3 -2 0 -2 -9 2 -2 -4 -5 -2 -9 Q 0 1 1 2 -5 2 2 0 2 -1 -2 1 -1 -4 1 0 0 -5 -4 -1 1 2 0 -9 E 1 0 1 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -4 -1 2 2 0 -9 G 1 -1 1 1 -3 0 1 4 -1 -2 -3 -1 -2 -5 1 1 1 -7 -5 -1 1 0 0 -9 H 0 2 1 1 -3 2 1 -1 5 -2 -2 1 -1 -2 0 0 0 -2 0 -2 1 2 0 -9 I 0 -2 -1 -2 -2 -1 -2 -2 -2 3 3 -2 2 2 -1 -1 0 -5 0 3 -2 -2 0 -9 L -1 -2 -2 -3 -6 -2 -3 -3 -2 3 7 -2 4 3 -2 -2 -1 -1 1 3 -3 -2 -1 -9 K 0 4 1 1 -5 1 1 -1 1 -2 -2 4 0 -5 0 0 0 -3 -4 -2 1 1 0 -9 M -1 0 -1 -2 -5 -1 -2 -2 -1 2 4 0 4 1 -1 -1 0 -4 -1 2 -2 -1 0 -9 F -3 -4 -3 -5 -3 -4 -5 -5 -2 2 3 -5 1 12 -4 -3 -3 2 11 0 -4 -5 -2 -9 P 1 0 0 0 -2 1 0 1 0 -1 -2 0 -1 -4 4 1 1 -6 -5 -1 0 0 0 -9 S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -9 T 1 0 0 0 -2 0 0 1 0 0 -1 0 0 -3 1 1 1 -5 -3 0 0 0 0 -9 W -6 4 -4 -7 -9 -5 -7 -7 -2 -5 -1 -3 -4 2 -6 -3 -5 30 2 -6 -6 -6 -4 -9 Y -3 -4 -3 -4 2 -4 -4 -5 0 0 1 -4 -1 11 -5 -3 -3 2 14 -2 -4 -4 -2 -9 V 0 -2 -1 -1 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -6 -2 3 -1 -1 0 -9 B 1 0 1 2 -4 1 2 1 1 -2 -3 1 -2 -4 0 1 0 -6 -4 -1 2 2 0 -9 Z 0 1 1 2 -5 2 2 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -1 2 2 0 -9 X 0 0 0 0 -2 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 0 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/PAM1500000644000175000017500000000402314136731467017147 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 150 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -1.25, Entropy = 0.754 bits # # Lowest score = -7, Highest score = 12 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 3 -2 0 0 -2 -1 0 1 -2 -1 -2 -2 -1 -4 1 1 1 -6 -3 0 0 0 -1 -7 R -2 6 -1 -2 -4 1 -2 -3 1 -2 -3 3 -1 -4 -1 -1 -2 1 -4 -3 -2 0 -1 -7 N 0 -1 3 2 -4 0 1 0 2 -2 -3 1 -2 -4 -1 1 0 -4 -2 -2 3 1 -1 -7 D 0 -2 2 4 -6 1 3 0 0 -3 -5 -1 -3 -6 -2 0 -1 -7 -4 -3 3 2 -1 -7 C -2 -4 -4 -6 9 -6 -6 -4 -3 -2 -6 -6 -5 -5 -3 0 -3 -7 0 -2 -5 -6 -3 -7 Q -1 1 0 1 -6 5 2 -2 3 -3 -2 0 -1 -5 0 -1 -1 -5 -4 -2 1 4 -1 -7 E 0 -2 1 3 -6 2 4 -1 0 -2 -4 -1 -2 -6 -1 -1 -1 -7 -4 -2 2 4 -1 -7 G 1 -3 0 0 -4 -2 -1 4 -3 -3 -4 -2 -3 -5 -1 1 -1 -7 -5 -2 0 -1 -1 -7 H -2 1 2 0 -3 3 0 -3 6 -3 -2 -1 -3 -2 -1 -1 -2 -3 0 -3 1 1 -1 -7 I -1 -2 -2 -3 -2 -3 -2 -3 -3 5 1 -2 2 0 -3 -2 0 -5 -2 3 -2 -2 -1 -7 L -2 -3 -3 -5 -6 -2 -4 -4 -2 1 5 -3 3 1 -3 -3 -2 -2 -2 1 -4 -3 -2 -7 K -2 3 1 -1 -6 0 -1 -2 -1 -2 -3 4 0 -6 -2 -1 0 -4 -4 -3 0 0 -1 -7 M -1 -1 -2 -3 -5 -1 -2 -3 -3 2 3 0 7 -1 -3 -2 -1 -5 -3 1 -3 -2 -1 -7 F -4 -4 -4 -6 -5 -5 -6 -5 -2 0 1 -6 -1 7 -5 -3 -3 -1 5 -2 -5 -5 -3 -7 P 1 -1 -1 -2 -3 0 -1 -1 -1 -3 -3 -2 -3 -5 6 1 0 -6 -5 -2 -2 -1 -1 -7 S 1 -1 1 0 0 -1 -1 1 -1 -2 -3 -1 -2 -3 1 2 1 -2 -3 -1 0 -1 0 -7 T 1 -2 0 -1 -3 -1 -1 -1 -2 0 -2 0 -1 -3 0 1 4 -5 -3 0 0 -1 -1 -7 W -6 1 -4 -7 -7 -5 -7 -7 -3 -5 -2 -4 -5 -1 -6 -2 -5 12 -1 -6 -5 -6 -4 -7 Y -3 -4 -2 -4 0 -4 -4 -5 0 -2 -2 -4 -3 5 -5 -3 -3 -1 8 -3 -3 -4 -3 -7 V 0 -3 -2 -3 -2 -2 -2 -2 -3 3 1 -3 1 -2 -2 -1 0 -6 -3 4 -2 -2 -1 -7 B 0 -2 3 3 -5 1 2 0 1 -2 -4 0 -3 -5 -2 0 0 -5 -3 -2 3 2 -1 -7 Z 0 0 1 2 -6 4 4 -1 1 -2 -3 0 -2 -5 -1 -1 -1 -6 -4 -2 2 4 -1 -7 X -1 -1 -1 -1 -3 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 -1 -4 -3 -1 -1 -1 -1 -7 * -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 1 biogo-1.0.4/align/matrix/matrices/PAM2600000644000175000017500000000402414136731467017152 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 260 substitution matrix, scale = ln(2)/3 = 0.231049 # # Expected score = -0.794, Entropy = 0.330 bits # # Lowest score = -7, Highest score = 17 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -1 0 0 -2 0 0 1 -1 0 -2 -1 -1 -3 1 1 1 -6 -3 0 0 0 0 -7 R -1 6 0 -1 -4 1 -1 -2 2 -2 -3 3 0 -4 0 0 -1 2 -4 -2 -1 0 -1 -7 N 0 0 2 2 -3 1 1 0 2 -2 -3 1 -2 -3 0 1 0 -4 -2 -2 2 1 0 -7 D 0 -1 2 4 -5 2 3 1 1 -2 -4 0 -2 -5 -1 0 0 -6 -4 -2 3 3 -1 -7 C -2 -4 -3 -5 12 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3 0 -2 -7 0 -2 -4 -5 -3 -7 Q 0 1 1 2 -5 4 2 -1 3 -2 -2 1 -1 -4 0 0 -1 -5 -4 -2 1 3 0 -7 E 0 -1 1 3 -5 2 4 0 1 -2 -3 0 -2 -5 0 0 0 -7 -4 -2 3 3 -1 -7 G 1 -2 0 1 -3 -1 0 5 -2 -2 -4 -2 -3 -5 0 1 0 -7 -5 -1 1 0 -1 -7 H -1 2 2 1 -3 3 1 -2 6 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 -1 -7 I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 2 -2 2 1 -2 -1 0 -5 -1 4 -2 -2 -1 -7 L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 6 -3 4 2 -2 -3 -2 -2 -1 2 -3 -2 -1 -7 K -1 3 1 0 -5 1 0 -2 0 -2 -3 4 0 -5 -1 0 0 -3 -4 -2 1 0 -1 -7 M -1 0 -2 -2 -5 -1 -2 -3 -2 2 4 0 6 0 -2 -1 -1 -4 -2 2 -2 -2 -1 -7 F -3 -4 -3 -5 -4 -4 -5 -5 -2 1 2 -5 0 9 -4 -3 -3 0 7 -1 -4 -5 -2 -7 P 1 0 0 -1 -3 0 0 0 0 -2 -2 -1 -2 -4 6 1 0 -5 -5 -1 -1 0 -1 -7 S 1 0 1 0 0 0 0 1 -1 -1 -3 0 -1 -3 1 1 1 -2 -3 -1 0 0 0 -7 T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 0 1 2 -5 -3 0 0 0 0 -7 W -6 2 -4 -6 -7 -5 -7 -7 -3 -5 -2 -3 -4 0 -5 -2 -5 17 0 -6 -5 -6 -4 -7 Y -3 -4 -2 -4 0 -4 -4 -5 0 -1 -1 -4 -2 7 -5 -3 -3 0 10 -2 -3 -4 -2 -7 V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 -1 -7 B 0 -1 2 3 -4 1 3 1 1 -2 -3 1 -2 -4 -1 0 0 -5 -3 -2 3 2 0 -7 Z 0 0 1 3 -5 3 3 0 2 -2 -2 0 -2 -5 0 0 0 -6 -4 -2 2 3 -1 -7 X 0 -1 0 -1 -3 0 -1 -1 -1 -1 -1 -1 -1 -2 -1 0 0 -4 -2 -1 0 -1 -1 -7 * -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 1 biogo-1.0.4/align/matrix/matrices/PAM3100000644000175000017500000000402414136731467017146 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 310 substitution matrix, scale = ln(2)/4 = 0.173287 # # Expected score = -0.779, Entropy = 0.238 bits # # Lowest score = -9, Highest score = 22 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 2 -1 0 0 -2 0 0 1 -1 0 -2 -1 -1 -4 1 1 1 -6 -4 0 0 0 0 -9 R -1 6 0 -1 -4 1 -1 -2 2 -2 -3 4 0 -5 0 0 -1 3 -4 -2 0 0 -1 -9 N 0 0 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 0 -4 -2 -2 2 1 0 -9 D 0 -1 2 4 -5 2 4 1 1 -2 -4 0 -2 -6 -1 0 0 -7 -5 -2 3 3 -1 -9 C -2 -4 -4 -5 15 -6 -6 -3 -4 -2 -6 -6 -6 -4 -3 0 -2 -9 1 -2 -5 -6 -3 -9 Q 0 1 1 2 -6 4 3 -1 3 -2 -2 1 -1 -5 0 0 -1 -5 -4 -2 2 3 0 -9 E 0 -1 2 4 -6 3 4 1 1 -2 -3 0 -2 -6 0 0 0 -7 -5 -2 3 3 -1 -9 G 1 -2 1 1 -3 -1 1 5 -2 -2 -4 -1 -3 -5 0 1 0 -8 -6 -1 1 0 -1 -9 H -1 2 2 1 -4 3 1 -2 7 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 0 -9 I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 3 1 -2 -1 0 -5 -1 4 -2 -2 -1 -9 L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 7 -3 4 3 -3 -3 -2 -2 0 2 -3 -3 -1 -9 K -1 4 1 0 -6 1 0 -1 0 -2 -3 5 0 -5 -1 0 0 -3 -5 -2 1 1 -1 -9 M -1 0 -2 -2 -6 -1 -2 -3 -2 3 4 0 6 1 -2 -2 -1 -4 -2 2 -2 -2 -1 -9 F -4 -5 -4 -6 -4 -5 -6 -5 -2 1 3 -5 1 11 -5 -4 -3 1 9 -1 -5 -5 -2 -9 P 1 0 0 -1 -3 0 0 0 0 -2 -3 -1 -2 -5 6 1 1 -6 -5 -1 0 0 0 -9 S 1 0 1 0 0 0 0 1 -1 -1 -3 0 -2 -4 1 1 1 -3 -3 -1 1 0 0 -9 T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 1 1 2 -6 -3 0 0 0 0 -9 W -6 3 -4 -7 -9 -5 -7 -8 -3 -5 -2 -3 -4 1 -6 -3 -6 22 0 -7 -6 -6 -4 -9 Y -4 -4 -2 -5 1 -4 -5 -6 0 -1 0 -5 -2 9 -5 -3 -3 0 12 -2 -4 -4 -2 -9 V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -7 -2 4 -2 -2 0 -9 B 0 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -2 3 2 0 -9 Z 0 0 1 3 -6 3 3 0 2 -2 -3 1 -2 -5 0 0 0 -6 -4 -2 2 3 0 -9 X 0 -1 0 -1 -3 0 -1 -1 0 -1 -1 -1 -1 -2 0 0 0 -4 -2 0 0 0 -1 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/make.go0000644000175000017500000001250114136731467017625 0ustar nileshnilesh//go:build ignore // +build ignore package main import ( "fmt" "io" "io/ioutil" "log" "os" "strconv" "strings" "github.com/biogo/biogo/alphabet" ) var matrices = []struct { file string alpha alphabet.Alphabet }{ {"NUC.4", alphabet.DNA}, {"NUC.4.4", alphabet.DNAredundant}, {"DAYHOFF", alphabet.Protein}, {"GONNET", alphabet.Protein}, {"IDENTITY", alphabet.Protein}, {"MATCH", alphabet.Protein}, {"BLOSUM100", alphabet.Protein}, {"BLOSUM30", alphabet.Protein}, {"BLOSUM35", alphabet.Protein}, {"BLOSUM40", alphabet.Protein}, {"BLOSUM45", alphabet.Protein}, {"BLOSUM50", alphabet.Protein}, {"BLOSUM55", alphabet.Protein}, {"BLOSUM60", alphabet.Protein}, {"BLOSUM62", alphabet.Protein}, {"BLOSUM65", alphabet.Protein}, {"BLOSUM70", alphabet.Protein}, {"BLOSUM75", alphabet.Protein}, {"BLOSUM80", alphabet.Protein}, {"BLOSUM85", alphabet.Protein}, {"BLOSUM90", alphabet.Protein}, {"BLOSUMN", alphabet.Protein}, {"PAM10", alphabet.Protein}, {"PAM100", alphabet.Protein}, {"PAM110", alphabet.Protein}, {"PAM120", alphabet.Protein}, {"PAM120.cdi", alphabet.Protein}, {"PAM130", alphabet.Protein}, {"PAM140", alphabet.Protein}, {"PAM150", alphabet.Protein}, {"PAM160", alphabet.Protein}, {"PAM160.cdi", alphabet.Protein}, {"PAM170", alphabet.Protein}, {"PAM180", alphabet.Protein}, {"PAM190", alphabet.Protein}, {"PAM20", alphabet.Protein}, {"PAM200", alphabet.Protein}, {"PAM200.cdi", alphabet.Protein}, {"PAM210", alphabet.Protein}, {"PAM220", alphabet.Protein}, {"PAM230", alphabet.Protein}, {"PAM240", alphabet.Protein}, {"PAM250", alphabet.Protein}, {"PAM250.cdi", alphabet.Protein}, {"PAM260", alphabet.Protein}, {"PAM270", alphabet.Protein}, {"PAM280", alphabet.Protein}, {"PAM290", alphabet.Protein}, {"PAM30", alphabet.Protein}, {"PAM300", alphabet.Protein}, {"PAM310", alphabet.Protein}, {"PAM320", alphabet.Protein}, {"PAM330", alphabet.Protein}, {"PAM340", alphabet.Protein}, {"PAM350", alphabet.Protein}, {"PAM360", alphabet.Protein}, {"PAM370", alphabet.Protein}, {"PAM380", alphabet.Protein}, {"PAM390", alphabet.Protein}, {"PAM40", alphabet.Protein}, {"PAM400", alphabet.Protein}, {"PAM40.cdi", alphabet.Protein}, {"PAM410", alphabet.Protein}, {"PAM420", alphabet.Protein}, {"PAM430", alphabet.Protein}, {"PAM440", alphabet.Protein}, {"PAM450", alphabet.Protein}, {"PAM460", alphabet.Protein}, {"PAM470", alphabet.Protein}, {"PAM480", alphabet.Protein}, {"PAM490", alphabet.Protein}, {"PAM50", alphabet.Protein}, {"PAM500", alphabet.Protein}, {"PAM60", alphabet.Protein}, {"PAM70", alphabet.Protein}, {"PAM80", alphabet.Protein}, {"PAM80.cdi", alphabet.Protein}, {"PAM90", alphabet.Protein}, } func main() { fmt.Fprintln(os.Stdout, `// DO NOT EDIT. This file was autogenerated by make.go. // Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package matrix provides a variety of alignment scoring matrices for sequence alignment. package matrix // All alignment scoring matrices are organised to allow direct lookup using alphabets // defined in biogo/alphabet. Gap penalties are set to zero for all matrices and the I/L // single letter amino acid code, "J", is included but not defined for all the protein // scoring matrices. var (`) for i, m := range matrices { if i != 0 { fmt.Fprintln(os.Stdout) } err := genCode(os.Stdout, m.file, m.alpha) if err != nil { log.Fatalf("Failed to create matrix source for %s: %v", m, err) } } fmt.Println(")") } func genCode(w io.Writer, m string, a alphabet.Alphabet) error { f, err := os.Open(m) if err != nil { return err } b, err := ioutil.ReadAll(f) if err != nil { return err } s := string(b) var ( ind = a.LetterIndex() ref []string perm []int mat [][]int row int lastBlank bool ) for _, l := range strings.Split(s, "\n") { nsl := noSpace(l) switch { case len(l) == 0: if !lastBlank { lastBlank = true fmt.Fprintln(w, "\t//") } case l[0] == ' ': ref = strings.Fields(nsl) perm = make([]int, a.Len()) for i, l := range ref { li := ind[l[0]] if li < 0 { continue } perm[li] = i } mat = make([][]int, a.Len()) for j := range mat { mat[j] = make([]int, a.Len()) } fallthrough case l[0] == '#': lastBlank = false fmt.Fprintf(w, "\t// %s\n", l) default: lastBlank = false fmt.Fprintf(w, "\t// %s\n", l) for col, f := range strings.Fields(nsl)[1:] { mat[ind[ref[row][0]]][ind[ref[col][0]]], err = strconv.Atoi(f) if err != nil { return err } } row++ } } fmt.Fprintf(w, "\t%s = [][]int{\n\t\t/* ", strings.Replace(m, ".", "_", -1)) for j := range mat { fmt.Printf("%c ", toUpper(a.Letter(j))) } fmt.Fprintln(w, "*/") for i := range mat { fmt.Printf("\t\t/* %c */ {", toUpper(a.Letter(i))) for j, e := range mat[i] { fmt.Fprint(w, e) if j < len(mat[i])-1 { fmt.Print(", ") } } fmt.Fprintln(w, "},") } fmt.Fprintln(w, "\t}") return nil } func toUpper(l alphabet.Letter) alphabet.Letter { if l >= 'a' { return l &^ ' ' } return l } func noSpace(s string) string { var b []byte for i := 0; i < len(s); i++ { if s[i] == ' ' { if i > 0 && s[i-1] != ' ' { b = append(b, ' ') } continue } b = append(b, s[i]) } return string(b) } biogo-1.0.4/align/matrix/matrices/PAM600000644000175000017500000000515214136731467017073 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 60 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -3.21, Entropy = 1.79 bits # # Lowest score = -12, Highest score = 13 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 5 -5 -2 -2 -5 -3 -1 0 -5 -3 -4 -5 -3 -6 0 1 1 -10 -6 -1 -2 -2 -2 -12 R -5 8 -3 -6 -6 0 -6 -7 0 -4 -6 2 -2 -7 -2 -2 -4 0 -8 -5 -5 -2 -4 -12 N -2 -3 6 2 -7 -2 0 -1 1 -4 -5 0 -6 -6 -4 1 -1 -6 -3 -5 5 -1 -2 -12 D -2 -6 2 7 -10 -1 3 -2 -2 -5 -9 -2 -7 -11 -5 -2 -3 -11 -8 -6 5 2 -3 -12 C -5 -6 -7 -10 9 -10 -10 -7 -6 -4 -11 -10 -10 -9 -6 -1 -5 -12 -2 -4 -9 -10 -6 -12 Q -3 0 -2 -1 -10 7 2 -5 2 -5 -3 -1 -2 -9 -1 -3 -4 -9 -8 -5 -1 6 -3 -12 E -1 -6 0 3 -10 2 7 -2 -3 -4 -7 -3 -5 -10 -3 -2 -4 -12 -7 -4 2 5 -3 -12 G 0 -7 -1 -2 -7 -5 -2 6 -6 -7 -8 -5 -6 -7 -4 0 -3 -11 -10 -4 -2 -3 -3 -12 H -5 0 1 -2 -6 2 -3 -6 8 -6 -4 -4 -7 -4 -2 -4 -5 -5 -2 -5 0 0 -3 -12 I -3 -4 -4 -5 -4 -5 -4 -7 -6 7 0 -4 1 -1 -6 -4 -1 -10 -4 3 -4 -4 -3 -12 L -4 -6 -5 -9 -11 -3 -7 -8 -4 0 6 -6 2 -1 -5 -6 -5 -4 -5 -1 -7 -5 -4 -12 K -5 2 0 -2 -10 -1 -3 -5 -4 -4 -6 6 0 -10 -4 -2 -2 -8 -7 -6 -1 -2 -3 -12 M -3 -2 -6 -7 -10 -2 -5 -6 -7 1 2 0 10 -2 -6 -4 -2 -9 -7 0 -6 -4 -3 -12 F -6 -7 -6 -11 -9 -9 -10 -7 -4 -1 -1 -10 -2 8 -7 -5 -6 -3 3 -5 -8 -10 -5 -12 P 0 -2 -4 -5 -6 -1 -3 -4 -2 -6 -5 -4 -6 -7 7 0 -2 -10 -10 -4 -4 -2 -3 -12 S 1 -2 1 -2 -1 -3 -2 0 -4 -4 -6 -2 -4 -5 0 5 1 -4 -5 -4 0 -3 -2 -12 T 1 -4 -1 -3 -5 -4 -4 -3 -5 -1 -5 -2 -2 -6 -2 1 6 -9 -5 -1 -2 -4 -2 -12 W -10 0 -6 -11 -12 -9 -12 -11 -5 -10 -4 -8 -9 -3 -10 -4 -9 13 -3 -11 -8 -11 -8 -12 Y -6 -8 -3 -8 -2 -8 -7 -10 -2 -4 -5 -7 -7 3 -10 -5 -5 -3 9 -5 -5 -7 -5 -12 V -1 -5 -5 -6 -4 -5 -4 -4 -5 3 -1 -6 0 -5 -4 -4 -1 -11 -5 6 -5 -5 -3 -12 B -2 -5 5 5 -9 -1 2 -2 0 -4 -7 -1 -6 -8 -4 0 -2 -8 -5 -5 5 1 -3 -12 Z -2 -2 -1 2 -10 6 5 -3 0 -4 -5 -2 -4 -10 -2 -3 -4 -11 -7 -5 1 5 -3 -12 X -2 -4 -2 -3 -6 -3 -3 -3 -3 -3 -4 -3 -3 -5 -3 -2 -2 -8 -5 -3 -3 -3 -3 -12 * -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 1 biogo-1.0.4/align/matrix/matrices/PAM200000644000175000017500000000515214136731467017067 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 20 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -6.18, Entropy = 2.95 bits # # Lowest score = -19, Highest score = 13 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 6 -8 -5 -4 -8 -5 -3 -3 -8 -6 -7 -8 -6 -9 -2 -1 -1 -16 -9 -3 -5 -4 -4 -19 R -8 9 -7 -12 -9 -2 -11 -11 -3 -6 -10 -1 -5 -10 -5 -4 -8 -3 -11 -9 -9 -5 -7 -19 N -5 -7 8 1 -13 -5 -3 -4 -1 -6 -8 -2 -11 -10 -7 -1 -3 -9 -5 -9 6 -4 -4 -19 D -4 -12 1 8 -16 -4 2 -4 -5 -9 -15 -6 -13 -17 -9 -5 -6 -17 -13 -9 6 0 -7 -19 C -8 -9 -13 -16 10 -16 -16 -11 -8 -7 -17 -16 -16 -15 -9 -4 -9 -18 -5 -7 -14 -16 -11 -19 Q -5 -2 -5 -4 -16 9 0 -8 0 -9 -6 -4 -5 -15 -4 -6 -7 -15 -14 -8 -4 7 -6 -19 E -3 -11 -3 2 -16 0 8 -5 -6 -6 -10 -5 -8 -16 -7 -5 -7 -19 -9 -8 0 6 -6 -19 G -3 -11 -4 -4 -11 -8 -5 7 -10 -13 -12 -8 -10 -10 -7 -3 -7 -17 -16 -7 -4 -6 -6 -19 H -8 -3 -1 -5 -8 0 -6 -10 9 -11 -7 -8 -13 -7 -5 -7 -8 -8 -4 -7 -2 -2 -6 -19 I -6 -6 -6 -9 -7 -9 -6 -13 -11 9 -2 -7 -2 -3 -10 -8 -3 -16 -7 1 -7 -7 -6 -19 L -7 -10 -8 -15 -17 -6 -10 -12 -7 -2 7 -9 0 -4 -8 -9 -8 -7 -8 -3 -10 -8 -7 -19 K -8 -1 -2 -6 -16 -4 -5 -8 -8 -7 -9 7 -3 -16 -8 -5 -4 -14 -10 -10 -3 -5 -6 -19 M -6 -5 -11 -13 -16 -5 -8 -10 -13 -2 0 -3 11 -5 -9 -6 -5 -15 -13 -2 -12 -6 -6 -19 F -9 -10 -10 -17 -15 -15 -16 -10 -7 -3 -4 -16 -5 9 -11 -7 -10 -6 1 -9 -12 -16 -9 -19 P -2 -5 -7 -9 -9 -4 -7 -7 -5 -10 -8 -8 -9 -11 8 -3 -5 -16 -16 -7 -8 -5 -6 -19 S -1 -4 -1 -5 -4 -6 -5 -3 -7 -8 -9 -5 -6 -7 -3 7 0 -6 -8 -8 -2 -6 -4 -19 T -1 -8 -3 -6 -9 -7 -7 -7 -8 -3 -8 -4 -5 -10 -5 0 7 -15 -7 -4 -4 -7 -5 -19 W -16 -3 -9 -17 -18 -15 -19 -17 -8 -16 -7 -14 -15 -6 -16 -6 -15 13 -6 -18 -11 -17 -13 -19 Y -9 -11 -5 -13 -5 -14 -9 -16 -4 -7 -8 -10 -13 1 -16 -8 -7 -6 10 -8 -7 -11 -9 -19 V -3 -9 -9 -9 -7 -8 -8 -7 -7 1 -3 -10 -2 -9 -7 -8 -4 -18 -8 7 -9 -8 -6 -19 B -5 -9 6 6 -14 -4 0 -4 -2 -7 -10 -3 -12 -12 -8 -2 -4 -11 -7 -9 6 -1 -6 -19 Z -4 -5 -4 0 -16 7 6 -6 -2 -7 -8 -5 -6 -16 -5 -6 -7 -17 -11 -8 -1 6 -6 -19 X -4 -7 -4 -7 -11 -6 -6 -6 -6 -6 -7 -6 -6 -9 -6 -4 -5 -13 -9 -6 -6 -6 -6 -19 * -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 1 biogo-1.0.4/align/matrix/matrices/BLOSUM450000644000175000017500000000411214136731467017455 0ustar nileshnilesh# Matrix made by matblas from blosum45.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 45 # Entropy = 0.3795, Expected = -0.2789 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 5 -2 -1 -2 -1 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -2 -2 0 -1 -1 0 -5 R -2 7 0 -1 -3 1 0 -2 0 -3 -2 3 -1 -2 -2 -1 -1 -2 -1 -2 -1 0 -1 -5 N -1 0 6 2 -2 0 0 0 1 -2 -3 0 -2 -2 -2 1 0 -4 -2 -3 4 0 -1 -5 D -2 -1 2 7 -3 0 2 -1 0 -4 -3 0 -3 -4 -1 0 -1 -4 -2 -3 5 1 -1 -5 C -1 -3 -2 -3 12 -3 -3 -3 -3 -3 -2 -3 -2 -2 -4 -1 -1 -5 -3 -1 -2 -3 -2 -5 Q -1 1 0 0 -3 6 2 -2 1 -2 -2 1 0 -4 -1 0 -1 -2 -1 -3 0 4 -1 -5 E -1 0 0 2 -3 2 6 -2 0 -3 -2 1 -2 -3 0 0 -1 -3 -2 -3 1 4 -1 -5 G 0 -2 0 -1 -3 -2 -2 7 -2 -4 -3 -2 -2 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 -5 H -2 0 1 0 -3 1 0 -2 10 -3 -2 -1 0 -2 -2 -1 -2 -3 2 -3 0 0 -1 -5 I -1 -3 -2 -4 -3 -2 -3 -4 -3 5 2 -3 2 0 -2 -2 -1 -2 0 3 -3 -3 -1 -5 L -1 -2 -3 -3 -2 -2 -2 -3 -2 2 5 -3 2 1 -3 -3 -1 -2 0 1 -3 -2 -1 -5 K -1 3 0 0 -3 1 1 -2 -1 -3 -3 5 -1 -3 -1 -1 -1 -2 -1 -2 0 1 -1 -5 M -1 -1 -2 -3 -2 0 -2 -2 0 2 2 -1 6 0 -2 -2 -1 -2 0 1 -2 -1 -1 -5 F -2 -2 -2 -4 -2 -4 -3 -3 -2 0 1 -3 0 8 -3 -2 -1 1 3 0 -3 -3 -1 -5 P -1 -2 -2 -1 -4 -1 0 -2 -2 -2 -3 -1 -2 -3 9 -1 -1 -3 -3 -3 -2 -1 -1 -5 S 1 -1 1 0 -1 0 0 0 -1 -2 -3 -1 -2 -2 -1 4 2 -4 -2 -1 0 0 0 -5 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -1 -1 2 5 -3 -1 0 0 -1 0 -5 W -2 -2 -4 -4 -5 -2 -3 -2 -3 -2 -2 -2 -2 1 -3 -4 -3 15 3 -3 -4 -2 -2 -5 Y -2 -1 -2 -2 -3 -1 -2 -3 2 0 0 -1 0 3 -3 -2 -1 3 8 -1 -2 -2 -1 -5 V 0 -2 -3 -3 -1 -3 -3 -3 -3 3 1 -2 1 0 -3 -1 0 -3 -1 5 -3 -3 -1 -5 B -1 -1 4 5 -2 0 1 -1 0 -3 -3 0 -2 -3 -2 0 0 -4 -2 -3 4 2 -1 -5 Z -1 0 0 1 -3 4 4 -2 0 -3 -2 1 -1 -3 -1 0 -1 -2 -2 -3 2 4 -1 -5 X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 -2 -1 -1 -1 -1 -1 -5 * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 biogo-1.0.4/align/matrix/matrices/PAM1400000644000175000017500000000402314136731467017146 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 140 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -1.35, Entropy = 0.820 bits # # Lowest score = -8, Highest score = 12 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 3 -2 0 0 -2 -1 0 1 -2 -1 -2 -2 -2 -4 1 1 1 -6 -4 0 0 0 -1 -8 R -2 6 -1 -3 -4 1 -2 -4 1 -2 -4 3 -1 -5 -1 -1 -2 1 -5 -3 -2 -1 -1 -8 N 0 -1 3 2 -4 0 1 0 2 -2 -3 1 -2 -4 -1 1 0 -4 -2 -2 3 1 -1 -8 D 0 -3 2 4 -6 1 3 0 0 -3 -5 -1 -4 -6 -2 0 -1 -7 -5 -3 4 3 -1 -8 C -2 -4 -4 -6 9 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -3 -8 -1 -2 -5 -6 -4 -8 Q -1 1 0 1 -6 5 2 -2 3 -3 -2 0 -1 -5 0 -1 -2 -5 -5 -2 1 4 -1 -8 E 0 -2 1 3 -6 2 4 -1 0 -2 -4 -1 -3 -6 -1 -1 -1 -8 -4 -2 2 4 -1 -8 G 1 -4 0 0 -4 -2 -1 5 -3 -4 -5 -3 -3 -5 -1 1 -1 -7 -6 -2 0 -1 -1 -8 H -2 1 2 0 -4 3 0 -3 6 -3 -2 -1 -3 -2 -1 -1 -2 -3 0 -3 1 1 -1 -8 I -1 -2 -2 -3 -3 -3 -2 -4 -3 5 1 -2 2 0 -3 -2 0 -6 -2 3 -2 -2 -1 -8 L -2 -4 -3 -5 -7 -2 -4 -5 -2 1 5 -3 3 1 -3 -3 -2 -2 -2 1 -4 -3 -2 -8 K -2 3 1 -1 -6 0 -1 -3 -1 -2 -3 5 0 -6 -2 -1 0 -4 -5 -3 0 0 -1 -8 M -2 -1 -2 -4 -6 -1 -3 -3 -3 2 3 0 7 -1 -3 -2 -1 -5 -4 1 -3 -2 -1 -8 F -4 -5 -4 -6 -5 -5 -6 -5 -2 0 1 -6 -1 7 -5 -3 -4 -1 4 -2 -5 -6 -3 -8 P 1 -1 -1 -2 -3 0 -1 -1 -1 -3 -3 -2 -3 -5 6 1 0 -6 -6 -2 -2 -1 -1 -8 S 1 -1 1 0 0 -1 -1 1 -1 -2 -3 -1 -2 -3 1 3 2 -2 -3 -2 0 -1 0 -8 T 1 -2 0 -1 -3 -2 -1 -1 -2 0 -2 0 -1 -4 0 2 4 -5 -3 0 0 -1 -1 -8 W -6 1 -4 -7 -8 -5 -8 -7 -3 -6 -2 -4 -5 -1 -6 -2 -5 12 -1 -7 -5 -6 -5 -8 Y -4 -5 -2 -5 -1 -5 -4 -6 0 -2 -2 -5 -4 4 -6 -3 -3 -1 8 -3 -3 -4 -3 -8 V 0 -3 -2 -3 -2 -2 -2 -2 -3 3 1 -3 1 -2 -2 -2 0 -7 -3 5 -3 -2 -1 -8 B 0 -2 3 4 -5 1 2 0 1 -2 -4 0 -3 -5 -2 0 0 -5 -3 -3 3 2 -1 -8 Z 0 -1 1 3 -6 4 4 -1 1 -2 -3 0 -2 -6 -1 -1 -1 -6 -4 -2 2 4 -1 -8 X -1 -1 -1 -1 -4 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 -1 -5 -3 -1 -1 -1 -1 -8 * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 biogo-1.0.4/align/matrix/matrices/PAM1000000644000175000017500000000402214136731467017141 0ustar nileshnilesh# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 100 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -1.99, Entropy = 1.18 bits # # Lowest score = -9, Highest score = 12 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 4 -3 -1 -1 -3 -2 0 1 -3 -2 -3 -3 -2 -5 1 1 1 -7 -4 0 -1 -1 -1 -9 R -3 7 -2 -4 -5 1 -3 -5 1 -3 -5 2 -1 -6 -1 -1 -3 1 -6 -4 -3 -1 -2 -9 N -1 -2 5 3 -5 -1 1 -1 2 -3 -4 1 -4 -5 -2 1 0 -5 -2 -3 4 0 -1 -9 D -1 -4 3 5 -7 0 4 -1 -1 -4 -6 -1 -5 -8 -3 -1 -2 -9 -6 -4 4 3 -2 -9 C -3 -5 -5 -7 9 -8 -8 -5 -4 -3 -8 -8 -7 -7 -4 -1 -4 -9 -1 -3 -6 -8 -5 -9 Q -2 1 -1 0 -8 6 2 -3 3 -4 -2 0 -2 -7 -1 -2 -2 -7 -6 -3 0 5 -2 -9 E 0 -3 1 4 -8 2 5 -1 -1 -3 -5 -1 -4 -8 -2 -1 -2 -9 -5 -3 3 4 -2 -9 G 1 -5 -1 -1 -5 -3 -1 5 -4 -5 -6 -3 -4 -6 -2 0 -2 -9 -7 -3 -1 -2 -2 -9 H -3 1 2 -1 -4 3 -1 -4 7 -4 -3 -2 -4 -3 -1 -2 -3 -4 -1 -3 1 1 -2 -9 I -2 -3 -3 -4 -3 -4 -3 -5 -4 6 1 -3 1 0 -4 -3 0 -7 -3 3 -3 -3 -2 -9 L -3 -5 -4 -6 -8 -2 -5 -6 -3 1 6 -4 3 0 -4 -4 -3 -3 -3 0 -5 -4 -3 -9 K -3 2 1 -1 -8 0 -1 -3 -2 -3 -4 5 0 -7 -3 -1 -1 -6 -6 -4 0 -1 -2 -9 M -2 -1 -4 -5 -7 -2 -4 -4 -4 1 3 0 9 -1 -4 -3 -1 -6 -5 1 -4 -2 -2 -9 F -5 -6 -5 -8 -7 -7 -8 -6 -3 0 0 -7 -1 8 -6 -4 -5 -1 4 -3 -6 -7 -4 -9 P 1 -1 -2 -3 -4 -1 -2 -2 -1 -4 -4 -3 -4 -6 7 0 -1 -7 -7 -3 -3 -1 -2 -9 S 1 -1 1 -1 -1 -2 -1 0 -2 -3 -4 -1 -3 -4 0 4 2 -3 -4 -2 0 -2 -1 -9 T 1 -3 0 -2 -4 -2 -2 -2 -3 0 -3 -1 -1 -5 -1 2 5 -7 -4 0 -1 -2 -1 -9 W -7 1 -5 -9 -9 -7 -9 -9 -4 -7 -3 -6 -6 -1 -7 -3 -7 12 -2 -9 -6 -8 -6 -9 Y -4 -6 -2 -6 -1 -6 -5 -7 -1 -3 -3 -6 -5 4 -7 -4 -4 -2 9 -4 -4 -6 -4 -9 V 0 -4 -3 -4 -3 -3 -3 -3 -3 3 0 -4 1 -3 -3 -2 0 -9 -4 5 -4 -3 -2 -9 B -1 -3 4 4 -6 0 3 -1 1 -3 -5 0 -4 -6 -3 0 -1 -6 -4 -4 4 2 -2 -9 Z -1 -1 0 3 -8 5 4 -2 1 -3 -4 -1 -2 -7 -1 -2 -2 -8 -6 -3 2 5 -2 -9 X -1 -2 -1 -2 -5 -2 -2 -2 -2 -2 -3 -2 -2 -4 -2 -1 -1 -6 -4 -2 -2 -2 -2 -9 * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 biogo-1.0.4/align/matrix/matrices/BLOSUM620000644000175000017500000000411214136731467017454 0ustar nileshnilesh# Matrix made by matblas from blosum62.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 62 # Entropy = 0.6979, Expected = -0.5209 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 4 -1 -2 -2 0 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 0 -4 R -1 5 0 -2 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -4 N -2 0 6 1 -3 0 0 0 1 -3 -3 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1 -4 D -2 -2 1 6 -3 0 2 -1 -1 -3 -4 -1 -3 -3 -1 0 -1 -4 -3 -3 4 1 -1 -4 C 0 -3 -3 -3 9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4 Q -1 1 0 0 -3 5 2 -2 0 -3 -2 1 0 -3 -1 0 -1 -2 -1 -2 0 3 -1 -4 E -1 0 0 2 -4 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4 G 0 -2 0 -1 -3 -2 -2 6 -2 -4 -4 -2 -3 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 -4 H -2 0 1 -1 -3 0 0 -2 8 -3 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 0 0 -1 -4 I -1 -3 -3 -3 -1 -3 -3 -4 -3 4 2 -3 1 0 -3 -2 -1 -3 -1 3 -3 -3 -1 -4 L -1 -2 -3 -4 -1 -2 -3 -4 -3 2 4 -2 2 0 -3 -2 -1 -2 -1 1 -4 -3 -1 -4 K -1 2 0 -1 -3 1 1 -2 -1 -3 -2 5 -1 -3 -1 0 -1 -3 -2 -2 0 1 -1 -4 M -1 -1 -2 -3 -1 0 -2 -3 -2 1 2 -1 5 0 -2 -1 -1 -1 -1 1 -3 -1 -1 -4 F -2 -3 -3 -3 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -1 -4 P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4 7 -1 -1 -4 -3 -2 -2 -1 -2 -4 S 1 -1 1 0 -1 0 0 0 -1 -2 -2 0 -1 -2 -1 4 1 -3 -2 -2 0 0 0 -4 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 5 -2 -2 0 -1 -1 0 -4 W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1 1 -4 -3 -2 11 2 -3 -4 -3 -2 -4 Y -2 -2 -2 -3 -2 -1 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -1 -3 -2 -1 -4 V 0 -3 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1 -4 B -2 -1 3 4 -3 0 1 -1 0 -3 -4 0 -3 -3 -2 0 -1 -4 -3 -3 4 1 -1 -4 Z -1 0 0 1 -3 3 4 -2 0 -3 -3 1 -1 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4 X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 0 0 -2 -1 -1 -1 -1 -1 -4 * -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 1 biogo-1.0.4/align/matrix/matrices/BLOSUM1000000644000175000017500000000417614136731467017537 0ustar nileshnilesh# Matrix made by matblas from blosum100_3.iij # * column uses minimum score # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 100 # Entropy = 1.4516, Expected = -1.0948 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 8 -3 -4 -5 -2 -2 -3 -1 -4 -4 -4 -2 -3 -5 -2 1 -1 -6 -5 -2 -4 -2 -2 -10 R -3 10 -2 -5 -8 0 -2 -6 -1 -7 -6 3 -4 -6 -5 -3 -3 -7 -5 -6 -4 -1 -3 -10 N -4 -2 11 1 -5 -1 -2 -2 0 -7 -7 -1 -5 -7 -5 0 -1 -8 -5 -7 5 -2 -3 -10 D -5 -5 1 10 -8 -2 2 -4 -3 -8 -8 -3 -8 -8 -5 -2 -4 -10 -7 -8 6 0 -4 -10 C -2 -8 -5 -8 14 -7 -9 -7 -8 -3 -5 -8 -4 -4 -8 -3 -3 -7 -6 -3 -7 -8 -5 -10 Q -2 0 -1 -2 -7 11 2 -5 1 -6 -5 2 -2 -6 -4 -2 -3 -5 -4 -5 -2 5 -2 -10 E -3 -2 -2 2 -9 2 10 -6 -2 -7 -7 0 -5 -8 -4 -2 -3 -8 -7 -5 0 7 -3 -10 G -1 -6 -2 -4 -7 -5 -6 9 -6 -9 -8 -5 -7 -8 -6 -2 -5 -7 -8 -8 -3 -5 -4 -10 H -4 -1 0 -3 -8 1 -2 -6 13 -7 -6 -3 -5 -4 -5 -3 -4 -5 1 -7 -2 -1 -4 -10 I -4 -7 -7 -8 -3 -6 -7 -9 -7 8 2 -6 1 -2 -7 -5 -3 -6 -4 4 -8 -7 -3 -10 L -4 -6 -7 -8 -5 -5 -7 -8 -6 2 8 -6 3 0 -7 -6 -4 -5 -4 0 -8 -6 -3 -10 K -2 3 -1 -3 -8 2 0 -5 -3 -6 -6 10 -4 -6 -3 -2 -3 -8 -5 -5 -2 0 -3 -10 M -3 -4 -5 -8 -4 -2 -5 -7 -5 1 3 -4 12 -1 -5 -4 -2 -4 -5 0 -7 -4 -3 -10 F -5 -6 -7 -8 -4 -6 -8 -8 -4 -2 0 -6 -1 11 -7 -5 -5 0 4 -3 -7 -7 -4 -10 P -2 -5 -5 -5 -8 -4 -4 -6 -5 -7 -7 -3 -5 -7 12 -3 -4 -8 -7 -6 -5 -4 -4 -10 S 1 -3 0 -2 -3 -2 -2 -2 -3 -5 -6 -2 -4 -5 -3 9 2 -7 -5 -4 -1 -2 -2 -10 T -1 -3 -1 -4 -3 -3 -3 -5 -4 -3 -4 -3 -2 -5 -4 2 9 -7 -5 -1 -2 -3 -2 -10 W -6 -7 -8 -10 -7 -5 -8 -7 -5 -6 -5 -8 -4 0 -8 -7 -7 17 2 -5 -9 -7 -6 -10 Y -5 -5 -5 -7 -6 -4 -7 -8 1 -4 -4 -5 -5 4 -7 -5 -5 2 12 -5 -6 -6 -4 -10 V -2 -6 -7 -8 -3 -5 -5 -8 -7 4 0 -5 0 -3 -6 -4 -1 -5 -5 8 -7 -5 -3 -10 B -4 -4 5 6 -7 -2 0 -3 -2 -8 -8 -2 -7 -7 -5 -1 -2 -9 -6 -7 6 0 -4 -10 Z -2 -1 -2 0 -8 5 7 -5 -1 -7 -6 0 -4 -7 -4 -2 -3 -7 -6 -5 0 6 -2 -10 X -2 -3 -3 -4 -5 -2 -3 -4 -4 -3 -3 -3 -3 -4 -4 -2 -2 -6 -4 -3 -4 -2 -3 -10 * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 biogo-1.0.4/align/matrix/matrices.go0000644000175000017500000143405014136731467016720 0ustar nileshnilesh// DO NOT EDIT. This file was autogenerated by make.go. // Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package matrix provides a variety of alignment scoring matrices for sequence alignment. package matrix // All alignment scoring matrices are organised to allow direct lookup using alphabets // defined in biogo/alphabet. Gap penalties are set to zero for all matrices and the I/L // single letter amino acid code, "J", is included but not defined for all the protein // scoring matrices. var ( // # // # This matrix was created by Todd Lowe 12/10/92 // # // # Probabilities rounded to nearest integer // # // # Lowest score = -4, Highest score = 5 // # // A T G C // A 5 -4 -4 -4 // T -4 5 -4 -4 // G -4 -4 5 -4 // C -4 -4 -4 5 // NUC_4 = [][]int{ /* - A C G T */ /* - */ {0, 0, 0, 0, 0}, /* A */ {0, 5, -4, -4, -4}, /* C */ {0, -4, 5, -4, -4}, /* G */ {0, -4, -4, 5, -4}, /* T */ {0, -4, -4, -4, 5}, } // # // # This matrix was created by Todd Lowe 12/10/92 // # // # Uses ambiguous nucleotide codes, probabilities rounded to // # nearest integer // # // # Lowest score = -4, Highest score = 5 // # // A T G C S W R Y K M B V H D N // A 5 -4 -4 -4 -4 1 1 -4 -4 1 -4 -1 -1 -1 -2 // T -4 5 -4 -4 -4 1 -4 1 1 -4 -1 -4 -1 -1 -2 // G -4 -4 5 -4 1 -4 1 -4 1 -4 -1 -1 -4 -1 -2 // C -4 -4 -4 5 1 -4 -4 1 -4 1 -1 -1 -1 -4 -2 // S -4 -4 1 1 -1 -4 -2 -2 -2 -2 -1 -1 -3 -3 -1 // W 1 1 -4 -4 -4 -1 -2 -2 -2 -2 -3 -3 -1 -1 -1 // R 1 -4 1 -4 -2 -2 -1 -4 -2 -2 -3 -1 -3 -1 -1 // Y -4 1 -4 1 -2 -2 -4 -1 -2 -2 -1 -3 -1 -3 -1 // K -4 1 1 -4 -2 -2 -2 -2 -1 -4 -1 -3 -3 -1 -1 // M 1 -4 -4 1 -2 -2 -2 -2 -4 -1 -3 -1 -1 -3 -1 // B -4 -1 -1 -1 -1 -3 -3 -1 -1 -3 -1 -2 -2 -2 -1 // V -1 -4 -1 -1 -1 -3 -1 -3 -3 -1 -2 -1 -2 -2 -1 // H -1 -1 -4 -1 -3 -1 -3 -1 -3 -1 -2 -2 -1 -2 -1 // D -1 -1 -1 -4 -3 -1 -1 -3 -1 -3 -2 -2 -2 -1 -1 // N -2 -2 -2 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // NUC_4_4 = [][]int{ /* - A C M G R S V T W Y H K D B N */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 5, -4, 1, -4, 1, -4, -1, -4, 1, -4, -1, -4, -1, -4, -2}, /* C */ {0, -4, 5, 1, -4, -4, 1, -1, -4, -4, 1, -1, -4, -4, -1, -2}, /* M */ {0, 1, 1, -1, -4, -2, -2, -1, -4, -2, -2, -1, -4, -3, -3, -1}, /* G */ {0, -4, -4, -4, 5, 1, 1, -1, -4, -4, -4, -4, 1, -1, -1, -2}, /* R */ {0, 1, -4, -2, 1, -1, -2, -1, -4, -2, -4, -3, -2, -1, -3, -1}, /* S */ {0, -4, 1, -2, 1, -2, -1, -1, -4, -4, -2, -3, -2, -3, -1, -1}, /* V */ {0, -1, -1, -1, -1, -1, -1, -1, -4, -3, -3, -2, -3, -2, -2, -1}, /* T */ {0, -4, -4, -4, -4, -4, -4, -4, 5, 1, 1, -1, 1, -1, -1, -2}, /* W */ {0, 1, -4, -2, -4, -2, -4, -3, 1, -1, -2, -1, -2, -1, -3, -1}, /* Y */ {0, -4, 1, -2, -4, -4, -2, -3, 1, -2, -1, -1, -2, -3, -1, -1}, /* H */ {0, -1, -1, -1, -4, -3, -3, -2, -1, -1, -1, -1, -3, -2, -2, -1}, /* K */ {0, -4, -4, -4, 1, -2, -2, -3, 1, -2, -2, -3, -1, -1, -1, -1}, /* D */ {0, -1, -4, -3, -1, -1, -3, -2, -1, -1, -3, -2, -1, -1, -2, -1}, /* B */ {0, -4, -1, -3, -1, -3, -1, -2, -1, -3, -1, -2, -1, -2, -1, -1}, /* N */ {0, -2, -2, -1, -2, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1}, } // #Date: Wed, 18 Sep 91 17:36:51 EDT // #From: altschul@ray.nlm.nih.gov (Stephen Altschul) // #To: gish@ray.nlm.nih.gov // #Subject: Vanilla-flavored PAM-250 // # // # substitution scores for B, Z, X, and * were obtained with "pam" version 1.0.5 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -2 0 0 -2 0 0 1 -1 -1 -2 -1 -1 -4 1 1 1 -6 -3 0 0 0 0 -8 // R -2 6 0 -1 -4 1 -1 -3 2 -2 -3 3 0 -4 0 0 -1 2 -4 -2 -1 0 -1 -8 // N 0 0 2 2 -4 1 1 0 2 -2 -3 1 -2 -4 -1 1 0 -4 -2 -2 2 1 0 -8 // D 0 -1 2 4 -5 2 3 1 1 -2 -4 0 -3 -6 -1 0 0 -7 -4 -2 3 3 -1 -8 // C -2 -4 -4 -5 12 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3 0 -2 -8 0 -2 -4 -5 -3 -8 // Q 0 1 1 2 -5 4 2 -1 3 -2 -2 1 -1 -5 0 -1 -1 -5 -4 -2 1 3 -1 -8 // E 0 -1 1 3 -5 2 4 0 1 -2 -3 0 -2 -5 -1 0 0 -7 -4 -2 3 3 -1 -8 // G 1 -3 0 1 -3 -1 0 5 -2 -3 -4 -2 -3 -5 -1 1 0 -7 -5 -1 0 0 -1 -8 // H -1 2 2 1 -3 3 1 -2 6 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 -1 -8 // I -1 -2 -2 -2 -2 -2 -2 -3 -2 5 2 -2 2 1 -2 -1 0 -5 -1 4 -2 -2 -1 -8 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 6 -3 4 2 -3 -3 -2 -2 -1 2 -3 -3 -1 -8 // K -1 3 1 0 -5 1 0 -2 0 -2 -3 5 0 -5 -1 0 0 -3 -4 -2 1 0 -1 -8 // M -1 0 -2 -3 -5 -1 -2 -3 -2 2 4 0 6 0 -2 -2 -1 -4 -2 2 -2 -2 -1 -8 // F -4 -4 -4 -6 -4 -5 -5 -5 -2 1 2 -5 0 9 -5 -3 -3 0 7 -1 -4 -5 -2 -8 // P 1 0 -1 -1 -3 0 -1 -1 0 -2 -3 -1 -2 -5 6 1 0 -6 -5 -1 -1 0 -1 -8 // S 1 0 1 0 0 -1 0 1 -1 -1 -3 0 -2 -3 1 2 1 -2 -3 -1 0 0 0 -8 // T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 0 1 3 -5 -3 0 0 -1 0 -8 // W -6 2 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4 0 -6 -2 -5 17 0 -6 -5 -6 -4 -8 // Y -3 -4 -2 -4 0 -4 -4 -5 0 -1 -1 -4 -2 7 -5 -3 -3 0 10 -2 -3 -4 -2 -8 // V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 -1 -8 // B 0 -1 2 3 -4 1 3 0 1 -2 -3 1 -2 -4 -1 0 0 -5 -3 -2 3 2 -1 -8 // Z 0 0 1 3 -5 3 3 0 2 -2 -3 0 -2 -5 0 0 -1 -6 -4 -2 2 3 -1 -8 // X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -1 -1 -1 -2 -1 0 0 -4 -2 -1 -1 -1 -1 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // DAYHOFF = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -4, 1, -1, -1, 0, -1, -2, -1, 0, 1, 0, -2, 1, 1, 0, -6, 0, -3, 0, -8}, /* B */ {0, 0, 3, -4, 3, 3, -4, 0, 1, -2, 0, 1, -3, -2, 2, -1, 1, -1, 0, 0, -2, -5, -1, -3, 2, -8}, /* C */ {0, -2, -4, 12, -5, -5, -4, -3, -3, -2, 0, -5, -6, -5, -4, -3, -5, -4, 0, -2, -2, -8, -3, 0, -5, -8}, /* D */ {0, 0, 3, -5, 4, 3, -6, 1, 1, -2, 0, 0, -4, -3, 2, -1, 2, -1, 0, 0, -2, -7, -1, -4, 3, -8}, /* E */ {0, 0, 3, -5, 3, 4, -5, 0, 1, -2, 0, 0, -3, -2, 1, -1, 2, -1, 0, 0, -2, -7, -1, -4, 3, -8}, /* F */ {0, -4, -4, -4, -6, -5, 9, -5, -2, 1, 0, -5, 2, 0, -4, -5, -5, -4, -3, -3, -1, 0, -2, 7, -5, -8}, /* G */ {0, 1, 0, -3, 1, 0, -5, 5, -2, -3, 0, -2, -4, -3, 0, -1, -1, -3, 1, 0, -1, -7, -1, -5, 0, -8}, /* H */ {0, -1, 1, -3, 1, 1, -2, -2, 6, -2, 0, 0, -2, -2, 2, 0, 3, 2, -1, -1, -2, -3, -1, 0, 2, -8}, /* I */ {0, -1, -2, -2, -2, -2, 1, -3, -2, 5, 0, -2, 2, 2, -2, -2, -2, -2, -1, 0, 4, -5, -1, -1, -2, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -5, 0, 0, -5, -2, 0, -2, 0, 5, -3, 0, 1, -1, 1, 3, 0, 0, -2, -3, -1, -4, 0, -8}, /* L */ {0, -2, -3, -6, -4, -3, 2, -4, -2, 2, 0, -3, 6, 4, -3, -3, -2, -3, -3, -2, 2, -2, -1, -1, -3, -8}, /* M */ {0, -1, -2, -5, -3, -2, 0, -3, -2, 2, 0, 0, 4, 6, -2, -2, -1, 0, -2, -1, 2, -4, -1, -2, -2, -8}, /* N */ {0, 0, 2, -4, 2, 1, -4, 0, 2, -2, 0, 1, -3, -2, 2, -1, 1, 0, 1, 0, -2, -4, 0, -2, 1, -8}, /* P */ {0, 1, -1, -3, -1, -1, -5, -1, 0, -2, 0, -1, -3, -2, -1, 6, 0, 0, 1, 0, -1, -6, -1, -5, 0, -8}, /* Q */ {0, 0, 1, -5, 2, 2, -5, -1, 3, -2, 0, 1, -2, -1, 1, 0, 4, 1, -1, -1, -2, -5, -1, -4, 3, -8}, /* R */ {0, -2, -1, -4, -1, -1, -4, -3, 2, -2, 0, 3, -3, 0, 0, 0, 1, 6, 0, -1, -2, 2, -1, -4, 0, -8}, /* S */ {0, 1, 0, 0, 0, 0, -3, 1, -1, -1, 0, 0, -3, -2, 1, 1, -1, 0, 2, 1, -1, -2, 0, -3, 0, -8}, /* T */ {0, 1, 0, -2, 0, 0, -3, 0, -1, 0, 0, 0, -2, -1, 0, 0, -1, -1, 1, 3, 0, -5, 0, -3, -1, -8}, /* V */ {0, 0, -2, -2, -2, -2, -1, -1, -2, 4, 0, -2, 2, 2, -2, -1, -2, -2, -1, 0, 4, -6, -1, -2, -2, -8}, /* W */ {0, -6, -5, -8, -7, -7, 0, -7, -3, -5, 0, -3, -2, -4, -4, -6, -5, 2, -2, -5, -6, 17, -4, 0, -6, -8}, /* X */ {0, 0, -1, -3, -1, -1, -2, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, 0, -1, -4, -1, -2, -1, -8}, /* Y */ {0, -3, -3, 0, -4, -4, 7, -5, 0, -1, 0, -4, -1, -2, -2, -5, -4, -4, -3, -3, -2, 0, -2, 10, -4, -8}, /* Z */ {0, 0, 2, -5, 3, 3, -5, 0, 2, -2, 0, 0, -3, -2, 1, 0, 3, 0, 0, -1, -2, -6, -1, -4, 3, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # PAM 250 matrix recommended by Gonnet, Cohen & Benner // # Science June 5, 1992. // # Values rounded to nearest integer // C S T P A G N D E Q H R K M I L V F Y W X * // C 12 0 0 -3 0 -2 -2 -3 -3 -2 -1 -2 -3 -1 -1 -2 0 -1 0 -1 -3 -8 // S 0 2 2 0 1 0 1 0 0 0 0 0 0 -1 -2 -2 -1 -3 -2 -3 0 -8 // T 0 2 2 0 1 -1 0 0 0 0 0 0 0 -1 -1 -1 0 -2 -2 -4 0 -8 // P -3 0 0 8 0 -2 -1 -1 0 0 -1 -1 -1 -2 -3 -2 -2 -4 -3 -5 -1 -8 // A 0 1 1 0 2 0 0 0 0 0 -1 -1 0 -1 -1 -1 0 -2 -2 -4 0 -8 // G -2 0 -1 -2 0 7 0 0 -1 -1 -1 -1 -1 -4 -4 -4 -3 -5 -4 -4 -1 -8 // N -2 1 0 -1 0 0 4 2 1 1 1 0 1 -2 -3 -3 -2 -3 -1 -4 0 -8 // D -3 0 0 -1 0 0 2 5 3 1 0 0 0 -3 -4 -4 -3 -4 -3 -5 -1 -8 // E -3 0 0 0 0 -1 1 3 4 2 0 0 1 -2 -3 -3 -2 -4 -3 -4 -1 -8 // Q -2 0 0 0 0 -1 1 1 2 3 1 2 2 -1 -2 -2 -2 -3 -2 -3 -1 -8 // H -1 0 0 -1 -1 -1 1 0 0 1 6 1 1 -1 -2 -2 -2 0 2 -1 -1 -8 // R -2 0 0 -1 -1 -1 0 0 0 2 1 5 3 -2 -2 -2 -2 -3 -2 -2 -1 -8 // K -3 0 0 -1 0 -1 1 0 1 2 1 3 3 -1 -2 -2 -2 -3 -2 -4 -1 -8 // M -1 -1 -1 -2 -1 -4 -2 -3 -2 -1 -1 -2 -1 4 2 3 2 2 0 -1 -1 -8 // I -1 -2 -1 -3 -1 -4 -3 -4 -3 -2 -2 -2 -2 2 4 3 3 1 -1 -2 -1 -8 // L -2 -2 -1 -2 -1 -4 -3 -4 -3 -2 -2 -2 -2 3 3 4 2 2 0 -1 -1 -8 // V 0 -1 0 -2 0 -3 -2 -3 -2 -2 -2 -2 -2 2 3 2 3 0 -1 -3 -1 -8 // F -1 -3 -2 -4 -2 -5 -3 -4 -4 -3 0 -3 -3 2 1 2 0 7 5 4 -2 -8 // Y 0 -2 -2 -3 -2 -4 -1 -3 -3 -2 2 -2 -2 0 -1 0 -1 5 8 4 -2 -8 // W -1 -3 -4 -5 -4 -4 -4 -5 -4 -3 -1 -2 -4 -1 -2 -1 -3 4 4 14 -4 -8 // X -3 0 0 -1 0 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 -2 -4 -1 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // GONNET = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, 0, 0, 0, -2, 0, -1, -1, 0, 0, -1, -1, 0, 0, 0, -1, 1, 1, 0, -4, 0, -2, 0, -8}, /* B */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* C */ {0, 0, 0, 12, -3, -3, -1, -2, -1, -1, 0, -3, -2, -1, -2, -3, -2, -2, 0, 0, 0, -1, -3, 0, 0, -8}, /* D */ {0, 0, 0, -3, 5, 3, -4, 0, 0, -4, 0, 0, -4, -3, 2, -1, 1, 0, 0, 0, -3, -5, -1, -3, 0, -8}, /* E */ {0, 0, 0, -3, 3, 4, -4, -1, 0, -3, 0, 1, -3, -2, 1, 0, 2, 0, 0, 0, -2, -4, -1, -3, 0, -8}, /* F */ {0, -2, 0, -1, -4, -4, 7, -5, 0, 1, 0, -3, 2, 2, -3, -4, -3, -3, -3, -2, 0, 4, -2, 5, 0, -8}, /* G */ {0, 0, 0, -2, 0, -1, -5, 7, -1, -4, 0, -1, -4, -4, 0, -2, -1, -1, 0, -1, -3, -4, -1, -4, 0, -8}, /* H */ {0, -1, 0, -1, 0, 0, 0, -1, 6, -2, 0, 1, -2, -1, 1, -1, 1, 1, 0, 0, -2, -1, -1, 2, 0, -8}, /* I */ {0, -1, 0, -1, -4, -3, 1, -4, -2, 4, 0, -2, 3, 2, -3, -3, -2, -2, -2, -1, 3, -2, -1, -1, 0, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, 0, 0, -3, 0, 1, -3, -1, 1, -2, 0, 3, -2, -1, 1, -1, 2, 3, 0, 0, -2, -4, -1, -2, 0, -8}, /* L */ {0, -1, 0, -2, -4, -3, 2, -4, -2, 3, 0, -2, 4, 3, -3, -2, -2, -2, -2, -1, 2, -1, -1, 0, 0, -8}, /* M */ {0, -1, 0, -1, -3, -2, 2, -4, -1, 2, 0, -1, 3, 4, -2, -2, -1, -2, -1, -1, 2, -1, -1, 0, 0, -8}, /* N */ {0, 0, 0, -2, 2, 1, -3, 0, 1, -3, 0, 1, -3, -2, 4, -1, 1, 0, 1, 0, -2, -4, 0, -1, 0, -8}, /* P */ {0, 0, 0, -3, -1, 0, -4, -2, -1, -3, 0, -1, -2, -2, -1, 8, 0, -1, 0, 0, -2, -5, -1, -3, 0, -8}, /* Q */ {0, 0, 0, -2, 1, 2, -3, -1, 1, -2, 0, 2, -2, -1, 1, 0, 3, 2, 0, 0, -2, -3, -1, -2, 0, -8}, /* R */ {0, -1, 0, -2, 0, 0, -3, -1, 1, -2, 0, 3, -2, -2, 0, -1, 2, 5, 0, 0, -2, -2, -1, -2, 0, -8}, /* S */ {0, 1, 0, 0, 0, 0, -3, 0, 0, -2, 0, 0, -2, -1, 1, 0, 0, 0, 2, 2, -1, -3, 0, -2, 0, -8}, /* T */ {0, 1, 0, 0, 0, 0, -2, -1, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 2, 2, 0, -4, 0, -2, 0, -8}, /* V */ {0, 0, 0, 0, -3, -2, 0, -3, -2, 3, 0, -2, 2, 2, -2, -2, -2, -2, -1, 0, 3, -3, -1, -1, 0, -8}, /* W */ {0, -4, 0, -1, -5, -4, 4, -4, -1, -2, 0, -4, -1, -1, -4, -5, -3, -2, -3, -4, -3, 14, -4, 4, 0, -8}, /* X */ {0, 0, 0, -3, -1, -1, -2, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, 0, -1, -4, -1, -2, 0, -8}, /* Y */ {0, -2, 0, 0, -3, -3, 5, -4, 2, -1, 0, -2, 0, 0, -1, -3, -2, -2, -2, -2, -1, 4, -2, 8, 0, -8}, /* Z */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* * */ {0, -8, 0, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, 1}, } // A R N B D C Q Z E G H I L K M F P S T W Y V X * // A 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // R -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // N -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // B -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // D -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // C -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // Q -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // Z -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // E -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // G -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // H -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // I -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // L -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // K -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // M -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // F -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // P -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 -10000 // S -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 -10000 // T -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 -10000 // W -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 -10000 // Y -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 -10000 // V -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 1 -10000 -10000 // X -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 0 -10000 // * -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 0 // IDENTITY = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* B */ {0, -10000, 1, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* C */ {0, -10000, -10000, 1, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* D */ {0, -10000, -10000, -10000, 1, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* E */ {0, -10000, -10000, -10000, -10000, 1, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* F */ {0, -10000, -10000, -10000, -10000, -10000, 1, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* G */ {0, -10000, -10000, -10000, -10000, -10000, -10000, 1, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* H */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 1, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* I */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 1, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, 1, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* L */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, 1, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* M */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, 1, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* N */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, 1, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* P */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, 1, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* Q */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, 1, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* R */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, 1, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* S */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 1, -10000, -10000, -10000, -10000, -10000, -10000, -10000}, /* T */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 1, -10000, -10000, -10000, -10000, -10000, -10000}, /* V */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 1, -10000, -10000, -10000, -10000, -10000}, /* W */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 1, -10000, -10000, -10000, -10000}, /* X */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000}, /* Y */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 1, -10000, -10000}, /* Z */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 1, -10000}, /* * */ {0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, -10000, 0}, } // A R N B D C Q Z E G H I L K M F P S T W Y V X * // A 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // R -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // N -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // B -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // D -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // C -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // Q -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // Z -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // E -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // G -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // H -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // I -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // L -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // K -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // M -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 // F -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 // P -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 // S -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 // T -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 // W -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 // Y -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 // V -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 // X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 // * -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 // MATCH = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* B */ {0, -1, 1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* C */ {0, -1, -1, 1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* D */ {0, -1, -1, -1, 1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* E */ {0, -1, -1, -1, -1, 1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* F */ {0, -1, -1, -1, -1, -1, 1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* G */ {0, -1, -1, -1, -1, -1, -1, 1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* H */ {0, -1, -1, -1, -1, -1, -1, -1, 1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* I */ {0, -1, -1, -1, -1, -1, -1, -1, -1, 1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* L */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* M */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* N */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* P */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* Q */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* R */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* S */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1}, /* T */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1}, /* V */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1}, /* W */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1}, /* X */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1}, /* Y */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1}, /* Z */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1}, /* * */ {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0}, } // # Matrix made by matblas from blosum100_3.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 100 // # Entropy = 1.4516, Expected = -1.0948 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 8 -3 -4 -5 -2 -2 -3 -1 -4 -4 -4 -2 -3 -5 -2 1 -1 -6 -5 -2 -4 -2 -2 -10 // R -3 10 -2 -5 -8 0 -2 -6 -1 -7 -6 3 -4 -6 -5 -3 -3 -7 -5 -6 -4 -1 -3 -10 // N -4 -2 11 1 -5 -1 -2 -2 0 -7 -7 -1 -5 -7 -5 0 -1 -8 -5 -7 5 -2 -3 -10 // D -5 -5 1 10 -8 -2 2 -4 -3 -8 -8 -3 -8 -8 -5 -2 -4 -10 -7 -8 6 0 -4 -10 // C -2 -8 -5 -8 14 -7 -9 -7 -8 -3 -5 -8 -4 -4 -8 -3 -3 -7 -6 -3 -7 -8 -5 -10 // Q -2 0 -1 -2 -7 11 2 -5 1 -6 -5 2 -2 -6 -4 -2 -3 -5 -4 -5 -2 5 -2 -10 // E -3 -2 -2 2 -9 2 10 -6 -2 -7 -7 0 -5 -8 -4 -2 -3 -8 -7 -5 0 7 -3 -10 // G -1 -6 -2 -4 -7 -5 -6 9 -6 -9 -8 -5 -7 -8 -6 -2 -5 -7 -8 -8 -3 -5 -4 -10 // H -4 -1 0 -3 -8 1 -2 -6 13 -7 -6 -3 -5 -4 -5 -3 -4 -5 1 -7 -2 -1 -4 -10 // I -4 -7 -7 -8 -3 -6 -7 -9 -7 8 2 -6 1 -2 -7 -5 -3 -6 -4 4 -8 -7 -3 -10 // L -4 -6 -7 -8 -5 -5 -7 -8 -6 2 8 -6 3 0 -7 -6 -4 -5 -4 0 -8 -6 -3 -10 // K -2 3 -1 -3 -8 2 0 -5 -3 -6 -6 10 -4 -6 -3 -2 -3 -8 -5 -5 -2 0 -3 -10 // M -3 -4 -5 -8 -4 -2 -5 -7 -5 1 3 -4 12 -1 -5 -4 -2 -4 -5 0 -7 -4 -3 -10 // F -5 -6 -7 -8 -4 -6 -8 -8 -4 -2 0 -6 -1 11 -7 -5 -5 0 4 -3 -7 -7 -4 -10 // P -2 -5 -5 -5 -8 -4 -4 -6 -5 -7 -7 -3 -5 -7 12 -3 -4 -8 -7 -6 -5 -4 -4 -10 // S 1 -3 0 -2 -3 -2 -2 -2 -3 -5 -6 -2 -4 -5 -3 9 2 -7 -5 -4 -1 -2 -2 -10 // T -1 -3 -1 -4 -3 -3 -3 -5 -4 -3 -4 -3 -2 -5 -4 2 9 -7 -5 -1 -2 -3 -2 -10 // W -6 -7 -8 -10 -7 -5 -8 -7 -5 -6 -5 -8 -4 0 -8 -7 -7 17 2 -5 -9 -7 -6 -10 // Y -5 -5 -5 -7 -6 -4 -7 -8 1 -4 -4 -5 -5 4 -7 -5 -5 2 12 -5 -6 -6 -4 -10 // V -2 -6 -7 -8 -3 -5 -5 -8 -7 4 0 -5 0 -3 -6 -4 -1 -5 -5 8 -7 -5 -3 -10 // B -4 -4 5 6 -7 -2 0 -3 -2 -8 -8 -2 -7 -7 -5 -1 -2 -9 -6 -7 6 0 -4 -10 // Z -2 -1 -2 0 -8 5 7 -5 -1 -7 -6 0 -4 -7 -4 -2 -3 -7 -6 -5 0 6 -2 -10 // X -2 -3 -3 -4 -5 -2 -3 -4 -4 -3 -3 -3 -3 -4 -4 -2 -2 -6 -4 -3 -4 -2 -3 -10 // * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 // BLOSUM100 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 8, -4, -2, -5, -3, -5, -1, -4, -4, 0, -2, -4, -3, -4, -2, -2, -3, 1, -1, -2, -6, -2, -5, -2, -10}, /* B */ {0, -4, 6, -7, 6, 0, -7, -3, -2, -8, 0, -2, -8, -7, 5, -5, -2, -4, -1, -2, -7, -9, -4, -6, 0, -10}, /* C */ {0, -2, -7, 14, -8, -9, -4, -7, -8, -3, 0, -8, -5, -4, -5, -8, -7, -8, -3, -3, -3, -7, -5, -6, -8, -10}, /* D */ {0, -5, 6, -8, 10, 2, -8, -4, -3, -8, 0, -3, -8, -8, 1, -5, -2, -5, -2, -4, -8, -10, -4, -7, 0, -10}, /* E */ {0, -3, 0, -9, 2, 10, -8, -6, -2, -7, 0, 0, -7, -5, -2, -4, 2, -2, -2, -3, -5, -8, -3, -7, 7, -10}, /* F */ {0, -5, -7, -4, -8, -8, 11, -8, -4, -2, 0, -6, 0, -1, -7, -7, -6, -6, -5, -5, -3, 0, -4, 4, -7, -10}, /* G */ {0, -1, -3, -7, -4, -6, -8, 9, -6, -9, 0, -5, -8, -7, -2, -6, -5, -6, -2, -5, -8, -7, -4, -8, -5, -10}, /* H */ {0, -4, -2, -8, -3, -2, -4, -6, 13, -7, 0, -3, -6, -5, 0, -5, 1, -1, -3, -4, -7, -5, -4, 1, -1, -10}, /* I */ {0, -4, -8, -3, -8, -7, -2, -9, -7, 8, 0, -6, 2, 1, -7, -7, -6, -7, -5, -3, 4, -6, -3, -4, -7, -10}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -2, -2, -8, -3, 0, -6, -5, -3, -6, 0, 10, -6, -4, -1, -3, 2, 3, -2, -3, -5, -8, -3, -5, 0, -10}, /* L */ {0, -4, -8, -5, -8, -7, 0, -8, -6, 2, 0, -6, 8, 3, -7, -7, -5, -6, -6, -4, 0, -5, -3, -4, -6, -10}, /* M */ {0, -3, -7, -4, -8, -5, -1, -7, -5, 1, 0, -4, 3, 12, -5, -5, -2, -4, -4, -2, 0, -4, -3, -5, -4, -10}, /* N */ {0, -4, 5, -5, 1, -2, -7, -2, 0, -7, 0, -1, -7, -5, 11, -5, -1, -2, 0, -1, -7, -8, -3, -5, -2, -10}, /* P */ {0, -2, -5, -8, -5, -4, -7, -6, -5, -7, 0, -3, -7, -5, -5, 12, -4, -5, -3, -4, -6, -8, -4, -7, -4, -10}, /* Q */ {0, -2, -2, -7, -2, 2, -6, -5, 1, -6, 0, 2, -5, -2, -1, -4, 11, 0, -2, -3, -5, -5, -2, -4, 5, -10}, /* R */ {0, -3, -4, -8, -5, -2, -6, -6, -1, -7, 0, 3, -6, -4, -2, -5, 0, 10, -3, -3, -6, -7, -3, -5, -1, -10}, /* S */ {0, 1, -1, -3, -2, -2, -5, -2, -3, -5, 0, -2, -6, -4, 0, -3, -2, -3, 9, 2, -4, -7, -2, -5, -2, -10}, /* T */ {0, -1, -2, -3, -4, -3, -5, -5, -4, -3, 0, -3, -4, -2, -1, -4, -3, -3, 2, 9, -1, -7, -2, -5, -3, -10}, /* V */ {0, -2, -7, -3, -8, -5, -3, -8, -7, 4, 0, -5, 0, 0, -7, -6, -5, -6, -4, -1, 8, -5, -3, -5, -5, -10}, /* W */ {0, -6, -9, -7, -10, -8, 0, -7, -5, -6, 0, -8, -5, -4, -8, -8, -5, -7, -7, -7, -5, 17, -6, 2, -7, -10}, /* X */ {0, -2, -4, -5, -4, -3, -4, -4, -4, -3, 0, -3, -3, -3, -3, -4, -2, -3, -2, -2, -3, -6, -3, -4, -2, -10}, /* Y */ {0, -5, -6, -6, -7, -7, 4, -8, 1, -4, 0, -5, -4, -5, -5, -7, -4, -5, -5, -5, -5, 2, -4, 12, -6, -10}, /* Z */ {0, -2, 0, -8, 0, 7, -7, -5, -1, -7, 0, 0, -6, -4, -2, -4, 5, -1, -2, -3, -5, -7, -2, -6, 6, -10}, /* * */ {0, -10, -10, -10, -10, -10, -10, -10, -10, -10, 0, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 1}, } // # Matrix made by matblas from blosum30.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/5 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 30 // # Entropy = 0.1424, Expected = -0.1074 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 4 -1 0 0 -3 1 0 0 -2 0 -1 0 1 -2 -1 1 1 -5 -4 1 0 0 0 -7 // R -1 8 -2 -1 -2 3 -1 -2 -1 -3 -2 1 0 -1 -1 -1 -3 0 0 -1 -2 0 -1 -7 // N 0 -2 8 1 -1 -1 -1 0 -1 0 -2 0 0 -1 -3 0 1 -7 -4 -2 4 -1 0 -7 // D 0 -1 1 9 -3 -1 1 -1 -2 -4 -1 0 -3 -5 -1 0 -1 -4 -1 -2 5 0 -1 -7 // C -3 -2 -1 -3 17 -2 1 -4 -5 -2 0 -3 -2 -3 -3 -2 -2 -2 -6 -2 -2 0 -2 -7 // Q 1 3 -1 -1 -2 8 2 -2 0 -2 -2 0 -1 -3 0 -1 0 -1 -1 -3 -1 4 0 -7 // E 0 -1 -1 1 1 2 6 -2 0 -3 -1 2 -1 -4 1 0 -2 -1 -2 -3 0 5 -1 -7 // G 0 -2 0 -1 -4 -2 -2 8 -3 -1 -2 -1 -2 -3 -1 0 -2 1 -3 -3 0 -2 -1 -7 // H -2 -1 -1 -2 -5 0 0 -3 14 -2 -1 -2 2 -3 1 -1 -2 -5 0 -3 -2 0 -1 -7 // I 0 -3 0 -4 -2 -2 -3 -1 -2 6 2 -2 1 0 -3 -1 0 -3 -1 4 -2 -3 0 -7 // L -1 -2 -2 -1 0 -2 -1 -2 -1 2 4 -2 2 2 -3 -2 0 -2 3 1 -1 -1 0 -7 // K 0 1 0 0 -3 0 2 -1 -2 -2 -2 4 2 -1 1 0 -1 -2 -1 -2 0 1 0 -7 // M 1 0 0 -3 -2 -1 -1 -2 2 1 2 2 6 -2 -4 -2 0 -3 -1 0 -2 -1 0 -7 // F -2 -1 -1 -5 -3 -3 -4 -3 -3 0 2 -1 -2 10 -4 -1 -2 1 3 1 -3 -4 -1 -7 // P -1 -1 -3 -1 -3 0 1 -1 1 -3 -3 1 -4 -4 11 -1 0 -3 -2 -4 -2 0 -1 -7 // S 1 -1 0 0 -2 -1 0 0 -1 -1 -2 0 -2 -1 -1 4 2 -3 -2 -1 0 -1 0 -7 // T 1 -3 1 -1 -2 0 -2 -2 -2 0 0 -1 0 -2 0 2 5 -5 -1 1 0 -1 0 -7 // W -5 0 -7 -4 -2 -1 -1 1 -5 -3 -2 -2 -3 1 -3 -3 -5 20 5 -3 -5 -1 -2 -7 // Y -4 0 -4 -1 -6 -1 -2 -3 0 -1 3 -1 -1 3 -2 -2 -1 5 9 1 -3 -2 -1 -7 // V 1 -1 -2 -2 -2 -3 -3 -3 -3 4 1 -2 0 1 -4 -1 1 -3 1 5 -2 -3 0 -7 // B 0 -2 4 5 -2 -1 0 0 -2 -2 -1 0 -2 -3 -2 0 0 -5 -3 -2 5 0 -1 -7 // Z 0 0 -1 0 0 4 5 -2 0 -3 -1 1 -1 -4 0 -1 -1 -1 -2 -3 0 4 0 -7 // X 0 -1 0 -1 -2 0 -1 -1 -1 0 0 0 0 -1 -1 0 0 -2 -1 0 -1 0 -1 -7 // * -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 1 // BLOSUM30 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 4, 0, -3, 0, 0, -2, 0, -2, 0, 0, 0, -1, 1, 0, -1, 1, -1, 1, 1, 1, -5, 0, -4, 0, -7}, /* B */ {0, 0, 5, -2, 5, 0, -3, 0, -2, -2, 0, 0, -1, -2, 4, -2, -1, -2, 0, 0, -2, -5, -1, -3, 0, -7}, /* C */ {0, -3, -2, 17, -3, 1, -3, -4, -5, -2, 0, -3, 0, -2, -1, -3, -2, -2, -2, -2, -2, -2, -2, -6, 0, -7}, /* D */ {0, 0, 5, -3, 9, 1, -5, -1, -2, -4, 0, 0, -1, -3, 1, -1, -1, -1, 0, -1, -2, -4, -1, -1, 0, -7}, /* E */ {0, 0, 0, 1, 1, 6, -4, -2, 0, -3, 0, 2, -1, -1, -1, 1, 2, -1, 0, -2, -3, -1, -1, -2, 5, -7}, /* F */ {0, -2, -3, -3, -5, -4, 10, -3, -3, 0, 0, -1, 2, -2, -1, -4, -3, -1, -1, -2, 1, 1, -1, 3, -4, -7}, /* G */ {0, 0, 0, -4, -1, -2, -3, 8, -3, -1, 0, -1, -2, -2, 0, -1, -2, -2, 0, -2, -3, 1, -1, -3, -2, -7}, /* H */ {0, -2, -2, -5, -2, 0, -3, -3, 14, -2, 0, -2, -1, 2, -1, 1, 0, -1, -1, -2, -3, -5, -1, 0, 0, -7}, /* I */ {0, 0, -2, -2, -4, -3, 0, -1, -2, 6, 0, -2, 2, 1, 0, -3, -2, -3, -1, 0, 4, -3, 0, -1, -3, -7}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, 0, 0, -3, 0, 2, -1, -1, -2, -2, 0, 4, -2, 2, 0, 1, 0, 1, 0, -1, -2, -2, 0, -1, 1, -7}, /* L */ {0, -1, -1, 0, -1, -1, 2, -2, -1, 2, 0, -2, 4, 2, -2, -3, -2, -2, -2, 0, 1, -2, 0, 3, -1, -7}, /* M */ {0, 1, -2, -2, -3, -1, -2, -2, 2, 1, 0, 2, 2, 6, 0, -4, -1, 0, -2, 0, 0, -3, 0, -1, -1, -7}, /* N */ {0, 0, 4, -1, 1, -1, -1, 0, -1, 0, 0, 0, -2, 0, 8, -3, -1, -2, 0, 1, -2, -7, 0, -4, -1, -7}, /* P */ {0, -1, -2, -3, -1, 1, -4, -1, 1, -3, 0, 1, -3, -4, -3, 11, 0, -1, -1, 0, -4, -3, -1, -2, 0, -7}, /* Q */ {0, 1, -1, -2, -1, 2, -3, -2, 0, -2, 0, 0, -2, -1, -1, 0, 8, 3, -1, 0, -3, -1, 0, -1, 4, -7}, /* R */ {0, -1, -2, -2, -1, -1, -1, -2, -1, -3, 0, 1, -2, 0, -2, -1, 3, 8, -1, -3, -1, 0, -1, 0, 0, -7}, /* S */ {0, 1, 0, -2, 0, 0, -1, 0, -1, -1, 0, 0, -2, -2, 0, -1, -1, -1, 4, 2, -1, -3, 0, -2, -1, -7}, /* T */ {0, 1, 0, -2, -1, -2, -2, -2, -2, 0, 0, -1, 0, 0, 1, 0, 0, -3, 2, 5, 1, -5, 0, -1, -1, -7}, /* V */ {0, 1, -2, -2, -2, -3, 1, -3, -3, 4, 0, -2, 1, 0, -2, -4, -3, -1, -1, 1, 5, -3, 0, 1, -3, -7}, /* W */ {0, -5, -5, -2, -4, -1, 1, 1, -5, -3, 0, -2, -2, -3, -7, -3, -1, 0, -3, -5, -3, 20, -2, 5, -1, -7}, /* X */ {0, 0, -1, -2, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, -2, -1, -1, 0, -7}, /* Y */ {0, -4, -3, -6, -1, -2, 3, -3, 0, -1, 0, -1, 3, -1, -4, -2, -1, 0, -2, -1, 1, 5, -1, 9, -2, -7}, /* Z */ {0, 0, 0, 0, 0, 5, -4, -2, 0, -3, 0, 1, -1, -1, -1, 0, 4, 0, -1, -1, -3, -1, 0, -2, 4, -7}, /* * */ {0, -7, -7, -7, -7, -7, -7, -7, -7, -7, 0, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 1}, } // # Matrix made by matblas from blosum35.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/4 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 35 // # Entropy = 0.2111, Expected = -0.1550 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 5 -1 -1 -1 -2 0 -1 0 -2 -1 -2 0 0 -2 -2 1 0 -2 -1 0 -1 -1 0 -5 // R -1 8 -1 -1 -3 2 -1 -2 -1 -3 -2 2 0 -1 -2 -1 -2 0 0 -1 -1 0 -1 -5 // N -1 -1 7 1 -1 1 -1 1 1 -1 -2 0 -1 -1 -2 0 0 -2 -2 -2 4 0 0 -5 // D -1 -1 1 8 -3 -1 2 -2 0 -3 -2 -1 -3 -3 -1 -1 -1 -3 -2 -2 5 1 -1 -5 // C -2 -3 -1 -3 15 -3 -1 -3 -4 -4 -2 -2 -4 -4 -4 -3 -1 -5 -5 -2 -2 -2 -2 -5 // Q 0 2 1 -1 -3 7 2 -2 -1 -2 -2 0 -1 -4 0 0 0 -1 0 -3 0 4 -1 -5 // E -1 -1 -1 2 -1 2 6 -2 -1 -3 -1 1 -2 -3 0 0 -1 -1 -1 -2 0 5 -1 -5 // G 0 -2 1 -2 -3 -2 -2 7 -2 -3 -3 -1 -1 -3 -2 1 -2 -1 -2 -3 0 -2 -1 -5 // H -2 -1 1 0 -4 -1 -1 -2 12 -3 -2 -2 1 -3 -1 -1 -2 -4 0 -4 0 -1 -1 -5 // I -1 -3 -1 -3 -4 -2 -3 -3 -3 5 2 -2 1 1 -1 -2 -1 -1 0 4 -2 -3 0 -5 // L -2 -2 -2 -2 -2 -2 -1 -3 -2 2 5 -2 3 2 -3 -2 0 0 0 2 -2 -2 0 -5 // K 0 2 0 -1 -2 0 1 -1 -2 -2 -2 5 0 -1 0 0 0 0 -1 -2 0 1 0 -5 // M 0 0 -1 -3 -4 -1 -2 -1 1 1 3 0 6 0 -3 -1 0 1 0 1 -2 -2 0 -5 // F -2 -1 -1 -3 -4 -4 -3 -3 -3 1 2 -1 0 8 -4 -1 -1 1 3 1 -2 -3 -1 -5 // P -2 -2 -2 -1 -4 0 0 -2 -1 -1 -3 0 -3 -4 10 -2 0 -4 -3 -3 -1 0 -1 -5 // S 1 -1 0 -1 -3 0 0 1 -1 -2 -2 0 -1 -1 -2 4 2 -2 -1 -1 0 0 0 -5 // T 0 -2 0 -1 -1 0 -1 -2 -2 -1 0 0 0 -1 0 2 5 -2 -2 1 -1 -1 0 -5 // W -2 0 -2 -3 -5 -1 -1 -1 -4 -1 0 0 1 1 -4 -2 -2 16 3 -2 -3 -1 -1 -5 // Y -1 0 -2 -2 -5 0 -1 -2 0 0 0 -1 0 3 -3 -1 -2 3 8 0 -2 -1 -1 -5 // V 0 -1 -2 -2 -2 -3 -2 -3 -4 4 2 -2 1 1 -3 -1 1 -2 0 5 -2 -2 0 -5 // B -1 -1 4 5 -2 0 0 0 0 -2 -2 0 -2 -2 -1 0 -1 -3 -2 -2 5 0 -1 -5 // Z -1 0 0 1 -2 4 5 -2 -1 -3 -2 1 -2 -3 0 0 -1 -1 -1 -2 0 4 0 -5 // X 0 -1 0 -1 -2 -1 -1 -1 -1 0 0 0 0 -1 -1 0 0 -1 -1 0 -1 0 -1 -5 // * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 // BLOSUM35 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 5, -1, -2, -1, -1, -2, 0, -2, -1, 0, 0, -2, 0, -1, -2, 0, -1, 1, 0, 0, -2, 0, -1, -1, -5}, /* B */ {0, -1, 5, -2, 5, 0, -2, 0, 0, -2, 0, 0, -2, -2, 4, -1, 0, -1, 0, -1, -2, -3, -1, -2, 0, -5}, /* C */ {0, -2, -2, 15, -3, -1, -4, -3, -4, -4, 0, -2, -2, -4, -1, -4, -3, -3, -3, -1, -2, -5, -2, -5, -2, -5}, /* D */ {0, -1, 5, -3, 8, 2, -3, -2, 0, -3, 0, -1, -2, -3, 1, -1, -1, -1, -1, -1, -2, -3, -1, -2, 1, -5}, /* E */ {0, -1, 0, -1, 2, 6, -3, -2, -1, -3, 0, 1, -1, -2, -1, 0, 2, -1, 0, -1, -2, -1, -1, -1, 5, -5}, /* F */ {0, -2, -2, -4, -3, -3, 8, -3, -3, 1, 0, -1, 2, 0, -1, -4, -4, -1, -1, -1, 1, 1, -1, 3, -3, -5}, /* G */ {0, 0, 0, -3, -2, -2, -3, 7, -2, -3, 0, -1, -3, -1, 1, -2, -2, -2, 1, -2, -3, -1, -1, -2, -2, -5}, /* H */ {0, -2, 0, -4, 0, -1, -3, -2, 12, -3, 0, -2, -2, 1, 1, -1, -1, -1, -1, -2, -4, -4, -1, 0, -1, -5}, /* I */ {0, -1, -2, -4, -3, -3, 1, -3, -3, 5, 0, -2, 2, 1, -1, -1, -2, -3, -2, -1, 4, -1, 0, 0, -3, -5}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, 0, 0, -2, -1, 1, -1, -1, -2, -2, 0, 5, -2, 0, 0, 0, 0, 2, 0, 0, -2, 0, 0, -1, 1, -5}, /* L */ {0, -2, -2, -2, -2, -1, 2, -3, -2, 2, 0, -2, 5, 3, -2, -3, -2, -2, -2, 0, 2, 0, 0, 0, -2, -5}, /* M */ {0, 0, -2, -4, -3, -2, 0, -1, 1, 1, 0, 0, 3, 6, -1, -3, -1, 0, -1, 0, 1, 1, 0, 0, -2, -5}, /* N */ {0, -1, 4, -1, 1, -1, -1, 1, 1, -1, 0, 0, -2, -1, 7, -2, 1, -1, 0, 0, -2, -2, 0, -2, 0, -5}, /* P */ {0, -2, -1, -4, -1, 0, -4, -2, -1, -1, 0, 0, -3, -3, -2, 10, 0, -2, -2, 0, -3, -4, -1, -3, 0, -5}, /* Q */ {0, 0, 0, -3, -1, 2, -4, -2, -1, -2, 0, 0, -2, -1, 1, 0, 7, 2, 0, 0, -3, -1, -1, 0, 4, -5}, /* R */ {0, -1, -1, -3, -1, -1, -1, -2, -1, -3, 0, 2, -2, 0, -1, -2, 2, 8, -1, -2, -1, 0, -1, 0, 0, -5}, /* S */ {0, 1, 0, -3, -1, 0, -1, 1, -1, -2, 0, 0, -2, -1, 0, -2, 0, -1, 4, 2, -1, -2, 0, -1, 0, -5}, /* T */ {0, 0, -1, -1, -1, -1, -1, -2, -2, -1, 0, 0, 0, 0, 0, 0, 0, -2, 2, 5, 1, -2, 0, -2, -1, -5}, /* V */ {0, 0, -2, -2, -2, -2, 1, -3, -4, 4, 0, -2, 2, 1, -2, -3, -3, -1, -1, 1, 5, -2, 0, 0, -2, -5}, /* W */ {0, -2, -3, -5, -3, -1, 1, -1, -4, -1, 0, 0, 0, 1, -2, -4, -1, 0, -2, -2, -2, 16, -1, 3, -1, -5}, /* X */ {0, 0, -1, -2, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0, -1, -1, -1, 0, -5}, /* Y */ {0, -1, -2, -5, -2, -1, 3, -2, 0, 0, 0, -1, 0, 0, -2, -3, 0, 0, -1, -2, 0, 3, -1, 8, -1, -5}, /* Z */ {0, -1, 0, -2, 1, 5, -3, -2, -1, -3, 0, 1, -2, -2, 0, 0, 4, 0, 0, -1, -2, -1, 0, -1, 4, -5}, /* * */ {0, -5, -5, -5, -5, -5, -5, -5, -5, -5, 0, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 1}, } // # Matrix made by matblas from blosum40.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/4 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 40 // # Entropy = 0.2851, Expected = -0.2090 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 5 -2 -1 -1 -2 0 -1 1 -2 -1 -2 -1 -1 -3 -2 1 0 -3 -2 0 -1 -1 0 -6 // R -2 9 0 -1 -3 2 -1 -3 0 -3 -2 3 -1 -2 -3 -1 -2 -2 -1 -2 -1 0 -1 -6 // N -1 0 8 2 -2 1 -1 0 1 -2 -3 0 -2 -3 -2 1 0 -4 -2 -3 4 0 -1 -6 // D -1 -1 2 9 -2 -1 2 -2 0 -4 -3 0 -3 -4 -2 0 -1 -5 -3 -3 6 1 -1 -6 // C -2 -3 -2 -2 16 -4 -2 -3 -4 -4 -2 -3 -3 -2 -5 -1 -1 -6 -4 -2 -2 -3 -2 -6 // Q 0 2 1 -1 -4 8 2 -2 0 -3 -2 1 -1 -4 -2 1 -1 -1 -1 -3 0 4 -1 -6 // E -1 -1 -1 2 -2 2 7 -3 0 -4 -2 1 -2 -3 0 0 -1 -2 -2 -3 1 5 -1 -6 // G 1 -3 0 -2 -3 -2 -3 8 -2 -4 -4 -2 -2 -3 -1 0 -2 -2 -3 -4 -1 -2 -1 -6 // H -2 0 1 0 -4 0 0 -2 13 -3 -2 -1 1 -2 -2 -1 -2 -5 2 -4 0 0 -1 -6 // I -1 -3 -2 -4 -4 -3 -4 -4 -3 6 2 -3 1 1 -2 -2 -1 -3 0 4 -3 -4 -1 -6 // L -2 -2 -3 -3 -2 -2 -2 -4 -2 2 6 -2 3 2 -4 -3 -1 -1 0 2 -3 -2 -1 -6 // K -1 3 0 0 -3 1 1 -2 -1 -3 -2 6 -1 -3 -1 0 0 -2 -1 -2 0 1 -1 -6 // M -1 -1 -2 -3 -3 -1 -2 -2 1 1 3 -1 7 0 -2 -2 -1 -2 1 1 -3 -2 0 -6 // F -3 -2 -3 -4 -2 -4 -3 -3 -2 1 2 -3 0 9 -4 -2 -1 1 4 0 -3 -4 -1 -6 // P -2 -3 -2 -2 -5 -2 0 -1 -2 -2 -4 -1 -2 -4 11 -1 0 -4 -3 -3 -2 -1 -2 -6 // S 1 -1 1 0 -1 1 0 0 -1 -2 -3 0 -2 -2 -1 5 2 -5 -2 -1 0 0 0 -6 // T 0 -2 0 -1 -1 -1 -1 -2 -2 -1 -1 0 -1 -1 0 2 6 -4 -1 1 0 -1 0 -6 // W -3 -2 -4 -5 -6 -1 -2 -2 -5 -3 -1 -2 -2 1 -4 -5 -4 19 3 -3 -4 -2 -2 -6 // Y -2 -1 -2 -3 -4 -1 -2 -3 2 0 0 -1 1 4 -3 -2 -1 3 9 -1 -3 -2 -1 -6 // V 0 -2 -3 -3 -2 -3 -3 -4 -4 4 2 -2 1 0 -3 -1 1 -3 -1 5 -3 -3 -1 -6 // B -1 -1 4 6 -2 0 1 -1 0 -3 -3 0 -3 -3 -2 0 0 -4 -3 -3 5 2 -1 -6 // Z -1 0 0 1 -3 4 5 -2 0 -4 -2 1 -2 -4 -1 0 -1 -2 -2 -3 2 5 -1 -6 // X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 0 -1 -2 0 0 -2 -1 -1 -1 -1 -1 -6 // * -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 1 // BLOSUM40 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 5, -1, -2, -1, -1, -3, 1, -2, -1, 0, -1, -2, -1, -1, -2, 0, -2, 1, 0, 0, -3, 0, -2, -1, -6}, /* B */ {0, -1, 5, -2, 6, 1, -3, -1, 0, -3, 0, 0, -3, -3, 4, -2, 0, -1, 0, 0, -3, -4, -1, -3, 2, -6}, /* C */ {0, -2, -2, 16, -2, -2, -2, -3, -4, -4, 0, -3, -2, -3, -2, -5, -4, -3, -1, -1, -2, -6, -2, -4, -3, -6}, /* D */ {0, -1, 6, -2, 9, 2, -4, -2, 0, -4, 0, 0, -3, -3, 2, -2, -1, -1, 0, -1, -3, -5, -1, -3, 1, -6}, /* E */ {0, -1, 1, -2, 2, 7, -3, -3, 0, -4, 0, 1, -2, -2, -1, 0, 2, -1, 0, -1, -3, -2, -1, -2, 5, -6}, /* F */ {0, -3, -3, -2, -4, -3, 9, -3, -2, 1, 0, -3, 2, 0, -3, -4, -4, -2, -2, -1, 0, 1, -1, 4, -4, -6}, /* G */ {0, 1, -1, -3, -2, -3, -3, 8, -2, -4, 0, -2, -4, -2, 0, -1, -2, -3, 0, -2, -4, -2, -1, -3, -2, -6}, /* H */ {0, -2, 0, -4, 0, 0, -2, -2, 13, -3, 0, -1, -2, 1, 1, -2, 0, 0, -1, -2, -4, -5, -1, 2, 0, -6}, /* I */ {0, -1, -3, -4, -4, -4, 1, -4, -3, 6, 0, -3, 2, 1, -2, -2, -3, -3, -2, -1, 4, -3, -1, 0, -4, -6}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 0, -3, 0, 1, -3, -2, -1, -3, 0, 6, -2, -1, 0, -1, 1, 3, 0, 0, -2, -2, -1, -1, 1, -6}, /* L */ {0, -2, -3, -2, -3, -2, 2, -4, -2, 2, 0, -2, 6, 3, -3, -4, -2, -2, -3, -1, 2, -1, -1, 0, -2, -6}, /* M */ {0, -1, -3, -3, -3, -2, 0, -2, 1, 1, 0, -1, 3, 7, -2, -2, -1, -1, -2, -1, 1, -2, 0, 1, -2, -6}, /* N */ {0, -1, 4, -2, 2, -1, -3, 0, 1, -2, 0, 0, -3, -2, 8, -2, 1, 0, 1, 0, -3, -4, -1, -2, 0, -6}, /* P */ {0, -2, -2, -5, -2, 0, -4, -1, -2, -2, 0, -1, -4, -2, -2, 11, -2, -3, -1, 0, -3, -4, -2, -3, -1, -6}, /* Q */ {0, 0, 0, -4, -1, 2, -4, -2, 0, -3, 0, 1, -2, -1, 1, -2, 8, 2, 1, -1, -3, -1, -1, -1, 4, -6}, /* R */ {0, -2, -1, -3, -1, -1, -2, -3, 0, -3, 0, 3, -2, -1, 0, -3, 2, 9, -1, -2, -2, -2, -1, -1, 0, -6}, /* S */ {0, 1, 0, -1, 0, 0, -2, 0, -1, -2, 0, 0, -3, -2, 1, -1, 1, -1, 5, 2, -1, -5, 0, -2, 0, -6}, /* T */ {0, 0, 0, -1, -1, -1, -1, -2, -2, -1, 0, 0, -1, -1, 0, 0, -1, -2, 2, 6, 1, -4, 0, -1, -1, -6}, /* V */ {0, 0, -3, -2, -3, -3, 0, -4, -4, 4, 0, -2, 2, 1, -3, -3, -3, -2, -1, 1, 5, -3, -1, -1, -3, -6}, /* W */ {0, -3, -4, -6, -5, -2, 1, -2, -5, -3, 0, -2, -1, -2, -4, -4, -1, -2, -5, -4, -3, 19, -2, 3, -2, -6}, /* X */ {0, 0, -1, -2, -1, -1, -1, -1, -1, -1, 0, -1, -1, 0, -1, -2, -1, -1, 0, 0, -1, -2, -1, -1, -1, -6}, /* Y */ {0, -2, -3, -4, -3, -2, 4, -3, 2, 0, 0, -1, 0, 1, -2, -3, -1, -1, -2, -1, -1, 3, -1, 9, -2, -6}, /* Z */ {0, -1, 2, -3, 1, 5, -4, -2, 0, -4, 0, 1, -2, -2, 0, -1, 4, 0, 0, -1, -3, -2, -1, -2, 5, -6}, /* * */ {0, -6, -6, -6, -6, -6, -6, -6, -6, -6, 0, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, 1}, } // # Matrix made by matblas from blosum45.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 45 // # Entropy = 0.3795, Expected = -0.2789 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 5 -2 -1 -2 -1 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -2 -2 0 -1 -1 0 -5 // R -2 7 0 -1 -3 1 0 -2 0 -3 -2 3 -1 -2 -2 -1 -1 -2 -1 -2 -1 0 -1 -5 // N -1 0 6 2 -2 0 0 0 1 -2 -3 0 -2 -2 -2 1 0 -4 -2 -3 4 0 -1 -5 // D -2 -1 2 7 -3 0 2 -1 0 -4 -3 0 -3 -4 -1 0 -1 -4 -2 -3 5 1 -1 -5 // C -1 -3 -2 -3 12 -3 -3 -3 -3 -3 -2 -3 -2 -2 -4 -1 -1 -5 -3 -1 -2 -3 -2 -5 // Q -1 1 0 0 -3 6 2 -2 1 -2 -2 1 0 -4 -1 0 -1 -2 -1 -3 0 4 -1 -5 // E -1 0 0 2 -3 2 6 -2 0 -3 -2 1 -2 -3 0 0 -1 -3 -2 -3 1 4 -1 -5 // G 0 -2 0 -1 -3 -2 -2 7 -2 -4 -3 -2 -2 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 -5 // H -2 0 1 0 -3 1 0 -2 10 -3 -2 -1 0 -2 -2 -1 -2 -3 2 -3 0 0 -1 -5 // I -1 -3 -2 -4 -3 -2 -3 -4 -3 5 2 -3 2 0 -2 -2 -1 -2 0 3 -3 -3 -1 -5 // L -1 -2 -3 -3 -2 -2 -2 -3 -2 2 5 -3 2 1 -3 -3 -1 -2 0 1 -3 -2 -1 -5 // K -1 3 0 0 -3 1 1 -2 -1 -3 -3 5 -1 -3 -1 -1 -1 -2 -1 -2 0 1 -1 -5 // M -1 -1 -2 -3 -2 0 -2 -2 0 2 2 -1 6 0 -2 -2 -1 -2 0 1 -2 -1 -1 -5 // F -2 -2 -2 -4 -2 -4 -3 -3 -2 0 1 -3 0 8 -3 -2 -1 1 3 0 -3 -3 -1 -5 // P -1 -2 -2 -1 -4 -1 0 -2 -2 -2 -3 -1 -2 -3 9 -1 -1 -3 -3 -3 -2 -1 -1 -5 // S 1 -1 1 0 -1 0 0 0 -1 -2 -3 -1 -2 -2 -1 4 2 -4 -2 -1 0 0 0 -5 // T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -1 -1 2 5 -3 -1 0 0 -1 0 -5 // W -2 -2 -4 -4 -5 -2 -3 -2 -3 -2 -2 -2 -2 1 -3 -4 -3 15 3 -3 -4 -2 -2 -5 // Y -2 -1 -2 -2 -3 -1 -2 -3 2 0 0 -1 0 3 -3 -2 -1 3 8 -1 -2 -2 -1 -5 // V 0 -2 -3 -3 -1 -3 -3 -3 -3 3 1 -2 1 0 -3 -1 0 -3 -1 5 -3 -3 -1 -5 // B -1 -1 4 5 -2 0 1 -1 0 -3 -3 0 -2 -3 -2 0 0 -4 -2 -3 4 2 -1 -5 // Z -1 0 0 1 -3 4 4 -2 0 -3 -2 1 -1 -3 -1 0 -1 -2 -2 -3 2 4 -1 -5 // X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 -2 -1 -1 -1 -1 -1 -5 // * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 // BLOSUM45 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 5, -1, -1, -2, -1, -2, 0, -2, -1, 0, -1, -1, -1, -1, -1, -1, -2, 1, 0, 0, -2, 0, -2, -1, -5}, /* B */ {0, -1, 4, -2, 5, 1, -3, -1, 0, -3, 0, 0, -3, -2, 4, -2, 0, -1, 0, 0, -3, -4, -1, -2, 2, -5}, /* C */ {0, -1, -2, 12, -3, -3, -2, -3, -3, -3, 0, -3, -2, -2, -2, -4, -3, -3, -1, -1, -1, -5, -2, -3, -3, -5}, /* D */ {0, -2, 5, -3, 7, 2, -4, -1, 0, -4, 0, 0, -3, -3, 2, -1, 0, -1, 0, -1, -3, -4, -1, -2, 1, -5}, /* E */ {0, -1, 1, -3, 2, 6, -3, -2, 0, -3, 0, 1, -2, -2, 0, 0, 2, 0, 0, -1, -3, -3, -1, -2, 4, -5}, /* F */ {0, -2, -3, -2, -4, -3, 8, -3, -2, 0, 0, -3, 1, 0, -2, -3, -4, -2, -2, -1, 0, 1, -1, 3, -3, -5}, /* G */ {0, 0, -1, -3, -1, -2, -3, 7, -2, -4, 0, -2, -3, -2, 0, -2, -2, -2, 0, -2, -3, -2, -1, -3, -2, -5}, /* H */ {0, -2, 0, -3, 0, 0, -2, -2, 10, -3, 0, -1, -2, 0, 1, -2, 1, 0, -1, -2, -3, -3, -1, 2, 0, -5}, /* I */ {0, -1, -3, -3, -4, -3, 0, -4, -3, 5, 0, -3, 2, 2, -2, -2, -2, -3, -2, -1, 3, -2, -1, 0, -3, -5}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 0, -3, 0, 1, -3, -2, -1, -3, 0, 5, -3, -1, 0, -1, 1, 3, -1, -1, -2, -2, -1, -1, 1, -5}, /* L */ {0, -1, -3, -2, -3, -2, 1, -3, -2, 2, 0, -3, 5, 2, -3, -3, -2, -2, -3, -1, 1, -2, -1, 0, -2, -5}, /* M */ {0, -1, -2, -2, -3, -2, 0, -2, 0, 2, 0, -1, 2, 6, -2, -2, 0, -1, -2, -1, 1, -2, -1, 0, -1, -5}, /* N */ {0, -1, 4, -2, 2, 0, -2, 0, 1, -2, 0, 0, -3, -2, 6, -2, 0, 0, 1, 0, -3, -4, -1, -2, 0, -5}, /* P */ {0, -1, -2, -4, -1, 0, -3, -2, -2, -2, 0, -1, -3, -2, -2, 9, -1, -2, -1, -1, -3, -3, -1, -3, -1, -5}, /* Q */ {0, -1, 0, -3, 0, 2, -4, -2, 1, -2, 0, 1, -2, 0, 0, -1, 6, 1, 0, -1, -3, -2, -1, -1, 4, -5}, /* R */ {0, -2, -1, -3, -1, 0, -2, -2, 0, -3, 0, 3, -2, -1, 0, -2, 1, 7, -1, -1, -2, -2, -1, -1, 0, -5}, /* S */ {0, 1, 0, -1, 0, 0, -2, 0, -1, -2, 0, -1, -3, -2, 1, -1, 0, -1, 4, 2, -1, -4, 0, -2, 0, -5}, /* T */ {0, 0, 0, -1, -1, -1, -1, -2, -2, -1, 0, -1, -1, -1, 0, -1, -1, -1, 2, 5, 0, -3, 0, -1, -1, -5}, /* V */ {0, 0, -3, -1, -3, -3, 0, -3, -3, 3, 0, -2, 1, 1, -3, -3, -3, -2, -1, 0, 5, -3, -1, -1, -3, -5}, /* W */ {0, -2, -4, -5, -4, -3, 1, -2, -3, -2, 0, -2, -2, -2, -4, -3, -2, -2, -4, -3, -3, 15, -2, 3, -2, -5}, /* X */ {0, 0, -1, -2, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, -2, -1, -1, -1, -5}, /* Y */ {0, -2, -2, -3, -2, -2, 3, -3, 2, 0, 0, -1, 0, 0, -2, -3, -1, -1, -2, -1, -1, 3, -1, 8, -2, -5}, /* Z */ {0, -1, 2, -3, 1, 4, -3, -2, 0, -3, 0, 1, -2, -1, 0, -1, 4, 0, 0, -1, -3, -2, -1, -2, 4, -5}, /* * */ {0, -5, -5, -5, -5, -5, -5, -5, -5, -5, 0, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 1}, } // # Matrix made by matblas from blosum50.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 50 // # Entropy = 0.4808, Expected = -0.3573 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 5 -2 -1 -2 -1 -1 -1 0 -2 -1 -2 -1 -1 -3 -1 1 0 -3 -2 0 -2 -1 -1 -5 // R -2 7 -1 -2 -4 1 0 -3 0 -4 -3 3 -2 -3 -3 -1 -1 -3 -1 -3 -1 0 -1 -5 // N -1 -1 7 2 -2 0 0 0 1 -3 -4 0 -2 -4 -2 1 0 -4 -2 -3 4 0 -1 -5 // D -2 -2 2 8 -4 0 2 -1 -1 -4 -4 -1 -4 -5 -1 0 -1 -5 -3 -4 5 1 -1 -5 // C -1 -4 -2 -4 13 -3 -3 -3 -3 -2 -2 -3 -2 -2 -4 -1 -1 -5 -3 -1 -3 -3 -2 -5 // Q -1 1 0 0 -3 7 2 -2 1 -3 -2 2 0 -4 -1 0 -1 -1 -1 -3 0 4 -1 -5 // E -1 0 0 2 -3 2 6 -3 0 -4 -3 1 -2 -3 -1 -1 -1 -3 -2 -3 1 5 -1 -5 // G 0 -3 0 -1 -3 -2 -3 8 -2 -4 -4 -2 -3 -4 -2 0 -2 -3 -3 -4 -1 -2 -2 -5 // H -2 0 1 -1 -3 1 0 -2 10 -4 -3 0 -1 -1 -2 -1 -2 -3 2 -4 0 0 -1 -5 // I -1 -4 -3 -4 -2 -3 -4 -4 -4 5 2 -3 2 0 -3 -3 -1 -3 -1 4 -4 -3 -1 -5 // L -2 -3 -4 -4 -2 -2 -3 -4 -3 2 5 -3 3 1 -4 -3 -1 -2 -1 1 -4 -3 -1 -5 // K -1 3 0 -1 -3 2 1 -2 0 -3 -3 6 -2 -4 -1 0 -1 -3 -2 -3 0 1 -1 -5 // M -1 -2 -2 -4 -2 0 -2 -3 -1 2 3 -2 7 0 -3 -2 -1 -1 0 1 -3 -1 -1 -5 // F -3 -3 -4 -5 -2 -4 -3 -4 -1 0 1 -4 0 8 -4 -3 -2 1 4 -1 -4 -4 -2 -5 // P -1 -3 -2 -1 -4 -1 -1 -2 -2 -3 -4 -1 -3 -4 10 -1 -1 -4 -3 -3 -2 -1 -2 -5 // S 1 -1 1 0 -1 0 -1 0 -1 -3 -3 0 -2 -3 -1 5 2 -4 -2 -2 0 0 -1 -5 // T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 2 5 -3 -2 0 0 -1 0 -5 // W -3 -3 -4 -5 -5 -1 -3 -3 -3 -3 -2 -3 -1 1 -4 -4 -3 15 2 -3 -5 -2 -3 -5 // Y -2 -1 -2 -3 -3 -1 -2 -3 2 -1 -1 -2 0 4 -3 -2 -2 2 8 -1 -3 -2 -1 -5 // V 0 -3 -3 -4 -1 -3 -3 -4 -4 4 1 -3 1 -1 -3 -2 0 -3 -1 5 -4 -3 -1 -5 // B -2 -1 4 5 -3 0 1 -1 0 -4 -4 0 -3 -4 -2 0 0 -5 -3 -4 5 2 -1 -5 // Z -1 0 0 1 -3 4 5 -2 0 -3 -3 1 -1 -4 -1 0 -1 -2 -2 -3 2 5 -1 -5 // X -1 -1 -1 -1 -2 -1 -1 -2 -1 -1 -1 -1 -1 -2 -2 -1 0 -3 -1 -1 -1 -1 -1 -5 // * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 // BLOSUM50 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 5, -2, -1, -2, -1, -3, 0, -2, -1, 0, -1, -2, -1, -1, -1, -1, -2, 1, 0, 0, -3, -1, -2, -1, -5}, /* B */ {0, -2, 5, -3, 5, 1, -4, -1, 0, -4, 0, 0, -4, -3, 4, -2, 0, -1, 0, 0, -4, -5, -1, -3, 2, -5}, /* C */ {0, -1, -3, 13, -4, -3, -2, -3, -3, -2, 0, -3, -2, -2, -2, -4, -3, -4, -1, -1, -1, -5, -2, -3, -3, -5}, /* D */ {0, -2, 5, -4, 8, 2, -5, -1, -1, -4, 0, -1, -4, -4, 2, -1, 0, -2, 0, -1, -4, -5, -1, -3, 1, -5}, /* E */ {0, -1, 1, -3, 2, 6, -3, -3, 0, -4, 0, 1, -3, -2, 0, -1, 2, 0, -1, -1, -3, -3, -1, -2, 5, -5}, /* F */ {0, -3, -4, -2, -5, -3, 8, -4, -1, 0, 0, -4, 1, 0, -4, -4, -4, -3, -3, -2, -1, 1, -2, 4, -4, -5}, /* G */ {0, 0, -1, -3, -1, -3, -4, 8, -2, -4, 0, -2, -4, -3, 0, -2, -2, -3, 0, -2, -4, -3, -2, -3, -2, -5}, /* H */ {0, -2, 0, -3, -1, 0, -1, -2, 10, -4, 0, 0, -3, -1, 1, -2, 1, 0, -1, -2, -4, -3, -1, 2, 0, -5}, /* I */ {0, -1, -4, -2, -4, -4, 0, -4, -4, 5, 0, -3, 2, 2, -3, -3, -3, -4, -3, -1, 4, -3, -1, -1, -3, -5}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 0, -3, -1, 1, -4, -2, 0, -3, 0, 6, -3, -2, 0, -1, 2, 3, 0, -1, -3, -3, -1, -2, 1, -5}, /* L */ {0, -2, -4, -2, -4, -3, 1, -4, -3, 2, 0, -3, 5, 3, -4, -4, -2, -3, -3, -1, 1, -2, -1, -1, -3, -5}, /* M */ {0, -1, -3, -2, -4, -2, 0, -3, -1, 2, 0, -2, 3, 7, -2, -3, 0, -2, -2, -1, 1, -1, -1, 0, -1, -5}, /* N */ {0, -1, 4, -2, 2, 0, -4, 0, 1, -3, 0, 0, -4, -2, 7, -2, 0, -1, 1, 0, -3, -4, -1, -2, 0, -5}, /* P */ {0, -1, -2, -4, -1, -1, -4, -2, -2, -3, 0, -1, -4, -3, -2, 10, -1, -3, -1, -1, -3, -4, -2, -3, -1, -5}, /* Q */ {0, -1, 0, -3, 0, 2, -4, -2, 1, -3, 0, 2, -2, 0, 0, -1, 7, 1, 0, -1, -3, -1, -1, -1, 4, -5}, /* R */ {0, -2, -1, -4, -2, 0, -3, -3, 0, -4, 0, 3, -3, -2, -1, -3, 1, 7, -1, -1, -3, -3, -1, -1, 0, -5}, /* S */ {0, 1, 0, -1, 0, -1, -3, 0, -1, -3, 0, 0, -3, -2, 1, -1, 0, -1, 5, 2, -2, -4, -1, -2, 0, -5}, /* T */ {0, 0, 0, -1, -1, -1, -2, -2, -2, -1, 0, -1, -1, -1, 0, -1, -1, -1, 2, 5, 0, -3, 0, -2, -1, -5}, /* V */ {0, 0, -4, -1, -4, -3, -1, -4, -4, 4, 0, -3, 1, 1, -3, -3, -3, -3, -2, 0, 5, -3, -1, -1, -3, -5}, /* W */ {0, -3, -5, -5, -5, -3, 1, -3, -3, -3, 0, -3, -2, -1, -4, -4, -1, -3, -4, -3, -3, 15, -3, 2, -2, -5}, /* X */ {0, -1, -1, -2, -1, -1, -2, -2, -1, -1, 0, -1, -1, -1, -1, -2, -1, -1, -1, 0, -1, -3, -1, -1, -1, -5}, /* Y */ {0, -2, -3, -3, -3, -2, 4, -3, 2, -1, 0, -2, -1, 0, -2, -3, -1, -1, -2, -2, -1, 2, -1, 8, -2, -5}, /* Z */ {0, -1, 2, -3, 1, 5, -4, -2, 0, -3, 0, 1, -3, -1, 0, -1, 4, 0, 0, -1, -3, -2, -1, -2, 5, -5}, /* * */ {0, -5, -5, -5, -5, -5, -5, -5, -5, -5, 0, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 1}, } // # Matrix made by matblas from blosum55.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 55 // # Entropy = 0.5637, Expected = -0.4179 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 5 -2 -2 -2 0 -1 -1 0 -2 -2 -2 -1 -1 -3 -1 2 0 -4 -2 0 -2 -1 -1 -5 // R -2 8 -1 -2 -4 1 0 -3 0 -4 -3 3 -2 -3 -3 -1 -1 -3 -2 -3 -1 0 -1 -5 // N -2 -1 8 2 -3 0 0 0 1 -4 -4 0 -3 -4 -2 1 0 -5 -2 -4 4 0 -1 -5 // D -2 -2 2 8 -4 0 2 -2 -1 -4 -5 -1 -4 -5 -2 0 -1 -5 -3 -4 5 1 -2 -5 // C 0 -4 -3 -4 13 -4 -4 -3 -4 -2 -2 -4 -2 -3 -3 -1 -1 -4 -3 -1 -4 -4 -2 -5 // Q -1 1 0 0 -4 7 2 -2 1 -4 -3 2 0 -4 -1 0 -1 -2 -1 -3 0 4 -1 -5 // E -1 0 0 2 -4 2 7 -3 -1 -4 -4 1 -3 -4 -1 0 -1 -3 -2 -3 1 5 -1 -5 // G 0 -3 0 -2 -3 -2 -3 8 -2 -5 -5 -2 -3 -4 -3 0 -2 -3 -4 -4 -1 -3 -2 -5 // H -2 0 1 -1 -4 1 -1 -2 11 -4 -3 0 -2 -1 -3 -1 -2 -3 2 -4 0 0 -1 -5 // I -2 -4 -4 -4 -2 -4 -4 -5 -4 6 2 -4 2 0 -3 -3 -1 -3 -1 4 -4 -4 -1 -5 // L -2 -3 -4 -5 -2 -3 -4 -5 -3 2 6 -3 3 1 -4 -3 -2 -3 -1 1 -4 -3 -1 -5 // K -1 3 0 -1 -4 2 1 -2 0 -4 -3 6 -2 -4 -1 0 -1 -4 -2 -3 0 1 -1 -5 // M -1 -2 -3 -4 -2 0 -3 -3 -2 2 3 -2 8 0 -3 -2 -1 -2 -1 1 -3 -2 -1 -5 // F -3 -3 -4 -5 -3 -4 -4 -4 -1 0 1 -4 0 9 -5 -3 -3 2 4 -1 -5 -4 -2 -5 // P -1 -3 -2 -2 -3 -1 -1 -3 -3 -3 -4 -1 -3 -5 10 -1 -1 -5 -4 -3 -2 -1 -2 -5 // S 2 -1 1 0 -1 0 0 0 -1 -3 -3 0 -2 -3 -1 5 2 -4 -2 -2 0 0 -1 -5 // T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -2 -1 -1 -3 -1 2 6 -3 -2 0 -1 -1 -1 -5 // W -4 -3 -5 -5 -4 -2 -3 -3 -3 -3 -3 -4 -2 2 -5 -4 -3 15 3 -4 -5 -3 -3 -5 // Y -2 -2 -2 -3 -3 -1 -2 -4 2 -1 -1 -2 -1 4 -4 -2 -2 3 9 -2 -3 -2 -1 -5 // V 0 -3 -4 -4 -1 -3 -3 -4 -4 4 1 -3 1 -1 -3 -2 0 -4 -2 5 -4 -3 -1 -5 // B -2 -1 4 5 -4 0 1 -1 0 -4 -4 0 -3 -5 -2 0 -1 -5 -3 -4 5 2 -1 -5 // Z -1 0 0 1 -4 4 5 -3 0 -4 -3 1 -2 -4 -1 0 -1 -3 -2 -3 2 5 -1 -5 // X -1 -1 -1 -2 -2 -1 -1 -2 -1 -1 -1 -1 -1 -2 -2 -1 -1 -3 -1 -1 -1 -1 -1 -5 // * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 // BLOSUM55 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 5, -2, 0, -2, -1, -3, 0, -2, -2, 0, -1, -2, -1, -2, -1, -1, -2, 2, 0, 0, -4, -1, -2, -1, -5}, /* B */ {0, -2, 5, -4, 5, 1, -5, -1, 0, -4, 0, 0, -4, -3, 4, -2, 0, -1, 0, -1, -4, -5, -1, -3, 2, -5}, /* C */ {0, 0, -4, 13, -4, -4, -3, -3, -4, -2, 0, -4, -2, -2, -3, -3, -4, -4, -1, -1, -1, -4, -2, -3, -4, -5}, /* D */ {0, -2, 5, -4, 8, 2, -5, -2, -1, -4, 0, -1, -5, -4, 2, -2, 0, -2, 0, -1, -4, -5, -2, -3, 1, -5}, /* E */ {0, -1, 1, -4, 2, 7, -4, -3, -1, -4, 0, 1, -4, -3, 0, -1, 2, 0, 0, -1, -3, -3, -1, -2, 5, -5}, /* F */ {0, -3, -5, -3, -5, -4, 9, -4, -1, 0, 0, -4, 1, 0, -4, -5, -4, -3, -3, -3, -1, 2, -2, 4, -4, -5}, /* G */ {0, 0, -1, -3, -2, -3, -4, 8, -2, -5, 0, -2, -5, -3, 0, -3, -2, -3, 0, -2, -4, -3, -2, -4, -3, -5}, /* H */ {0, -2, 0, -4, -1, -1, -1, -2, 11, -4, 0, 0, -3, -2, 1, -3, 1, 0, -1, -2, -4, -3, -1, 2, 0, -5}, /* I */ {0, -2, -4, -2, -4, -4, 0, -5, -4, 6, 0, -4, 2, 2, -4, -3, -4, -4, -3, -1, 4, -3, -1, -1, -4, -5}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 0, -4, -1, 1, -4, -2, 0, -4, 0, 6, -3, -2, 0, -1, 2, 3, 0, -1, -3, -4, -1, -2, 1, -5}, /* L */ {0, -2, -4, -2, -5, -4, 1, -5, -3, 2, 0, -3, 6, 3, -4, -4, -3, -3, -3, -2, 1, -3, -1, -1, -3, -5}, /* M */ {0, -1, -3, -2, -4, -3, 0, -3, -2, 2, 0, -2, 3, 8, -3, -3, 0, -2, -2, -1, 1, -2, -1, -1, -2, -5}, /* N */ {0, -2, 4, -3, 2, 0, -4, 0, 1, -4, 0, 0, -4, -3, 8, -2, 0, -1, 1, 0, -4, -5, -1, -2, 0, -5}, /* P */ {0, -1, -2, -3, -2, -1, -5, -3, -3, -3, 0, -1, -4, -3, -2, 10, -1, -3, -1, -1, -3, -5, -2, -4, -1, -5}, /* Q */ {0, -1, 0, -4, 0, 2, -4, -2, 1, -4, 0, 2, -3, 0, 0, -1, 7, 1, 0, -1, -3, -2, -1, -1, 4, -5}, /* R */ {0, -2, -1, -4, -2, 0, -3, -3, 0, -4, 0, 3, -3, -2, -1, -3, 1, 8, -1, -1, -3, -3, -1, -2, 0, -5}, /* S */ {0, 2, 0, -1, 0, 0, -3, 0, -1, -3, 0, 0, -3, -2, 1, -1, 0, -1, 5, 2, -2, -4, -1, -2, 0, -5}, /* T */ {0, 0, -1, -1, -1, -1, -3, -2, -2, -1, 0, -1, -2, -1, 0, -1, -1, -1, 2, 6, 0, -3, -1, -2, -1, -5}, /* V */ {0, 0, -4, -1, -4, -3, -1, -4, -4, 4, 0, -3, 1, 1, -4, -3, -3, -3, -2, 0, 5, -4, -1, -2, -3, -5}, /* W */ {0, -4, -5, -4, -5, -3, 2, -3, -3, -3, 0, -4, -3, -2, -5, -5, -2, -3, -4, -3, -4, 15, -3, 3, -3, -5}, /* X */ {0, -1, -1, -2, -2, -1, -2, -2, -1, -1, 0, -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -3, -1, -1, -1, -5}, /* Y */ {0, -2, -3, -3, -3, -2, 4, -4, 2, -1, 0, -2, -1, -1, -2, -4, -1, -2, -2, -2, -2, 3, -1, 9, -2, -5}, /* Z */ {0, -1, 2, -4, 1, 5, -4, -3, 0, -4, 0, 1, -3, -2, 0, -1, 4, 0, 0, -1, -3, -3, -1, -2, 5, -5}, /* * */ {0, -5, -5, -5, -5, -5, -5, -5, -5, -5, 0, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 1}, } // # Matrix made by matblas from blosum60.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 60 // # Entropy = 0.6603, Expected = -0.4917 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 4 -1 -1 -2 0 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 0 -4 // R -1 5 0 -1 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -2 -1 0 -1 -4 // N -1 0 6 1 -2 0 0 0 1 -3 -3 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1 -4 // D -2 -1 1 6 -3 0 2 -1 -1 -3 -3 -1 -3 -3 -1 0 -1 -4 -3 -3 4 1 -1 -4 // C 0 -3 -2 -3 9 -3 -3 -2 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4 // Q -1 1 0 0 -3 5 2 -2 1 -3 -2 1 0 -3 -1 0 -1 -2 -1 -2 0 3 -1 -4 // E -1 0 0 2 -3 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4 // G 0 -2 0 -1 -2 -2 -2 6 -2 -3 -4 -1 -2 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 -4 // H -2 0 1 -1 -3 1 0 -2 7 -3 -3 -1 -1 -1 -2 -1 -2 -2 2 -3 0 0 -1 -4 // I -1 -3 -3 -3 -1 -3 -3 -3 -3 4 2 -3 1 0 -3 -2 -1 -2 -1 3 -3 -3 -1 -4 // L -1 -2 -3 -3 -1 -2 -3 -4 -3 2 4 -2 2 0 -3 -2 -1 -2 -1 1 -3 -2 -1 -4 // K -1 2 0 -1 -3 1 1 -1 -1 -3 -2 4 -1 -3 -1 0 -1 -3 -2 -2 0 1 -1 -4 // M -1 -1 -2 -3 -1 0 -2 -2 -1 1 2 -1 5 0 -2 -1 -1 -1 -1 1 -3 -1 -1 -4 // F -2 -3 -3 -3 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -1 -4 // P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4 7 -1 -1 -4 -3 -2 -2 -1 -2 -4 // S 1 -1 1 0 -1 0 0 0 -1 -2 -2 0 -1 -2 -1 4 1 -3 -2 -2 0 0 0 -4 // T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 4 -2 -2 0 0 -1 0 -4 // W -3 -3 -4 -4 -2 -2 -3 -2 -2 -2 -2 -3 -1 1 -4 -3 -2 10 2 -3 -4 -2 -2 -4 // Y -2 -2 -2 -3 -2 -1 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 6 -1 -2 -2 -1 -4 // V 0 -2 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1 -4 // B -2 -1 3 4 -3 0 1 -1 0 -3 -3 0 -3 -3 -2 0 0 -4 -2 -3 4 1 -1 -4 // Z -1 0 0 1 -3 3 4 -2 0 -3 -2 1 -1 -3 -1 0 -1 -2 -2 -2 1 3 -1 -4 // X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 0 0 -2 -1 -1 -1 -1 -1 -4 // * -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 1 // BLOSUM60 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 4, -2, 0, -2, -1, -2, 0, -2, -1, 0, -1, -1, -1, -1, -1, -1, -1, 1, 0, 0, -3, 0, -2, -1, -4}, /* B */ {0, -2, 4, -3, 4, 1, -3, -1, 0, -3, 0, 0, -3, -3, 3, -2, 0, -1, 0, 0, -3, -4, -1, -2, 1, -4}, /* C */ {0, 0, -3, 9, -3, -3, -2, -2, -3, -1, 0, -3, -1, -1, -2, -3, -3, -3, -1, -1, -1, -2, -2, -2, -3, -4}, /* D */ {0, -2, 4, -3, 6, 2, -3, -1, -1, -3, 0, -1, -3, -3, 1, -1, 0, -1, 0, -1, -3, -4, -1, -3, 1, -4}, /* E */ {0, -1, 1, -3, 2, 5, -3, -2, 0, -3, 0, 1, -3, -2, 0, -1, 2, 0, 0, -1, -2, -3, -1, -2, 4, -4}, /* F */ {0, -2, -3, -2, -3, -3, 6, -3, -1, 0, 0, -3, 0, 0, -3, -4, -3, -3, -2, -2, -1, 1, -1, 3, -3, -4}, /* G */ {0, 0, -1, -2, -1, -2, -3, 6, -2, -3, 0, -1, -4, -2, 0, -2, -2, -2, 0, -2, -3, -2, -1, -3, -2, -4}, /* H */ {0, -2, 0, -3, -1, 0, -1, -2, 7, -3, 0, -1, -3, -1, 1, -2, 1, 0, -1, -2, -3, -2, -1, 2, 0, -4}, /* I */ {0, -1, -3, -1, -3, -3, 0, -3, -3, 4, 0, -3, 2, 1, -3, -3, -3, -3, -2, -1, 3, -2, -1, -1, -3, -4}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 0, -3, -1, 1, -3, -1, -1, -3, 0, 4, -2, -1, 0, -1, 1, 2, 0, -1, -2, -3, -1, -2, 1, -4}, /* L */ {0, -1, -3, -1, -3, -3, 0, -4, -3, 2, 0, -2, 4, 2, -3, -3, -2, -2, -2, -1, 1, -2, -1, -1, -2, -4}, /* M */ {0, -1, -3, -1, -3, -2, 0, -2, -1, 1, 0, -1, 2, 5, -2, -2, 0, -1, -1, -1, 1, -1, -1, -1, -1, -4}, /* N */ {0, -1, 3, -2, 1, 0, -3, 0, 1, -3, 0, 0, -3, -2, 6, -2, 0, 0, 1, 0, -3, -4, -1, -2, 0, -4}, /* P */ {0, -1, -2, -3, -1, -1, -4, -2, -2, -3, 0, -1, -3, -2, -2, 7, -1, -2, -1, -1, -2, -4, -2, -3, -1, -4}, /* Q */ {0, -1, 0, -3, 0, 2, -3, -2, 1, -3, 0, 1, -2, 0, 0, -1, 5, 1, 0, -1, -2, -2, -1, -1, 3, -4}, /* R */ {0, -1, -1, -3, -1, 0, -3, -2, 0, -3, 0, 2, -2, -1, 0, -2, 1, 5, -1, -1, -2, -3, -1, -2, 0, -4}, /* S */ {0, 1, 0, -1, 0, 0, -2, 0, -1, -2, 0, 0, -2, -1, 1, -1, 0, -1, 4, 1, -2, -3, 0, -2, 0, -4}, /* T */ {0, 0, 0, -1, -1, -1, -2, -2, -2, -1, 0, -1, -1, -1, 0, -1, -1, -1, 1, 4, 0, -2, 0, -2, -1, -4}, /* V */ {0, 0, -3, -1, -3, -2, -1, -3, -3, 3, 0, -2, 1, 1, -3, -2, -2, -2, -2, 0, 4, -3, -1, -1, -2, -4}, /* W */ {0, -3, -4, -2, -4, -3, 1, -2, -2, -2, 0, -3, -2, -1, -4, -4, -2, -3, -3, -2, -3, 10, -2, 2, -2, -4}, /* X */ {0, 0, -1, -2, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -2, -1, -1, 0, 0, -1, -2, -1, -1, -1, -4}, /* Y */ {0, -2, -2, -2, -3, -2, 3, -3, 2, -1, 0, -2, -1, -1, -2, -3, -1, -2, -2, -2, -1, 2, -1, 6, -2, -4}, /* Z */ {0, -1, 1, -3, 1, 4, -3, -2, 0, -3, 0, 1, -2, -1, 0, -1, 3, 0, 0, -1, -2, -2, -1, -2, 3, -4}, /* * */ {0, -4, -4, -4, -4, -4, -4, -4, -4, -4, 0, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1}, } // # Matrix made by matblas from blosum62.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 62 // # Entropy = 0.6979, Expected = -0.5209 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 4 -1 -2 -2 0 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 0 -4 // R -1 5 0 -2 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -4 // N -2 0 6 1 -3 0 0 0 1 -3 -3 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1 -4 // D -2 -2 1 6 -3 0 2 -1 -1 -3 -4 -1 -3 -3 -1 0 -1 -4 -3 -3 4 1 -1 -4 // C 0 -3 -3 -3 9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4 // Q -1 1 0 0 -3 5 2 -2 0 -3 -2 1 0 -3 -1 0 -1 -2 -1 -2 0 3 -1 -4 // E -1 0 0 2 -4 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4 // G 0 -2 0 -1 -3 -2 -2 6 -2 -4 -4 -2 -3 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 -4 // H -2 0 1 -1 -3 0 0 -2 8 -3 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 0 0 -1 -4 // I -1 -3 -3 -3 -1 -3 -3 -4 -3 4 2 -3 1 0 -3 -2 -1 -3 -1 3 -3 -3 -1 -4 // L -1 -2 -3 -4 -1 -2 -3 -4 -3 2 4 -2 2 0 -3 -2 -1 -2 -1 1 -4 -3 -1 -4 // K -1 2 0 -1 -3 1 1 -2 -1 -3 -2 5 -1 -3 -1 0 -1 -3 -2 -2 0 1 -1 -4 // M -1 -1 -2 -3 -1 0 -2 -3 -2 1 2 -1 5 0 -2 -1 -1 -1 -1 1 -3 -1 -1 -4 // F -2 -3 -3 -3 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -1 -4 // P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4 7 -1 -1 -4 -3 -2 -2 -1 -2 -4 // S 1 -1 1 0 -1 0 0 0 -1 -2 -2 0 -1 -2 -1 4 1 -3 -2 -2 0 0 0 -4 // T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 5 -2 -2 0 -1 -1 0 -4 // W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1 1 -4 -3 -2 11 2 -3 -4 -3 -2 -4 // Y -2 -2 -2 -3 -2 -1 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -1 -3 -2 -1 -4 // V 0 -3 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1 -4 // B -2 -1 3 4 -3 0 1 -1 0 -3 -4 0 -3 -3 -2 0 -1 -4 -3 -3 4 1 -1 -4 // Z -1 0 0 1 -3 3 4 -2 0 -3 -3 1 -1 -3 -1 0 -1 -3 -2 -2 1 4 -1 -4 // X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 0 0 -2 -1 -1 -1 -1 -1 -4 // * -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 1 // BLOSUM62 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 4, -2, 0, -2, -1, -2, 0, -2, -1, 0, -1, -1, -1, -2, -1, -1, -1, 1, 0, 0, -3, 0, -2, -1, -4}, /* B */ {0, -2, 4, -3, 4, 1, -3, -1, 0, -3, 0, 0, -4, -3, 3, -2, 0, -1, 0, -1, -3, -4, -1, -3, 1, -4}, /* C */ {0, 0, -3, 9, -3, -4, -2, -3, -3, -1, 0, -3, -1, -1, -3, -3, -3, -3, -1, -1, -1, -2, -2, -2, -3, -4}, /* D */ {0, -2, 4, -3, 6, 2, -3, -1, -1, -3, 0, -1, -4, -3, 1, -1, 0, -2, 0, -1, -3, -4, -1, -3, 1, -4}, /* E */ {0, -1, 1, -4, 2, 5, -3, -2, 0, -3, 0, 1, -3, -2, 0, -1, 2, 0, 0, -1, -2, -3, -1, -2, 4, -4}, /* F */ {0, -2, -3, -2, -3, -3, 6, -3, -1, 0, 0, -3, 0, 0, -3, -4, -3, -3, -2, -2, -1, 1, -1, 3, -3, -4}, /* G */ {0, 0, -1, -3, -1, -2, -3, 6, -2, -4, 0, -2, -4, -3, 0, -2, -2, -2, 0, -2, -3, -2, -1, -3, -2, -4}, /* H */ {0, -2, 0, -3, -1, 0, -1, -2, 8, -3, 0, -1, -3, -2, 1, -2, 0, 0, -1, -2, -3, -2, -1, 2, 0, -4}, /* I */ {0, -1, -3, -1, -3, -3, 0, -4, -3, 4, 0, -3, 2, 1, -3, -3, -3, -3, -2, -1, 3, -3, -1, -1, -3, -4}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 0, -3, -1, 1, -3, -2, -1, -3, 0, 5, -2, -1, 0, -1, 1, 2, 0, -1, -2, -3, -1, -2, 1, -4}, /* L */ {0, -1, -4, -1, -4, -3, 0, -4, -3, 2, 0, -2, 4, 2, -3, -3, -2, -2, -2, -1, 1, -2, -1, -1, -3, -4}, /* M */ {0, -1, -3, -1, -3, -2, 0, -3, -2, 1, 0, -1, 2, 5, -2, -2, 0, -1, -1, -1, 1, -1, -1, -1, -1, -4}, /* N */ {0, -2, 3, -3, 1, 0, -3, 0, 1, -3, 0, 0, -3, -2, 6, -2, 0, 0, 1, 0, -3, -4, -1, -2, 0, -4}, /* P */ {0, -1, -2, -3, -1, -1, -4, -2, -2, -3, 0, -1, -3, -2, -2, 7, -1, -2, -1, -1, -2, -4, -2, -3, -1, -4}, /* Q */ {0, -1, 0, -3, 0, 2, -3, -2, 0, -3, 0, 1, -2, 0, 0, -1, 5, 1, 0, -1, -2, -2, -1, -1, 3, -4}, /* R */ {0, -1, -1, -3, -2, 0, -3, -2, 0, -3, 0, 2, -2, -1, 0, -2, 1, 5, -1, -1, -3, -3, -1, -2, 0, -4}, /* S */ {0, 1, 0, -1, 0, 0, -2, 0, -1, -2, 0, 0, -2, -1, 1, -1, 0, -1, 4, 1, -2, -3, 0, -2, 0, -4}, /* T */ {0, 0, -1, -1, -1, -1, -2, -2, -2, -1, 0, -1, -1, -1, 0, -1, -1, -1, 1, 5, 0, -2, 0, -2, -1, -4}, /* V */ {0, 0, -3, -1, -3, -2, -1, -3, -3, 3, 0, -2, 1, 1, -3, -2, -2, -3, -2, 0, 4, -3, -1, -1, -2, -4}, /* W */ {0, -3, -4, -2, -4, -3, 1, -2, -2, -3, 0, -3, -2, -1, -4, -4, -2, -3, -3, -2, -3, 11, -2, 2, -3, -4}, /* X */ {0, 0, -1, -2, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -2, -1, -1, 0, 0, -1, -2, -1, -1, -1, -4}, /* Y */ {0, -2, -3, -2, -3, -2, 3, -3, 2, -1, 0, -2, -1, -1, -2, -3, -1, -2, -2, -2, -1, 2, -1, 7, -2, -4}, /* Z */ {0, -1, 1, -3, 1, 4, -3, -2, 0, -3, 0, 1, -3, -1, 0, -1, 3, 0, 0, -1, -2, -3, -1, -2, 4, -4}, /* * */ {0, -4, -4, -4, -4, -4, -4, -4, -4, -4, 0, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1}, } // # Matrix made by matblas from blosum65.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 65 // # Entropy = 0.7576, Expected = -0.5675 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 4 -1 -2 -2 0 -1 -1 0 -2 -1 -2 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 -1 -5 // R -1 6 0 -2 -4 1 0 -2 0 -3 -2 2 -2 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -5 // N -2 0 6 1 -3 0 0 -1 1 -3 -4 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1 -5 // D -2 -2 1 6 -4 0 2 -1 -1 -3 -4 -1 -3 -4 -2 0 -1 -5 -3 -3 4 1 -1 -5 // C 0 -4 -3 -4 9 -3 -4 -3 -3 -1 -1 -3 -2 -2 -3 -1 -1 -2 -2 -1 -3 -4 -2 -5 // Q -1 1 0 0 -3 6 2 -2 1 -3 -2 1 0 -3 -1 0 -1 -2 -2 -2 0 3 -1 -5 // E -1 0 0 2 -4 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -3 1 4 -1 -5 // G 0 -2 -1 -1 -3 -2 -2 6 -2 -4 -4 -2 -3 -3 -2 0 -2 -3 -3 -3 -1 -2 -2 -5 // H -2 0 1 -1 -3 1 0 -2 8 -3 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 0 0 -1 -5 // I -1 -3 -3 -3 -1 -3 -3 -4 -3 4 2 -3 1 0 -3 -2 -1 -2 -1 3 -3 -3 -1 -5 // L -2 -2 -4 -4 -1 -2 -3 -4 -3 2 4 -3 2 0 -3 -3 -1 -2 -1 1 -4 -3 -1 -5 // K -1 2 0 -1 -3 1 1 -2 -1 -3 -3 5 -2 -3 -1 0 -1 -3 -2 -2 0 1 -1 -5 // M -1 -2 -2 -3 -2 0 -2 -3 -2 1 2 -2 6 0 -3 -2 -1 -2 -1 1 -3 -2 -1 -5 // F -2 -3 -3 -4 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -2 -5 // P -1 -2 -2 -2 -3 -1 -1 -2 -2 -3 -3 -1 -3 -4 8 -1 -1 -4 -3 -2 -2 -1 -2 -5 // S 1 -1 1 0 -1 0 0 0 -1 -2 -3 0 -2 -2 -1 4 1 -3 -2 -2 0 0 -1 -5 // T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 5 -3 -2 0 -1 -1 -1 -5 // W -3 -3 -4 -5 -2 -2 -3 -3 -2 -2 -2 -3 -2 1 -4 -3 -3 10 2 -3 -4 -3 -2 -5 // Y -2 -2 -2 -3 -2 -2 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -1 -3 -2 -1 -5 // V 0 -3 -3 -3 -1 -2 -3 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1 -5 // B -2 -1 3 4 -3 0 1 -1 0 -3 -4 0 -3 -3 -2 0 -1 -4 -3 -3 4 1 -1 -5 // Z -1 0 0 1 -4 3 4 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1 -5 // X -1 -1 -1 -1 -2 -1 -1 -2 -1 -1 -1 -1 -1 -2 -2 -1 -1 -2 -1 -1 -1 -1 -1 -5 // * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 // BLOSUM65 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 4, -2, 0, -2, -1, -2, 0, -2, -1, 0, -1, -2, -1, -2, -1, -1, -1, 1, 0, 0, -3, -1, -2, -1, -5}, /* B */ {0, -2, 4, -3, 4, 1, -3, -1, 0, -3, 0, 0, -4, -3, 3, -2, 0, -1, 0, -1, -3, -4, -1, -3, 1, -5}, /* C */ {0, 0, -3, 9, -4, -4, -2, -3, -3, -1, 0, -3, -1, -2, -3, -3, -3, -4, -1, -1, -1, -2, -2, -2, -4, -5}, /* D */ {0, -2, 4, -4, 6, 2, -4, -1, -1, -3, 0, -1, -4, -3, 1, -2, 0, -2, 0, -1, -3, -5, -1, -3, 1, -5}, /* E */ {0, -1, 1, -4, 2, 5, -3, -2, 0, -3, 0, 1, -3, -2, 0, -1, 2, 0, 0, -1, -3, -3, -1, -2, 4, -5}, /* F */ {0, -2, -3, -2, -4, -3, 6, -3, -1, 0, 0, -3, 0, 0, -3, -4, -3, -3, -2, -2, -1, 1, -2, 3, -3, -5}, /* G */ {0, 0, -1, -3, -1, -2, -3, 6, -2, -4, 0, -2, -4, -3, -1, -2, -2, -2, 0, -2, -3, -3, -2, -3, -2, -5}, /* H */ {0, -2, 0, -3, -1, 0, -1, -2, 8, -3, 0, -1, -3, -2, 1, -2, 1, 0, -1, -2, -3, -2, -1, 2, 0, -5}, /* I */ {0, -1, -3, -1, -3, -3, 0, -4, -3, 4, 0, -3, 2, 1, -3, -3, -3, -3, -2, -1, 3, -2, -1, -1, -3, -5}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 0, -3, -1, 1, -3, -2, -1, -3, 0, 5, -3, -2, 0, -1, 1, 2, 0, -1, -2, -3, -1, -2, 1, -5}, /* L */ {0, -2, -4, -1, -4, -3, 0, -4, -3, 2, 0, -3, 4, 2, -4, -3, -2, -2, -3, -1, 1, -2, -1, -1, -3, -5}, /* M */ {0, -1, -3, -2, -3, -2, 0, -3, -2, 1, 0, -2, 2, 6, -2, -3, 0, -2, -2, -1, 1, -2, -1, -1, -2, -5}, /* N */ {0, -2, 3, -3, 1, 0, -3, -1, 1, -3, 0, 0, -4, -2, 6, -2, 0, 0, 1, 0, -3, -4, -1, -2, 0, -5}, /* P */ {0, -1, -2, -3, -2, -1, -4, -2, -2, -3, 0, -1, -3, -3, -2, 8, -1, -2, -1, -1, -2, -4, -2, -3, -1, -5}, /* Q */ {0, -1, 0, -3, 0, 2, -3, -2, 1, -3, 0, 1, -2, 0, 0, -1, 6, 1, 0, -1, -2, -2, -1, -2, 3, -5}, /* R */ {0, -1, -1, -4, -2, 0, -3, -2, 0, -3, 0, 2, -2, -2, 0, -2, 1, 6, -1, -1, -3, -3, -1, -2, 0, -5}, /* S */ {0, 1, 0, -1, 0, 0, -2, 0, -1, -2, 0, 0, -3, -2, 1, -1, 0, -1, 4, 1, -2, -3, -1, -2, 0, -5}, /* T */ {0, 0, -1, -1, -1, -1, -2, -2, -2, -1, 0, -1, -1, -1, 0, -1, -1, -1, 1, 5, 0, -3, -1, -2, -1, -5}, /* V */ {0, 0, -3, -1, -3, -3, -1, -3, -3, 3, 0, -2, 1, 1, -3, -2, -2, -3, -2, 0, 4, -3, -1, -1, -2, -5}, /* W */ {0, -3, -4, -2, -5, -3, 1, -3, -2, -2, 0, -3, -2, -2, -4, -4, -2, -3, -3, -3, -3, 10, -2, 2, -3, -5}, /* X */ {0, -1, -1, -2, -1, -1, -2, -2, -1, -1, 0, -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -2, -1, -1, -1, -5}, /* Y */ {0, -2, -3, -2, -3, -2, 3, -3, 2, -1, 0, -2, -1, -1, -2, -3, -2, -2, -2, -2, -1, 2, -1, 7, -2, -5}, /* Z */ {0, -1, 1, -4, 1, 4, -3, -2, 0, -3, 0, 1, -3, -2, 0, -1, 3, 0, 0, -1, -2, -3, -1, -2, 4, -5}, /* * */ {0, -5, -5, -5, -5, -5, -5, -5, -5, -5, 0, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 1}, } // # Matrix made by matblas from blosum70.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 70 // # Entropy = 0.8391, Expected = -0.6313 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 4 -2 -2 -2 -1 -1 -1 0 -2 -2 -2 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 -1 -5 // R -2 6 -1 -2 -4 1 0 -3 0 -3 -3 2 -2 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -5 // N -2 -1 6 1 -3 0 0 -1 0 -4 -4 0 -2 -3 -2 0 0 -4 -2 -3 3 0 -1 -5 // D -2 -2 1 6 -4 -1 1 -2 -1 -4 -4 -1 -3 -4 -2 0 -1 -5 -4 -4 4 1 -2 -5 // C -1 -4 -3 -4 9 -3 -4 -3 -4 -1 -2 -4 -2 -2 -3 -1 -1 -3 -3 -1 -4 -4 -2 -5 // Q -1 1 0 -1 -3 6 2 -2 1 -3 -2 1 0 -3 -2 0 -1 -2 -2 -2 0 3 -1 -5 // E -1 0 0 1 -4 2 5 -2 0 -4 -3 1 -2 -4 -1 0 -1 -4 -3 -3 1 4 -1 -5 // G 0 -3 -1 -2 -3 -2 -2 6 -2 -4 -4 -2 -3 -4 -3 -1 -2 -3 -4 -4 -1 -2 -2 -5 // H -2 0 0 -1 -4 1 0 -2 8 -4 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 -1 0 -1 -5 // I -2 -3 -4 -4 -1 -3 -4 -4 -4 4 2 -3 1 0 -3 -3 -1 -3 -1 3 -4 -3 -1 -5 // L -2 -3 -4 -4 -2 -2 -3 -4 -3 2 4 -3 2 0 -3 -3 -2 -2 -1 1 -4 -3 -1 -5 // K -1 2 0 -1 -4 1 1 -2 -1 -3 -3 5 -2 -3 -1 0 -1 -3 -2 -3 -1 1 -1 -5 // M -1 -2 -2 -3 -2 0 -2 -3 -2 1 2 -2 6 0 -3 -2 -1 -2 -1 1 -3 -2 -1 -5 // F -2 -3 -3 -4 -2 -3 -4 -4 -1 0 0 -3 0 6 -4 -3 -2 1 3 -1 -4 -4 -2 -5 // P -1 -2 -2 -2 -3 -2 -1 -3 -2 -3 -3 -1 -3 -4 8 -1 -1 -4 -3 -3 -2 -1 -2 -5 // S 1 -1 0 0 -1 0 0 -1 -1 -3 -3 0 -2 -3 -1 4 1 -3 -2 -2 0 0 -1 -5 // T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -2 -1 -1 -2 -1 1 5 -3 -2 0 -1 -1 -1 -5 // W -3 -3 -4 -5 -3 -2 -4 -3 -2 -3 -2 -3 -2 1 -4 -3 -3 11 2 -3 -4 -3 -3 -5 // Y -2 -2 -2 -4 -3 -2 -3 -4 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -2 -3 -2 -2 -5 // V 0 -3 -3 -4 -1 -2 -3 -4 -3 3 1 -3 1 -1 -3 -2 0 -3 -2 4 -3 -3 -1 -5 // B -2 -1 3 4 -4 0 1 -1 -1 -4 -4 -1 -3 -4 -2 0 -1 -4 -3 -3 4 0 -1 -5 // Z -1 0 0 1 -4 3 4 -2 0 -3 -3 1 -2 -4 -1 0 -1 -3 -2 -3 0 4 -1 -5 // X -1 -1 -1 -2 -2 -1 -1 -2 -1 -1 -1 -1 -1 -2 -2 -1 -1 -3 -2 -1 -1 -1 -1 -5 // * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 // BLOSUM70 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 4, -2, -1, -2, -1, -2, 0, -2, -2, 0, -1, -2, -1, -2, -1, -1, -2, 1, 0, 0, -3, -1, -2, -1, -5}, /* B */ {0, -2, 4, -4, 4, 1, -4, -1, -1, -4, 0, -1, -4, -3, 3, -2, 0, -1, 0, -1, -3, -4, -1, -3, 0, -5}, /* C */ {0, -1, -4, 9, -4, -4, -2, -3, -4, -1, 0, -4, -2, -2, -3, -3, -3, -4, -1, -1, -1, -3, -2, -3, -4, -5}, /* D */ {0, -2, 4, -4, 6, 1, -4, -2, -1, -4, 0, -1, -4, -3, 1, -2, -1, -2, 0, -1, -4, -5, -2, -4, 1, -5}, /* E */ {0, -1, 1, -4, 1, 5, -4, -2, 0, -4, 0, 1, -3, -2, 0, -1, 2, 0, 0, -1, -3, -4, -1, -3, 4, -5}, /* F */ {0, -2, -4, -2, -4, -4, 6, -4, -1, 0, 0, -3, 0, 0, -3, -4, -3, -3, -3, -2, -1, 1, -2, 3, -4, -5}, /* G */ {0, 0, -1, -3, -2, -2, -4, 6, -2, -4, 0, -2, -4, -3, -1, -3, -2, -3, -1, -2, -4, -3, -2, -4, -2, -5}, /* H */ {0, -2, -1, -4, -1, 0, -1, -2, 8, -4, 0, -1, -3, -2, 0, -2, 1, 0, -1, -2, -3, -2, -1, 2, 0, -5}, /* I */ {0, -2, -4, -1, -4, -4, 0, -4, -4, 4, 0, -3, 2, 1, -4, -3, -3, -3, -3, -1, 3, -3, -1, -1, -3, -5}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, -1, -4, -1, 1, -3, -2, -1, -3, 0, 5, -3, -2, 0, -1, 1, 2, 0, -1, -3, -3, -1, -2, 1, -5}, /* L */ {0, -2, -4, -2, -4, -3, 0, -4, -3, 2, 0, -3, 4, 2, -4, -3, -2, -3, -3, -2, 1, -2, -1, -1, -3, -5}, /* M */ {0, -1, -3, -2, -3, -2, 0, -3, -2, 1, 0, -2, 2, 6, -2, -3, 0, -2, -2, -1, 1, -2, -1, -1, -2, -5}, /* N */ {0, -2, 3, -3, 1, 0, -3, -1, 0, -4, 0, 0, -4, -2, 6, -2, 0, -1, 0, 0, -3, -4, -1, -2, 0, -5}, /* P */ {0, -1, -2, -3, -2, -1, -4, -3, -2, -3, 0, -1, -3, -3, -2, 8, -2, -2, -1, -1, -3, -4, -2, -3, -1, -5}, /* Q */ {0, -1, 0, -3, -1, 2, -3, -2, 1, -3, 0, 1, -2, 0, 0, -2, 6, 1, 0, -1, -2, -2, -1, -2, 3, -5}, /* R */ {0, -2, -1, -4, -2, 0, -3, -3, 0, -3, 0, 2, -3, -2, -1, -2, 1, 6, -1, -1, -3, -3, -1, -2, 0, -5}, /* S */ {0, 1, 0, -1, 0, 0, -3, -1, -1, -3, 0, 0, -3, -2, 0, -1, 0, -1, 4, 1, -2, -3, -1, -2, 0, -5}, /* T */ {0, 0, -1, -1, -1, -1, -2, -2, -2, -1, 0, -1, -2, -1, 0, -1, -1, -1, 1, 5, 0, -3, -1, -2, -1, -5}, /* V */ {0, 0, -3, -1, -4, -3, -1, -4, -3, 3, 0, -3, 1, 1, -3, -3, -2, -3, -2, 0, 4, -3, -1, -2, -3, -5}, /* W */ {0, -3, -4, -3, -5, -4, 1, -3, -2, -3, 0, -3, -2, -2, -4, -4, -2, -3, -3, -3, -3, 11, -3, 2, -3, -5}, /* X */ {0, -1, -1, -2, -2, -1, -2, -2, -1, -1, 0, -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -3, -1, -2, -1, -5}, /* Y */ {0, -2, -3, -3, -4, -3, 3, -4, 2, -1, 0, -2, -1, -1, -2, -3, -2, -2, -2, -2, -2, 2, -2, 7, -2, -5}, /* Z */ {0, -1, 0, -4, 1, 4, -4, -2, 0, -3, 0, 1, -3, -2, 0, -1, 3, 0, 0, -1, -3, -3, -1, -2, 4, -5}, /* * */ {0, -5, -5, -5, -5, -5, -5, -5, -5, -5, 0, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 1}, } // # Matrix made by matblas from blosum75.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 75 // # Entropy = 0.9077, Expected = -0.6845 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 4 -2 -2 -2 -1 -1 -1 0 -2 -2 -2 -1 -1 -3 -1 1 0 -3 -2 0 -2 -1 -1 -5 // R -2 6 -1 -2 -4 1 0 -3 0 -3 -3 2 -2 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 -5 // N -2 -1 6 1 -3 0 -1 -1 0 -4 -4 0 -3 -4 -3 0 0 -4 -3 -3 3 0 -1 -5 // D -2 -2 1 6 -4 -1 1 -2 -1 -4 -4 -1 -4 -4 -2 -1 -1 -5 -4 -4 4 1 -2 -5 // C -1 -4 -3 -4 9 -3 -5 -3 -4 -1 -2 -4 -2 -2 -4 -1 -1 -3 -3 -1 -4 -4 -2 -5 // Q -1 1 0 -1 -3 6 2 -2 1 -3 -3 1 0 -4 -2 0 -1 -2 -2 -2 0 3 -1 -5 // E -1 0 -1 1 -5 2 5 -3 0 -4 -4 1 -2 -4 -1 0 -1 -4 -3 -3 1 4 -1 -5 // G 0 -3 -1 -2 -3 -2 -3 6 -2 -5 -4 -2 -3 -4 -3 -1 -2 -3 -4 -4 -1 -2 -2 -5 // H -2 0 0 -1 -4 1 0 -2 8 -4 -3 -1 -2 -2 -2 -1 -2 -2 2 -4 -1 0 -1 -5 // I -2 -3 -4 -4 -1 -3 -4 -5 -4 4 1 -3 1 0 -3 -3 -1 -3 -2 3 -4 -4 -2 -5 // L -2 -3 -4 -4 -2 -3 -4 -4 -3 1 4 -3 2 0 -3 -3 -2 -2 -1 1 -4 -3 -1 -5 // K -1 2 0 -1 -4 1 1 -2 -1 -3 -3 5 -2 -4 -1 0 -1 -4 -2 -3 -1 1 -1 -5 // M -1 -2 -3 -4 -2 0 -2 -3 -2 1 2 -2 6 0 -3 -2 -1 -2 -2 1 -3 -2 -1 -5 // F -3 -3 -4 -4 -2 -4 -4 -4 -2 0 0 -4 0 6 -4 -3 -2 1 3 -1 -4 -4 -2 -5 // P -1 -2 -3 -2 -4 -2 -1 -3 -2 -3 -3 -1 -3 -4 8 -1 -1 -5 -4 -3 -2 -2 -2 -5 // S 1 -1 0 -1 -1 0 0 -1 -1 -3 -3 0 -2 -3 -1 5 1 -3 -2 -2 0 0 -1 -5 // T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -2 -1 -1 -2 -1 1 5 -3 -2 0 -1 -1 -1 -5 // W -3 -3 -4 -5 -3 -2 -4 -3 -2 -3 -2 -4 -2 1 -5 -3 -3 11 2 -3 -5 -3 -3 -5 // Y -2 -2 -3 -4 -3 -2 -3 -4 2 -2 -1 -2 -2 3 -4 -2 -2 2 7 -2 -3 -3 -2 -5 // V 0 -3 -3 -4 -1 -2 -3 -4 -4 3 1 -3 1 -1 -3 -2 0 -3 -2 4 -4 -3 -1 -5 // B -2 -1 3 4 -4 0 1 -1 -1 -4 -4 -1 -3 -4 -2 0 -1 -5 -3 -4 4 0 -2 -5 // Z -1 0 0 1 -4 3 4 -2 0 -4 -3 1 -2 -4 -2 0 -1 -3 -3 -3 0 4 -1 -5 // X -1 -1 -1 -2 -2 -1 -1 -2 -1 -2 -1 -1 -1 -2 -2 -1 -1 -3 -2 -1 -2 -1 -1 -5 // * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 1 // BLOSUM75 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 4, -2, -1, -2, -1, -3, 0, -2, -2, 0, -1, -2, -1, -2, -1, -1, -2, 1, 0, 0, -3, -1, -2, -1, -5}, /* B */ {0, -2, 4, -4, 4, 1, -4, -1, -1, -4, 0, -1, -4, -3, 3, -2, 0, -1, 0, -1, -4, -5, -2, -3, 0, -5}, /* C */ {0, -1, -4, 9, -4, -5, -2, -3, -4, -1, 0, -4, -2, -2, -3, -4, -3, -4, -1, -1, -1, -3, -2, -3, -4, -5}, /* D */ {0, -2, 4, -4, 6, 1, -4, -2, -1, -4, 0, -1, -4, -4, 1, -2, -1, -2, -1, -1, -4, -5, -2, -4, 1, -5}, /* E */ {0, -1, 1, -5, 1, 5, -4, -3, 0, -4, 0, 1, -4, -2, -1, -1, 2, 0, 0, -1, -3, -4, -1, -3, 4, -5}, /* F */ {0, -3, -4, -2, -4, -4, 6, -4, -2, 0, 0, -4, 0, 0, -4, -4, -4, -3, -3, -2, -1, 1, -2, 3, -4, -5}, /* G */ {0, 0, -1, -3, -2, -3, -4, 6, -2, -5, 0, -2, -4, -3, -1, -3, -2, -3, -1, -2, -4, -3, -2, -4, -2, -5}, /* H */ {0, -2, -1, -4, -1, 0, -2, -2, 8, -4, 0, -1, -3, -2, 0, -2, 1, 0, -1, -2, -4, -2, -1, 2, 0, -5}, /* I */ {0, -2, -4, -1, -4, -4, 0, -5, -4, 4, 0, -3, 1, 1, -4, -3, -3, -3, -3, -1, 3, -3, -2, -2, -4, -5}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, -1, -4, -1, 1, -4, -2, -1, -3, 0, 5, -3, -2, 0, -1, 1, 2, 0, -1, -3, -4, -1, -2, 1, -5}, /* L */ {0, -2, -4, -2, -4, -4, 0, -4, -3, 1, 0, -3, 4, 2, -4, -3, -3, -3, -3, -2, 1, -2, -1, -1, -3, -5}, /* M */ {0, -1, -3, -2, -4, -2, 0, -3, -2, 1, 0, -2, 2, 6, -3, -3, 0, -2, -2, -1, 1, -2, -1, -2, -2, -5}, /* N */ {0, -2, 3, -3, 1, -1, -4, -1, 0, -4, 0, 0, -4, -3, 6, -3, 0, -1, 0, 0, -3, -4, -1, -3, 0, -5}, /* P */ {0, -1, -2, -4, -2, -1, -4, -3, -2, -3, 0, -1, -3, -3, -3, 8, -2, -2, -1, -1, -3, -5, -2, -4, -2, -5}, /* Q */ {0, -1, 0, -3, -1, 2, -4, -2, 1, -3, 0, 1, -3, 0, 0, -2, 6, 1, 0, -1, -2, -2, -1, -2, 3, -5}, /* R */ {0, -2, -1, -4, -2, 0, -3, -3, 0, -3, 0, 2, -3, -2, -1, -2, 1, 6, -1, -1, -3, -3, -1, -2, 0, -5}, /* S */ {0, 1, 0, -1, -1, 0, -3, -1, -1, -3, 0, 0, -3, -2, 0, -1, 0, -1, 5, 1, -2, -3, -1, -2, 0, -5}, /* T */ {0, 0, -1, -1, -1, -1, -2, -2, -2, -1, 0, -1, -2, -1, 0, -1, -1, -1, 1, 5, 0, -3, -1, -2, -1, -5}, /* V */ {0, 0, -4, -1, -4, -3, -1, -4, -4, 3, 0, -3, 1, 1, -3, -3, -2, -3, -2, 0, 4, -3, -1, -2, -3, -5}, /* W */ {0, -3, -5, -3, -5, -4, 1, -3, -2, -3, 0, -4, -2, -2, -4, -5, -2, -3, -3, -3, -3, 11, -3, 2, -3, -5}, /* X */ {0, -1, -2, -2, -2, -1, -2, -2, -1, -2, 0, -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -3, -1, -2, -1, -5}, /* Y */ {0, -2, -3, -3, -4, -3, 3, -4, 2, -2, 0, -2, -1, -2, -3, -4, -2, -2, -2, -2, -2, 2, -2, 7, -3, -5}, /* Z */ {0, -1, 0, -4, 1, 4, -4, -2, 0, -4, 0, 1, -3, -2, 0, -2, 3, 0, 0, -1, -3, -3, -1, -3, 4, -5}, /* * */ {0, -5, -5, -5, -5, -5, -5, -5, -5, -5, 0, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 1}, } // # Matrix made by matblas from blosum80_3.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 80 // # Entropy = 0.9868, Expected = -0.7442 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 7 -3 -3 -3 -1 -2 -2 0 -3 -3 -3 -1 -2 -4 -1 2 0 -5 -4 -1 -3 -2 -1 -8 // R -3 9 -1 -3 -6 1 -1 -4 0 -5 -4 3 -3 -5 -3 -2 -2 -5 -4 -4 -2 0 -2 -8 // N -3 -1 9 2 -5 0 -1 -1 1 -6 -6 0 -4 -6 -4 1 0 -7 -4 -5 5 -1 -2 -8 // D -3 -3 2 10 -7 -1 2 -3 -2 -7 -7 -2 -6 -6 -3 -1 -2 -8 -6 -6 6 1 -3 -8 // C -1 -6 -5 -7 13 -5 -7 -6 -7 -2 -3 -6 -3 -4 -6 -2 -2 -5 -5 -2 -6 -7 -4 -8 // Q -2 1 0 -1 -5 9 3 -4 1 -5 -4 2 -1 -5 -3 -1 -1 -4 -3 -4 -1 5 -2 -8 // E -2 -1 -1 2 -7 3 8 -4 0 -6 -6 1 -4 -6 -2 -1 -2 -6 -5 -4 1 6 -2 -8 // G 0 -4 -1 -3 -6 -4 -4 9 -4 -7 -7 -3 -5 -6 -5 -1 -3 -6 -6 -6 -2 -4 -3 -8 // H -3 0 1 -2 -7 1 0 -4 12 -6 -5 -1 -4 -2 -4 -2 -3 -4 3 -5 -1 0 -2 -8 // I -3 -5 -6 -7 -2 -5 -6 -7 -6 7 2 -5 2 -1 -5 -4 -2 -5 -3 4 -6 -6 -2 -8 // L -3 -4 -6 -7 -3 -4 -6 -7 -5 2 6 -4 3 0 -5 -4 -3 -4 -2 1 -7 -5 -2 -8 // K -1 3 0 -2 -6 2 1 -3 -1 -5 -4 8 -3 -5 -2 -1 -1 -6 -4 -4 -1 1 -2 -8 // M -2 -3 -4 -6 -3 -1 -4 -5 -4 2 3 -3 9 0 -4 -3 -1 -3 -3 1 -5 -3 -2 -8 // F -4 -5 -6 -6 -4 -5 -6 -6 -2 -1 0 -5 0 10 -6 -4 -4 0 4 -2 -6 -6 -3 -8 // P -1 -3 -4 -3 -6 -3 -2 -5 -4 -5 -5 -2 -4 -6 12 -2 -3 -7 -6 -4 -4 -2 -3 -8 // S 2 -2 1 -1 -2 -1 -1 -1 -2 -4 -4 -1 -3 -4 -2 7 2 -6 -3 -3 0 -1 -1 -8 // T 0 -2 0 -2 -2 -1 -2 -3 -3 -2 -3 -1 -1 -4 -3 2 8 -5 -3 0 -1 -2 -1 -8 // W -5 -5 -7 -8 -5 -4 -6 -6 -4 -5 -4 -6 -3 0 -7 -6 -5 16 3 -5 -8 -5 -5 -8 // Y -4 -4 -4 -6 -5 -3 -5 -6 3 -3 -2 -4 -3 4 -6 -3 -3 3 11 -3 -5 -4 -3 -8 // V -1 -4 -5 -6 -2 -4 -4 -6 -5 4 1 -4 1 -2 -4 -3 0 -5 -3 7 -6 -4 -2 -8 // B -3 -2 5 6 -6 -1 1 -2 -1 -6 -7 -1 -5 -6 -4 0 -1 -8 -5 -6 6 0 -3 -8 // Z -2 0 -1 1 -7 5 6 -4 0 -6 -5 1 -3 -6 -2 -1 -2 -5 -4 -4 0 6 -1 -8 // X -1 -2 -2 -3 -4 -2 -2 -3 -2 -2 -2 -2 -2 -3 -3 -1 -1 -5 -3 -2 -3 -1 -2 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // BLOSUM80 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 7, -3, -1, -3, -2, -4, 0, -3, -3, 0, -1, -3, -2, -3, -1, -2, -3, 2, 0, -1, -5, -1, -4, -2, -8}, /* B */ {0, -3, 6, -6, 6, 1, -6, -2, -1, -6, 0, -1, -7, -5, 5, -4, -1, -2, 0, -1, -6, -8, -3, -5, 0, -8}, /* C */ {0, -1, -6, 13, -7, -7, -4, -6, -7, -2, 0, -6, -3, -3, -5, -6, -5, -6, -2, -2, -2, -5, -4, -5, -7, -8}, /* D */ {0, -3, 6, -7, 10, 2, -6, -3, -2, -7, 0, -2, -7, -6, 2, -3, -1, -3, -1, -2, -6, -8, -3, -6, 1, -8}, /* E */ {0, -2, 1, -7, 2, 8, -6, -4, 0, -6, 0, 1, -6, -4, -1, -2, 3, -1, -1, -2, -4, -6, -2, -5, 6, -8}, /* F */ {0, -4, -6, -4, -6, -6, 10, -6, -2, -1, 0, -5, 0, 0, -6, -6, -5, -5, -4, -4, -2, 0, -3, 4, -6, -8}, /* G */ {0, 0, -2, -6, -3, -4, -6, 9, -4, -7, 0, -3, -7, -5, -1, -5, -4, -4, -1, -3, -6, -6, -3, -6, -4, -8}, /* H */ {0, -3, -1, -7, -2, 0, -2, -4, 12, -6, 0, -1, -5, -4, 1, -4, 1, 0, -2, -3, -5, -4, -2, 3, 0, -8}, /* I */ {0, -3, -6, -2, -7, -6, -1, -7, -6, 7, 0, -5, 2, 2, -6, -5, -5, -5, -4, -2, 4, -5, -2, -3, -6, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, -1, -6, -2, 1, -5, -3, -1, -5, 0, 8, -4, -3, 0, -2, 2, 3, -1, -1, -4, -6, -2, -4, 1, -8}, /* L */ {0, -3, -7, -3, -7, -6, 0, -7, -5, 2, 0, -4, 6, 3, -6, -5, -4, -4, -4, -3, 1, -4, -2, -2, -5, -8}, /* M */ {0, -2, -5, -3, -6, -4, 0, -5, -4, 2, 0, -3, 3, 9, -4, -4, -1, -3, -3, -1, 1, -3, -2, -3, -3, -8}, /* N */ {0, -3, 5, -5, 2, -1, -6, -1, 1, -6, 0, 0, -6, -4, 9, -4, 0, -1, 1, 0, -5, -7, -2, -4, -1, -8}, /* P */ {0, -1, -4, -6, -3, -2, -6, -5, -4, -5, 0, -2, -5, -4, -4, 12, -3, -3, -2, -3, -4, -7, -3, -6, -2, -8}, /* Q */ {0, -2, -1, -5, -1, 3, -5, -4, 1, -5, 0, 2, -4, -1, 0, -3, 9, 1, -1, -1, -4, -4, -2, -3, 5, -8}, /* R */ {0, -3, -2, -6, -3, -1, -5, -4, 0, -5, 0, 3, -4, -3, -1, -3, 1, 9, -2, -2, -4, -5, -2, -4, 0, -8}, /* S */ {0, 2, 0, -2, -1, -1, -4, -1, -2, -4, 0, -1, -4, -3, 1, -2, -1, -2, 7, 2, -3, -6, -1, -3, -1, -8}, /* T */ {0, 0, -1, -2, -2, -2, -4, -3, -3, -2, 0, -1, -3, -1, 0, -3, -1, -2, 2, 8, 0, -5, -1, -3, -2, -8}, /* V */ {0, -1, -6, -2, -6, -4, -2, -6, -5, 4, 0, -4, 1, 1, -5, -4, -4, -4, -3, 0, 7, -5, -2, -3, -4, -8}, /* W */ {0, -5, -8, -5, -8, -6, 0, -6, -4, -5, 0, -6, -4, -3, -7, -7, -4, -5, -6, -5, -5, 16, -5, 3, -5, -8}, /* X */ {0, -1, -3, -4, -3, -2, -3, -3, -2, -2, 0, -2, -2, -2, -2, -3, -2, -2, -1, -1, -2, -5, -2, -3, -1, -8}, /* Y */ {0, -4, -5, -5, -6, -5, 4, -6, 3, -3, 0, -4, -2, -3, -4, -6, -3, -4, -3, -3, -3, 3, -3, 11, -4, -8}, /* Z */ {0, -2, 0, -7, 1, 6, -6, -4, 0, -6, 0, 1, -5, -3, -1, -2, 5, 0, -1, -2, -4, -5, -1, -4, 6, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # Matrix made by matblas from blosum85.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 85 // # Entropy = 1.0805, Expected = -0.8153 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 5 -2 -2 -2 -1 -1 -1 0 -2 -2 -2 -1 -2 -3 -1 1 0 -3 -3 -1 -2 -1 -1 -6 // R -2 6 -1 -2 -4 1 -1 -3 0 -4 -3 2 -2 -4 -2 -1 -2 -4 -3 -3 -2 0 -2 -6 // N -2 -1 7 1 -4 0 -1 -1 0 -4 -4 0 -3 -4 -3 0 0 -5 -3 -4 4 -1 -2 -6 // D -2 -2 1 7 -5 -1 1 -2 -2 -5 -5 -1 -4 -4 -2 -1 -2 -6 -4 -4 4 1 -2 -6 // C -1 -4 -4 -5 9 -4 -5 -4 -5 -2 -2 -4 -2 -3 -4 -2 -2 -4 -3 -1 -4 -5 -3 -6 // Q -1 1 0 -1 -4 6 2 -3 1 -4 -3 1 0 -4 -2 -1 -1 -3 -2 -3 -1 4 -1 -6 // E -1 -1 -1 1 -5 2 6 -3 -1 -4 -4 0 -3 -4 -2 -1 -1 -4 -4 -3 0 4 -1 -6 // G 0 -3 -1 -2 -4 -3 -3 6 -3 -5 -5 -2 -4 -4 -3 -1 -2 -4 -5 -4 -1 -3 -2 -6 // H -2 0 0 -2 -5 1 -1 -3 8 -4 -3 -1 -3 -2 -3 -1 -2 -3 2 -4 -1 0 -2 -6 // I -2 -4 -4 -5 -2 -4 -4 -5 -4 5 1 -3 1 -1 -4 -3 -1 -3 -2 3 -5 -4 -2 -6 // L -2 -3 -4 -5 -2 -3 -4 -5 -3 1 4 -3 2 0 -4 -3 -2 -3 -2 0 -5 -4 -2 -6 // K -1 2 0 -1 -4 1 0 -2 -1 -3 -3 6 -2 -4 -2 -1 -1 -5 -3 -3 -1 1 -1 -6 // M -2 -2 -3 -4 -2 0 -3 -4 -3 1 2 -2 7 -1 -3 -2 -1 -2 -2 0 -4 -2 -1 -6 // F -3 -4 -4 -4 -3 -4 -4 -4 -2 -1 0 -4 -1 7 -4 -3 -3 0 3 -1 -4 -4 -2 -6 // P -1 -2 -3 -2 -4 -2 -2 -3 -3 -4 -4 -2 -3 -4 8 -1 -2 -5 -4 -3 -3 -2 -2 -6 // S 1 -1 0 -1 -2 -1 -1 -1 -1 -3 -3 -1 -2 -3 -1 5 1 -4 -2 -2 0 -1 -1 -6 // T 0 -2 0 -2 -2 -1 -1 -2 -2 -1 -2 -1 -1 -3 -2 1 5 -4 -2 0 -1 -1 -1 -6 // W -3 -4 -5 -6 -4 -3 -4 -4 -3 -3 -3 -5 -2 0 -5 -4 -4 11 2 -3 -5 -4 -3 -6 // Y -3 -3 -3 -4 -3 -2 -4 -5 2 -2 -2 -3 -2 3 -4 -2 -2 2 7 -2 -4 -3 -2 -6 // V -1 -3 -4 -4 -1 -3 -3 -4 -4 3 0 -3 0 -1 -3 -2 0 -3 -2 5 -4 -3 -1 -6 // B -2 -2 4 4 -4 -1 0 -1 -1 -5 -5 -1 -4 -4 -3 0 -1 -5 -4 -4 4 0 -2 -6 // Z -1 0 -1 1 -5 4 4 -3 0 -4 -4 1 -2 -4 -2 -1 -1 -4 -3 -3 0 4 -1 -6 // X -1 -2 -2 -2 -3 -1 -1 -2 -2 -2 -2 -1 -1 -2 -2 -1 -1 -3 -2 -1 -2 -1 -2 -6 // * -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 1 // BLOSUM85 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 5, -2, -1, -2, -1, -3, 0, -2, -2, 0, -1, -2, -2, -2, -1, -1, -2, 1, 0, -1, -3, -1, -3, -1, -6}, /* B */ {0, -2, 4, -4, 4, 0, -4, -1, -1, -5, 0, -1, -5, -4, 4, -3, -1, -2, 0, -1, -4, -5, -2, -4, 0, -6}, /* C */ {0, -1, -4, 9, -5, -5, -3, -4, -5, -2, 0, -4, -2, -2, -4, -4, -4, -4, -2, -2, -1, -4, -3, -3, -5, -6}, /* D */ {0, -2, 4, -5, 7, 1, -4, -2, -2, -5, 0, -1, -5, -4, 1, -2, -1, -2, -1, -2, -4, -6, -2, -4, 1, -6}, /* E */ {0, -1, 0, -5, 1, 6, -4, -3, -1, -4, 0, 0, -4, -3, -1, -2, 2, -1, -1, -1, -3, -4, -1, -4, 4, -6}, /* F */ {0, -3, -4, -3, -4, -4, 7, -4, -2, -1, 0, -4, 0, -1, -4, -4, -4, -4, -3, -3, -1, 0, -2, 3, -4, -6}, /* G */ {0, 0, -1, -4, -2, -3, -4, 6, -3, -5, 0, -2, -5, -4, -1, -3, -3, -3, -1, -2, -4, -4, -2, -5, -3, -6}, /* H */ {0, -2, -1, -5, -2, -1, -2, -3, 8, -4, 0, -1, -3, -3, 0, -3, 1, 0, -1, -2, -4, -3, -2, 2, 0, -6}, /* I */ {0, -2, -5, -2, -5, -4, -1, -5, -4, 5, 0, -3, 1, 1, -4, -4, -4, -4, -3, -1, 3, -3, -2, -2, -4, -6}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, -1, -4, -1, 0, -4, -2, -1, -3, 0, 6, -3, -2, 0, -2, 1, 2, -1, -1, -3, -5, -1, -3, 1, -6}, /* L */ {0, -2, -5, -2, -5, -4, 0, -5, -3, 1, 0, -3, 4, 2, -4, -4, -3, -3, -3, -2, 0, -3, -2, -2, -4, -6}, /* M */ {0, -2, -4, -2, -4, -3, -1, -4, -3, 1, 0, -2, 2, 7, -3, -3, 0, -2, -2, -1, 0, -2, -1, -2, -2, -6}, /* N */ {0, -2, 4, -4, 1, -1, -4, -1, 0, -4, 0, 0, -4, -3, 7, -3, 0, -1, 0, 0, -4, -5, -2, -3, -1, -6}, /* P */ {0, -1, -3, -4, -2, -2, -4, -3, -3, -4, 0, -2, -4, -3, -3, 8, -2, -2, -1, -2, -3, -5, -2, -4, -2, -6}, /* Q */ {0, -1, -1, -4, -1, 2, -4, -3, 1, -4, 0, 1, -3, 0, 0, -2, 6, 1, -1, -1, -3, -3, -1, -2, 4, -6}, /* R */ {0, -2, -2, -4, -2, -1, -4, -3, 0, -4, 0, 2, -3, -2, -1, -2, 1, 6, -1, -2, -3, -4, -2, -3, 0, -6}, /* S */ {0, 1, 0, -2, -1, -1, -3, -1, -1, -3, 0, -1, -3, -2, 0, -1, -1, -1, 5, 1, -2, -4, -1, -2, -1, -6}, /* T */ {0, 0, -1, -2, -2, -1, -3, -2, -2, -1, 0, -1, -2, -1, 0, -2, -1, -2, 1, 5, 0, -4, -1, -2, -1, -6}, /* V */ {0, -1, -4, -1, -4, -3, -1, -4, -4, 3, 0, -3, 0, 0, -4, -3, -3, -3, -2, 0, 5, -3, -1, -2, -3, -6}, /* W */ {0, -3, -5, -4, -6, -4, 0, -4, -3, -3, 0, -5, -3, -2, -5, -5, -3, -4, -4, -4, -3, 11, -3, 2, -4, -6}, /* X */ {0, -1, -2, -3, -2, -1, -2, -2, -2, -2, 0, -1, -2, -1, -2, -2, -1, -2, -1, -1, -1, -3, -2, -2, -1, -6}, /* Y */ {0, -3, -4, -3, -4, -4, 3, -5, 2, -2, 0, -3, -2, -2, -3, -4, -2, -3, -2, -2, -2, 2, -2, 7, -3, -6}, /* Z */ {0, -1, 0, -5, 1, 4, -4, -3, 0, -4, 0, 1, -4, -2, -1, -2, 4, 0, -1, -1, -3, -4, -1, -3, 4, -6}, /* * */ {0, -6, -6, -6, -6, -6, -6, -6, -6, -6, 0, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, 1}, } // # Matrix made by matblas from blosum90.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= 90 // # Entropy = 1.1806, Expected = -0.8887 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 5 -2 -2 -3 -1 -1 -1 0 -2 -2 -2 -1 -2 -3 -1 1 0 -4 -3 -1 -2 -1 -1 -6 // R -2 6 -1 -3 -5 1 -1 -3 0 -4 -3 2 -2 -4 -3 -1 -2 -4 -3 -3 -2 0 -2 -6 // N -2 -1 7 1 -4 0 -1 -1 0 -4 -4 0 -3 -4 -3 0 0 -5 -3 -4 4 -1 -2 -6 // D -3 -3 1 7 -5 -1 1 -2 -2 -5 -5 -1 -4 -5 -3 -1 -2 -6 -4 -5 4 0 -2 -6 // C -1 -5 -4 -5 9 -4 -6 -4 -5 -2 -2 -4 -2 -3 -4 -2 -2 -4 -4 -2 -4 -5 -3 -6 // Q -1 1 0 -1 -4 7 2 -3 1 -4 -3 1 0 -4 -2 -1 -1 -3 -3 -3 -1 4 -1 -6 // E -1 -1 -1 1 -6 2 6 -3 -1 -4 -4 0 -3 -5 -2 -1 -1 -5 -4 -3 0 4 -2 -6 // G 0 -3 -1 -2 -4 -3 -3 6 -3 -5 -5 -2 -4 -5 -3 -1 -3 -4 -5 -5 -2 -3 -2 -6 // H -2 0 0 -2 -5 1 -1 -3 8 -4 -4 -1 -3 -2 -3 -2 -2 -3 1 -4 -1 0 -2 -6 // I -2 -4 -4 -5 -2 -4 -4 -5 -4 5 1 -4 1 -1 -4 -3 -1 -4 -2 3 -5 -4 -2 -6 // L -2 -3 -4 -5 -2 -3 -4 -5 -4 1 5 -3 2 0 -4 -3 -2 -3 -2 0 -5 -4 -2 -6 // K -1 2 0 -1 -4 1 0 -2 -1 -4 -3 6 -2 -4 -2 -1 -1 -5 -3 -3 -1 1 -1 -6 // M -2 -2 -3 -4 -2 0 -3 -4 -3 1 2 -2 7 -1 -3 -2 -1 -2 -2 0 -4 -2 -1 -6 // F -3 -4 -4 -5 -3 -4 -5 -5 -2 -1 0 -4 -1 7 -4 -3 -3 0 3 -2 -4 -4 -2 -6 // P -1 -3 -3 -3 -4 -2 -2 -3 -3 -4 -4 -2 -3 -4 8 -2 -2 -5 -4 -3 -3 -2 -2 -6 // S 1 -1 0 -1 -2 -1 -1 -1 -2 -3 -3 -1 -2 -3 -2 5 1 -4 -3 -2 0 -1 -1 -6 // T 0 -2 0 -2 -2 -1 -1 -3 -2 -1 -2 -1 -1 -3 -2 1 6 -4 -2 -1 -1 -1 -1 -6 // W -4 -4 -5 -6 -4 -3 -5 -4 -3 -4 -3 -5 -2 0 -5 -4 -4 11 2 -3 -6 -4 -3 -6 // Y -3 -3 -3 -4 -4 -3 -4 -5 1 -2 -2 -3 -2 3 -4 -3 -2 2 8 -3 -4 -3 -2 -6 // V -1 -3 -4 -5 -2 -3 -3 -5 -4 3 0 -3 0 -2 -3 -2 -1 -3 -3 5 -4 -3 -2 -6 // B -2 -2 4 4 -4 -1 0 -2 -1 -5 -5 -1 -4 -4 -3 0 -1 -6 -4 -4 4 0 -2 -6 // Z -1 0 -1 0 -5 4 4 -3 0 -4 -4 1 -2 -4 -2 -1 -1 -4 -3 -3 0 4 -1 -6 // X -1 -2 -2 -2 -3 -1 -2 -2 -2 -2 -2 -1 -1 -2 -2 -1 -1 -3 -2 -2 -2 -1 -2 -6 // * -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6 1 // BLOSUM90 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 5, -2, -1, -3, -1, -3, 0, -2, -2, 0, -1, -2, -2, -2, -1, -1, -2, 1, 0, -1, -4, -1, -3, -1, -6}, /* B */ {0, -2, 4, -4, 4, 0, -4, -2, -1, -5, 0, -1, -5, -4, 4, -3, -1, -2, 0, -1, -4, -6, -2, -4, 0, -6}, /* C */ {0, -1, -4, 9, -5, -6, -3, -4, -5, -2, 0, -4, -2, -2, -4, -4, -4, -5, -2, -2, -2, -4, -3, -4, -5, -6}, /* D */ {0, -3, 4, -5, 7, 1, -5, -2, -2, -5, 0, -1, -5, -4, 1, -3, -1, -3, -1, -2, -5, -6, -2, -4, 0, -6}, /* E */ {0, -1, 0, -6, 1, 6, -5, -3, -1, -4, 0, 0, -4, -3, -1, -2, 2, -1, -1, -1, -3, -5, -2, -4, 4, -6}, /* F */ {0, -3, -4, -3, -5, -5, 7, -5, -2, -1, 0, -4, 0, -1, -4, -4, -4, -4, -3, -3, -2, 0, -2, 3, -4, -6}, /* G */ {0, 0, -2, -4, -2, -3, -5, 6, -3, -5, 0, -2, -5, -4, -1, -3, -3, -3, -1, -3, -5, -4, -2, -5, -3, -6}, /* H */ {0, -2, -1, -5, -2, -1, -2, -3, 8, -4, 0, -1, -4, -3, 0, -3, 1, 0, -2, -2, -4, -3, -2, 1, 0, -6}, /* I */ {0, -2, -5, -2, -5, -4, -1, -5, -4, 5, 0, -4, 1, 1, -4, -4, -4, -4, -3, -1, 3, -4, -2, -2, -4, -6}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, -1, -4, -1, 0, -4, -2, -1, -4, 0, 6, -3, -2, 0, -2, 1, 2, -1, -1, -3, -5, -1, -3, 1, -6}, /* L */ {0, -2, -5, -2, -5, -4, 0, -5, -4, 1, 0, -3, 5, 2, -4, -4, -3, -3, -3, -2, 0, -3, -2, -2, -4, -6}, /* M */ {0, -2, -4, -2, -4, -3, -1, -4, -3, 1, 0, -2, 2, 7, -3, -3, 0, -2, -2, -1, 0, -2, -1, -2, -2, -6}, /* N */ {0, -2, 4, -4, 1, -1, -4, -1, 0, -4, 0, 0, -4, -3, 7, -3, 0, -1, 0, 0, -4, -5, -2, -3, -1, -6}, /* P */ {0, -1, -3, -4, -3, -2, -4, -3, -3, -4, 0, -2, -4, -3, -3, 8, -2, -3, -2, -2, -3, -5, -2, -4, -2, -6}, /* Q */ {0, -1, -1, -4, -1, 2, -4, -3, 1, -4, 0, 1, -3, 0, 0, -2, 7, 1, -1, -1, -3, -3, -1, -3, 4, -6}, /* R */ {0, -2, -2, -5, -3, -1, -4, -3, 0, -4, 0, 2, -3, -2, -1, -3, 1, 6, -1, -2, -3, -4, -2, -3, 0, -6}, /* S */ {0, 1, 0, -2, -1, -1, -3, -1, -2, -3, 0, -1, -3, -2, 0, -2, -1, -1, 5, 1, -2, -4, -1, -3, -1, -6}, /* T */ {0, 0, -1, -2, -2, -1, -3, -3, -2, -1, 0, -1, -2, -1, 0, -2, -1, -2, 1, 6, -1, -4, -1, -2, -1, -6}, /* V */ {0, -1, -4, -2, -5, -3, -2, -5, -4, 3, 0, -3, 0, 0, -4, -3, -3, -3, -2, -1, 5, -3, -2, -3, -3, -6}, /* W */ {0, -4, -6, -4, -6, -5, 0, -4, -3, -4, 0, -5, -3, -2, -5, -5, -3, -4, -4, -4, -3, 11, -3, 2, -4, -6}, /* X */ {0, -1, -2, -3, -2, -2, -2, -2, -2, -2, 0, -1, -2, -1, -2, -2, -1, -2, -1, -1, -2, -3, -2, -2, -1, -6}, /* Y */ {0, -3, -4, -4, -4, -4, 3, -5, 1, -2, 0, -3, -2, -2, -3, -4, -3, -3, -3, -2, -3, 2, -2, 8, -3, -6}, /* Z */ {0, -1, 0, -5, 0, 4, -4, -3, 0, -4, 0, 1, -4, -2, -1, -2, 4, 0, -1, -1, -3, -4, -1, -3, 4, -6}, /* * */ {0, -6, -6, -6, -6, -6, -6, -6, -6, -6, 0, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, 1}, } // # Matrix made by matblas from blosumn.iij // # * column uses minimum score // # BLOSUM Clustered Scoring Matrix in 1/2 Bit Units // # Blocks Database = /data/blocks_5.0/blocks.dat // # Cluster Percentage: >= -2 // # Entropy = 1.5172, Expected = -1.1484 // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 6 -2 -2 -3 -2 -1 -2 -1 -3 -3 -3 -2 -2 -4 -1 1 -1 -4 -4 -1 -3 -2 -1 -7 // R -2 7 -1 -3 -6 0 -2 -4 -1 -5 -4 2 -3 -4 -3 -2 -2 -5 -4 -4 -2 -1 -2 -7 // N -2 -1 7 1 -4 -1 -1 -2 0 -5 -5 -1 -4 -5 -4 0 -1 -6 -4 -4 4 -1 -2 -7 // D -3 -3 1 7 -6 -2 1 -3 -2 -6 -6 -2 -5 -5 -3 -2 -2 -7 -5 -5 4 0 -3 -7 // C -2 -6 -4 -6 9 -5 -7 -5 -6 -2 -3 -5 -3 -3 -5 -2 -2 -5 -4 -2 -5 -6 -4 -7 // Q -1 0 -1 -2 -5 7 1 -4 0 -4 -3 1 -1 -4 -2 -1 -2 -4 -3 -4 -1 4 -2 -7 // E -2 -2 -1 1 -7 1 6 -4 -1 -5 -5 0 -4 -5 -3 -1 -2 -5 -4 -4 0 5 -2 -7 // G -1 -4 -2 -3 -5 -4 -4 6 -4 -6 -6 -3 -5 -5 -4 -1 -3 -5 -6 -5 -2 -4 -3 -7 // H -3 -1 0 -2 -6 0 -1 -4 9 -5 -4 -2 -3 -3 -4 -2 -3 -4 1 -5 -1 -1 -3 -7 // I -3 -5 -5 -6 -2 -4 -5 -6 -5 6 1 -4 1 -1 -5 -4 -2 -4 -3 2 -5 -5 -2 -7 // L -3 -4 -5 -6 -3 -3 -5 -6 -4 1 5 -4 2 0 -5 -4 -3 -4 -3 0 -5 -4 -2 -7 // K -2 2 -1 -2 -5 1 0 -3 -2 -4 -4 6 -2 -4 -2 -1 -2 -6 -4 -4 -1 0 -2 -7 // M -2 -3 -4 -5 -3 -1 -4 -5 -3 1 2 -2 8 -1 -4 -3 -2 -2 -3 0 -5 -3 -2 -7 // F -4 -4 -5 -5 -3 -4 -5 -5 -3 -1 0 -4 -1 7 -5 -4 -3 0 3 -2 -5 -5 -3 -7 // P -1 -3 -4 -3 -5 -2 -3 -4 -4 -5 -5 -2 -4 -5 8 -2 -3 -5 -5 -4 -4 -3 -3 -7 // S 1 -2 0 -2 -2 -1 -1 -1 -2 -4 -4 -1 -3 -4 -2 6 1 -4 -3 -3 -1 -1 -1 -7 // T -1 -2 -1 -2 -2 -2 -2 -3 -3 -2 -3 -2 -2 -3 -3 1 6 -5 -3 -1 -2 -2 -1 -7 // W -4 -5 -6 -7 -5 -4 -5 -5 -4 -4 -4 -6 -2 0 -5 -4 -5 11 1 -3 -6 -4 -4 -7 // Y -4 -4 -4 -5 -4 -3 -4 -6 1 -3 -3 -4 -3 3 -5 -3 -3 1 8 -3 -4 -4 -3 -7 // V -1 -4 -4 -5 -2 -4 -4 -5 -5 2 0 -4 0 -2 -4 -3 -1 -3 -3 5 -5 -4 -2 -7 // B -3 -2 4 4 -5 -1 0 -2 -1 -5 -5 -1 -5 -5 -4 -1 -2 -6 -4 -5 4 1 -2 -7 // Z -2 -1 -1 0 -6 4 5 -4 -1 -5 -4 0 -3 -5 -3 -1 -2 -4 -4 -4 1 4 -2 -7 // X -1 -2 -2 -3 -4 -2 -2 -3 -3 -2 -2 -2 -2 -3 -3 -1 -1 -4 -3 -2 -2 -2 -2 -7 // * -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 1 // BLOSUMN = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 6, -3, -2, -3, -2, -4, -1, -3, -3, 0, -2, -3, -2, -2, -1, -1, -2, 1, -1, -1, -4, -1, -4, -2, -7}, /* B */ {0, -3, 4, -5, 4, 0, -5, -2, -1, -5, 0, -1, -5, -5, 4, -4, -1, -2, -1, -2, -5, -6, -2, -4, 1, -7}, /* C */ {0, -2, -5, 9, -6, -7, -3, -5, -6, -2, 0, -5, -3, -3, -4, -5, -5, -6, -2, -2, -2, -5, -4, -4, -6, -7}, /* D */ {0, -3, 4, -6, 7, 1, -5, -3, -2, -6, 0, -2, -6, -5, 1, -3, -2, -3, -2, -2, -5, -7, -3, -5, 0, -7}, /* E */ {0, -2, 0, -7, 1, 6, -5, -4, -1, -5, 0, 0, -5, -4, -1, -3, 1, -2, -1, -2, -4, -5, -2, -4, 5, -7}, /* F */ {0, -4, -5, -3, -5, -5, 7, -5, -3, -1, 0, -4, 0, -1, -5, -5, -4, -4, -4, -3, -2, 0, -3, 3, -5, -7}, /* G */ {0, -1, -2, -5, -3, -4, -5, 6, -4, -6, 0, -3, -6, -5, -2, -4, -4, -4, -1, -3, -5, -5, -3, -6, -4, -7}, /* H */ {0, -3, -1, -6, -2, -1, -3, -4, 9, -5, 0, -2, -4, -3, 0, -4, 0, -1, -2, -3, -5, -4, -3, 1, -1, -7}, /* I */ {0, -3, -5, -2, -6, -5, -1, -6, -5, 6, 0, -4, 1, 1, -5, -5, -4, -5, -4, -2, 2, -4, -2, -3, -5, -7}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -2, -1, -5, -2, 0, -4, -3, -2, -4, 0, 6, -4, -2, -1, -2, 1, 2, -1, -2, -4, -6, -2, -4, 0, -7}, /* L */ {0, -3, -5, -3, -6, -5, 0, -6, -4, 1, 0, -4, 5, 2, -5, -5, -3, -4, -4, -3, 0, -4, -2, -3, -4, -7}, /* M */ {0, -2, -5, -3, -5, -4, -1, -5, -3, 1, 0, -2, 2, 8, -4, -4, -1, -3, -3, -2, 0, -2, -2, -3, -3, -7}, /* N */ {0, -2, 4, -4, 1, -1, -5, -2, 0, -5, 0, -1, -5, -4, 7, -4, -1, -1, 0, -1, -4, -6, -2, -4, -1, -7}, /* P */ {0, -1, -4, -5, -3, -3, -5, -4, -4, -5, 0, -2, -5, -4, -4, 8, -2, -3, -2, -3, -4, -5, -3, -5, -3, -7}, /* Q */ {0, -1, -1, -5, -2, 1, -4, -4, 0, -4, 0, 1, -3, -1, -1, -2, 7, 0, -1, -2, -4, -4, -2, -3, 4, -7}, /* R */ {0, -2, -2, -6, -3, -2, -4, -4, -1, -5, 0, 2, -4, -3, -1, -3, 0, 7, -2, -2, -4, -5, -2, -4, -1, -7}, /* S */ {0, 1, -1, -2, -2, -1, -4, -1, -2, -4, 0, -1, -4, -3, 0, -2, -1, -2, 6, 1, -3, -4, -1, -3, -1, -7}, /* T */ {0, -1, -2, -2, -2, -2, -3, -3, -3, -2, 0, -2, -3, -2, -1, -3, -2, -2, 1, 6, -1, -5, -1, -3, -2, -7}, /* V */ {0, -1, -5, -2, -5, -4, -2, -5, -5, 2, 0, -4, 0, 0, -4, -4, -4, -4, -3, -1, 5, -3, -2, -3, -4, -7}, /* W */ {0, -4, -6, -5, -7, -5, 0, -5, -4, -4, 0, -6, -4, -2, -6, -5, -4, -5, -4, -5, -3, 11, -4, 1, -4, -7}, /* X */ {0, -1, -2, -4, -3, -2, -3, -3, -3, -2, 0, -2, -2, -2, -2, -3, -2, -2, -1, -1, -2, -4, -2, -3, -2, -7}, /* Y */ {0, -4, -4, -4, -5, -4, 3, -6, 1, -3, 0, -4, -3, -3, -4, -5, -3, -4, -3, -3, -3, 1, -3, 8, -4, -7}, /* Z */ {0, -2, 1, -6, 0, 5, -5, -4, -1, -5, 0, 0, -4, -3, -1, -3, 4, -1, -1, -2, -4, -4, -2, -4, 4, -7}, /* * */ {0, -7, -7, -7, -7, -7, -7, -7, -7, -7, 0, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 10 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -8.27, Entropy = 3.43 bits // # // # Lowest score = -23, Highest score = 13 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 7 -10 -7 -6 -10 -7 -5 -4 -11 -8 -9 -10 -8 -12 -4 -3 -3 -20 -11 -5 -6 -6 -6 -23 // R -10 9 -9 -17 -11 -4 -15 -13 -4 -8 -12 -2 -7 -12 -7 -6 -10 -5 -14 -11 -11 -7 -9 -23 // N -7 -9 9 -1 -17 -7 -5 -6 -2 -8 -10 -4 -15 -12 -9 -2 -5 -11 -7 -12 7 -6 -6 -23 // D -6 -17 -1 8 -21 -6 0 -6 -7 -11 -19 -8 -17 -21 -12 -7 -8 -21 -17 -11 7 -1 -9 -23 // C -10 -11 -17 -21 10 -20 -20 -13 -10 -9 -21 -20 -20 -19 -11 -6 -11 -22 -7 -9 -18 -20 -13 -23 // Q -7 -4 -7 -6 -20 9 -1 -10 -2 -11 -8 -6 -7 -19 -6 -8 -9 -19 -18 -10 -6 7 -8 -23 // E -5 -15 -5 0 -20 -1 8 -7 -9 -8 -13 -7 -10 -20 -9 -7 -9 -23 -11 -10 -1 7 -8 -23 // G -4 -13 -6 -6 -13 -10 -7 7 -13 -17 -14 -10 -12 -12 -10 -4 -10 -21 -20 -9 -6 -8 -8 -23 // H -11 -4 -2 -7 -10 -2 -9 -13 10 -13 -9 -10 -17 -9 -7 -9 -11 -10 -6 -9 -4 -4 -8 -23 // I -8 -8 -8 -11 -9 -11 -8 -17 -13 9 -4 -9 -3 -5 -12 -10 -5 -20 -9 -1 -9 -9 -8 -23 // L -9 -12 -10 -19 -21 -8 -13 -14 -9 -4 7 -11 -2 -5 -10 -12 -10 -9 -10 -5 -12 -10 -9 -23 // K -10 -2 -4 -8 -20 -6 -7 -10 -10 -9 -11 7 -4 -20 -10 -7 -6 -18 -12 -13 -5 -6 -8 -23 // M -8 -7 -15 -17 -20 -7 -10 -12 -17 -3 -2 -4 12 -7 -11 -8 -7 -19 -17 -4 -16 -8 -9 -23 // F -12 -12 -12 -21 -19 -19 -20 -12 -9 -5 -5 -20 -7 9 -13 -9 -12 -7 -1 -12 -14 -20 -12 -23 // P -4 -7 -9 -12 -11 -6 -9 -10 -7 -12 -10 -10 -11 -13 8 -4 -7 -20 -20 -9 -10 -7 -8 -23 // S -3 -6 -2 -7 -6 -8 -7 -4 -9 -10 -12 -7 -8 -9 -4 7 -2 -8 -10 -10 -4 -8 -6 -23 // T -3 -10 -5 -8 -11 -9 -9 -10 -11 -5 -10 -6 -7 -12 -7 -2 8 -19 -9 -6 -6 -9 -7 -23 // W -20 -5 -11 -21 -22 -19 -23 -21 -10 -20 -9 -18 -19 -7 -20 -8 -19 13 -8 -22 -13 -21 -16 -23 // Y -11 -14 -7 -17 -7 -18 -11 -20 -6 -9 -10 -12 -17 -1 -20 -10 -9 -8 10 -10 -9 -13 -11 -23 // V -5 -11 -12 -11 -9 -10 -10 -9 -9 -1 -5 -13 -4 -12 -9 -10 -6 -22 -10 8 -11 -10 -8 -23 // B -6 -11 7 7 -18 -6 -1 -6 -4 -9 -12 -5 -16 -14 -10 -4 -6 -13 -9 -11 7 -3 -8 -23 // Z -6 -7 -6 -1 -20 7 7 -8 -4 -9 -10 -6 -8 -20 -7 -8 -9 -21 -13 -10 -3 7 -8 -23 // X -6 -9 -6 -9 -13 -8 -8 -8 -8 -8 -9 -8 -9 -12 -8 -6 -7 -16 -11 -8 -8 -8 -8 -23 // * -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 -23 1 // PAM10 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 7, -6, -10, -6, -5, -12, -4, -11, -8, 0, -10, -9, -8, -7, -4, -7, -10, -3, -3, -5, -20, -6, -11, -6, -23}, /* B */ {0, -6, 7, -18, 7, -1, -14, -6, -4, -9, 0, -5, -12, -16, 7, -10, -6, -11, -4, -6, -11, -13, -8, -9, -3, -23}, /* C */ {0, -10, -18, 10, -21, -20, -19, -13, -10, -9, 0, -20, -21, -20, -17, -11, -20, -11, -6, -11, -9, -22, -13, -7, -20, -23}, /* D */ {0, -6, 7, -21, 8, 0, -21, -6, -7, -11, 0, -8, -19, -17, -1, -12, -6, -17, -7, -8, -11, -21, -9, -17, -1, -23}, /* E */ {0, -5, -1, -20, 0, 8, -20, -7, -9, -8, 0, -7, -13, -10, -5, -9, -1, -15, -7, -9, -10, -23, -8, -11, 7, -23}, /* F */ {0, -12, -14, -19, -21, -20, 9, -12, -9, -5, 0, -20, -5, -7, -12, -13, -19, -12, -9, -12, -12, -7, -12, -1, -20, -23}, /* G */ {0, -4, -6, -13, -6, -7, -12, 7, -13, -17, 0, -10, -14, -12, -6, -10, -10, -13, -4, -10, -9, -21, -8, -20, -8, -23}, /* H */ {0, -11, -4, -10, -7, -9, -9, -13, 10, -13, 0, -10, -9, -17, -2, -7, -2, -4, -9, -11, -9, -10, -8, -6, -4, -23}, /* I */ {0, -8, -9, -9, -11, -8, -5, -17, -13, 9, 0, -9, -4, -3, -8, -12, -11, -8, -10, -5, -1, -20, -8, -9, -9, -23}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -10, -5, -20, -8, -7, -20, -10, -10, -9, 0, 7, -11, -4, -4, -10, -6, -2, -7, -6, -13, -18, -8, -12, -6, -23}, /* L */ {0, -9, -12, -21, -19, -13, -5, -14, -9, -4, 0, -11, 7, -2, -10, -10, -8, -12, -12, -10, -5, -9, -9, -10, -10, -23}, /* M */ {0, -8, -16, -20, -17, -10, -7, -12, -17, -3, 0, -4, -2, 12, -15, -11, -7, -7, -8, -7, -4, -19, -9, -17, -8, -23}, /* N */ {0, -7, 7, -17, -1, -5, -12, -6, -2, -8, 0, -4, -10, -15, 9, -9, -7, -9, -2, -5, -12, -11, -6, -7, -6, -23}, /* P */ {0, -4, -10, -11, -12, -9, -13, -10, -7, -12, 0, -10, -10, -11, -9, 8, -6, -7, -4, -7, -9, -20, -8, -20, -7, -23}, /* Q */ {0, -7, -6, -20, -6, -1, -19, -10, -2, -11, 0, -6, -8, -7, -7, -6, 9, -4, -8, -9, -10, -19, -8, -18, 7, -23}, /* R */ {0, -10, -11, -11, -17, -15, -12, -13, -4, -8, 0, -2, -12, -7, -9, -7, -4, 9, -6, -10, -11, -5, -9, -14, -7, -23}, /* S */ {0, -3, -4, -6, -7, -7, -9, -4, -9, -10, 0, -7, -12, -8, -2, -4, -8, -6, 7, -2, -10, -8, -6, -10, -8, -23}, /* T */ {0, -3, -6, -11, -8, -9, -12, -10, -11, -5, 0, -6, -10, -7, -5, -7, -9, -10, -2, 8, -6, -19, -7, -9, -9, -23}, /* V */ {0, -5, -11, -9, -11, -10, -12, -9, -9, -1, 0, -13, -5, -4, -12, -9, -10, -11, -10, -6, 8, -22, -8, -10, -10, -23}, /* W */ {0, -20, -13, -22, -21, -23, -7, -21, -10, -20, 0, -18, -9, -19, -11, -20, -19, -5, -8, -19, -22, 13, -16, -8, -21, -23}, /* X */ {0, -6, -8, -13, -9, -8, -12, -8, -8, -8, 0, -8, -9, -9, -6, -8, -8, -9, -6, -7, -8, -16, -8, -11, -8, -23}, /* Y */ {0, -11, -9, -7, -17, -11, -1, -20, -6, -9, 0, -12, -10, -17, -7, -20, -18, -14, -10, -9, -10, -8, -11, 10, -13, -23}, /* Z */ {0, -6, -3, -20, -1, 7, -20, -8, -4, -9, 0, -6, -10, -8, -6, -7, 7, -7, -8, -9, -10, -21, -8, -13, 7, -23}, /* * */ {0, -23, -23, -23, -23, -23, -23, -23, -23, -23, 0, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 100 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -1.99, Entropy = 1.18 bits // # // # Lowest score = -9, Highest score = 12 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 4 -3 -1 -1 -3 -2 0 1 -3 -2 -3 -3 -2 -5 1 1 1 -7 -4 0 -1 -1 -1 -9 // R -3 7 -2 -4 -5 1 -3 -5 1 -3 -5 2 -1 -6 -1 -1 -3 1 -6 -4 -3 -1 -2 -9 // N -1 -2 5 3 -5 -1 1 -1 2 -3 -4 1 -4 -5 -2 1 0 -5 -2 -3 4 0 -1 -9 // D -1 -4 3 5 -7 0 4 -1 -1 -4 -6 -1 -5 -8 -3 -1 -2 -9 -6 -4 4 3 -2 -9 // C -3 -5 -5 -7 9 -8 -8 -5 -4 -3 -8 -8 -7 -7 -4 -1 -4 -9 -1 -3 -6 -8 -5 -9 // Q -2 1 -1 0 -8 6 2 -3 3 -4 -2 0 -2 -7 -1 -2 -2 -7 -6 -3 0 5 -2 -9 // E 0 -3 1 4 -8 2 5 -1 -1 -3 -5 -1 -4 -8 -2 -1 -2 -9 -5 -3 3 4 -2 -9 // G 1 -5 -1 -1 -5 -3 -1 5 -4 -5 -6 -3 -4 -6 -2 0 -2 -9 -7 -3 -1 -2 -2 -9 // H -3 1 2 -1 -4 3 -1 -4 7 -4 -3 -2 -4 -3 -1 -2 -3 -4 -1 -3 1 1 -2 -9 // I -2 -3 -3 -4 -3 -4 -3 -5 -4 6 1 -3 1 0 -4 -3 0 -7 -3 3 -3 -3 -2 -9 // L -3 -5 -4 -6 -8 -2 -5 -6 -3 1 6 -4 3 0 -4 -4 -3 -3 -3 0 -5 -4 -3 -9 // K -3 2 1 -1 -8 0 -1 -3 -2 -3 -4 5 0 -7 -3 -1 -1 -6 -6 -4 0 -1 -2 -9 // M -2 -1 -4 -5 -7 -2 -4 -4 -4 1 3 0 9 -1 -4 -3 -1 -6 -5 1 -4 -2 -2 -9 // F -5 -6 -5 -8 -7 -7 -8 -6 -3 0 0 -7 -1 8 -6 -4 -5 -1 4 -3 -6 -7 -4 -9 // P 1 -1 -2 -3 -4 -1 -2 -2 -1 -4 -4 -3 -4 -6 7 0 -1 -7 -7 -3 -3 -1 -2 -9 // S 1 -1 1 -1 -1 -2 -1 0 -2 -3 -4 -1 -3 -4 0 4 2 -3 -4 -2 0 -2 -1 -9 // T 1 -3 0 -2 -4 -2 -2 -2 -3 0 -3 -1 -1 -5 -1 2 5 -7 -4 0 -1 -2 -1 -9 // W -7 1 -5 -9 -9 -7 -9 -9 -4 -7 -3 -6 -6 -1 -7 -3 -7 12 -2 -9 -6 -8 -6 -9 // Y -4 -6 -2 -6 -1 -6 -5 -7 -1 -3 -3 -6 -5 4 -7 -4 -4 -2 9 -4 -4 -6 -4 -9 // V 0 -4 -3 -4 -3 -3 -3 -3 -3 3 0 -4 1 -3 -3 -2 0 -9 -4 5 -4 -3 -2 -9 // B -1 -3 4 4 -6 0 3 -1 1 -3 -5 0 -4 -6 -3 0 -1 -6 -4 -4 4 2 -2 -9 // Z -1 -1 0 3 -8 5 4 -2 1 -3 -4 -1 -2 -7 -1 -2 -2 -8 -6 -3 2 5 -2 -9 // X -1 -2 -1 -2 -5 -2 -2 -2 -2 -2 -3 -2 -2 -4 -2 -1 -1 -6 -4 -2 -2 -2 -2 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM100 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 4, -1, -3, -1, 0, -5, 1, -3, -2, 0, -3, -3, -2, -1, 1, -2, -3, 1, 1, 0, -7, -1, -4, -1, -9}, /* B */ {0, -1, 4, -6, 4, 3, -6, -1, 1, -3, 0, 0, -5, -4, 4, -3, 0, -3, 0, -1, -4, -6, -2, -4, 2, -9}, /* C */ {0, -3, -6, 9, -7, -8, -7, -5, -4, -3, 0, -8, -8, -7, -5, -4, -8, -5, -1, -4, -3, -9, -5, -1, -8, -9}, /* D */ {0, -1, 4, -7, 5, 4, -8, -1, -1, -4, 0, -1, -6, -5, 3, -3, 0, -4, -1, -2, -4, -9, -2, -6, 3, -9}, /* E */ {0, 0, 3, -8, 4, 5, -8, -1, -1, -3, 0, -1, -5, -4, 1, -2, 2, -3, -1, -2, -3, -9, -2, -5, 4, -9}, /* F */ {0, -5, -6, -7, -8, -8, 8, -6, -3, 0, 0, -7, 0, -1, -5, -6, -7, -6, -4, -5, -3, -1, -4, 4, -7, -9}, /* G */ {0, 1, -1, -5, -1, -1, -6, 5, -4, -5, 0, -3, -6, -4, -1, -2, -3, -5, 0, -2, -3, -9, -2, -7, -2, -9}, /* H */ {0, -3, 1, -4, -1, -1, -3, -4, 7, -4, 0, -2, -3, -4, 2, -1, 3, 1, -2, -3, -3, -4, -2, -1, 1, -9}, /* I */ {0, -2, -3, -3, -4, -3, 0, -5, -4, 6, 0, -3, 1, 1, -3, -4, -4, -3, -3, 0, 3, -7, -2, -3, -3, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -3, 0, -8, -1, -1, -7, -3, -2, -3, 0, 5, -4, 0, 1, -3, 0, 2, -1, -1, -4, -6, -2, -6, -1, -9}, /* L */ {0, -3, -5, -8, -6, -5, 0, -6, -3, 1, 0, -4, 6, 3, -4, -4, -2, -5, -4, -3, 0, -3, -3, -3, -4, -9}, /* M */ {0, -2, -4, -7, -5, -4, -1, -4, -4, 1, 0, 0, 3, 9, -4, -4, -2, -1, -3, -1, 1, -6, -2, -5, -2, -9}, /* N */ {0, -1, 4, -5, 3, 1, -5, -1, 2, -3, 0, 1, -4, -4, 5, -2, -1, -2, 1, 0, -3, -5, -1, -2, 0, -9}, /* P */ {0, 1, -3, -4, -3, -2, -6, -2, -1, -4, 0, -3, -4, -4, -2, 7, -1, -1, 0, -1, -3, -7, -2, -7, -1, -9}, /* Q */ {0, -2, 0, -8, 0, 2, -7, -3, 3, -4, 0, 0, -2, -2, -1, -1, 6, 1, -2, -2, -3, -7, -2, -6, 5, -9}, /* R */ {0, -3, -3, -5, -4, -3, -6, -5, 1, -3, 0, 2, -5, -1, -2, -1, 1, 7, -1, -3, -4, 1, -2, -6, -1, -9}, /* S */ {0, 1, 0, -1, -1, -1, -4, 0, -2, -3, 0, -1, -4, -3, 1, 0, -2, -1, 4, 2, -2, -3, -1, -4, -2, -9}, /* T */ {0, 1, -1, -4, -2, -2, -5, -2, -3, 0, 0, -1, -3, -1, 0, -1, -2, -3, 2, 5, 0, -7, -1, -4, -2, -9}, /* V */ {0, 0, -4, -3, -4, -3, -3, -3, -3, 3, 0, -4, 0, 1, -3, -3, -3, -4, -2, 0, 5, -9, -2, -4, -3, -9}, /* W */ {0, -7, -6, -9, -9, -9, -1, -9, -4, -7, 0, -6, -3, -6, -5, -7, -7, 1, -3, -7, -9, 12, -6, -2, -8, -9}, /* X */ {0, -1, -2, -5, -2, -2, -4, -2, -2, -2, 0, -2, -3, -2, -1, -2, -2, -2, -1, -1, -2, -6, -2, -4, -2, -9}, /* Y */ {0, -4, -4, -1, -6, -5, 4, -7, -1, -3, 0, -6, -3, -5, -2, -7, -6, -6, -4, -4, -4, -2, -4, 9, -6, -9}, /* Z */ {0, -1, 2, -8, 3, 4, -7, -2, 1, -3, 0, -1, -4, -2, 0, -1, 5, -1, -2, -2, -3, -8, -2, -6, 5, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 110 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -1.81, Entropy = 1.07 bits // # // # Lowest score = -9, Highest score = 12 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 3 -3 -1 -1 -3 -1 0 1 -3 -1 -3 -3 -2 -4 1 1 1 -7 -4 0 -1 -1 -1 -9 // R -3 7 -1 -4 -4 1 -3 -4 1 -3 -4 2 -1 -5 -1 -1 -2 1 -5 -4 -2 -1 -2 -9 // N -1 -1 4 2 -5 0 1 0 2 -2 -4 1 -3 -4 -2 1 0 -5 -2 -3 3 0 -1 -9 // D -1 -4 2 5 -7 1 4 0 0 -3 -6 -1 -5 -7 -3 -1 -1 -8 -5 -4 4 3 -2 -9 // C -3 -4 -5 -7 9 -7 -7 -5 -4 -3 -8 -7 -7 -6 -4 -1 -3 -9 -1 -3 -6 -7 -4 -9 // Q -1 1 0 1 -7 6 2 -3 3 -3 -2 0 -1 -6 0 -2 -2 -6 -6 -3 0 4 -1 -9 // E 0 -3 1 4 -7 2 5 -1 -1 -3 -5 -1 -3 -7 -2 -1 -2 -9 -5 -3 3 4 -2 -9 // G 1 -4 0 0 -5 -3 -1 5 -4 -4 -6 -3 -4 -5 -2 0 -2 -8 -7 -2 0 -2 -2 -9 // H -3 1 2 0 -4 3 -1 -4 7 -4 -3 -2 -4 -3 -1 -2 -3 -4 -1 -3 1 1 -2 -9 // I -1 -3 -2 -3 -3 -3 -3 -4 -4 6 1 -3 1 0 -4 -3 0 -7 -2 3 -3 -3 -2 -9 // L -3 -4 -4 -6 -8 -2 -5 -6 -3 1 6 -4 3 0 -4 -4 -3 -3 -3 1 -5 -3 -2 -9 // K -3 2 1 -1 -7 0 -1 -3 -2 -3 -4 5 0 -7 -3 -1 -1 -5 -5 -4 0 -1 -2 -9 // M -2 -1 -3 -5 -7 -1 -3 -4 -4 1 3 0 8 -1 -4 -2 -1 -6 -5 1 -4 -2 -2 -9 // F -4 -5 -4 -7 -6 -6 -7 -5 -3 0 0 -7 -1 8 -6 -4 -4 -1 4 -3 -6 -7 -4 -9 // P 1 -1 -2 -3 -4 0 -2 -2 -1 -4 -4 -3 -4 -6 6 0 -1 -7 -7 -2 -2 -1 -2 -9 // S 1 -1 1 -1 -1 -2 -1 0 -2 -3 -4 -1 -2 -4 0 3 2 -3 -3 -2 0 -1 -1 -9 // T 1 -2 0 -1 -3 -2 -2 -2 -3 0 -3 -1 -1 -4 -1 2 5 -6 -3 0 -1 -2 -1 -9 // W -7 1 -5 -8 -9 -6 -9 -8 -4 -7 -3 -5 -6 -1 -7 -3 -6 12 -2 -8 -6 -7 -5 -9 // Y -4 -5 -2 -5 -1 -6 -5 -7 -1 -2 -3 -5 -5 4 -7 -3 -3 -2 8 -4 -3 -5 -3 -9 // V 0 -4 -3 -4 -3 -3 -3 -2 -3 3 1 -4 1 -3 -2 -2 0 -8 -4 5 -3 -3 -2 -9 // B -1 -2 3 4 -6 0 3 0 1 -3 -5 0 -4 -6 -2 0 -1 -6 -3 -3 4 2 -1 -9 // Z -1 -1 0 3 -7 4 4 -2 1 -3 -3 -1 -2 -7 -1 -1 -2 -7 -5 -3 2 4 -2 -9 // X -1 -2 -1 -2 -4 -1 -2 -2 -2 -2 -2 -2 -2 -4 -2 -1 -1 -5 -3 -2 -1 -2 -2 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM110 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 3, -1, -3, -1, 0, -4, 1, -3, -1, 0, -3, -3, -2, -1, 1, -1, -3, 1, 1, 0, -7, -1, -4, -1, -9}, /* B */ {0, -1, 4, -6, 4, 3, -6, 0, 1, -3, 0, 0, -5, -4, 3, -2, 0, -2, 0, -1, -3, -6, -1, -3, 2, -9}, /* C */ {0, -3, -6, 9, -7, -7, -6, -5, -4, -3, 0, -7, -8, -7, -5, -4, -7, -4, -1, -3, -3, -9, -4, -1, -7, -9}, /* D */ {0, -1, 4, -7, 5, 4, -7, 0, 0, -3, 0, -1, -6, -5, 2, -3, 1, -4, -1, -1, -4, -8, -2, -5, 3, -9}, /* E */ {0, 0, 3, -7, 4, 5, -7, -1, -1, -3, 0, -1, -5, -3, 1, -2, 2, -3, -1, -2, -3, -9, -2, -5, 4, -9}, /* F */ {0, -4, -6, -6, -7, -7, 8, -5, -3, 0, 0, -7, 0, -1, -4, -6, -6, -5, -4, -4, -3, -1, -4, 4, -7, -9}, /* G */ {0, 1, 0, -5, 0, -1, -5, 5, -4, -4, 0, -3, -6, -4, 0, -2, -3, -4, 0, -2, -2, -8, -2, -7, -2, -9}, /* H */ {0, -3, 1, -4, 0, -1, -3, -4, 7, -4, 0, -2, -3, -4, 2, -1, 3, 1, -2, -3, -3, -4, -2, -1, 1, -9}, /* I */ {0, -1, -3, -3, -3, -3, 0, -4, -4, 6, 0, -3, 1, 1, -2, -4, -3, -3, -3, 0, 3, -7, -2, -2, -3, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -3, 0, -7, -1, -1, -7, -3, -2, -3, 0, 5, -4, 0, 1, -3, 0, 2, -1, -1, -4, -5, -2, -5, -1, -9}, /* L */ {0, -3, -5, -8, -6, -5, 0, -6, -3, 1, 0, -4, 6, 3, -4, -4, -2, -4, -4, -3, 1, -3, -2, -3, -3, -9}, /* M */ {0, -2, -4, -7, -5, -3, -1, -4, -4, 1, 0, 0, 3, 8, -3, -4, -1, -1, -2, -1, 1, -6, -2, -5, -2, -9}, /* N */ {0, -1, 3, -5, 2, 1, -4, 0, 2, -2, 0, 1, -4, -3, 4, -2, 0, -1, 1, 0, -3, -5, -1, -2, 0, -9}, /* P */ {0, 1, -2, -4, -3, -2, -6, -2, -1, -4, 0, -3, -4, -4, -2, 6, 0, -1, 0, -1, -2, -7, -2, -7, -1, -9}, /* Q */ {0, -1, 0, -7, 1, 2, -6, -3, 3, -3, 0, 0, -2, -1, 0, 0, 6, 1, -2, -2, -3, -6, -1, -6, 4, -9}, /* R */ {0, -3, -2, -4, -4, -3, -5, -4, 1, -3, 0, 2, -4, -1, -1, -1, 1, 7, -1, -2, -4, 1, -2, -5, -1, -9}, /* S */ {0, 1, 0, -1, -1, -1, -4, 0, -2, -3, 0, -1, -4, -2, 1, 0, -2, -1, 3, 2, -2, -3, -1, -3, -1, -9}, /* T */ {0, 1, -1, -3, -1, -2, -4, -2, -3, 0, 0, -1, -3, -1, 0, -1, -2, -2, 2, 5, 0, -6, -1, -3, -2, -9}, /* V */ {0, 0, -3, -3, -4, -3, -3, -2, -3, 3, 0, -4, 1, 1, -3, -2, -3, -4, -2, 0, 5, -8, -2, -4, -3, -9}, /* W */ {0, -7, -6, -9, -8, -9, -1, -8, -4, -7, 0, -5, -3, -6, -5, -7, -6, 1, -3, -6, -8, 12, -5, -2, -7, -9}, /* X */ {0, -1, -1, -4, -2, -2, -4, -2, -2, -2, 0, -2, -2, -2, -1, -2, -1, -2, -1, -1, -2, -5, -2, -3, -2, -9}, /* Y */ {0, -4, -3, -1, -5, -5, 4, -7, -1, -2, 0, -5, -3, -5, -2, -7, -6, -5, -3, -3, -4, -2, -3, 8, -5, -9}, /* Z */ {0, -1, 2, -7, 3, 4, -7, -2, 1, -3, 0, -1, -3, -2, 0, -1, 4, -1, -1, -2, -3, -7, -2, -5, 4, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 120 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -1.64, Entropy = 0.979 bits // # // # Lowest score = -8, Highest score = 12 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 3 -3 -1 0 -3 -1 0 1 -3 -1 -3 -2 -2 -4 1 1 1 -7 -4 0 0 -1 -1 -8 // R -3 6 -1 -3 -4 1 -3 -4 1 -2 -4 2 -1 -5 -1 -1 -2 1 -5 -3 -2 -1 -2 -8 // N -1 -1 4 2 -5 0 1 0 2 -2 -4 1 -3 -4 -2 1 0 -4 -2 -3 3 0 -1 -8 // D 0 -3 2 5 -7 1 3 0 0 -3 -5 -1 -4 -7 -3 0 -1 -8 -5 -3 4 3 -2 -8 // C -3 -4 -5 -7 9 -7 -7 -4 -4 -3 -7 -7 -6 -6 -4 0 -3 -8 -1 -3 -6 -7 -4 -8 // Q -1 1 0 1 -7 6 2 -3 3 -3 -2 0 -1 -6 0 -2 -2 -6 -5 -3 0 4 -1 -8 // E 0 -3 1 3 -7 2 5 -1 -1 -3 -4 -1 -3 -7 -2 -1 -2 -8 -5 -3 3 4 -1 -8 // G 1 -4 0 0 -4 -3 -1 5 -4 -4 -5 -3 -4 -5 -2 1 -1 -8 -6 -2 0 -2 -2 -8 // H -3 1 2 0 -4 3 -1 -4 7 -4 -3 -2 -4 -3 -1 -2 -3 -3 -1 -3 1 1 -2 -8 // I -1 -2 -2 -3 -3 -3 -3 -4 -4 6 1 -3 1 0 -3 -2 0 -6 -2 3 -3 -3 -1 -8 // L -3 -4 -4 -5 -7 -2 -4 -5 -3 1 5 -4 3 0 -3 -4 -3 -3 -2 1 -4 -3 -2 -8 // K -2 2 1 -1 -7 0 -1 -3 -2 -3 -4 5 0 -7 -2 -1 -1 -5 -5 -4 0 -1 -2 -8 // M -2 -1 -3 -4 -6 -1 -3 -4 -4 1 3 0 8 -1 -3 -2 -1 -6 -4 1 -4 -2 -2 -8 // F -4 -5 -4 -7 -6 -6 -7 -5 -3 0 0 -7 -1 8 -5 -3 -4 -1 4 -3 -5 -6 -3 -8 // P 1 -1 -2 -3 -4 0 -2 -2 -1 -3 -3 -2 -3 -5 6 1 -1 -7 -6 -2 -2 -1 -2 -8 // S 1 -1 1 0 0 -2 -1 1 -2 -2 -4 -1 -2 -3 1 3 2 -2 -3 -2 0 -1 -1 -8 // T 1 -2 0 -1 -3 -2 -2 -1 -3 0 -3 -1 -1 -4 -1 2 4 -6 -3 0 0 -2 -1 -8 // W -7 1 -4 -8 -8 -6 -8 -8 -3 -6 -3 -5 -6 -1 -7 -2 -6 12 -2 -8 -6 -7 -5 -8 // Y -4 -5 -2 -5 -1 -5 -5 -6 -1 -2 -2 -5 -4 4 -6 -3 -3 -2 8 -3 -3 -5 -3 -8 // V 0 -3 -3 -3 -3 -3 -3 -2 -3 3 1 -4 1 -3 -2 -2 0 -8 -3 5 -3 -3 -1 -8 // B 0 -2 3 4 -6 0 3 0 1 -3 -4 0 -4 -5 -2 0 0 -6 -3 -3 4 2 -1 -8 // Z -1 -1 0 3 -7 4 4 -2 1 -3 -3 -1 -2 -6 -1 -1 -2 -7 -5 -3 2 4 -1 -8 // X -1 -2 -1 -2 -4 -1 -1 -2 -2 -1 -2 -2 -2 -3 -2 -1 -1 -5 -3 -1 -1 -1 -2 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // PAM120 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 3, 0, -3, 0, 0, -4, 1, -3, -1, 0, -2, -3, -2, -1, 1, -1, -3, 1, 1, 0, -7, -1, -4, -1, -8}, /* B */ {0, 0, 4, -6, 4, 3, -5, 0, 1, -3, 0, 0, -4, -4, 3, -2, 0, -2, 0, 0, -3, -6, -1, -3, 2, -8}, /* C */ {0, -3, -6, 9, -7, -7, -6, -4, -4, -3, 0, -7, -7, -6, -5, -4, -7, -4, 0, -3, -3, -8, -4, -1, -7, -8}, /* D */ {0, 0, 4, -7, 5, 3, -7, 0, 0, -3, 0, -1, -5, -4, 2, -3, 1, -3, 0, -1, -3, -8, -2, -5, 3, -8}, /* E */ {0, 0, 3, -7, 3, 5, -7, -1, -1, -3, 0, -1, -4, -3, 1, -2, 2, -3, -1, -2, -3, -8, -1, -5, 4, -8}, /* F */ {0, -4, -5, -6, -7, -7, 8, -5, -3, 0, 0, -7, 0, -1, -4, -5, -6, -5, -3, -4, -3, -1, -3, 4, -6, -8}, /* G */ {0, 1, 0, -4, 0, -1, -5, 5, -4, -4, 0, -3, -5, -4, 0, -2, -3, -4, 1, -1, -2, -8, -2, -6, -2, -8}, /* H */ {0, -3, 1, -4, 0, -1, -3, -4, 7, -4, 0, -2, -3, -4, 2, -1, 3, 1, -2, -3, -3, -3, -2, -1, 1, -8}, /* I */ {0, -1, -3, -3, -3, -3, 0, -4, -4, 6, 0, -3, 1, 1, -2, -3, -3, -2, -2, 0, 3, -6, -1, -2, -3, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -2, 0, -7, -1, -1, -7, -3, -2, -3, 0, 5, -4, 0, 1, -2, 0, 2, -1, -1, -4, -5, -2, -5, -1, -8}, /* L */ {0, -3, -4, -7, -5, -4, 0, -5, -3, 1, 0, -4, 5, 3, -4, -3, -2, -4, -4, -3, 1, -3, -2, -2, -3, -8}, /* M */ {0, -2, -4, -6, -4, -3, -1, -4, -4, 1, 0, 0, 3, 8, -3, -3, -1, -1, -2, -1, 1, -6, -2, -4, -2, -8}, /* N */ {0, -1, 3, -5, 2, 1, -4, 0, 2, -2, 0, 1, -4, -3, 4, -2, 0, -1, 1, 0, -3, -4, -1, -2, 0, -8}, /* P */ {0, 1, -2, -4, -3, -2, -5, -2, -1, -3, 0, -2, -3, -3, -2, 6, 0, -1, 1, -1, -2, -7, -2, -6, -1, -8}, /* Q */ {0, -1, 0, -7, 1, 2, -6, -3, 3, -3, 0, 0, -2, -1, 0, 0, 6, 1, -2, -2, -3, -6, -1, -5, 4, -8}, /* R */ {0, -3, -2, -4, -3, -3, -5, -4, 1, -2, 0, 2, -4, -1, -1, -1, 1, 6, -1, -2, -3, 1, -2, -5, -1, -8}, /* S */ {0, 1, 0, 0, 0, -1, -3, 1, -2, -2, 0, -1, -4, -2, 1, 1, -2, -1, 3, 2, -2, -2, -1, -3, -1, -8}, /* T */ {0, 1, 0, -3, -1, -2, -4, -1, -3, 0, 0, -1, -3, -1, 0, -1, -2, -2, 2, 4, 0, -6, -1, -3, -2, -8}, /* V */ {0, 0, -3, -3, -3, -3, -3, -2, -3, 3, 0, -4, 1, 1, -3, -2, -3, -3, -2, 0, 5, -8, -1, -3, -3, -8}, /* W */ {0, -7, -6, -8, -8, -8, -1, -8, -3, -6, 0, -5, -3, -6, -4, -7, -6, 1, -2, -6, -8, 12, -5, -2, -7, -8}, /* X */ {0, -1, -1, -4, -2, -1, -3, -2, -2, -1, 0, -2, -2, -2, -1, -2, -1, -2, -1, -1, -1, -5, -2, -3, -1, -8}, /* Y */ {0, -4, -3, -1, -5, -5, 4, -6, -1, -2, 0, -5, -2, -4, -2, -6, -5, -5, -3, -3, -3, -2, -3, 8, -5, -8}, /* Z */ {0, -1, 2, -7, 3, 4, -6, -2, 1, -3, 0, -1, -3, -2, 0, -1, 4, -1, -1, -2, -3, -7, -1, -5, 4, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 120 substitution matrix, scale = 0.0693200 // # // # Expected score = -8.22, Entropy = 0.979 bits // # // # Lowest score = -42, Highest score = 62 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 16 -14 -3 -2 -14 -6 -1 3 -13 -6 -14 -12 -9 -21 3 6 6 -33 -20 0 -2 -3 -4 -42 // R -14 32 -6 -16 -20 3 -14 -20 4 -12 -20 12 -5 -25 -4 -4 -10 4 -26 -17 -11 -4 -9 -42 // N -3 -6 20 12 -23 -1 4 -2 8 -12 -18 4 -15 -21 -8 5 1 -22 -10 -15 16 2 -4 -42 // D -2 -16 12 25 -33 4 17 -2 -2 -16 -27 -5 -21 -35 -13 -2 -6 -39 -26 -17 20 13 -8 -42 // C -14 -20 -23 -33 44 -33 -33 -22 -20 -14 -37 -34 -32 -29 -18 -2 -16 -42 -4 -13 -28 -33 -20 -42 // Q -6 3 -1 4 -33 28 12 -13 13 -16 -11 0 -7 -30 -2 -8 -9 -30 -26 -14 2 21 -6 -42 // E -1 -14 4 17 -33 12 24 -4 -3 -13 -22 -5 -15 -34 -9 -5 -8 -42 -24 -13 13 20 -7 -42 // G 3 -20 -2 -2 -22 -13 -4 25 -18 -20 -26 -15 -19 -26 -9 3 -7 -39 -32 -11 -2 -8 -9 -42 // H -13 4 8 -2 -20 13 -3 -18 35 -19 -13 -8 -19 -13 -5 -9 -13 -17 -3 -15 4 6 -8 -42 // I -6 -12 -12 -16 -14 -16 -13 -20 -19 28 6 -13 7 1 -17 -12 -1 -32 -11 17 -14 -14 -7 -42 // L -14 -20 -18 -27 -37 -11 -22 -26 -13 6 27 -19 13 2 -17 -19 -13 -13 -12 3 -22 -16 -11 -42 // K -12 12 4 -5 -34 0 -5 -15 -8 -13 -19 25 2 -33 -12 -4 -3 -24 -25 -19 0 -3 -8 -42 // M -9 -5 -15 -21 -32 -7 -15 -19 -19 7 13 2 40 -4 -16 -11 -6 -28 -21 5 -18 -11 -8 -42 // F -21 -25 -21 -35 -29 -30 -34 -26 -13 1 2 -33 -4 38 -26 -17 -20 -5 22 -13 -27 -32 -17 -42 // P 3 -4 -8 -13 -18 -2 -9 -9 -5 -17 -17 -12 -16 -26 31 3 -3 -33 -31 -11 -11 -5 -8 -42 // S 6 -4 5 -2 -2 -8 -5 3 -9 -12 -19 -4 -11 -17 3 16 8 -12 -16 -10 1 -6 -3 -42 // T 6 -10 1 -6 -16 -9 -8 -7 -13 -1 -13 -3 -6 -20 -3 8 21 -30 -16 -1 -2 -9 -4 -42 // W -33 4 -22 -39 -42 -30 -42 -39 -17 -32 -13 -24 -28 -5 -33 -12 -30 62 -8 -38 -29 -35 -25 -42 // Y -20 -26 -10 -26 -4 -26 -24 -32 -3 -11 -12 -25 -21 22 -31 -16 -16 -8 42 -17 -16 -25 -16 -42 // V 0 -17 -15 -17 -13 -14 -13 -11 -15 17 3 -19 5 -13 -11 -10 -1 -38 -17 25 -16 -14 -7 -42 // B -2 -11 16 20 -28 2 13 -2 4 -14 -22 0 -18 -27 -11 1 -2 -29 -16 -16 18 9 -6 -42 // Z -3 -4 2 13 -33 21 20 -8 6 -14 -16 -3 -11 -32 -5 -6 -9 -35 -25 -14 9 21 -7 -42 // X -4 -9 -4 -8 -20 -6 -7 -9 -8 -7 -11 -8 -8 -17 -8 -3 -4 -25 -16 -7 -6 -7 -8 -42 // * -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 1 // PAM120_cdi = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 16, -2, -14, -2, -1, -21, 3, -13, -6, 0, -12, -14, -9, -3, 3, -6, -14, 6, 6, 0, -33, -4, -20, -3, -42}, /* B */ {0, -2, 18, -28, 20, 13, -27, -2, 4, -14, 0, 0, -22, -18, 16, -11, 2, -11, 1, -2, -16, -29, -6, -16, 9, -42}, /* C */ {0, -14, -28, 44, -33, -33, -29, -22, -20, -14, 0, -34, -37, -32, -23, -18, -33, -20, -2, -16, -13, -42, -20, -4, -33, -42}, /* D */ {0, -2, 20, -33, 25, 17, -35, -2, -2, -16, 0, -5, -27, -21, 12, -13, 4, -16, -2, -6, -17, -39, -8, -26, 13, -42}, /* E */ {0, -1, 13, -33, 17, 24, -34, -4, -3, -13, 0, -5, -22, -15, 4, -9, 12, -14, -5, -8, -13, -42, -7, -24, 20, -42}, /* F */ {0, -21, -27, -29, -35, -34, 38, -26, -13, 1, 0, -33, 2, -4, -21, -26, -30, -25, -17, -20, -13, -5, -17, 22, -32, -42}, /* G */ {0, 3, -2, -22, -2, -4, -26, 25, -18, -20, 0, -15, -26, -19, -2, -9, -13, -20, 3, -7, -11, -39, -9, -32, -8, -42}, /* H */ {0, -13, 4, -20, -2, -3, -13, -18, 35, -19, 0, -8, -13, -19, 8, -5, 13, 4, -9, -13, -15, -17, -8, -3, 6, -42}, /* I */ {0, -6, -14, -14, -16, -13, 1, -20, -19, 28, 0, -13, 6, 7, -12, -17, -16, -12, -12, -1, 17, -32, -7, -11, -14, -42}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -12, 0, -34, -5, -5, -33, -15, -8, -13, 0, 25, -19, 2, 4, -12, 0, 12, -4, -3, -19, -24, -8, -25, -3, -42}, /* L */ {0, -14, -22, -37, -27, -22, 2, -26, -13, 6, 0, -19, 27, 13, -18, -17, -11, -20, -19, -13, 3, -13, -11, -12, -16, -42}, /* M */ {0, -9, -18, -32, -21, -15, -4, -19, -19, 7, 0, 2, 13, 40, -15, -16, -7, -5, -11, -6, 5, -28, -8, -21, -11, -42}, /* N */ {0, -3, 16, -23, 12, 4, -21, -2, 8, -12, 0, 4, -18, -15, 20, -8, -1, -6, 5, 1, -15, -22, -4, -10, 2, -42}, /* P */ {0, 3, -11, -18, -13, -9, -26, -9, -5, -17, 0, -12, -17, -16, -8, 31, -2, -4, 3, -3, -11, -33, -8, -31, -5, -42}, /* Q */ {0, -6, 2, -33, 4, 12, -30, -13, 13, -16, 0, 0, -11, -7, -1, -2, 28, 3, -8, -9, -14, -30, -6, -26, 21, -42}, /* R */ {0, -14, -11, -20, -16, -14, -25, -20, 4, -12, 0, 12, -20, -5, -6, -4, 3, 32, -4, -10, -17, 4, -9, -26, -4, -42}, /* S */ {0, 6, 1, -2, -2, -5, -17, 3, -9, -12, 0, -4, -19, -11, 5, 3, -8, -4, 16, 8, -10, -12, -3, -16, -6, -42}, /* T */ {0, 6, -2, -16, -6, -8, -20, -7, -13, -1, 0, -3, -13, -6, 1, -3, -9, -10, 8, 21, -1, -30, -4, -16, -9, -42}, /* V */ {0, 0, -16, -13, -17, -13, -13, -11, -15, 17, 0, -19, 3, 5, -15, -11, -14, -17, -10, -1, 25, -38, -7, -17, -14, -42}, /* W */ {0, -33, -29, -42, -39, -42, -5, -39, -17, -32, 0, -24, -13, -28, -22, -33, -30, 4, -12, -30, -38, 62, -25, -8, -35, -42}, /* X */ {0, -4, -6, -20, -8, -7, -17, -9, -8, -7, 0, -8, -11, -8, -4, -8, -6, -9, -3, -4, -7, -25, -8, -16, -7, -42}, /* Y */ {0, -20, -16, -4, -26, -24, 22, -32, -3, -11, 0, -25, -12, -21, -10, -31, -26, -26, -16, -16, -17, -8, -16, 42, -25, -42}, /* Z */ {0, -3, 9, -33, 13, 20, -32, -8, 6, -14, 0, -3, -16, -11, 2, -5, 21, -4, -6, -9, -14, -35, -7, -25, 21, -42}, /* * */ {0, -42, -42, -42, -42, -42, -42, -42, -42, -42, 0, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 130 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -1.48, Entropy = 0.895 bits // # // # Lowest score = -8, Highest score = 12 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 3 -3 0 0 -3 -1 0 1 -2 -1 -3 -2 -2 -4 1 1 1 -6 -4 0 0 0 -1 -8 // R -3 6 -1 -3 -4 1 -3 -4 1 -2 -4 2 -1 -5 -1 -1 -2 1 -5 -3 -2 -1 -2 -8 // N 0 -1 4 2 -4 0 1 0 2 -2 -3 1 -3 -4 -1 1 0 -4 -2 -3 3 0 -1 -8 // D 0 -3 2 5 -6 1 3 0 0 -3 -5 -1 -4 -7 -2 0 -1 -7 -5 -3 4 3 -1 -8 // C -3 -4 -4 -6 9 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -3 -8 -1 -2 -5 -6 -4 -8 // Q -1 1 0 1 -6 5 2 -2 3 -3 -2 0 -1 -6 0 -1 -2 -6 -5 -3 0 4 -1 -8 // E 0 -3 1 3 -6 2 5 -1 0 -2 -4 -1 -3 -6 -2 -1 -1 -8 -5 -3 2 4 -1 -8 // G 1 -4 0 0 -4 -2 -1 5 -3 -4 -5 -3 -4 -5 -2 1 -1 -7 -6 -2 0 -1 -2 -8 // H -2 1 2 0 -4 3 0 -3 7 -3 -3 -1 -3 -2 -1 -2 -2 -3 0 -3 1 1 -1 -8 // I -1 -2 -2 -3 -3 -3 -2 -4 -3 5 1 -2 2 0 -3 -2 0 -6 -2 3 -3 -3 -1 -8 // L -3 -4 -3 -5 -7 -2 -4 -5 -3 1 5 -4 3 1 -3 -4 -2 -2 -2 1 -4 -3 -2 -8 // K -2 2 1 -1 -6 0 -1 -3 -1 -2 -4 5 0 -6 -2 -1 0 -5 -5 -4 0 0 -1 -8 // M -2 -1 -3 -4 -6 -1 -3 -4 -3 2 3 0 8 -1 -3 -2 -1 -5 -4 1 -3 -2 -1 -8 // F -4 -5 -4 -7 -5 -6 -6 -5 -2 0 1 -6 -1 7 -5 -3 -4 -1 4 -2 -5 -6 -3 -8 // P 1 -1 -1 -2 -3 0 -2 -2 -1 -3 -3 -2 -3 -5 6 1 -1 -6 -6 -2 -2 -1 -1 -8 // S 1 -1 1 0 0 -1 -1 1 -2 -2 -4 -1 -2 -3 1 3 2 -2 -3 -2 0 -1 -1 -8 // T 1 -2 0 -1 -3 -2 -1 -1 -2 0 -2 0 -1 -4 -1 2 4 -6 -3 0 0 -2 -1 -8 // W -6 1 -4 -7 -8 -6 -8 -7 -3 -6 -2 -5 -5 -1 -6 -2 -6 12 -1 -7 -5 -7 -5 -8 // Y -4 -5 -2 -5 -1 -5 -5 -6 0 -2 -2 -5 -4 4 -6 -3 -3 -1 8 -3 -3 -5 -3 -8 // V 0 -3 -3 -3 -2 -3 -3 -2 -3 3 1 -4 1 -2 -2 -2 0 -7 -3 5 -3 -3 -1 -8 // B 0 -2 3 4 -5 0 2 0 1 -3 -4 0 -3 -5 -2 0 0 -5 -3 -3 3 2 -1 -8 // Z 0 -1 0 3 -6 4 4 -1 1 -3 -3 0 -2 -6 -1 -1 -2 -7 -5 -3 2 4 -1 -8 // X -1 -2 -1 -1 -4 -1 -1 -2 -1 -1 -2 -1 -1 -3 -1 -1 -1 -5 -3 -1 -1 -1 -1 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // PAM130 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 3, 0, -3, 0, 0, -4, 1, -2, -1, 0, -2, -3, -2, 0, 1, -1, -3, 1, 1, 0, -6, -1, -4, 0, -8}, /* B */ {0, 0, 3, -5, 4, 2, -5, 0, 1, -3, 0, 0, -4, -3, 3, -2, 0, -2, 0, 0, -3, -5, -1, -3, 2, -8}, /* C */ {0, -3, -5, 9, -6, -6, -5, -4, -4, -3, 0, -6, -7, -6, -4, -3, -6, -4, 0, -3, -2, -8, -4, -1, -6, -8}, /* D */ {0, 0, 4, -6, 5, 3, -7, 0, 0, -3, 0, -1, -5, -4, 2, -2, 1, -3, 0, -1, -3, -7, -1, -5, 3, -8}, /* E */ {0, 0, 2, -6, 3, 5, -6, -1, 0, -2, 0, -1, -4, -3, 1, -2, 2, -3, -1, -1, -3, -8, -1, -5, 4, -8}, /* F */ {0, -4, -5, -5, -7, -6, 7, -5, -2, 0, 0, -6, 1, -1, -4, -5, -6, -5, -3, -4, -2, -1, -3, 4, -6, -8}, /* G */ {0, 1, 0, -4, 0, -1, -5, 5, -3, -4, 0, -3, -5, -4, 0, -2, -2, -4, 1, -1, -2, -7, -2, -6, -1, -8}, /* H */ {0, -2, 1, -4, 0, 0, -2, -3, 7, -3, 0, -1, -3, -3, 2, -1, 3, 1, -2, -2, -3, -3, -1, 0, 1, -8}, /* I */ {0, -1, -3, -3, -3, -2, 0, -4, -3, 5, 0, -2, 1, 2, -2, -3, -3, -2, -2, 0, 3, -6, -1, -2, -3, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -2, 0, -6, -1, -1, -6, -3, -1, -2, 0, 5, -4, 0, 1, -2, 0, 2, -1, 0, -4, -5, -1, -5, 0, -8}, /* L */ {0, -3, -4, -7, -5, -4, 1, -5, -3, 1, 0, -4, 5, 3, -3, -3, -2, -4, -4, -2, 1, -2, -2, -2, -3, -8}, /* M */ {0, -2, -3, -6, -4, -3, -1, -4, -3, 2, 0, 0, 3, 8, -3, -3, -1, -1, -2, -1, 1, -5, -1, -4, -2, -8}, /* N */ {0, 0, 3, -4, 2, 1, -4, 0, 2, -2, 0, 1, -3, -3, 4, -1, 0, -1, 1, 0, -3, -4, -1, -2, 0, -8}, /* P */ {0, 1, -2, -3, -2, -2, -5, -2, -1, -3, 0, -2, -3, -3, -1, 6, 0, -1, 1, -1, -2, -6, -1, -6, -1, -8}, /* Q */ {0, -1, 0, -6, 1, 2, -6, -2, 3, -3, 0, 0, -2, -1, 0, 0, 5, 1, -1, -2, -3, -6, -1, -5, 4, -8}, /* R */ {0, -3, -2, -4, -3, -3, -5, -4, 1, -2, 0, 2, -4, -1, -1, -1, 1, 6, -1, -2, -3, 1, -2, -5, -1, -8}, /* S */ {0, 1, 0, 0, 0, -1, -3, 1, -2, -2, 0, -1, -4, -2, 1, 1, -1, -1, 3, 2, -2, -2, -1, -3, -1, -8}, /* T */ {0, 1, 0, -3, -1, -1, -4, -1, -2, 0, 0, 0, -2, -1, 0, -1, -2, -2, 2, 4, 0, -6, -1, -3, -2, -8}, /* V */ {0, 0, -3, -2, -3, -3, -2, -2, -3, 3, 0, -4, 1, 1, -3, -2, -3, -3, -2, 0, 5, -7, -1, -3, -3, -8}, /* W */ {0, -6, -5, -8, -7, -8, -1, -7, -3, -6, 0, -5, -2, -5, -4, -6, -6, 1, -2, -6, -7, 12, -5, -1, -7, -8}, /* X */ {0, -1, -1, -4, -1, -1, -3, -2, -1, -1, 0, -1, -2, -1, -1, -1, -1, -2, -1, -1, -1, -5, -1, -3, -1, -8}, /* Y */ {0, -4, -3, -1, -5, -5, 4, -6, 0, -2, 0, -5, -2, -4, -2, -6, -5, -5, -3, -3, -3, -1, -3, 8, -5, -8}, /* Z */ {0, 0, 2, -6, 3, 4, -6, -1, 1, -3, 0, 0, -3, -2, 0, -1, 4, -1, -1, -2, -3, -7, -1, -5, 4, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 140 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -1.35, Entropy = 0.820 bits // # // # Lowest score = -8, Highest score = 12 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 3 -2 0 0 -2 -1 0 1 -2 -1 -2 -2 -2 -4 1 1 1 -6 -4 0 0 0 -1 -8 // R -2 6 -1 -3 -4 1 -2 -4 1 -2 -4 3 -1 -5 -1 -1 -2 1 -5 -3 -2 -1 -1 -8 // N 0 -1 3 2 -4 0 1 0 2 -2 -3 1 -2 -4 -1 1 0 -4 -2 -2 3 1 -1 -8 // D 0 -3 2 4 -6 1 3 0 0 -3 -5 -1 -4 -6 -2 0 -1 -7 -5 -3 4 3 -1 -8 // C -2 -4 -4 -6 9 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -3 -8 -1 -2 -5 -6 -4 -8 // Q -1 1 0 1 -6 5 2 -2 3 -3 -2 0 -1 -5 0 -1 -2 -5 -5 -2 1 4 -1 -8 // E 0 -2 1 3 -6 2 4 -1 0 -2 -4 -1 -3 -6 -1 -1 -1 -8 -4 -2 2 4 -1 -8 // G 1 -4 0 0 -4 -2 -1 5 -3 -4 -5 -3 -3 -5 -1 1 -1 -7 -6 -2 0 -1 -1 -8 // H -2 1 2 0 -4 3 0 -3 6 -3 -2 -1 -3 -2 -1 -1 -2 -3 0 -3 1 1 -1 -8 // I -1 -2 -2 -3 -3 -3 -2 -4 -3 5 1 -2 2 0 -3 -2 0 -6 -2 3 -2 -2 -1 -8 // L -2 -4 -3 -5 -7 -2 -4 -5 -2 1 5 -3 3 1 -3 -3 -2 -2 -2 1 -4 -3 -2 -8 // K -2 3 1 -1 -6 0 -1 -3 -1 -2 -3 5 0 -6 -2 -1 0 -4 -5 -3 0 0 -1 -8 // M -2 -1 -2 -4 -6 -1 -3 -3 -3 2 3 0 7 -1 -3 -2 -1 -5 -4 1 -3 -2 -1 -8 // F -4 -5 -4 -6 -5 -5 -6 -5 -2 0 1 -6 -1 7 -5 -3 -4 -1 4 -2 -5 -6 -3 -8 // P 1 -1 -1 -2 -3 0 -1 -1 -1 -3 -3 -2 -3 -5 6 1 0 -6 -6 -2 -2 -1 -1 -8 // S 1 -1 1 0 0 -1 -1 1 -1 -2 -3 -1 -2 -3 1 3 2 -2 -3 -2 0 -1 0 -8 // T 1 -2 0 -1 -3 -2 -1 -1 -2 0 -2 0 -1 -4 0 2 4 -5 -3 0 0 -1 -1 -8 // W -6 1 -4 -7 -8 -5 -8 -7 -3 -6 -2 -4 -5 -1 -6 -2 -5 12 -1 -7 -5 -6 -5 -8 // Y -4 -5 -2 -5 -1 -5 -4 -6 0 -2 -2 -5 -4 4 -6 -3 -3 -1 8 -3 -3 -4 -3 -8 // V 0 -3 -2 -3 -2 -2 -2 -2 -3 3 1 -3 1 -2 -2 -2 0 -7 -3 5 -3 -2 -1 -8 // B 0 -2 3 4 -5 1 2 0 1 -2 -4 0 -3 -5 -2 0 0 -5 -3 -3 3 2 -1 -8 // Z 0 -1 1 3 -6 4 4 -1 1 -2 -3 0 -2 -6 -1 -1 -1 -6 -4 -2 2 4 -1 -8 // X -1 -1 -1 -1 -4 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 -1 -5 -3 -1 -1 -1 -1 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // PAM140 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 3, 0, -2, 0, 0, -4, 1, -2, -1, 0, -2, -2, -2, 0, 1, -1, -2, 1, 1, 0, -6, -1, -4, 0, -8}, /* B */ {0, 0, 3, -5, 4, 2, -5, 0, 1, -2, 0, 0, -4, -3, 3, -2, 1, -2, 0, 0, -3, -5, -1, -3, 2, -8}, /* C */ {0, -2, -5, 9, -6, -6, -5, -4, -4, -3, 0, -6, -7, -6, -4, -3, -6, -4, 0, -3, -2, -8, -4, -1, -6, -8}, /* D */ {0, 0, 4, -6, 4, 3, -6, 0, 0, -3, 0, -1, -5, -4, 2, -2, 1, -3, 0, -1, -3, -7, -1, -5, 3, -8}, /* E */ {0, 0, 2, -6, 3, 4, -6, -1, 0, -2, 0, -1, -4, -3, 1, -1, 2, -2, -1, -1, -2, -8, -1, -4, 4, -8}, /* F */ {0, -4, -5, -5, -6, -6, 7, -5, -2, 0, 0, -6, 1, -1, -4, -5, -5, -5, -3, -4, -2, -1, -3, 4, -6, -8}, /* G */ {0, 1, 0, -4, 0, -1, -5, 5, -3, -4, 0, -3, -5, -3, 0, -1, -2, -4, 1, -1, -2, -7, -1, -6, -1, -8}, /* H */ {0, -2, 1, -4, 0, 0, -2, -3, 6, -3, 0, -1, -2, -3, 2, -1, 3, 1, -1, -2, -3, -3, -1, 0, 1, -8}, /* I */ {0, -1, -2, -3, -3, -2, 0, -4, -3, 5, 0, -2, 1, 2, -2, -3, -3, -2, -2, 0, 3, -6, -1, -2, -2, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -2, 0, -6, -1, -1, -6, -3, -1, -2, 0, 5, -3, 0, 1, -2, 0, 3, -1, 0, -3, -4, -1, -5, 0, -8}, /* L */ {0, -2, -4, -7, -5, -4, 1, -5, -2, 1, 0, -3, 5, 3, -3, -3, -2, -4, -3, -2, 1, -2, -2, -2, -3, -8}, /* M */ {0, -2, -3, -6, -4, -3, -1, -3, -3, 2, 0, 0, 3, 7, -2, -3, -1, -1, -2, -1, 1, -5, -1, -4, -2, -8}, /* N */ {0, 0, 3, -4, 2, 1, -4, 0, 2, -2, 0, 1, -3, -2, 3, -1, 0, -1, 1, 0, -2, -4, -1, -2, 1, -8}, /* P */ {0, 1, -2, -3, -2, -1, -5, -1, -1, -3, 0, -2, -3, -3, -1, 6, 0, -1, 1, 0, -2, -6, -1, -6, -1, -8}, /* Q */ {0, -1, 1, -6, 1, 2, -5, -2, 3, -3, 0, 0, -2, -1, 0, 0, 5, 1, -1, -2, -2, -5, -1, -5, 4, -8}, /* R */ {0, -2, -2, -4, -3, -2, -5, -4, 1, -2, 0, 3, -4, -1, -1, -1, 1, 6, -1, -2, -3, 1, -1, -5, -1, -8}, /* S */ {0, 1, 0, 0, 0, -1, -3, 1, -1, -2, 0, -1, -3, -2, 1, 1, -1, -1, 3, 2, -2, -2, 0, -3, -1, -8}, /* T */ {0, 1, 0, -3, -1, -1, -4, -1, -2, 0, 0, 0, -2, -1, 0, 0, -2, -2, 2, 4, 0, -5, -1, -3, -1, -8}, /* V */ {0, 0, -3, -2, -3, -2, -2, -2, -3, 3, 0, -3, 1, 1, -2, -2, -2, -3, -2, 0, 5, -7, -1, -3, -2, -8}, /* W */ {0, -6, -5, -8, -7, -8, -1, -7, -3, -6, 0, -4, -2, -5, -4, -6, -5, 1, -2, -5, -7, 12, -5, -1, -6, -8}, /* X */ {0, -1, -1, -4, -1, -1, -3, -1, -1, -1, 0, -1, -2, -1, -1, -1, -1, -1, 0, -1, -1, -5, -1, -3, -1, -8}, /* Y */ {0, -4, -3, -1, -5, -4, 4, -6, 0, -2, 0, -5, -2, -4, -2, -6, -5, -5, -3, -3, -3, -1, -3, 8, -4, -8}, /* Z */ {0, 0, 2, -6, 3, 4, -6, -1, 1, -2, 0, 0, -3, -2, 1, -1, 4, -1, -1, -1, -2, -6, -1, -4, 4, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 150 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -1.25, Entropy = 0.754 bits // # // # Lowest score = -7, Highest score = 12 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 3 -2 0 0 -2 -1 0 1 -2 -1 -2 -2 -1 -4 1 1 1 -6 -3 0 0 0 -1 -7 // R -2 6 -1 -2 -4 1 -2 -3 1 -2 -3 3 -1 -4 -1 -1 -2 1 -4 -3 -2 0 -1 -7 // N 0 -1 3 2 -4 0 1 0 2 -2 -3 1 -2 -4 -1 1 0 -4 -2 -2 3 1 -1 -7 // D 0 -2 2 4 -6 1 3 0 0 -3 -5 -1 -3 -6 -2 0 -1 -7 -4 -3 3 2 -1 -7 // C -2 -4 -4 -6 9 -6 -6 -4 -3 -2 -6 -6 -5 -5 -3 0 -3 -7 0 -2 -5 -6 -3 -7 // Q -1 1 0 1 -6 5 2 -2 3 -3 -2 0 -1 -5 0 -1 -1 -5 -4 -2 1 4 -1 -7 // E 0 -2 1 3 -6 2 4 -1 0 -2 -4 -1 -2 -6 -1 -1 -1 -7 -4 -2 2 4 -1 -7 // G 1 -3 0 0 -4 -2 -1 4 -3 -3 -4 -2 -3 -5 -1 1 -1 -7 -5 -2 0 -1 -1 -7 // H -2 1 2 0 -3 3 0 -3 6 -3 -2 -1 -3 -2 -1 -1 -2 -3 0 -3 1 1 -1 -7 // I -1 -2 -2 -3 -2 -3 -2 -3 -3 5 1 -2 2 0 -3 -2 0 -5 -2 3 -2 -2 -1 -7 // L -2 -3 -3 -5 -6 -2 -4 -4 -2 1 5 -3 3 1 -3 -3 -2 -2 -2 1 -4 -3 -2 -7 // K -2 3 1 -1 -6 0 -1 -2 -1 -2 -3 4 0 -6 -2 -1 0 -4 -4 -3 0 0 -1 -7 // M -1 -1 -2 -3 -5 -1 -2 -3 -3 2 3 0 7 -1 -3 -2 -1 -5 -3 1 -3 -2 -1 -7 // F -4 -4 -4 -6 -5 -5 -6 -5 -2 0 1 -6 -1 7 -5 -3 -3 -1 5 -2 -5 -5 -3 -7 // P 1 -1 -1 -2 -3 0 -1 -1 -1 -3 -3 -2 -3 -5 6 1 0 -6 -5 -2 -2 -1 -1 -7 // S 1 -1 1 0 0 -1 -1 1 -1 -2 -3 -1 -2 -3 1 2 1 -2 -3 -1 0 -1 0 -7 // T 1 -2 0 -1 -3 -1 -1 -1 -2 0 -2 0 -1 -3 0 1 4 -5 -3 0 0 -1 -1 -7 // W -6 1 -4 -7 -7 -5 -7 -7 -3 -5 -2 -4 -5 -1 -6 -2 -5 12 -1 -6 -5 -6 -4 -7 // Y -3 -4 -2 -4 0 -4 -4 -5 0 -2 -2 -4 -3 5 -5 -3 -3 -1 8 -3 -3 -4 -3 -7 // V 0 -3 -2 -3 -2 -2 -2 -2 -3 3 1 -3 1 -2 -2 -1 0 -6 -3 4 -2 -2 -1 -7 // B 0 -2 3 3 -5 1 2 0 1 -2 -4 0 -3 -5 -2 0 0 -5 -3 -2 3 2 -1 -7 // Z 0 0 1 2 -6 4 4 -1 1 -2 -3 0 -2 -5 -1 -1 -1 -6 -4 -2 2 4 -1 -7 // X -1 -1 -1 -1 -3 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 -1 -4 -3 -1 -1 -1 -1 -7 // * -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 1 // PAM150 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 3, 0, -2, 0, 0, -4, 1, -2, -1, 0, -2, -2, -1, 0, 1, -1, -2, 1, 1, 0, -6, -1, -3, 0, -7}, /* B */ {0, 0, 3, -5, 3, 2, -5, 0, 1, -2, 0, 0, -4, -3, 3, -2, 1, -2, 0, 0, -2, -5, -1, -3, 2, -7}, /* C */ {0, -2, -5, 9, -6, -6, -5, -4, -3, -2, 0, -6, -6, -5, -4, -3, -6, -4, 0, -3, -2, -7, -3, 0, -6, -7}, /* D */ {0, 0, 3, -6, 4, 3, -6, 0, 0, -3, 0, -1, -5, -3, 2, -2, 1, -2, 0, -1, -3, -7, -1, -4, 2, -7}, /* E */ {0, 0, 2, -6, 3, 4, -6, -1, 0, -2, 0, -1, -4, -2, 1, -1, 2, -2, -1, -1, -2, -7, -1, -4, 4, -7}, /* F */ {0, -4, -5, -5, -6, -6, 7, -5, -2, 0, 0, -6, 1, -1, -4, -5, -5, -4, -3, -3, -2, -1, -3, 5, -5, -7}, /* G */ {0, 1, 0, -4, 0, -1, -5, 4, -3, -3, 0, -2, -4, -3, 0, -1, -2, -3, 1, -1, -2, -7, -1, -5, -1, -7}, /* H */ {0, -2, 1, -3, 0, 0, -2, -3, 6, -3, 0, -1, -2, -3, 2, -1, 3, 1, -1, -2, -3, -3, -1, 0, 1, -7}, /* I */ {0, -1, -2, -2, -3, -2, 0, -3, -3, 5, 0, -2, 1, 2, -2, -3, -3, -2, -2, 0, 3, -5, -1, -2, -2, -7}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -2, 0, -6, -1, -1, -6, -2, -1, -2, 0, 4, -3, 0, 1, -2, 0, 3, -1, 0, -3, -4, -1, -4, 0, -7}, /* L */ {0, -2, -4, -6, -5, -4, 1, -4, -2, 1, 0, -3, 5, 3, -3, -3, -2, -3, -3, -2, 1, -2, -2, -2, -3, -7}, /* M */ {0, -1, -3, -5, -3, -2, -1, -3, -3, 2, 0, 0, 3, 7, -2, -3, -1, -1, -2, -1, 1, -5, -1, -3, -2, -7}, /* N */ {0, 0, 3, -4, 2, 1, -4, 0, 2, -2, 0, 1, -3, -2, 3, -1, 0, -1, 1, 0, -2, -4, -1, -2, 1, -7}, /* P */ {0, 1, -2, -3, -2, -1, -5, -1, -1, -3, 0, -2, -3, -3, -1, 6, 0, -1, 1, 0, -2, -6, -1, -5, -1, -7}, /* Q */ {0, -1, 1, -6, 1, 2, -5, -2, 3, -3, 0, 0, -2, -1, 0, 0, 5, 1, -1, -1, -2, -5, -1, -4, 4, -7}, /* R */ {0, -2, -2, -4, -2, -2, -4, -3, 1, -2, 0, 3, -3, -1, -1, -1, 1, 6, -1, -2, -3, 1, -1, -4, 0, -7}, /* S */ {0, 1, 0, 0, 0, -1, -3, 1, -1, -2, 0, -1, -3, -2, 1, 1, -1, -1, 2, 1, -1, -2, 0, -3, -1, -7}, /* T */ {0, 1, 0, -3, -1, -1, -3, -1, -2, 0, 0, 0, -2, -1, 0, 0, -1, -2, 1, 4, 0, -5, -1, -3, -1, -7}, /* V */ {0, 0, -2, -2, -3, -2, -2, -2, -3, 3, 0, -3, 1, 1, -2, -2, -2, -3, -1, 0, 4, -6, -1, -3, -2, -7}, /* W */ {0, -6, -5, -7, -7, -7, -1, -7, -3, -5, 0, -4, -2, -5, -4, -6, -5, 1, -2, -5, -6, 12, -4, -1, -6, -7}, /* X */ {0, -1, -1, -3, -1, -1, -3, -1, -1, -1, 0, -1, -2, -1, -1, -1, -1, -1, 0, -1, -1, -4, -1, -3, -1, -7}, /* Y */ {0, -3, -3, 0, -4, -4, 5, -5, 0, -2, 0, -4, -2, -3, -2, -5, -4, -4, -3, -3, -3, -1, -3, 8, -4, -7}, /* Z */ {0, 0, 2, -6, 2, 4, -5, -1, 1, -2, 0, 0, -3, -2, 1, -1, 4, 0, -1, -1, -2, -6, -1, -4, 4, -7}, /* * */ {0, -7, -7, -7, -7, -7, -7, -7, -7, -7, 0, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 160 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -1.14, Entropy = 0.694 bits // # // # Lowest score = -7, Highest score = 12 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -2 0 0 -2 -1 0 1 -2 -1 -2 -2 -1 -3 1 1 1 -5 -3 0 0 0 0 -7 // R -2 6 -1 -2 -3 1 -2 -3 1 -2 -3 3 -1 -4 -1 -1 -1 1 -4 -3 -1 0 -1 -7 // N 0 -1 3 2 -4 0 1 0 2 -2 -3 1 -2 -3 -1 1 0 -4 -2 -2 2 1 0 -7 // D 0 -2 2 4 -5 1 3 0 0 -3 -4 0 -3 -6 -2 0 -1 -6 -4 -3 3 2 -1 -7 // C -2 -3 -4 -5 9 -5 -5 -3 -3 -2 -6 -5 -5 -5 -3 0 -2 -7 0 -2 -4 -5 -3 -7 // Q -1 1 0 1 -5 5 2 -2 2 -2 -2 0 -1 -5 0 -1 -1 -5 -4 -2 1 3 -1 -7 // E 0 -2 1 3 -5 2 4 0 0 -2 -3 -1 -2 -5 -1 0 -1 -7 -4 -2 2 3 -1 -7 // G 1 -3 0 0 -3 -2 0 4 -3 -3 -4 -2 -3 -4 -1 1 -1 -7 -5 -2 0 -1 -1 -7 // H -2 1 2 0 -3 2 0 -3 6 -3 -2 -1 -3 -2 -1 -1 -2 -3 0 -2 1 1 -1 -7 // I -1 -2 -2 -3 -2 -2 -2 -3 -3 5 2 -2 2 0 -2 -2 0 -5 -2 3 -2 -2 -1 -7 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 5 -3 3 1 -3 -3 -2 -2 -2 1 -4 -3 -2 -7 // K -2 3 1 0 -5 0 -1 -2 -1 -2 -3 4 0 -5 -2 -1 0 -4 -4 -3 0 0 -1 -7 // M -1 -1 -2 -3 -5 -1 -2 -3 -3 2 3 0 7 0 -2 -2 -1 -4 -3 1 -3 -2 -1 -7 // F -3 -4 -3 -6 -5 -5 -5 -4 -2 0 1 -5 0 7 -4 -3 -3 -1 5 -2 -4 -5 -3 -7 // P 1 -1 -1 -2 -3 0 -1 -1 -1 -2 -3 -2 -2 -4 5 1 0 -5 -5 -2 -1 -1 -1 -7 // S 1 -1 1 0 0 -1 0 1 -1 -2 -3 -1 -2 -3 1 2 1 -2 -3 -1 0 -1 0 -7 // T 1 -1 0 -1 -2 -1 -1 -1 -2 0 -2 0 -1 -3 0 1 3 -5 -3 0 0 -1 0 -7 // W -5 1 -4 -6 -7 -5 -7 -7 -3 -5 -2 -4 -4 -1 -5 -2 -5 12 -1 -6 -5 -6 -4 -7 // Y -3 -4 -2 -4 0 -4 -4 -5 0 -2 -2 -4 -3 5 -5 -3 -3 -1 8 -3 -3 -4 -3 -7 // V 0 -3 -2 -3 -2 -2 -2 -2 -2 3 1 -3 1 -2 -2 -1 0 -6 -3 4 -2 -2 -1 -7 // B 0 -1 2 3 -4 1 2 0 1 -2 -4 0 -3 -4 -1 0 0 -5 -3 -2 3 2 -1 -7 // Z 0 0 1 2 -5 3 3 -1 1 -2 -3 0 -2 -5 -1 -1 -1 -6 -4 -2 2 3 -1 -7 // X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -4 -3 -1 -1 -1 -1 -7 // * -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 1 // PAM160 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -3, 1, -2, -1, 0, -2, -2, -1, 0, 1, -1, -2, 1, 1, 0, -5, 0, -3, 0, -7}, /* B */ {0, 0, 3, -4, 3, 2, -4, 0, 1, -2, 0, 0, -4, -3, 2, -1, 1, -1, 0, 0, -2, -5, -1, -3, 2, -7}, /* C */ {0, -2, -4, 9, -5, -5, -5, -3, -3, -2, 0, -5, -6, -5, -4, -3, -5, -3, 0, -2, -2, -7, -3, 0, -5, -7}, /* D */ {0, 0, 3, -5, 4, 3, -6, 0, 0, -3, 0, 0, -4, -3, 2, -2, 1, -2, 0, -1, -3, -6, -1, -4, 2, -7}, /* E */ {0, 0, 2, -5, 3, 4, -5, 0, 0, -2, 0, -1, -3, -2, 1, -1, 2, -2, 0, -1, -2, -7, -1, -4, 3, -7}, /* F */ {0, -3, -4, -5, -6, -5, 7, -4, -2, 0, 0, -5, 1, 0, -3, -4, -5, -4, -3, -3, -2, -1, -3, 5, -5, -7}, /* G */ {0, 1, 0, -3, 0, 0, -4, 4, -3, -3, 0, -2, -4, -3, 0, -1, -2, -3, 1, -1, -2, -7, -1, -5, -1, -7}, /* H */ {0, -2, 1, -3, 0, 0, -2, -3, 6, -3, 0, -1, -2, -3, 2, -1, 2, 1, -1, -2, -2, -3, -1, 0, 1, -7}, /* I */ {0, -1, -2, -2, -3, -2, 0, -3, -3, 5, 0, -2, 2, 2, -2, -2, -2, -2, -2, 0, 3, -5, -1, -2, -2, -7}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -2, 0, -5, 0, -1, -5, -2, -1, -2, 0, 4, -3, 0, 1, -2, 0, 3, -1, 0, -3, -4, -1, -4, 0, -7}, /* L */ {0, -2, -4, -6, -4, -3, 1, -4, -2, 2, 0, -3, 5, 3, -3, -3, -2, -3, -3, -2, 1, -2, -2, -2, -3, -7}, /* M */ {0, -1, -3, -5, -3, -2, 0, -3, -3, 2, 0, 0, 3, 7, -2, -2, -1, -1, -2, -1, 1, -4, -1, -3, -2, -7}, /* N */ {0, 0, 2, -4, 2, 1, -3, 0, 2, -2, 0, 1, -3, -2, 3, -1, 0, -1, 1, 0, -2, -4, 0, -2, 1, -7}, /* P */ {0, 1, -1, -3, -2, -1, -4, -1, -1, -2, 0, -2, -3, -2, -1, 5, 0, -1, 1, 0, -2, -5, -1, -5, -1, -7}, /* Q */ {0, -1, 1, -5, 1, 2, -5, -2, 2, -2, 0, 0, -2, -1, 0, 0, 5, 1, -1, -1, -2, -5, -1, -4, 3, -7}, /* R */ {0, -2, -1, -3, -2, -2, -4, -3, 1, -2, 0, 3, -3, -1, -1, -1, 1, 6, -1, -1, -3, 1, -1, -4, 0, -7}, /* S */ {0, 1, 0, 0, 0, 0, -3, 1, -1, -2, 0, -1, -3, -2, 1, 1, -1, -1, 2, 1, -1, -2, 0, -3, -1, -7}, /* T */ {0, 1, 0, -2, -1, -1, -3, -1, -2, 0, 0, 0, -2, -1, 0, 0, -1, -1, 1, 3, 0, -5, 0, -3, -1, -7}, /* V */ {0, 0, -2, -2, -3, -2, -2, -2, -2, 3, 0, -3, 1, 1, -2, -2, -2, -3, -1, 0, 4, -6, -1, -3, -2, -7}, /* W */ {0, -5, -5, -7, -6, -7, -1, -7, -3, -5, 0, -4, -2, -4, -4, -5, -5, 1, -2, -5, -6, 12, -4, -1, -6, -7}, /* X */ {0, 0, -1, -3, -1, -1, -3, -1, -1, -1, 0, -1, -2, -1, 0, -1, -1, -1, 0, 0, -1, -4, -1, -3, -1, -7}, /* Y */ {0, -3, -3, 0, -4, -4, 5, -5, 0, -2, 0, -4, -2, -3, -2, -5, -4, -4, -3, -3, -3, -1, -3, 8, -4, -7}, /* Z */ {0, 0, 2, -5, 2, 3, -5, -1, 1, -2, 0, 0, -3, -2, 1, -1, 3, 0, -1, -1, -2, -6, -1, -4, 3, -7}, /* * */ {0, -7, -7, -7, -7, -7, -7, -7, -7, -7, 0, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 160 substitution matrix, scale = 0.0693200 // # // # Expected score = -5.73, Entropy = 0.694 bits // # // # Lowest score = -35, Highest score = 60 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 12 -10 -1 -1 -11 -4 0 4 -9 -4 -10 -8 -7 -17 4 5 6 -27 -17 0 -1 -1 -2 -35 // R -10 28 -3 -11 -17 4 -9 -15 5 -10 -16 13 -3 -21 -3 -3 -7 6 -21 -14 -7 -2 -6 -35 // N -1 -3 14 10 -18 1 5 0 8 -9 -15 4 -11 -17 -5 4 2 -19 -9 -11 12 3 -2 -35 // D -1 -11 10 20 -26 5 16 0 1 -13 -21 -2 -15 -28 -8 -1 -3 -32 -21 -13 16 12 -5 -35 // C -11 -17 -18 -26 43 -27 -27 -17 -16 -11 -30 -27 -26 -23 -15 -1 -12 -35 -2 -10 -22 -27 -16 -35 // Q -4 4 1 5 -27 23 11 -9 12 -12 -8 1 -5 -24 0 -5 -6 -24 -21 -11 3 17 -4 -35 // E 0 -9 5 16 -27 11 20 -2 0 -10 -17 -3 -12 -27 -6 -2 -5 -34 -20 -10 12 17 -5 -35 // G 4 -15 0 0 -17 -9 -2 22 -13 -15 -21 -11 -15 -22 -6 3 -3 -33 -26 -8 0 -5 -6 -35 // H -9 5 8 1 -16 12 0 -13 30 -14 -11 -4 -14 -10 -3 -6 -9 -14 -1 -12 4 7 -5 -35 // I -4 -10 -9 -13 -11 -12 -10 -15 -14 23 8 -10 8 2 -12 -9 0 -26 -8 16 -11 -11 -5 -35 // L -10 -16 -15 -21 -30 -8 -17 -21 -11 8 25 -15 14 4 -13 -15 -10 -10 -8 5 -18 -13 -8 -35 // K -8 13 4 -2 -27 1 -3 -11 -4 -10 -15 22 2 -26 -8 -3 -1 -19 -21 -14 1 -1 -6 -35 // M -7 -3 -11 -15 -26 -5 -12 -15 -14 8 14 2 34 -2 -12 -9 -4 -22 -16 6 -13 -8 -5 -35 // F -17 -21 -17 -28 -23 -24 -27 -22 -10 2 4 -26 -2 35 -22 -15 -16 -3 23 -9 -22 -26 -13 -35 // P 4 -3 -5 -8 -15 0 -6 -6 -3 -12 -13 -8 -12 -22 27 3 -1 -27 -25 -8 -7 -3 -5 -35 // S 5 -3 4 -1 -1 -5 -2 3 -6 -9 -15 -3 -9 -15 3 11 7 -11 -13 -7 2 -4 -2 -35 // T 6 -7 2 -3 -12 -6 -5 -3 -9 0 -10 -1 -4 -16 -1 7 16 -25 -13 0 -1 -6 -2 -35 // W -27 6 -19 -32 -35 -24 -34 -33 -14 -26 -10 -19 -22 -3 -27 -11 -25 60 -5 -31 -24 -29 -20 -35 // Y -17 -21 -9 -21 -2 -21 -20 -26 -1 -8 -8 -21 -16 23 -25 -13 -13 -5 39 -14 -14 -20 -13 -35 // V 0 -14 -11 -13 -10 -11 -10 -8 -12 16 5 -14 6 -9 -8 -7 0 -31 -14 21 -12 -10 -5 -35 // B -1 -7 12 16 -22 3 12 0 4 -11 -18 1 -13 -22 -7 2 -1 -24 -14 -12 15 9 -4 -35 // Z -1 -2 3 12 -27 17 17 -5 7 -11 -13 -1 -8 -26 -3 -4 -6 -29 -20 -10 9 17 -4 -35 // X -2 -6 -2 -5 -16 -4 -5 -6 -5 -5 -8 -6 -5 -13 -5 -2 -2 -20 -13 -5 -4 -4 -6 -35 // * -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 -35 1 // PAM160_cdi = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 12, -1, -11, -1, 0, -17, 4, -9, -4, 0, -8, -10, -7, -1, 4, -4, -10, 5, 6, 0, -27, -2, -17, -1, -35}, /* B */ {0, -1, 15, -22, 16, 12, -22, 0, 4, -11, 0, 1, -18, -13, 12, -7, 3, -7, 2, -1, -12, -24, -4, -14, 9, -35}, /* C */ {0, -11, -22, 43, -26, -27, -23, -17, -16, -11, 0, -27, -30, -26, -18, -15, -27, -17, -1, -12, -10, -35, -16, -2, -27, -35}, /* D */ {0, -1, 16, -26, 20, 16, -28, 0, 1, -13, 0, -2, -21, -15, 10, -8, 5, -11, -1, -3, -13, -32, -5, -21, 12, -35}, /* E */ {0, 0, 12, -27, 16, 20, -27, -2, 0, -10, 0, -3, -17, -12, 5, -6, 11, -9, -2, -5, -10, -34, -5, -20, 17, -35}, /* F */ {0, -17, -22, -23, -28, -27, 35, -22, -10, 2, 0, -26, 4, -2, -17, -22, -24, -21, -15, -16, -9, -3, -13, 23, -26, -35}, /* G */ {0, 4, 0, -17, 0, -2, -22, 22, -13, -15, 0, -11, -21, -15, 0, -6, -9, -15, 3, -3, -8, -33, -6, -26, -5, -35}, /* H */ {0, -9, 4, -16, 1, 0, -10, -13, 30, -14, 0, -4, -11, -14, 8, -3, 12, 5, -6, -9, -12, -14, -5, -1, 7, -35}, /* I */ {0, -4, -11, -11, -13, -10, 2, -15, -14, 23, 0, -10, 8, 8, -9, -12, -12, -10, -9, 0, 16, -26, -5, -8, -11, -35}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -8, 1, -27, -2, -3, -26, -11, -4, -10, 0, 22, -15, 2, 4, -8, 1, 13, -3, -1, -14, -19, -6, -21, -1, -35}, /* L */ {0, -10, -18, -30, -21, -17, 4, -21, -11, 8, 0, -15, 25, 14, -15, -13, -8, -16, -15, -10, 5, -10, -8, -8, -13, -35}, /* M */ {0, -7, -13, -26, -15, -12, -2, -15, -14, 8, 0, 2, 14, 34, -11, -12, -5, -3, -9, -4, 6, -22, -5, -16, -8, -35}, /* N */ {0, -1, 12, -18, 10, 5, -17, 0, 8, -9, 0, 4, -15, -11, 14, -5, 1, -3, 4, 2, -11, -19, -2, -9, 3, -35}, /* P */ {0, 4, -7, -15, -8, -6, -22, -6, -3, -12, 0, -8, -13, -12, -5, 27, 0, -3, 3, -1, -8, -27, -5, -25, -3, -35}, /* Q */ {0, -4, 3, -27, 5, 11, -24, -9, 12, -12, 0, 1, -8, -5, 1, 0, 23, 4, -5, -6, -11, -24, -4, -21, 17, -35}, /* R */ {0, -10, -7, -17, -11, -9, -21, -15, 5, -10, 0, 13, -16, -3, -3, -3, 4, 28, -3, -7, -14, 6, -6, -21, -2, -35}, /* S */ {0, 5, 2, -1, -1, -2, -15, 3, -6, -9, 0, -3, -15, -9, 4, 3, -5, -3, 11, 7, -7, -11, -2, -13, -4, -35}, /* T */ {0, 6, -1, -12, -3, -5, -16, -3, -9, 0, 0, -1, -10, -4, 2, -1, -6, -7, 7, 16, 0, -25, -2, -13, -6, -35}, /* V */ {0, 0, -12, -10, -13, -10, -9, -8, -12, 16, 0, -14, 5, 6, -11, -8, -11, -14, -7, 0, 21, -31, -5, -14, -10, -35}, /* W */ {0, -27, -24, -35, -32, -34, -3, -33, -14, -26, 0, -19, -10, -22, -19, -27, -24, 6, -11, -25, -31, 60, -20, -5, -29, -35}, /* X */ {0, -2, -4, -16, -5, -5, -13, -6, -5, -5, 0, -6, -8, -5, -2, -5, -4, -6, -2, -2, -5, -20, -6, -13, -4, -35}, /* Y */ {0, -17, -14, -2, -21, -20, 23, -26, -1, -8, 0, -21, -8, -16, -9, -25, -21, -21, -13, -13, -14, -5, -13, 39, -20, -35}, /* Z */ {0, -1, 9, -27, 12, 17, -26, -5, 7, -11, 0, -1, -13, -8, 3, -3, 17, -2, -4, -6, -10, -29, -4, -20, 17, -35}, /* * */ {0, -35, -35, -35, -35, -35, -35, -35, -35, -35, 0, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 170 substitution matrix, scale = ln(2)/3 = 0.231049 // # // # Expected score = -1.57, Entropy = 0.640 bits // # // # Lowest score = -10, Highest score = 18 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 3 -3 0 0 -3 -1 0 1 -3 -1 -3 -2 -2 -5 1 2 2 -8 -5 0 0 0 -1 -10 // R -3 8 -1 -3 -5 1 -2 -4 2 -3 -4 4 -1 -6 -1 -1 -2 2 -6 -4 -2 0 -2 -10 // N 0 -1 4 3 -5 0 2 0 2 -3 -4 1 -3 -5 -1 1 0 -5 -3 -3 3 1 -1 -10 // D 0 -3 3 6 -7 2 5 0 0 -4 -6 -1 -4 -8 -2 0 -1 -9 -6 -4 5 4 -1 -10 // C -3 -5 -5 -7 13 -8 -8 -5 -5 -3 -9 -8 -7 -6 -4 0 -3 -10 0 -3 -6 -8 -4 -10 // Q -1 1 0 2 -8 6 3 -2 4 -3 -2 0 -1 -7 0 -1 -2 -7 -6 -3 1 5 -1 -10 // E 0 -2 2 5 -8 3 6 0 0 -3 -5 -1 -3 -8 -1 -1 -1 -10 -6 -3 3 5 -1 -10 // G 1 -4 0 0 -5 -2 0 6 -4 -4 -6 -3 -4 -6 -2 1 -1 -9 -7 -2 0 -1 -2 -10 // H -3 2 2 0 -5 4 0 -4 9 -4 -3 -1 -4 -3 -1 -2 -2 -4 0 -3 1 2 -1 -10 // I -1 -3 -3 -4 -3 -3 -3 -4 -4 7 2 -3 2 1 -3 -2 0 -7 -2 5 -3 -3 -1 -10 // L -3 -4 -4 -6 -9 -2 -5 -6 -3 2 7 -4 4 1 -4 -4 -3 -3 -2 2 -5 -4 -2 -10 // K -2 4 1 -1 -8 0 -1 -3 -1 -3 -4 6 1 -8 -2 -1 0 -5 -6 -4 0 0 -2 -10 // M -2 -1 -3 -4 -7 -1 -3 -4 -4 2 4 1 10 0 -3 -2 -1 -6 -4 2 -4 -2 -1 -10 // F -5 -6 -5 -8 -6 -7 -8 -6 -3 1 1 -8 0 10 -6 -4 -5 -1 7 -2 -6 -7 -4 -10 // P 1 -1 -1 -2 -4 0 -1 -2 -1 -3 -4 -2 -3 -6 8 1 0 -8 -7 -2 -2 -1 -1 -10 // S 2 -1 1 0 0 -1 -1 1 -2 -2 -4 -1 -2 -4 1 3 2 -3 -4 -2 1 -1 0 -10 // T 2 -2 0 -1 -3 -2 -1 -1 -2 0 -3 0 -1 -5 0 2 5 -7 -4 0 0 -1 -1 -10 // W -8 2 -5 -9 -10 -7 -10 -9 -4 -7 -3 -5 -6 -1 -8 -3 -7 18 -1 -9 -7 -8 -6 -10 // Y -5 -6 -3 -6 0 -6 -6 -7 0 -2 -2 -6 -4 7 -7 -4 -4 -1 12 -4 -4 -6 -4 -10 // V 0 -4 -3 -4 -3 -3 -3 -2 -3 5 2 -4 2 -2 -2 -2 0 -9 -4 6 -3 -3 -1 -10 // B 0 -2 3 5 -6 1 3 0 1 -3 -5 0 -4 -6 -2 1 0 -7 -4 -3 4 3 -1 -10 // Z 0 0 1 4 -8 5 5 -1 2 -3 -4 0 -2 -7 -1 -1 -1 -8 -6 -3 3 5 -1 -10 // X -1 -2 -1 -1 -4 -1 -1 -2 -1 -1 -2 -2 -1 -4 -1 0 -1 -6 -4 -1 -1 -1 -2 -10 // * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 // PAM170 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 3, 0, -3, 0, 0, -5, 1, -3, -1, 0, -2, -3, -2, 0, 1, -1, -3, 2, 2, 0, -8, -1, -5, 0, -10}, /* B */ {0, 0, 4, -6, 5, 3, -6, 0, 1, -3, 0, 0, -5, -4, 3, -2, 1, -2, 1, 0, -3, -7, -1, -4, 3, -10}, /* C */ {0, -3, -6, 13, -7, -8, -6, -5, -5, -3, 0, -8, -9, -7, -5, -4, -8, -5, 0, -3, -3, -10, -4, 0, -8, -10}, /* D */ {0, 0, 5, -7, 6, 5, -8, 0, 0, -4, 0, -1, -6, -4, 3, -2, 2, -3, 0, -1, -4, -9, -1, -6, 4, -10}, /* E */ {0, 0, 3, -8, 5, 6, -8, 0, 0, -3, 0, -1, -5, -3, 2, -1, 3, -2, -1, -1, -3, -10, -1, -6, 5, -10}, /* F */ {0, -5, -6, -6, -8, -8, 10, -6, -3, 1, 0, -8, 1, 0, -5, -6, -7, -6, -4, -5, -2, -1, -4, 7, -7, -10}, /* G */ {0, 1, 0, -5, 0, 0, -6, 6, -4, -4, 0, -3, -6, -4, 0, -2, -2, -4, 1, -1, -2, -9, -2, -7, -1, -10}, /* H */ {0, -3, 1, -5, 0, 0, -3, -4, 9, -4, 0, -1, -3, -4, 2, -1, 4, 2, -2, -2, -3, -4, -1, 0, 2, -10}, /* I */ {0, -1, -3, -3, -4, -3, 1, -4, -4, 7, 0, -3, 2, 2, -3, -3, -3, -3, -2, 0, 5, -7, -1, -2, -3, -10}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -2, 0, -8, -1, -1, -8, -3, -1, -3, 0, 6, -4, 1, 1, -2, 0, 4, -1, 0, -4, -5, -2, -6, 0, -10}, /* L */ {0, -3, -5, -9, -6, -5, 1, -6, -3, 2, 0, -4, 7, 4, -4, -4, -2, -4, -4, -3, 2, -3, -2, -2, -4, -10}, /* M */ {0, -2, -4, -7, -4, -3, 0, -4, -4, 2, 0, 1, 4, 10, -3, -3, -1, -1, -2, -1, 2, -6, -1, -4, -2, -10}, /* N */ {0, 0, 3, -5, 3, 2, -5, 0, 2, -3, 0, 1, -4, -3, 4, -1, 0, -1, 1, 0, -3, -5, -1, -3, 1, -10}, /* P */ {0, 1, -2, -4, -2, -1, -6, -2, -1, -3, 0, -2, -4, -3, -1, 8, 0, -1, 1, 0, -2, -8, -1, -7, -1, -10}, /* Q */ {0, -1, 1, -8, 2, 3, -7, -2, 4, -3, 0, 0, -2, -1, 0, 0, 6, 1, -1, -2, -3, -7, -1, -6, 5, -10}, /* R */ {0, -3, -2, -5, -3, -2, -6, -4, 2, -3, 0, 4, -4, -1, -1, -1, 1, 8, -1, -2, -4, 2, -2, -6, 0, -10}, /* S */ {0, 2, 1, 0, 0, -1, -4, 1, -2, -2, 0, -1, -4, -2, 1, 1, -1, -1, 3, 2, -2, -3, 0, -4, -1, -10}, /* T */ {0, 2, 0, -3, -1, -1, -5, -1, -2, 0, 0, 0, -3, -1, 0, 0, -2, -2, 2, 5, 0, -7, -1, -4, -1, -10}, /* V */ {0, 0, -3, -3, -4, -3, -2, -2, -3, 5, 0, -4, 2, 2, -3, -2, -3, -4, -2, 0, 6, -9, -1, -4, -3, -10}, /* W */ {0, -8, -7, -10, -9, -10, -1, -9, -4, -7, 0, -5, -3, -6, -5, -8, -7, 2, -3, -7, -9, 18, -6, -1, -8, -10}, /* X */ {0, -1, -1, -4, -1, -1, -4, -2, -1, -1, 0, -2, -2, -1, -1, -1, -1, -2, 0, -1, -1, -6, -2, -4, -1, -10}, /* Y */ {0, -5, -4, 0, -6, -6, 7, -7, 0, -2, 0, -6, -2, -4, -3, -7, -6, -6, -4, -4, -4, -1, -4, 12, -6, -10}, /* Z */ {0, 0, 3, -8, 4, 5, -7, -1, 2, -3, 0, 0, -4, -2, 1, -1, 5, 0, -1, -1, -3, -8, -1, -6, 5, -10}, /* * */ {0, -10, -10, -10, -10, -10, -10, -10, -10, -10, 0, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 180 substitution matrix, scale = ln(2)/3 = 0.231049 // # // # Expected score = -1.51, Entropy = 0.591 bits // # // # Lowest score = -10, Highest score = 18 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 3 -3 0 0 -3 -1 0 1 -2 -1 -3 -2 -2 -5 1 1 2 -8 -5 0 0 0 -1 -10 // R -3 8 -1 -3 -5 1 -2 -4 2 -3 -4 4 -1 -6 -1 -1 -2 2 -6 -4 -2 0 -2 -10 // N 0 -1 4 3 -5 0 2 0 2 -3 -4 1 -3 -5 -1 1 0 -5 -2 -3 3 1 -1 -10 // D 0 -3 3 5 -7 2 4 0 0 -3 -6 0 -4 -8 -2 0 -1 -9 -6 -3 4 3 -1 -10 // C -3 -5 -5 -7 13 -7 -7 -5 -4 -3 -8 -7 -7 -6 -4 0 -3 -10 0 -3 -6 -7 -4 -10 // Q -1 1 0 2 -7 6 3 -2 4 -3 -2 0 -1 -6 0 -1 -2 -6 -6 -3 1 5 -1 -10 // E 0 -2 2 4 -7 3 5 0 0 -3 -5 -1 -3 -7 -1 -1 -1 -9 -6 -3 3 5 -1 -10 // G 1 -4 0 0 -5 -2 0 6 -3 -4 -6 -3 -4 -6 -1 1 -1 -9 -7 -2 0 -1 -2 -10 // H -2 2 2 0 -4 4 0 -3 8 -4 -3 -1 -3 -3 -1 -2 -2 -4 0 -3 1 2 -1 -10 // I -1 -3 -3 -3 -3 -3 -3 -4 -4 6 2 -3 2 1 -3 -2 0 -7 -2 5 -3 -3 -1 -10 // L -3 -4 -4 -6 -8 -2 -5 -6 -3 2 7 -4 4 1 -4 -4 -3 -3 -2 2 -5 -3 -2 -10 // K -2 4 1 0 -7 0 -1 -3 -1 -3 -4 6 1 -7 -2 -1 0 -5 -6 -4 0 0 -1 -10 // M -2 -1 -3 -4 -7 -1 -3 -4 -3 2 4 1 9 0 -3 -2 -1 -6 -4 2 -3 -2 -1 -10 // F -5 -6 -5 -8 -6 -6 -7 -6 -3 1 1 -7 0 10 -6 -4 -4 0 7 -2 -6 -7 -3 -10 // P 1 -1 -1 -2 -4 0 -1 -1 -1 -3 -4 -2 -3 -6 8 1 0 -7 -7 -2 -2 -1 -1 -10 // S 1 -1 1 0 0 -1 -1 1 -2 -2 -4 -1 -2 -4 1 3 2 -3 -4 -2 1 -1 0 -10 // T 2 -2 0 -1 -3 -2 -1 -1 -2 0 -3 0 -1 -4 0 2 4 -7 -4 0 0 -1 -1 -10 // W -8 2 -5 -9 -10 -6 -9 -9 -4 -7 -3 -5 -6 0 -7 -3 -7 18 -1 -8 -7 -8 -6 -10 // Y -5 -6 -2 -6 0 -6 -6 -7 0 -2 -2 -6 -4 7 -7 -4 -4 -1 11 -4 -4 -6 -3 -10 // V 0 -4 -3 -3 -3 -3 -3 -2 -3 5 2 -4 2 -2 -2 -2 0 -8 -4 6 -3 -3 -1 -10 // B 0 -2 3 4 -6 1 3 0 1 -3 -5 0 -3 -6 -2 1 0 -7 -4 -3 4 3 -1 -10 // Z 0 0 1 3 -7 5 5 -1 2 -3 -3 0 -2 -7 -1 -1 -1 -8 -6 -3 3 5 -1 -10 // X -1 -2 -1 -1 -4 -1 -1 -2 -1 -1 -2 -1 -1 -3 -1 0 -1 -6 -3 -1 -1 -1 -1 -10 // * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 // PAM180 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 3, 0, -3, 0, 0, -5, 1, -2, -1, 0, -2, -3, -2, 0, 1, -1, -3, 1, 2, 0, -8, -1, -5, 0, -10}, /* B */ {0, 0, 4, -6, 4, 3, -6, 0, 1, -3, 0, 0, -5, -3, 3, -2, 1, -2, 1, 0, -3, -7, -1, -4, 3, -10}, /* C */ {0, -3, -6, 13, -7, -7, -6, -5, -4, -3, 0, -7, -8, -7, -5, -4, -7, -5, 0, -3, -3, -10, -4, 0, -7, -10}, /* D */ {0, 0, 4, -7, 5, 4, -8, 0, 0, -3, 0, 0, -6, -4, 3, -2, 2, -3, 0, -1, -3, -9, -1, -6, 3, -10}, /* E */ {0, 0, 3, -7, 4, 5, -7, 0, 0, -3, 0, -1, -5, -3, 2, -1, 3, -2, -1, -1, -3, -9, -1, -6, 5, -10}, /* F */ {0, -5, -6, -6, -8, -7, 10, -6, -3, 1, 0, -7, 1, 0, -5, -6, -6, -6, -4, -4, -2, 0, -3, 7, -7, -10}, /* G */ {0, 1, 0, -5, 0, 0, -6, 6, -3, -4, 0, -3, -6, -4, 0, -1, -2, -4, 1, -1, -2, -9, -2, -7, -1, -10}, /* H */ {0, -2, 1, -4, 0, 0, -3, -3, 8, -4, 0, -1, -3, -3, 2, -1, 4, 2, -2, -2, -3, -4, -1, 0, 2, -10}, /* I */ {0, -1, -3, -3, -3, -3, 1, -4, -4, 6, 0, -3, 2, 2, -3, -3, -3, -3, -2, 0, 5, -7, -1, -2, -3, -10}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -2, 0, -7, 0, -1, -7, -3, -1, -3, 0, 6, -4, 1, 1, -2, 0, 4, -1, 0, -4, -5, -1, -6, 0, -10}, /* L */ {0, -3, -5, -8, -6, -5, 1, -6, -3, 2, 0, -4, 7, 4, -4, -4, -2, -4, -4, -3, 2, -3, -2, -2, -3, -10}, /* M */ {0, -2, -3, -7, -4, -3, 0, -4, -3, 2, 0, 1, 4, 9, -3, -3, -1, -1, -2, -1, 2, -6, -1, -4, -2, -10}, /* N */ {0, 0, 3, -5, 3, 2, -5, 0, 2, -3, 0, 1, -4, -3, 4, -1, 0, -1, 1, 0, -3, -5, -1, -2, 1, -10}, /* P */ {0, 1, -2, -4, -2, -1, -6, -1, -1, -3, 0, -2, -4, -3, -1, 8, 0, -1, 1, 0, -2, -7, -1, -7, -1, -10}, /* Q */ {0, -1, 1, -7, 2, 3, -6, -2, 4, -3, 0, 0, -2, -1, 0, 0, 6, 1, -1, -2, -3, -6, -1, -6, 5, -10}, /* R */ {0, -3, -2, -5, -3, -2, -6, -4, 2, -3, 0, 4, -4, -1, -1, -1, 1, 8, -1, -2, -4, 2, -2, -6, 0, -10}, /* S */ {0, 1, 1, 0, 0, -1, -4, 1, -2, -2, 0, -1, -4, -2, 1, 1, -1, -1, 3, 2, -2, -3, 0, -4, -1, -10}, /* T */ {0, 2, 0, -3, -1, -1, -4, -1, -2, 0, 0, 0, -3, -1, 0, 0, -2, -2, 2, 4, 0, -7, -1, -4, -1, -10}, /* V */ {0, 0, -3, -3, -3, -3, -2, -2, -3, 5, 0, -4, 2, 2, -3, -2, -3, -4, -2, 0, 6, -8, -1, -4, -3, -10}, /* W */ {0, -8, -7, -10, -9, -9, 0, -9, -4, -7, 0, -5, -3, -6, -5, -7, -6, 2, -3, -7, -8, 18, -6, -1, -8, -10}, /* X */ {0, -1, -1, -4, -1, -1, -3, -2, -1, -1, 0, -1, -2, -1, -1, -1, -1, -2, 0, -1, -1, -6, -1, -3, -1, -10}, /* Y */ {0, -5, -4, 0, -6, -6, 7, -7, 0, -2, 0, -6, -2, -4, -2, -7, -6, -6, -4, -4, -4, -1, -3, 11, -6, -10}, /* Z */ {0, 0, 3, -7, 3, 5, -7, -1, 2, -3, 0, 0, -3, -2, 1, -1, 5, 0, -1, -1, -3, -8, -1, -6, 5, -10}, /* * */ {0, -10, -10, -10, -10, -10, -10, -10, -10, -10, 0, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 190 substitution matrix, scale = ln(2)/3 = 0.231049 // # // # Expected score = -1.35, Entropy = 0.547 bits // # // # Lowest score = -9, Highest score = 18 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 3 -2 0 0 -3 -1 0 1 -2 -1 -3 -2 -2 -5 1 1 2 -7 -4 0 0 0 0 -9 // R -2 8 -1 -2 -5 1 -2 -4 2 -3 -4 4 -1 -6 0 -1 -2 2 -5 -3 -1 0 -1 -9 // N 0 -1 3 3 -5 1 2 0 2 -2 -4 1 -3 -4 -1 1 0 -5 -2 -3 3 1 -1 -9 // D 0 -2 3 5 -7 2 4 0 0 -3 -5 0 -4 -7 -2 0 -1 -8 -5 -3 4 3 -1 -9 // C -3 -5 -5 -7 13 -7 -7 -4 -4 -3 -8 -7 -7 -6 -4 0 -3 -9 0 -3 -6 -7 -4 -9 // Q -1 1 1 2 -7 6 3 -2 3 -3 -2 1 -1 -6 0 -1 -1 -6 -5 -3 1 4 -1 -9 // E 0 -2 2 4 -7 3 5 0 0 -3 -4 -1 -3 -7 -1 0 -1 -9 -5 -3 3 4 -1 -9 // G 1 -4 0 0 -4 -2 0 6 -3 -4 -5 -3 -4 -6 -1 1 -1 -9 -7 -2 0 -1 -1 -9 // H -2 2 2 0 -4 3 0 -3 8 -3 -3 -1 -3 -2 -1 -1 -2 -3 0 -3 1 2 -1 -9 // I -1 -3 -2 -3 -3 -3 -3 -4 -3 6 2 -3 2 1 -3 -2 0 -7 -2 4 -3 -3 -1 -9 // L -3 -4 -4 -5 -8 -2 -4 -5 -3 2 7 -4 4 2 -3 -4 -2 -3 -2 2 -5 -3 -2 -9 // K -2 4 1 0 -7 1 -1 -3 -1 -3 -4 6 1 -7 -2 0 0 -5 -6 -3 0 0 -1 -9 // M -2 -1 -3 -4 -7 -1 -3 -4 -3 2 4 1 9 0 -3 -2 -1 -6 -4 2 -3 -2 -1 -9 // F -5 -6 -4 -7 -6 -6 -7 -6 -2 1 2 -7 0 10 -6 -4 -4 0 7 -2 -6 -7 -3 -9 // P 1 0 -1 -2 -4 0 -1 -1 -1 -3 -3 -2 -3 -6 7 1 0 -7 -6 -2 -1 -1 -1 -9 // S 1 -1 1 0 0 -1 0 1 -1 -2 -4 0 -2 -4 1 3 2 -3 -4 -2 1 -1 0 -9 // T 2 -2 0 -1 -3 -1 -1 -1 -2 0 -2 0 -1 -4 0 2 4 -6 -3 0 0 -1 0 -9 // W -7 2 -5 -8 -9 -6 -9 -9 -3 -7 -3 -5 -6 0 -7 -3 -6 18 -1 -8 -6 -7 -5 -9 // Y -4 -5 -2 -5 0 -5 -5 -7 0 -2 -2 -6 -4 7 -6 -4 -3 -1 11 -3 -4 -5 -3 -9 // V 0 -3 -3 -3 -3 -3 -3 -2 -3 4 2 -3 2 -2 -2 -2 0 -8 -3 6 -3 -3 -1 -9 // B 0 -1 3 4 -6 1 3 0 1 -3 -5 0 -3 -6 -1 1 0 -6 -4 -3 4 2 -1 -9 // Z 0 0 1 3 -7 4 4 -1 2 -3 -3 0 -2 -7 -1 -1 -1 -7 -5 -3 2 4 -1 -9 // X 0 -1 -1 -1 -4 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -5 -3 -1 -1 -1 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM190 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 3, 0, -3, 0, 0, -5, 1, -2, -1, 0, -2, -3, -2, 0, 1, -1, -2, 1, 2, 0, -7, 0, -4, 0, -9}, /* B */ {0, 0, 4, -6, 4, 3, -6, 0, 1, -3, 0, 0, -5, -3, 3, -1, 1, -1, 1, 0, -3, -6, -1, -4, 2, -9}, /* C */ {0, -3, -6, 13, -7, -7, -6, -4, -4, -3, 0, -7, -8, -7, -5, -4, -7, -5, 0, -3, -3, -9, -4, 0, -7, -9}, /* D */ {0, 0, 4, -7, 5, 4, -7, 0, 0, -3, 0, 0, -5, -4, 3, -2, 2, -2, 0, -1, -3, -8, -1, -5, 3, -9}, /* E */ {0, 0, 3, -7, 4, 5, -7, 0, 0, -3, 0, -1, -4, -3, 2, -1, 3, -2, 0, -1, -3, -9, -1, -5, 4, -9}, /* F */ {0, -5, -6, -6, -7, -7, 10, -6, -2, 1, 0, -7, 2, 0, -4, -6, -6, -6, -4, -4, -2, 0, -3, 7, -7, -9}, /* G */ {0, 1, 0, -4, 0, 0, -6, 6, -3, -4, 0, -3, -5, -4, 0, -1, -2, -4, 1, -1, -2, -9, -1, -7, -1, -9}, /* H */ {0, -2, 1, -4, 0, 0, -2, -3, 8, -3, 0, -1, -3, -3, 2, -1, 3, 2, -1, -2, -3, -3, -1, 0, 2, -9}, /* I */ {0, -1, -3, -3, -3, -3, 1, -4, -3, 6, 0, -3, 2, 2, -2, -3, -3, -3, -2, 0, 4, -7, -1, -2, -3, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -2, 0, -7, 0, -1, -7, -3, -1, -3, 0, 6, -4, 1, 1, -2, 1, 4, 0, 0, -3, -5, -1, -6, 0, -9}, /* L */ {0, -3, -5, -8, -5, -4, 2, -5, -3, 2, 0, -4, 7, 4, -4, -3, -2, -4, -4, -2, 2, -3, -2, -2, -3, -9}, /* M */ {0, -2, -3, -7, -4, -3, 0, -4, -3, 2, 0, 1, 4, 9, -3, -3, -1, -1, -2, -1, 2, -6, -1, -4, -2, -9}, /* N */ {0, 0, 3, -5, 3, 2, -4, 0, 2, -2, 0, 1, -4, -3, 3, -1, 1, -1, 1, 0, -3, -5, -1, -2, 1, -9}, /* P */ {0, 1, -1, -4, -2, -1, -6, -1, -1, -3, 0, -2, -3, -3, -1, 7, 0, 0, 1, 0, -2, -7, -1, -6, -1, -9}, /* Q */ {0, -1, 1, -7, 2, 3, -6, -2, 3, -3, 0, 1, -2, -1, 1, 0, 6, 1, -1, -1, -3, -6, -1, -5, 4, -9}, /* R */ {0, -2, -1, -5, -2, -2, -6, -4, 2, -3, 0, 4, -4, -1, -1, 0, 1, 8, -1, -2, -3, 2, -1, -5, 0, -9}, /* S */ {0, 1, 1, 0, 0, 0, -4, 1, -1, -2, 0, 0, -4, -2, 1, 1, -1, -1, 3, 2, -2, -3, 0, -4, -1, -9}, /* T */ {0, 2, 0, -3, -1, -1, -4, -1, -2, 0, 0, 0, -2, -1, 0, 0, -1, -2, 2, 4, 0, -6, 0, -3, -1, -9}, /* V */ {0, 0, -3, -3, -3, -3, -2, -2, -3, 4, 0, -3, 2, 2, -3, -2, -3, -3, -2, 0, 6, -8, -1, -3, -3, -9}, /* W */ {0, -7, -6, -9, -8, -9, 0, -9, -3, -7, 0, -5, -3, -6, -5, -7, -6, 2, -3, -6, -8, 18, -5, -1, -7, -9}, /* X */ {0, 0, -1, -4, -1, -1, -3, -1, -1, -1, 0, -1, -2, -1, -1, -1, -1, -1, 0, 0, -1, -5, -1, -3, -1, -9}, /* Y */ {0, -4, -4, 0, -5, -5, 7, -7, 0, -2, 0, -6, -2, -4, -2, -6, -5, -5, -4, -3, -3, -1, -3, 11, -5, -9}, /* Z */ {0, 0, 2, -7, 3, 4, -7, -1, 2, -3, 0, 0, -3, -2, 1, -1, 4, 0, -1, -1, -3, -7, -1, -5, 4, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 20 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -6.18, Entropy = 2.95 bits // # // # Lowest score = -19, Highest score = 13 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 6 -8 -5 -4 -8 -5 -3 -3 -8 -6 -7 -8 -6 -9 -2 -1 -1 -16 -9 -3 -5 -4 -4 -19 // R -8 9 -7 -12 -9 -2 -11 -11 -3 -6 -10 -1 -5 -10 -5 -4 -8 -3 -11 -9 -9 -5 -7 -19 // N -5 -7 8 1 -13 -5 -3 -4 -1 -6 -8 -2 -11 -10 -7 -1 -3 -9 -5 -9 6 -4 -4 -19 // D -4 -12 1 8 -16 -4 2 -4 -5 -9 -15 -6 -13 -17 -9 -5 -6 -17 -13 -9 6 0 -7 -19 // C -8 -9 -13 -16 10 -16 -16 -11 -8 -7 -17 -16 -16 -15 -9 -4 -9 -18 -5 -7 -14 -16 -11 -19 // Q -5 -2 -5 -4 -16 9 0 -8 0 -9 -6 -4 -5 -15 -4 -6 -7 -15 -14 -8 -4 7 -6 -19 // E -3 -11 -3 2 -16 0 8 -5 -6 -6 -10 -5 -8 -16 -7 -5 -7 -19 -9 -8 0 6 -6 -19 // G -3 -11 -4 -4 -11 -8 -5 7 -10 -13 -12 -8 -10 -10 -7 -3 -7 -17 -16 -7 -4 -6 -6 -19 // H -8 -3 -1 -5 -8 0 -6 -10 9 -11 -7 -8 -13 -7 -5 -7 -8 -8 -4 -7 -2 -2 -6 -19 // I -6 -6 -6 -9 -7 -9 -6 -13 -11 9 -2 -7 -2 -3 -10 -8 -3 -16 -7 1 -7 -7 -6 -19 // L -7 -10 -8 -15 -17 -6 -10 -12 -7 -2 7 -9 0 -4 -8 -9 -8 -7 -8 -3 -10 -8 -7 -19 // K -8 -1 -2 -6 -16 -4 -5 -8 -8 -7 -9 7 -3 -16 -8 -5 -4 -14 -10 -10 -3 -5 -6 -19 // M -6 -5 -11 -13 -16 -5 -8 -10 -13 -2 0 -3 11 -5 -9 -6 -5 -15 -13 -2 -12 -6 -6 -19 // F -9 -10 -10 -17 -15 -15 -16 -10 -7 -3 -4 -16 -5 9 -11 -7 -10 -6 1 -9 -12 -16 -9 -19 // P -2 -5 -7 -9 -9 -4 -7 -7 -5 -10 -8 -8 -9 -11 8 -3 -5 -16 -16 -7 -8 -5 -6 -19 // S -1 -4 -1 -5 -4 -6 -5 -3 -7 -8 -9 -5 -6 -7 -3 7 0 -6 -8 -8 -2 -6 -4 -19 // T -1 -8 -3 -6 -9 -7 -7 -7 -8 -3 -8 -4 -5 -10 -5 0 7 -15 -7 -4 -4 -7 -5 -19 // W -16 -3 -9 -17 -18 -15 -19 -17 -8 -16 -7 -14 -15 -6 -16 -6 -15 13 -6 -18 -11 -17 -13 -19 // Y -9 -11 -5 -13 -5 -14 -9 -16 -4 -7 -8 -10 -13 1 -16 -8 -7 -6 10 -8 -7 -11 -9 -19 // V -3 -9 -9 -9 -7 -8 -8 -7 -7 1 -3 -10 -2 -9 -7 -8 -4 -18 -8 7 -9 -8 -6 -19 // B -5 -9 6 6 -14 -4 0 -4 -2 -7 -10 -3 -12 -12 -8 -2 -4 -11 -7 -9 6 -1 -6 -19 // Z -4 -5 -4 0 -16 7 6 -6 -2 -7 -8 -5 -6 -16 -5 -6 -7 -17 -11 -8 -1 6 -6 -19 // X -4 -7 -4 -7 -11 -6 -6 -6 -6 -6 -7 -6 -6 -9 -6 -4 -5 -13 -9 -6 -6 -6 -6 -19 // * -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 -19 1 // PAM20 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 6, -5, -8, -4, -3, -9, -3, -8, -6, 0, -8, -7, -6, -5, -2, -5, -8, -1, -1, -3, -16, -4, -9, -4, -19}, /* B */ {0, -5, 6, -14, 6, 0, -12, -4, -2, -7, 0, -3, -10, -12, 6, -8, -4, -9, -2, -4, -9, -11, -6, -7, -1, -19}, /* C */ {0, -8, -14, 10, -16, -16, -15, -11, -8, -7, 0, -16, -17, -16, -13, -9, -16, -9, -4, -9, -7, -18, -11, -5, -16, -19}, /* D */ {0, -4, 6, -16, 8, 2, -17, -4, -5, -9, 0, -6, -15, -13, 1, -9, -4, -12, -5, -6, -9, -17, -7, -13, 0, -19}, /* E */ {0, -3, 0, -16, 2, 8, -16, -5, -6, -6, 0, -5, -10, -8, -3, -7, 0, -11, -5, -7, -8, -19, -6, -9, 6, -19}, /* F */ {0, -9, -12, -15, -17, -16, 9, -10, -7, -3, 0, -16, -4, -5, -10, -11, -15, -10, -7, -10, -9, -6, -9, 1, -16, -19}, /* G */ {0, -3, -4, -11, -4, -5, -10, 7, -10, -13, 0, -8, -12, -10, -4, -7, -8, -11, -3, -7, -7, -17, -6, -16, -6, -19}, /* H */ {0, -8, -2, -8, -5, -6, -7, -10, 9, -11, 0, -8, -7, -13, -1, -5, 0, -3, -7, -8, -7, -8, -6, -4, -2, -19}, /* I */ {0, -6, -7, -7, -9, -6, -3, -13, -11, 9, 0, -7, -2, -2, -6, -10, -9, -6, -8, -3, 1, -16, -6, -7, -7, -19}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -8, -3, -16, -6, -5, -16, -8, -8, -7, 0, 7, -9, -3, -2, -8, -4, -1, -5, -4, -10, -14, -6, -10, -5, -19}, /* L */ {0, -7, -10, -17, -15, -10, -4, -12, -7, -2, 0, -9, 7, 0, -8, -8, -6, -10, -9, -8, -3, -7, -7, -8, -8, -19}, /* M */ {0, -6, -12, -16, -13, -8, -5, -10, -13, -2, 0, -3, 0, 11, -11, -9, -5, -5, -6, -5, -2, -15, -6, -13, -6, -19}, /* N */ {0, -5, 6, -13, 1, -3, -10, -4, -1, -6, 0, -2, -8, -11, 8, -7, -5, -7, -1, -3, -9, -9, -4, -5, -4, -19}, /* P */ {0, -2, -8, -9, -9, -7, -11, -7, -5, -10, 0, -8, -8, -9, -7, 8, -4, -5, -3, -5, -7, -16, -6, -16, -5, -19}, /* Q */ {0, -5, -4, -16, -4, 0, -15, -8, 0, -9, 0, -4, -6, -5, -5, -4, 9, -2, -6, -7, -8, -15, -6, -14, 7, -19}, /* R */ {0, -8, -9, -9, -12, -11, -10, -11, -3, -6, 0, -1, -10, -5, -7, -5, -2, 9, -4, -8, -9, -3, -7, -11, -5, -19}, /* S */ {0, -1, -2, -4, -5, -5, -7, -3, -7, -8, 0, -5, -9, -6, -1, -3, -6, -4, 7, 0, -8, -6, -4, -8, -6, -19}, /* T */ {0, -1, -4, -9, -6, -7, -10, -7, -8, -3, 0, -4, -8, -5, -3, -5, -7, -8, 0, 7, -4, -15, -5, -7, -7, -19}, /* V */ {0, -3, -9, -7, -9, -8, -9, -7, -7, 1, 0, -10, -3, -2, -9, -7, -8, -9, -8, -4, 7, -18, -6, -8, -8, -19}, /* W */ {0, -16, -11, -18, -17, -19, -6, -17, -8, -16, 0, -14, -7, -15, -9, -16, -15, -3, -6, -15, -18, 13, -13, -6, -17, -19}, /* X */ {0, -4, -6, -11, -7, -6, -9, -6, -6, -6, 0, -6, -7, -6, -4, -6, -6, -7, -4, -5, -6, -13, -6, -9, -6, -19}, /* Y */ {0, -9, -7, -5, -13, -9, 1, -16, -4, -7, 0, -10, -8, -13, -5, -16, -14, -11, -8, -7, -8, -6, -9, 10, -11, -19}, /* Z */ {0, -4, -1, -16, 0, 6, -16, -6, -2, -7, 0, -5, -8, -6, -4, -5, 7, -5, -6, -7, -8, -17, -6, -11, 6, -19}, /* * */ {0, -19, -19, -19, -19, -19, -19, -19, -19, -19, 0, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 200 substitution matrix, scale = ln(2)/3 = 0.231049 // # // # Expected score = -1.23, Entropy = 0.507 bits // # // # Lowest score = -9, Highest score = 18 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 3 -2 0 0 -3 -1 0 1 -2 -1 -2 -2 -2 -4 1 1 1 -7 -4 0 0 0 0 -9 // R -2 7 0 -2 -4 1 -2 -4 2 -2 -4 4 -1 -5 0 -1 -1 2 -5 -3 -1 0 -1 -9 // N 0 0 3 3 -5 1 2 0 2 -2 -4 1 -2 -4 -1 1 0 -5 -2 -2 3 1 0 -9 // D 0 -2 3 5 -6 2 4 0 0 -3 -5 0 -4 -7 -2 0 0 -8 -5 -3 4 3 -1 -9 // C -3 -4 -5 -6 12 -7 -7 -4 -4 -3 -7 -7 -6 -6 -4 0 -3 -9 0 -2 -5 -7 -4 -9 // Q -1 1 1 2 -7 5 3 -2 3 -3 -2 1 -1 -6 0 -1 -1 -6 -5 -3 1 4 -1 -9 // E 0 -2 2 4 -7 3 5 0 0 -3 -4 0 -3 -7 -1 0 -1 -9 -5 -2 3 4 -1 -9 // G 1 -4 0 0 -4 -2 0 6 -3 -3 -5 -2 -4 -6 -1 1 0 -8 -6 -2 0 -1 -1 -9 // H -2 2 2 0 -4 3 0 -3 8 -3 -3 -1 -3 -2 -1 -1 -2 -3 0 -3 1 2 -1 -9 // I -1 -2 -2 -3 -3 -3 -3 -3 -3 6 2 -2 2 1 -3 -2 0 -6 -2 4 -3 -3 -1 -9 // L -2 -4 -4 -5 -7 -2 -4 -5 -3 2 7 -4 4 2 -3 -4 -2 -2 -2 2 -4 -3 -2 -9 // K -2 4 1 0 -7 1 0 -2 -1 -2 -4 6 1 -7 -2 0 0 -4 -5 -3 0 0 -1 -9 // M -2 -1 -2 -4 -6 -1 -3 -4 -3 2 4 1 8 0 -3 -2 -1 -5 -3 2 -3 -2 -1 -9 // F -4 -5 -4 -7 -6 -6 -7 -6 -2 1 2 -7 0 10 -6 -4 -4 0 7 -2 -6 -6 -3 -9 // P 1 0 -1 -2 -4 0 -1 -1 -1 -3 -3 -2 -3 -6 7 1 0 -7 -6 -2 -1 -1 -1 -9 // S 1 -1 1 0 0 -1 0 1 -1 -2 -4 0 -2 -4 1 2 2 -3 -3 -1 1 -1 0 -9 // T 1 -1 0 0 -3 -1 -1 0 -2 0 -2 0 -1 -4 0 2 4 -6 -3 0 0 -1 0 -9 // W -7 2 -5 -8 -9 -6 -9 -8 -3 -6 -2 -4 -5 0 -7 -3 -6 18 -1 -8 -6 -7 -5 -9 // Y -4 -5 -2 -5 0 -5 -5 -6 0 -2 -2 -5 -3 7 -6 -3 -3 -1 11 -3 -4 -5 -3 -9 // V 0 -3 -2 -3 -2 -3 -2 -2 -3 4 2 -3 2 -2 -2 -1 0 -8 -3 5 -3 -2 -1 -9 // B 0 -1 3 4 -5 1 3 0 1 -3 -4 0 -3 -6 -1 1 0 -6 -4 -3 3 2 -1 -9 // Z 0 0 1 3 -7 4 4 -1 2 -3 -3 0 -2 -6 -1 -1 -1 -7 -5 -2 2 4 -1 -9 // X 0 -1 0 -1 -4 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -5 -3 -1 -1 -1 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM200 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 3, 0, -3, 0, 0, -4, 1, -2, -1, 0, -2, -2, -2, 0, 1, -1, -2, 1, 1, 0, -7, 0, -4, 0, -9}, /* B */ {0, 0, 3, -5, 4, 3, -6, 0, 1, -3, 0, 0, -4, -3, 3, -1, 1, -1, 1, 0, -3, -6, -1, -4, 2, -9}, /* C */ {0, -3, -5, 12, -6, -7, -6, -4, -4, -3, 0, -7, -7, -6, -5, -4, -7, -4, 0, -3, -2, -9, -4, 0, -7, -9}, /* D */ {0, 0, 4, -6, 5, 4, -7, 0, 0, -3, 0, 0, -5, -4, 3, -2, 2, -2, 0, 0, -3, -8, -1, -5, 3, -9}, /* E */ {0, 0, 3, -7, 4, 5, -7, 0, 0, -3, 0, 0, -4, -3, 2, -1, 3, -2, 0, -1, -2, -9, -1, -5, 4, -9}, /* F */ {0, -4, -6, -6, -7, -7, 10, -6, -2, 1, 0, -7, 2, 0, -4, -6, -6, -5, -4, -4, -2, 0, -3, 7, -6, -9}, /* G */ {0, 1, 0, -4, 0, 0, -6, 6, -3, -3, 0, -2, -5, -4, 0, -1, -2, -4, 1, 0, -2, -8, -1, -6, -1, -9}, /* H */ {0, -2, 1, -4, 0, 0, -2, -3, 8, -3, 0, -1, -3, -3, 2, -1, 3, 2, -1, -2, -3, -3, -1, 0, 2, -9}, /* I */ {0, -1, -3, -3, -3, -3, 1, -3, -3, 6, 0, -2, 2, 2, -2, -3, -3, -2, -2, 0, 4, -6, -1, -2, -3, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -2, 0, -7, 0, 0, -7, -2, -1, -2, 0, 6, -4, 1, 1, -2, 1, 4, 0, 0, -3, -4, -1, -5, 0, -9}, /* L */ {0, -2, -4, -7, -5, -4, 2, -5, -3, 2, 0, -4, 7, 4, -4, -3, -2, -4, -4, -2, 2, -2, -2, -2, -3, -9}, /* M */ {0, -2, -3, -6, -4, -3, 0, -4, -3, 2, 0, 1, 4, 8, -2, -3, -1, -1, -2, -1, 2, -5, -1, -3, -2, -9}, /* N */ {0, 0, 3, -5, 3, 2, -4, 0, 2, -2, 0, 1, -4, -2, 3, -1, 1, 0, 1, 0, -2, -5, 0, -2, 1, -9}, /* P */ {0, 1, -1, -4, -2, -1, -6, -1, -1, -3, 0, -2, -3, -3, -1, 7, 0, 0, 1, 0, -2, -7, -1, -6, -1, -9}, /* Q */ {0, -1, 1, -7, 2, 3, -6, -2, 3, -3, 0, 1, -2, -1, 1, 0, 5, 1, -1, -1, -3, -6, -1, -5, 4, -9}, /* R */ {0, -2, -1, -4, -2, -2, -5, -4, 2, -2, 0, 4, -4, -1, 0, 0, 1, 7, -1, -1, -3, 2, -1, -5, 0, -9}, /* S */ {0, 1, 1, 0, 0, 0, -4, 1, -1, -2, 0, 0, -4, -2, 1, 1, -1, -1, 2, 2, -1, -3, 0, -3, -1, -9}, /* T */ {0, 1, 0, -3, 0, -1, -4, 0, -2, 0, 0, 0, -2, -1, 0, 0, -1, -1, 2, 4, 0, -6, 0, -3, -1, -9}, /* V */ {0, 0, -3, -2, -3, -2, -2, -2, -3, 4, 0, -3, 2, 2, -2, -2, -3, -3, -1, 0, 5, -8, -1, -3, -2, -9}, /* W */ {0, -7, -6, -9, -8, -9, 0, -8, -3, -6, 0, -4, -2, -5, -5, -7, -6, 2, -3, -6, -8, 18, -5, -1, -7, -9}, /* X */ {0, 0, -1, -4, -1, -1, -3, -1, -1, -1, 0, -1, -2, -1, 0, -1, -1, -1, 0, 0, -1, -5, -1, -3, -1, -9}, /* Y */ {0, -4, -4, 0, -5, -5, 7, -6, 0, -2, 0, -5, -2, -3, -2, -6, -5, -5, -3, -3, -3, -1, -3, 11, -5, -9}, /* Z */ {0, 0, 2, -7, 3, 4, -6, -1, 2, -3, 0, 0, -3, -2, 1, -1, 4, 0, -1, -1, -2, -7, -1, -5, 4, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 200 substitution matrix, scale = 0.0693200 // # // # Expected score = -4.12, Entropy = 0.507 bits // # // # Lowest score = -30, Highest score = 59 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 9 -7 0 0 -9 -3 1 4 -7 -3 -8 -6 -5 -14 4 5 5 -23 -14 1 0 -1 -1 -30 // R -7 24 -1 -7 -15 4 -6 -12 5 -8 -13 12 -2 -18 -1 -2 -5 7 -17 -11 -4 -1 -4 -30 // N 0 -1 10 9 -15 2 5 1 7 -8 -12 4 -8 -14 -3 3 2 -16 -8 -8 9 4 -2 -30 // D 0 -7 9 16 -21 6 14 1 2 -10 -17 -1 -12 -23 -5 0 -2 -27 -17 -10 13 11 -4 -30 // C -9 -15 -15 -21 41 -22 -22 -14 -14 -9 -25 -22 -22 -18 -12 -1 -10 -30 0 -8 -18 -22 -13 -30 // Q -3 4 2 6 -22 18 10 -6 11 -9 -7 2 -4 -19 0 -3 -4 -20 -17 -8 4 14 -3 -30 // E 1 -6 5 14 -22 10 16 0 1 -9 -14 -1 -9 -22 -4 -1 -3 -28 -17 -8 10 14 -3 -30 // G 4 -12 1 1 -14 -6 0 19 -10 -12 -17 -8 -12 -19 -3 4 -1 -28 -22 -6 1 -3 -4 -30 // H -7 5 7 2 -14 11 1 -10 26 -11 -9 -2 -10 -8 -2 -4 -6 -11 -1 -10 4 7 -3 -30 // I -3 -8 -8 -10 -9 -9 -9 -12 -11 19 8 -8 8 3 -9 -6 0 -21 -5 14 -9 -9 -3 -30 // L -8 -13 -12 -17 -25 -7 -14 -17 -9 8 22 -12 13 5 -11 -12 -8 -8 -5 6 -15 -11 -6 -30 // K -6 12 4 -1 -22 2 -1 -8 -2 -8 -12 19 2 -22 -6 -1 -1 -15 -18 -11 1 0 -4 -30 // M -5 -2 -8 -12 -22 -4 -9 -12 -10 8 13 2 28 -1 -9 -7 -3 -18 -12 6 -10 -7 -3 -30 // F -14 -18 -14 -23 -18 -19 -22 -19 -8 3 5 -22 -1 33 -18 -13 -13 -1 23 -6 -18 -21 -10 -30 // P 4 -1 -3 -5 -12 0 -4 -3 -2 -9 -11 -6 -9 -18 23 3 0 -23 -20 -6 -4 -2 -3 -30 // S 5 -2 3 0 -1 -3 -1 4 -4 -6 -12 -1 -7 -13 3 8 6 -9 -11 -5 2 -2 -1 -30 // T 5 -5 2 -2 -10 -4 -3 -1 -6 0 -8 -1 -3 -13 0 6 12 -21 -11 1 0 -3 -1 -30 // W -23 7 -16 -27 -30 -20 -28 -28 -11 -21 -8 -15 -18 -1 -23 -9 -21 59 -2 -26 -21 -24 -17 -30 // Y -14 -17 -8 -17 0 -17 -17 -22 -1 -5 -5 -18 -12 23 -20 -11 -11 -2 37 -11 -12 -17 -10 -30 // V 1 -11 -8 -10 -8 -8 -8 -6 -10 14 6 -11 6 -6 -6 -5 1 -26 -11 18 -9 -8 -3 -30 // B 0 -4 9 13 -18 4 10 1 4 -9 -15 1 -10 -18 -4 2 0 -21 -12 -9 12 8 -3 -30 // Z -1 -1 4 11 -22 14 14 -3 7 -9 -11 0 -7 -21 -2 -2 -3 -24 -17 -8 8 14 -3 -30 // X -1 -4 -2 -4 -13 -3 -3 -4 -3 -3 -6 -4 -3 -10 -3 -1 -1 -17 -10 -3 -3 -3 -4 -30 // * -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 1 // PAM200_cdi = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 9, 0, -9, 0, 1, -14, 4, -7, -3, 0, -6, -8, -5, 0, 4, -3, -7, 5, 5, 1, -23, -1, -14, -1, -30}, /* B */ {0, 0, 12, -18, 13, 10, -18, 1, 4, -9, 0, 1, -15, -10, 9, -4, 4, -4, 2, 0, -9, -21, -3, -12, 8, -30}, /* C */ {0, -9, -18, 41, -21, -22, -18, -14, -14, -9, 0, -22, -25, -22, -15, -12, -22, -15, -1, -10, -8, -30, -13, 0, -22, -30}, /* D */ {0, 0, 13, -21, 16, 14, -23, 1, 2, -10, 0, -1, -17, -12, 9, -5, 6, -7, 0, -2, -10, -27, -4, -17, 11, -30}, /* E */ {0, 1, 10, -22, 14, 16, -22, 0, 1, -9, 0, -1, -14, -9, 5, -4, 10, -6, -1, -3, -8, -28, -3, -17, 14, -30}, /* F */ {0, -14, -18, -18, -23, -22, 33, -19, -8, 3, 0, -22, 5, -1, -14, -18, -19, -18, -13, -13, -6, -1, -10, 23, -21, -30}, /* G */ {0, 4, 1, -14, 1, 0, -19, 19, -10, -12, 0, -8, -17, -12, 1, -3, -6, -12, 4, -1, -6, -28, -4, -22, -3, -30}, /* H */ {0, -7, 4, -14, 2, 1, -8, -10, 26, -11, 0, -2, -9, -10, 7, -2, 11, 5, -4, -6, -10, -11, -3, -1, 7, -30}, /* I */ {0, -3, -9, -9, -10, -9, 3, -12, -11, 19, 0, -8, 8, 8, -8, -9, -9, -8, -6, 0, 14, -21, -3, -5, -9, -30}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -6, 1, -22, -1, -1, -22, -8, -2, -8, 0, 19, -12, 2, 4, -6, 2, 12, -1, -1, -11, -15, -4, -18, 0, -30}, /* L */ {0, -8, -15, -25, -17, -14, 5, -17, -9, 8, 0, -12, 22, 13, -12, -11, -7, -13, -12, -8, 6, -8, -6, -5, -11, -30}, /* M */ {0, -5, -10, -22, -12, -9, -1, -12, -10, 8, 0, 2, 13, 28, -8, -9, -4, -2, -7, -3, 6, -18, -3, -12, -7, -30}, /* N */ {0, 0, 9, -15, 9, 5, -14, 1, 7, -8, 0, 4, -12, -8, 10, -3, 2, -1, 3, 2, -8, -16, -2, -8, 4, -30}, /* P */ {0, 4, -4, -12, -5, -4, -18, -3, -2, -9, 0, -6, -11, -9, -3, 23, 0, -1, 3, 0, -6, -23, -3, -20, -2, -30}, /* Q */ {0, -3, 4, -22, 6, 10, -19, -6, 11, -9, 0, 2, -7, -4, 2, 0, 18, 4, -3, -4, -8, -20, -3, -17, 14, -30}, /* R */ {0, -7, -4, -15, -7, -6, -18, -12, 5, -8, 0, 12, -13, -2, -1, -1, 4, 24, -2, -5, -11, 7, -4, -17, -1, -30}, /* S */ {0, 5, 2, -1, 0, -1, -13, 4, -4, -6, 0, -1, -12, -7, 3, 3, -3, -2, 8, 6, -5, -9, -1, -11, -2, -30}, /* T */ {0, 5, 0, -10, -2, -3, -13, -1, -6, 0, 0, -1, -8, -3, 2, 0, -4, -5, 6, 12, 1, -21, -1, -11, -3, -30}, /* V */ {0, 1, -9, -8, -10, -8, -6, -6, -10, 14, 0, -11, 6, 6, -8, -6, -8, -11, -5, 1, 18, -26, -3, -11, -8, -30}, /* W */ {0, -23, -21, -30, -27, -28, -1, -28, -11, -21, 0, -15, -8, -18, -16, -23, -20, 7, -9, -21, -26, 59, -17, -2, -24, -30}, /* X */ {0, -1, -3, -13, -4, -3, -10, -4, -3, -3, 0, -4, -6, -3, -2, -3, -3, -4, -1, -1, -3, -17, -4, -10, -3, -30}, /* Y */ {0, -14, -12, 0, -17, -17, 23, -22, -1, -5, 0, -18, -5, -12, -8, -20, -17, -17, -11, -11, -11, -2, -10, 37, -17, -30}, /* Z */ {0, -1, 8, -22, 11, 14, -21, -3, 7, -9, 0, 0, -11, -7, 4, -2, 14, -1, -2, -3, -8, -24, -3, -17, 14, -30}, /* * */ {0, -30, -30, -30, -30, -30, -30, -30, -30, -30, 0, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 210 substitution matrix, scale = ln(2)/3 = 0.231049 // # // # Expected score = -1.12, Entropy = 0.470 bits // # // # Lowest score = -9, Highest score = 18 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -2 0 0 -2 -1 0 1 -2 -1 -2 -2 -1 -4 1 1 1 -7 -4 0 0 0 0 -9 // R -2 7 0 -2 -4 1 -2 -3 2 -2 -4 4 -1 -5 0 0 -1 2 -5 -3 -1 0 -1 -9 // N 0 0 3 2 -4 1 2 0 2 -2 -3 1 -2 -4 -1 1 0 -5 -2 -2 3 1 0 -9 // D 0 -2 2 5 -6 2 4 0 1 -3 -5 0 -3 -7 -1 0 0 -8 -5 -3 4 3 -1 -9 // C -2 -4 -4 -6 12 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -3 -9 0 -2 -5 -6 -4 -9 // Q -1 1 1 2 -6 5 3 -2 3 -3 -2 1 -1 -6 0 -1 -1 -6 -5 -2 1 4 -1 -9 // E 0 -2 2 4 -6 3 5 0 0 -2 -4 0 -3 -6 -1 0 -1 -8 -5 -2 3 4 -1 -9 // G 1 -3 0 0 -4 -2 0 5 -3 -3 -5 -2 -3 -5 -1 1 0 -8 -6 -2 0 -1 -1 -9 // H -2 2 2 1 -4 3 0 -3 8 -3 -2 0 -3 -2 0 -1 -2 -3 0 -3 1 2 -1 -9 // I -1 -2 -2 -3 -3 -3 -2 -3 -3 5 2 -2 2 1 -3 -2 0 -6 -1 4 -3 -3 -1 -9 // L -2 -4 -3 -5 -7 -2 -4 -5 -2 2 7 -3 4 2 -3 -3 -2 -2 -1 2 -4 -3 -2 -9 // K -2 4 1 0 -6 1 0 -2 0 -2 -3 5 1 -6 -2 0 0 -4 -5 -3 0 0 -1 -9 // M -1 -1 -2 -3 -6 -1 -3 -3 -3 2 4 1 8 0 -3 -2 -1 -5 -3 2 -3 -2 -1 -9 // F -4 -5 -4 -7 -5 -6 -6 -5 -2 1 2 -6 0 10 -5 -4 -4 0 7 -2 -5 -6 -3 -9 // P 1 0 -1 -1 -3 0 -1 -1 0 -3 -3 -2 -3 -5 7 1 0 -7 -6 -2 -1 0 -1 -9 // S 1 0 1 0 0 -1 0 1 -1 -2 -3 0 -2 -4 1 2 2 -3 -3 -1 1 0 0 -9 // T 1 -1 0 0 -3 -1 -1 0 -2 0 -2 0 -1 -4 0 2 3 -6 -3 0 0 -1 0 -9 // W -7 2 -5 -8 -9 -6 -8 -8 -3 -6 -2 -4 -5 0 -7 -3 -6 18 -1 -7 -6 -7 -5 -9 // Y -4 -5 -2 -5 0 -5 -5 -6 0 -1 -1 -5 -3 7 -6 -3 -3 -1 11 -3 -4 -5 -3 -9 // V 0 -3 -2 -3 -2 -2 -2 -2 -3 4 2 -3 2 -2 -2 -1 0 -7 -3 5 -2 -2 -1 -9 // B 0 -1 3 4 -5 1 3 0 1 -3 -4 0 -3 -5 -1 1 0 -6 -4 -2 3 2 -1 -9 // Z 0 0 1 3 -6 4 4 -1 2 -3 -3 0 -2 -6 0 0 -1 -7 -5 -2 2 4 -1 -9 // X 0 -1 0 -1 -4 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -5 -3 -1 -1 -1 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM210 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -4, 1, -2, -1, 0, -2, -2, -1, 0, 1, -1, -2, 1, 1, 0, -7, 0, -4, 0, -9}, /* B */ {0, 0, 3, -5, 4, 3, -5, 0, 1, -3, 0, 0, -4, -3, 3, -1, 1, -1, 1, 0, -2, -6, -1, -4, 2, -9}, /* C */ {0, -2, -5, 12, -6, -6, -5, -4, -4, -3, 0, -6, -7, -6, -4, -3, -6, -4, 0, -3, -2, -9, -4, 0, -6, -9}, /* D */ {0, 0, 4, -6, 5, 4, -7, 0, 1, -3, 0, 0, -5, -3, 2, -1, 2, -2, 0, 0, -3, -8, -1, -5, 3, -9}, /* E */ {0, 0, 3, -6, 4, 5, -6, 0, 0, -2, 0, 0, -4, -3, 2, -1, 3, -2, 0, -1, -2, -8, -1, -5, 4, -9}, /* F */ {0, -4, -5, -5, -7, -6, 10, -5, -2, 1, 0, -6, 2, 0, -4, -5, -6, -5, -4, -4, -2, 0, -3, 7, -6, -9}, /* G */ {0, 1, 0, -4, 0, 0, -5, 5, -3, -3, 0, -2, -5, -3, 0, -1, -2, -3, 1, 0, -2, -8, -1, -6, -1, -9}, /* H */ {0, -2, 1, -4, 1, 0, -2, -3, 8, -3, 0, 0, -2, -3, 2, 0, 3, 2, -1, -2, -3, -3, -1, 0, 2, -9}, /* I */ {0, -1, -3, -3, -3, -2, 1, -3, -3, 5, 0, -2, 2, 2, -2, -3, -3, -2, -2, 0, 4, -6, -1, -1, -3, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -2, 0, -6, 0, 0, -6, -2, 0, -2, 0, 5, -3, 1, 1, -2, 1, 4, 0, 0, -3, -4, -1, -5, 0, -9}, /* L */ {0, -2, -4, -7, -5, -4, 2, -5, -2, 2, 0, -3, 7, 4, -3, -3, -2, -4, -3, -2, 2, -2, -2, -1, -3, -9}, /* M */ {0, -1, -3, -6, -3, -3, 0, -3, -3, 2, 0, 1, 4, 8, -2, -3, -1, -1, -2, -1, 2, -5, -1, -3, -2, -9}, /* N */ {0, 0, 3, -4, 2, 2, -4, 0, 2, -2, 0, 1, -3, -2, 3, -1, 1, 0, 1, 0, -2, -5, 0, -2, 1, -9}, /* P */ {0, 1, -1, -3, -1, -1, -5, -1, 0, -3, 0, -2, -3, -3, -1, 7, 0, 0, 1, 0, -2, -7, -1, -6, 0, -9}, /* Q */ {0, -1, 1, -6, 2, 3, -6, -2, 3, -3, 0, 1, -2, -1, 1, 0, 5, 1, -1, -1, -2, -6, -1, -5, 4, -9}, /* R */ {0, -2, -1, -4, -2, -2, -5, -3, 2, -2, 0, 4, -4, -1, 0, 0, 1, 7, 0, -1, -3, 2, -1, -5, 0, -9}, /* S */ {0, 1, 1, 0, 0, 0, -4, 1, -1, -2, 0, 0, -3, -2, 1, 1, -1, 0, 2, 2, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -3, 0, -1, -4, 0, -2, 0, 0, 0, -2, -1, 0, 0, -1, -1, 2, 3, 0, -6, 0, -3, -1, -9}, /* V */ {0, 0, -2, -2, -3, -2, -2, -2, -3, 4, 0, -3, 2, 2, -2, -2, -2, -3, -1, 0, 5, -7, -1, -3, -2, -9}, /* W */ {0, -7, -6, -9, -8, -8, 0, -8, -3, -6, 0, -4, -2, -5, -5, -7, -6, 2, -3, -6, -7, 18, -5, -1, -7, -9}, /* X */ {0, 0, -1, -4, -1, -1, -3, -1, -1, -1, 0, -1, -2, -1, 0, -1, -1, -1, 0, 0, -1, -5, -1, -3, -1, -9}, /* Y */ {0, -4, -4, 0, -5, -5, 7, -6, 0, -1, 0, -5, -1, -3, -2, -6, -5, -5, -3, -3, -3, -1, -3, 11, -5, -9}, /* Z */ {0, 0, 2, -6, 3, 4, -6, -1, 2, -3, 0, 0, -3, -2, 1, 0, 4, 0, 0, -1, -2, -7, -1, -5, 4, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 220 substitution matrix, scale = ln(2)/3 = 0.231049 // # // # Expected score = -1.06, Entropy = 0.437 bits // # // # Lowest score = -8, Highest score = 17 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -2 0 0 -2 -1 0 1 -2 -1 -2 -1 -1 -4 1 1 1 -6 -4 0 0 0 0 -8 // R -2 7 0 -2 -4 1 -1 -3 2 -2 -3 4 -1 -5 0 0 -1 2 -5 -3 -1 0 -1 -8 // N 0 0 3 2 -4 1 2 0 2 -2 -3 1 -2 -4 -1 1 0 -4 -2 -2 2 1 0 -8 // D 0 -2 2 4 -6 2 4 0 1 -3 -5 0 -3 -6 -1 0 0 -8 -5 -3 4 3 -1 -8 // C -2 -4 -4 -6 12 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -3 -8 0 -2 -5 -6 -3 -8 // Q -1 1 1 2 -6 5 3 -2 3 -2 -2 1 -1 -5 0 -1 -1 -5 -5 -2 1 4 -1 -8 // E 0 -1 2 4 -6 3 4 0 1 -2 -4 0 -2 -6 -1 0 -1 -8 -5 -2 3 4 -1 -8 // G 1 -3 0 0 -4 -2 0 5 -3 -3 -5 -2 -3 -5 -1 1 0 -8 -6 -2 0 -1 -1 -8 // H -2 2 2 1 -4 3 1 -3 7 -3 -2 0 -3 -2 0 -1 -2 -3 0 -3 1 2 -1 -8 // I -1 -2 -2 -3 -3 -2 -2 -3 -3 5 2 -2 2 1 -2 -2 0 -6 -1 4 -2 -2 -1 -8 // L -2 -3 -3 -5 -7 -2 -4 -5 -2 2 6 -3 4 2 -3 -3 -2 -2 -1 2 -4 -3 -2 -8 // K -1 4 1 0 -6 1 0 -2 0 -2 -3 5 1 -6 -1 0 0 -4 -5 -3 0 0 -1 -8 // M -1 -1 -2 -3 -6 -1 -2 -3 -3 2 4 1 8 0 -2 -2 -1 -5 -3 2 -3 -2 -1 -8 // F -4 -5 -4 -6 -5 -5 -6 -5 -2 1 2 -6 0 10 -5 -4 -4 0 7 -2 -5 -6 -3 -8 // P 1 0 -1 -1 -3 0 -1 -1 0 -2 -3 -1 -2 -5 7 1 0 -6 -6 -1 -1 0 -1 -8 // S 1 0 1 0 0 -1 0 1 -1 -2 -3 0 -2 -4 1 2 2 -3 -3 -1 0 0 0 -8 // T 1 -1 0 0 -3 -1 -1 0 -2 0 -2 0 -1 -4 0 2 3 -6 -3 0 0 -1 0 -8 // W -6 2 -4 -8 -8 -5 -8 -8 -3 -6 -2 -4 -5 0 -6 -3 -6 17 0 -7 -6 -7 -5 -8 // Y -4 -5 -2 -5 0 -5 -5 -6 0 -1 -1 -5 -3 7 -6 -3 -3 0 11 -3 -3 -5 -3 -8 // V 0 -3 -2 -3 -2 -2 -2 -2 -3 4 2 -3 2 -2 -1 -1 0 -7 -3 5 -2 -2 -1 -8 // B 0 -1 2 4 -5 1 3 0 1 -2 -4 0 -3 -5 -1 0 0 -6 -3 -2 3 2 -1 -8 // Z 0 0 1 3 -6 4 4 -1 2 -2 -3 0 -2 -6 0 0 -1 -7 -5 -2 2 4 -1 -8 // X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -5 -3 -1 -1 -1 -1 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // PAM220 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -4, 1, -2, -1, 0, -1, -2, -1, 0, 1, -1, -2, 1, 1, 0, -6, 0, -4, 0, -8}, /* B */ {0, 0, 3, -5, 4, 3, -5, 0, 1, -2, 0, 0, -4, -3, 2, -1, 1, -1, 0, 0, -2, -6, -1, -3, 2, -8}, /* C */ {0, -2, -5, 12, -6, -6, -5, -4, -4, -3, 0, -6, -7, -6, -4, -3, -6, -4, 0, -3, -2, -8, -3, 0, -6, -8}, /* D */ {0, 0, 4, -6, 4, 4, -6, 0, 1, -3, 0, 0, -5, -3, 2, -1, 2, -2, 0, 0, -3, -8, -1, -5, 3, -8}, /* E */ {0, 0, 3, -6, 4, 4, -6, 0, 1, -2, 0, 0, -4, -2, 2, -1, 3, -1, 0, -1, -2, -8, -1, -5, 4, -8}, /* F */ {0, -4, -5, -5, -6, -6, 10, -5, -2, 1, 0, -6, 2, 0, -4, -5, -5, -5, -4, -4, -2, 0, -3, 7, -6, -8}, /* G */ {0, 1, 0, -4, 0, 0, -5, 5, -3, -3, 0, -2, -5, -3, 0, -1, -2, -3, 1, 0, -2, -8, -1, -6, -1, -8}, /* H */ {0, -2, 1, -4, 1, 1, -2, -3, 7, -3, 0, 0, -2, -3, 2, 0, 3, 2, -1, -2, -3, -3, -1, 0, 2, -8}, /* I */ {0, -1, -2, -3, -3, -2, 1, -3, -3, 5, 0, -2, 2, 2, -2, -2, -2, -2, -2, 0, 4, -6, -1, -1, -2, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 0, -6, 0, 0, -6, -2, 0, -2, 0, 5, -3, 1, 1, -1, 1, 4, 0, 0, -3, -4, -1, -5, 0, -8}, /* L */ {0, -2, -4, -7, -5, -4, 2, -5, -2, 2, 0, -3, 6, 4, -3, -3, -2, -3, -3, -2, 2, -2, -2, -1, -3, -8}, /* M */ {0, -1, -3, -6, -3, -2, 0, -3, -3, 2, 0, 1, 4, 8, -2, -2, -1, -1, -2, -1, 2, -5, -1, -3, -2, -8}, /* N */ {0, 0, 2, -4, 2, 2, -4, 0, 2, -2, 0, 1, -3, -2, 3, -1, 1, 0, 1, 0, -2, -4, 0, -2, 1, -8}, /* P */ {0, 1, -1, -3, -1, -1, -5, -1, 0, -2, 0, -1, -3, -2, -1, 7, 0, 0, 1, 0, -1, -6, -1, -6, 0, -8}, /* Q */ {0, -1, 1, -6, 2, 3, -5, -2, 3, -2, 0, 1, -2, -1, 1, 0, 5, 1, -1, -1, -2, -5, -1, -5, 4, -8}, /* R */ {0, -2, -1, -4, -2, -1, -5, -3, 2, -2, 0, 4, -3, -1, 0, 0, 1, 7, 0, -1, -3, 2, -1, -5, 0, -8}, /* S */ {0, 1, 0, 0, 0, 0, -4, 1, -1, -2, 0, 0, -3, -2, 1, 1, -1, 0, 2, 2, -1, -3, 0, -3, 0, -8}, /* T */ {0, 1, 0, -3, 0, -1, -4, 0, -2, 0, 0, 0, -2, -1, 0, 0, -1, -1, 2, 3, 0, -6, 0, -3, -1, -8}, /* V */ {0, 0, -2, -2, -3, -2, -2, -2, -3, 4, 0, -3, 2, 2, -2, -1, -2, -3, -1, 0, 5, -7, -1, -3, -2, -8}, /* W */ {0, -6, -6, -8, -8, -8, 0, -8, -3, -6, 0, -4, -2, -5, -4, -6, -5, 2, -3, -6, -7, 17, -5, 0, -7, -8}, /* X */ {0, 0, -1, -3, -1, -1, -3, -1, -1, -1, 0, -1, -2, -1, 0, -1, -1, -1, 0, 0, -1, -5, -1, -3, -1, -8}, /* Y */ {0, -4, -3, 0, -5, -5, 7, -6, 0, -1, 0, -5, -1, -3, -2, -6, -5, -5, -3, -3, -3, 0, -3, 11, -5, -8}, /* Z */ {0, 0, 2, -6, 3, 4, -6, -1, 2, -2, 0, 0, -3, -2, 1, 0, 4, 0, 0, -1, -2, -7, -1, -5, 4, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 230 substitution matrix, scale = ln(2)/3 = 0.231049 // # // # Expected score = -0.991, Entropy = 0.407 bits // # // # Lowest score = -8, Highest score = 17 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -2 0 0 -2 -1 0 1 -2 -1 -2 -1 -1 -4 1 1 1 -6 -4 0 0 0 0 -8 // R -2 7 0 -2 -4 1 -1 -3 2 -2 -3 4 -1 -5 0 0 -1 2 -5 -3 -1 0 -1 -8 // N 0 0 2 2 -4 1 1 0 2 -2 -3 1 -2 -4 -1 1 0 -4 -2 -2 2 1 0 -8 // D 0 -2 2 4 -6 2 4 1 1 -3 -4 0 -3 -6 -1 0 0 -7 -5 -2 3 3 -1 -8 // C -2 -4 -4 -6 12 -6 -6 -4 -4 -2 -7 -6 -6 -5 -3 0 -2 -8 0 -2 -5 -6 -3 -8 // Q -1 1 1 2 -6 5 3 -1 3 -2 -2 1 -1 -5 0 -1 -1 -5 -4 -2 1 4 -1 -8 // E 0 -1 1 4 -6 3 4 0 1 -2 -4 0 -2 -6 -1 0 -1 -8 -5 -2 3 4 -1 -8 // G 1 -3 0 1 -4 -1 0 5 -2 -3 -4 -2 -3 -5 -1 1 0 -7 -6 -2 0 -1 -1 -8 // H -2 2 2 1 -4 3 1 -2 7 -3 -2 0 -2 -2 0 -1 -2 -3 0 -2 1 2 -1 -8 // I -1 -2 -2 -3 -2 -2 -2 -3 -3 5 2 -2 2 1 -2 -2 0 -6 -1 4 -2 -2 -1 -8 // L -2 -3 -3 -4 -7 -2 -4 -4 -2 2 6 -3 4 2 -3 -3 -2 -2 -1 2 -4 -3 -2 -8 // K -1 4 1 0 -6 1 0 -2 0 -2 -3 5 0 -6 -1 0 0 -4 -5 -3 1 0 -1 -8 // M -1 -1 -2 -3 -6 -1 -2 -3 -2 2 4 0 7 0 -2 -2 -1 -5 -3 2 -2 -2 -1 -8 // F -4 -5 -4 -6 -5 -5 -6 -5 -2 1 2 -6 0 9 -5 -3 -3 0 7 -1 -5 -6 -3 -8 // P 1 0 -1 -1 -3 0 -1 -1 0 -2 -3 -1 -2 -5 6 1 0 -6 -5 -1 -1 0 -1 -8 // S 1 0 1 0 0 -1 0 1 -1 -2 -3 0 -2 -3 1 2 2 -3 -3 -1 0 0 0 -8 // T 1 -1 0 0 -2 -1 -1 0 -2 0 -2 0 -1 -3 0 2 3 -6 -3 0 0 -1 0 -8 // W -6 2 -4 -7 -8 -5 -8 -7 -3 -6 -2 -4 -5 0 -6 -3 -6 17 0 -7 -6 -6 -4 -8 // Y -4 -5 -2 -5 0 -4 -5 -6 0 -1 -1 -5 -3 7 -5 -3 -3 0 10 -3 -3 -5 -3 -8 // V 0 -3 -2 -2 -2 -2 -2 -2 -2 4 2 -3 2 -1 -1 -1 0 -7 -3 5 -2 -2 -1 -8 // B 0 -1 2 3 -5 1 3 0 1 -2 -4 1 -2 -5 -1 0 0 -6 -3 -2 3 2 -1 -8 // Z 0 0 1 3 -6 4 4 -1 2 -2 -3 0 -2 -6 0 0 -1 -6 -5 -2 2 4 -1 -8 // X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -4 -3 -1 -1 -1 -1 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // PAM230 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -4, 1, -2, -1, 0, -1, -2, -1, 0, 1, -1, -2, 1, 1, 0, -6, 0, -4, 0, -8}, /* B */ {0, 0, 3, -5, 3, 3, -5, 0, 1, -2, 0, 1, -4, -2, 2, -1, 1, -1, 0, 0, -2, -6, -1, -3, 2, -8}, /* C */ {0, -2, -5, 12, -6, -6, -5, -4, -4, -2, 0, -6, -7, -6, -4, -3, -6, -4, 0, -2, -2, -8, -3, 0, -6, -8}, /* D */ {0, 0, 3, -6, 4, 4, -6, 1, 1, -3, 0, 0, -4, -3, 2, -1, 2, -2, 0, 0, -2, -7, -1, -5, 3, -8}, /* E */ {0, 0, 3, -6, 4, 4, -6, 0, 1, -2, 0, 0, -4, -2, 1, -1, 3, -1, 0, -1, -2, -8, -1, -5, 4, -8}, /* F */ {0, -4, -5, -5, -6, -6, 9, -5, -2, 1, 0, -6, 2, 0, -4, -5, -5, -5, -3, -3, -1, 0, -3, 7, -6, -8}, /* G */ {0, 1, 0, -4, 1, 0, -5, 5, -2, -3, 0, -2, -4, -3, 0, -1, -1, -3, 1, 0, -2, -7, -1, -6, -1, -8}, /* H */ {0, -2, 1, -4, 1, 1, -2, -2, 7, -3, 0, 0, -2, -2, 2, 0, 3, 2, -1, -2, -2, -3, -1, 0, 2, -8}, /* I */ {0, -1, -2, -2, -3, -2, 1, -3, -3, 5, 0, -2, 2, 2, -2, -2, -2, -2, -2, 0, 4, -6, -1, -1, -2, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -6, 0, 0, -6, -2, 0, -2, 0, 5, -3, 0, 1, -1, 1, 4, 0, 0, -3, -4, -1, -5, 0, -8}, /* L */ {0, -2, -4, -7, -4, -4, 2, -4, -2, 2, 0, -3, 6, 4, -3, -3, -2, -3, -3, -2, 2, -2, -2, -1, -3, -8}, /* M */ {0, -1, -2, -6, -3, -2, 0, -3, -2, 2, 0, 0, 4, 7, -2, -2, -1, -1, -2, -1, 2, -5, -1, -3, -2, -8}, /* N */ {0, 0, 2, -4, 2, 1, -4, 0, 2, -2, 0, 1, -3, -2, 2, -1, 1, 0, 1, 0, -2, -4, 0, -2, 1, -8}, /* P */ {0, 1, -1, -3, -1, -1, -5, -1, 0, -2, 0, -1, -3, -2, -1, 6, 0, 0, 1, 0, -1, -6, -1, -5, 0, -8}, /* Q */ {0, -1, 1, -6, 2, 3, -5, -1, 3, -2, 0, 1, -2, -1, 1, 0, 5, 1, -1, -1, -2, -5, -1, -4, 4, -8}, /* R */ {0, -2, -1, -4, -2, -1, -5, -3, 2, -2, 0, 4, -3, -1, 0, 0, 1, 7, 0, -1, -3, 2, -1, -5, 0, -8}, /* S */ {0, 1, 0, 0, 0, 0, -3, 1, -1, -2, 0, 0, -3, -2, 1, 1, -1, 0, 2, 2, -1, -3, 0, -3, 0, -8}, /* T */ {0, 1, 0, -2, 0, -1, -3, 0, -2, 0, 0, 0, -2, -1, 0, 0, -1, -1, 2, 3, 0, -6, 0, -3, -1, -8}, /* V */ {0, 0, -2, -2, -2, -2, -1, -2, -2, 4, 0, -3, 2, 2, -2, -1, -2, -3, -1, 0, 5, -7, -1, -3, -2, -8}, /* W */ {0, -6, -6, -8, -7, -8, 0, -7, -3, -6, 0, -4, -2, -5, -4, -6, -5, 2, -3, -6, -7, 17, -4, 0, -6, -8}, /* X */ {0, 0, -1, -3, -1, -1, -3, -1, -1, -1, 0, -1, -2, -1, 0, -1, -1, -1, 0, 0, -1, -4, -1, -3, -1, -8}, /* Y */ {0, -4, -3, 0, -5, -5, 7, -6, 0, -1, 0, -5, -1, -3, -2, -5, -4, -5, -3, -3, -3, 0, -3, 10, -5, -8}, /* Z */ {0, 0, 2, -6, 3, 4, -6, -1, 2, -2, 0, 0, -3, -2, 1, 0, 4, 0, 0, -1, -2, -6, -1, -5, 4, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 240 substitution matrix, scale = ln(2)/3 = 0.231049 // # // # Expected score = -0.923, Entropy = 0.379 bits // # // # Lowest score = -8, Highest score = 17 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -2 0 0 -2 0 0 1 -1 -1 -2 -1 -1 -4 1 1 1 -6 -4 0 0 0 0 -8 // R -2 6 0 -1 -4 1 -1 -3 2 -2 -3 3 0 -5 0 0 -1 2 -4 -3 -1 0 -1 -8 // N 0 0 2 2 -4 1 1 0 2 -2 -3 1 -2 -4 -1 1 0 -4 -2 -2 2 1 0 -8 // D 0 -1 2 4 -5 2 4 1 1 -2 -4 0 -3 -6 -1 0 0 -7 -4 -2 3 3 -1 -8 // C -2 -4 -4 -5 12 -6 -6 -4 -4 -2 -6 -6 -5 -5 -3 0 -2 -8 0 -2 -5 -6 -3 -8 // Q 0 1 1 2 -6 4 3 -1 3 -2 -2 1 -1 -5 0 -1 -1 -5 -4 -2 1 3 -1 -8 // E 0 -1 1 4 -6 3 4 0 1 -2 -3 0 -2 -6 -1 0 0 -7 -4 -2 3 3 -1 -8 // G 1 -3 0 1 -4 -1 0 5 -2 -3 -4 -2 -3 -5 -1 1 0 -7 -5 -1 0 0 -1 -8 // H -1 2 2 1 -4 3 1 -2 7 -3 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 -1 -8 // I -1 -2 -2 -2 -2 -2 -2 -3 -3 5 2 -2 2 1 -2 -1 0 -5 -1 4 -2 -2 -1 -8 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 6 -3 4 2 -3 -3 -2 -2 -1 2 -4 -3 -1 -8 // K -1 3 1 0 -6 1 0 -2 0 -2 -3 5 0 -5 -1 0 0 -4 -5 -3 1 0 -1 -8 // M -1 0 -2 -3 -5 -1 -2 -3 -2 2 4 0 7 0 -2 -2 -1 -4 -3 2 -2 -2 -1 -8 // F -4 -5 -4 -6 -5 -5 -6 -5 -2 1 2 -5 0 9 -5 -3 -3 0 7 -1 -5 -5 -2 -8 // P 1 0 -1 -1 -3 0 -1 -1 0 -2 -3 -1 -2 -5 6 1 0 -6 -5 -1 -1 0 -1 -8 // S 1 0 1 0 0 -1 0 1 -1 -1 -3 0 -2 -3 1 2 1 -3 -3 -1 0 0 0 -8 // T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 0 1 3 -5 -3 0 0 -1 0 -8 // W -6 2 -4 -7 -8 -5 -7 -7 -3 -5 -2 -4 -4 0 -6 -3 -5 17 0 -6 -5 -6 -4 -8 // Y -4 -4 -2 -4 0 -4 -4 -5 0 -1 -1 -5 -3 7 -5 -3 -3 0 10 -3 -3 -4 -2 -8 // V 0 -3 -2 -2 -2 -2 -2 -1 -2 4 2 -3 2 -1 -1 -1 0 -6 -3 4 -2 -2 -1 -8 // B 0 -1 2 3 -5 1 3 0 1 -2 -4 1 -2 -5 -1 0 0 -5 -3 -2 3 2 -1 -8 // Z 0 0 1 3 -6 3 3 0 2 -2 -3 0 -2 -5 0 0 -1 -6 -4 -2 2 3 -1 -8 // X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -1 -1 -1 -2 -1 0 0 -4 -2 -1 -1 -1 -1 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // PAM240 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -4, 1, -1, -1, 0, -1, -2, -1, 0, 1, 0, -2, 1, 1, 0, -6, 0, -4, 0, -8}, /* B */ {0, 0, 3, -5, 3, 3, -5, 0, 1, -2, 0, 1, -4, -2, 2, -1, 1, -1, 0, 0, -2, -5, -1, -3, 2, -8}, /* C */ {0, -2, -5, 12, -5, -6, -5, -4, -4, -2, 0, -6, -6, -5, -4, -3, -6, -4, 0, -2, -2, -8, -3, 0, -6, -8}, /* D */ {0, 0, 3, -5, 4, 4, -6, 1, 1, -2, 0, 0, -4, -3, 2, -1, 2, -1, 0, 0, -2, -7, -1, -4, 3, -8}, /* E */ {0, 0, 3, -6, 4, 4, -6, 0, 1, -2, 0, 0, -3, -2, 1, -1, 3, -1, 0, 0, -2, -7, -1, -4, 3, -8}, /* F */ {0, -4, -5, -5, -6, -6, 9, -5, -2, 1, 0, -5, 2, 0, -4, -5, -5, -5, -3, -3, -1, 0, -2, 7, -5, -8}, /* G */ {0, 1, 0, -4, 1, 0, -5, 5, -2, -3, 0, -2, -4, -3, 0, -1, -1, -3, 1, 0, -1, -7, -1, -5, 0, -8}, /* H */ {0, -1, 1, -4, 1, 1, -2, -2, 7, -3, 0, 0, -2, -2, 2, 0, 3, 2, -1, -1, -2, -3, -1, 0, 2, -8}, /* I */ {0, -1, -2, -2, -2, -2, 1, -3, -3, 5, 0, -2, 2, 2, -2, -2, -2, -2, -1, 0, 4, -5, -1, -1, -2, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -6, 0, 0, -5, -2, 0, -2, 0, 5, -3, 0, 1, -1, 1, 3, 0, 0, -3, -4, -1, -5, 0, -8}, /* L */ {0, -2, -4, -6, -4, -3, 2, -4, -2, 2, 0, -3, 6, 4, -3, -3, -2, -3, -3, -2, 2, -2, -1, -1, -3, -8}, /* M */ {0, -1, -2, -5, -3, -2, 0, -3, -2, 2, 0, 0, 4, 7, -2, -2, -1, 0, -2, -1, 2, -4, -1, -3, -2, -8}, /* N */ {0, 0, 2, -4, 2, 1, -4, 0, 2, -2, 0, 1, -3, -2, 2, -1, 1, 0, 1, 0, -2, -4, 0, -2, 1, -8}, /* P */ {0, 1, -1, -3, -1, -1, -5, -1, 0, -2, 0, -1, -3, -2, -1, 6, 0, 0, 1, 0, -1, -6, -1, -5, 0, -8}, /* Q */ {0, 0, 1, -6, 2, 3, -5, -1, 3, -2, 0, 1, -2, -1, 1, 0, 4, 1, -1, -1, -2, -5, -1, -4, 3, -8}, /* R */ {0, -2, -1, -4, -1, -1, -5, -3, 2, -2, 0, 3, -3, 0, 0, 0, 1, 6, 0, -1, -3, 2, -1, -4, 0, -8}, /* S */ {0, 1, 0, 0, 0, 0, -3, 1, -1, -1, 0, 0, -3, -2, 1, 1, -1, 0, 2, 1, -1, -3, 0, -3, 0, -8}, /* T */ {0, 1, 0, -2, 0, 0, -3, 0, -1, 0, 0, 0, -2, -1, 0, 0, -1, -1, 1, 3, 0, -5, 0, -3, -1, -8}, /* V */ {0, 0, -2, -2, -2, -2, -1, -1, -2, 4, 0, -3, 2, 2, -2, -1, -2, -3, -1, 0, 4, -6, -1, -3, -2, -8}, /* W */ {0, -6, -5, -8, -7, -7, 0, -7, -3, -5, 0, -4, -2, -4, -4, -6, -5, 2, -3, -5, -6, 17, -4, 0, -6, -8}, /* X */ {0, 0, -1, -3, -1, -1, -2, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, 0, -1, -4, -1, -2, -1, -8}, /* Y */ {0, -4, -3, 0, -4, -4, 7, -5, 0, -1, 0, -5, -1, -3, -2, -5, -4, -4, -3, -3, -3, 0, -2, 10, -4, -8}, /* Z */ {0, 0, 2, -6, 3, 3, -5, 0, 2, -2, 0, 0, -3, -2, 1, 0, 3, 0, 0, -1, -2, -6, -1, -4, 3, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 250 substitution matrix, scale = ln(2)/3 = 0.231049 // # // # Expected score = -0.844, Entropy = 0.354 bits // # // # Lowest score = -8, Highest score = 17 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -2 0 0 -2 0 0 1 -1 -1 -2 -1 -1 -3 1 1 1 -6 -3 0 0 0 0 -8 // R -2 6 0 -1 -4 1 -1 -3 2 -2 -3 3 0 -4 0 0 -1 2 -4 -2 -1 0 -1 -8 // N 0 0 2 2 -4 1 1 0 2 -2 -3 1 -2 -3 0 1 0 -4 -2 -2 2 1 0 -8 // D 0 -1 2 4 -5 2 3 1 1 -2 -4 0 -3 -6 -1 0 0 -7 -4 -2 3 3 -1 -8 // C -2 -4 -4 -5 12 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3 0 -2 -8 0 -2 -4 -5 -3 -8 // Q 0 1 1 2 -5 4 2 -1 3 -2 -2 1 -1 -5 0 -1 -1 -5 -4 -2 1 3 -1 -8 // E 0 -1 1 3 -5 2 4 0 1 -2 -3 0 -2 -5 -1 0 0 -7 -4 -2 3 3 -1 -8 // G 1 -3 0 1 -3 -1 0 5 -2 -3 -4 -2 -3 -5 0 1 0 -7 -5 -1 0 0 -1 -8 // H -1 2 2 1 -3 3 1 -2 6 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 -1 -8 // I -1 -2 -2 -2 -2 -2 -2 -3 -2 5 2 -2 2 1 -2 -1 0 -5 -1 4 -2 -2 -1 -8 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 6 -3 4 2 -3 -3 -2 -2 -1 2 -3 -3 -1 -8 // K -1 3 1 0 -5 1 0 -2 0 -2 -3 5 0 -5 -1 0 0 -3 -4 -2 1 0 -1 -8 // M -1 0 -2 -3 -5 -1 -2 -3 -2 2 4 0 6 0 -2 -2 -1 -4 -2 2 -2 -2 -1 -8 // F -3 -4 -3 -6 -4 -5 -5 -5 -2 1 2 -5 0 9 -5 -3 -3 0 7 -1 -4 -5 -2 -8 // P 1 0 0 -1 -3 0 -1 0 0 -2 -3 -1 -2 -5 6 1 0 -6 -5 -1 -1 0 -1 -8 // S 1 0 1 0 0 -1 0 1 -1 -1 -3 0 -2 -3 1 2 1 -2 -3 -1 0 0 0 -8 // T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 0 1 3 -5 -3 0 0 -1 0 -8 // W -6 2 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4 0 -6 -2 -5 17 0 -6 -5 -6 -4 -8 // Y -3 -4 -2 -4 0 -4 -4 -5 0 -1 -1 -4 -2 7 -5 -3 -3 0 10 -2 -3 -4 -2 -8 // V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 -1 -8 // B 0 -1 2 3 -4 1 3 0 1 -2 -3 1 -2 -4 -1 0 0 -5 -3 -2 3 2 -1 -8 // Z 0 0 1 3 -5 3 3 0 2 -2 -3 0 -2 -5 0 0 -1 -6 -4 -2 2 3 -1 -8 // X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -1 -1 -1 -2 -1 0 0 -4 -2 -1 -1 -1 -1 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // PAM250 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -3, 1, -1, -1, 0, -1, -2, -1, 0, 1, 0, -2, 1, 1, 0, -6, 0, -3, 0, -8}, /* B */ {0, 0, 3, -4, 3, 3, -4, 0, 1, -2, 0, 1, -3, -2, 2, -1, 1, -1, 0, 0, -2, -5, -1, -3, 2, -8}, /* C */ {0, -2, -4, 12, -5, -5, -4, -3, -3, -2, 0, -5, -6, -5, -4, -3, -5, -4, 0, -2, -2, -8, -3, 0, -5, -8}, /* D */ {0, 0, 3, -5, 4, 3, -6, 1, 1, -2, 0, 0, -4, -3, 2, -1, 2, -1, 0, 0, -2, -7, -1, -4, 3, -8}, /* E */ {0, 0, 3, -5, 3, 4, -5, 0, 1, -2, 0, 0, -3, -2, 1, -1, 2, -1, 0, 0, -2, -7, -1, -4, 3, -8}, /* F */ {0, -3, -4, -4, -6, -5, 9, -5, -2, 1, 0, -5, 2, 0, -3, -5, -5, -4, -3, -3, -1, 0, -2, 7, -5, -8}, /* G */ {0, 1, 0, -3, 1, 0, -5, 5, -2, -3, 0, -2, -4, -3, 0, 0, -1, -3, 1, 0, -1, -7, -1, -5, 0, -8}, /* H */ {0, -1, 1, -3, 1, 1, -2, -2, 6, -2, 0, 0, -2, -2, 2, 0, 3, 2, -1, -1, -2, -3, -1, 0, 2, -8}, /* I */ {0, -1, -2, -2, -2, -2, 1, -3, -2, 5, 0, -2, 2, 2, -2, -2, -2, -2, -1, 0, 4, -5, -1, -1, -2, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -5, 0, 0, -5, -2, 0, -2, 0, 5, -3, 0, 1, -1, 1, 3, 0, 0, -2, -3, -1, -4, 0, -8}, /* L */ {0, -2, -3, -6, -4, -3, 2, -4, -2, 2, 0, -3, 6, 4, -3, -3, -2, -3, -3, -2, 2, -2, -1, -1, -3, -8}, /* M */ {0, -1, -2, -5, -3, -2, 0, -3, -2, 2, 0, 0, 4, 6, -2, -2, -1, 0, -2, -1, 2, -4, -1, -2, -2, -8}, /* N */ {0, 0, 2, -4, 2, 1, -3, 0, 2, -2, 0, 1, -3, -2, 2, 0, 1, 0, 1, 0, -2, -4, 0, -2, 1, -8}, /* P */ {0, 1, -1, -3, -1, -1, -5, 0, 0, -2, 0, -1, -3, -2, 0, 6, 0, 0, 1, 0, -1, -6, -1, -5, 0, -8}, /* Q */ {0, 0, 1, -5, 2, 2, -5, -1, 3, -2, 0, 1, -2, -1, 1, 0, 4, 1, -1, -1, -2, -5, -1, -4, 3, -8}, /* R */ {0, -2, -1, -4, -1, -1, -4, -3, 2, -2, 0, 3, -3, 0, 0, 0, 1, 6, 0, -1, -2, 2, -1, -4, 0, -8}, /* S */ {0, 1, 0, 0, 0, 0, -3, 1, -1, -1, 0, 0, -3, -2, 1, 1, -1, 0, 2, 1, -1, -2, 0, -3, 0, -8}, /* T */ {0, 1, 0, -2, 0, 0, -3, 0, -1, 0, 0, 0, -2, -1, 0, 0, -1, -1, 1, 3, 0, -5, 0, -3, -1, -8}, /* V */ {0, 0, -2, -2, -2, -2, -1, -1, -2, 4, 0, -2, 2, 2, -2, -1, -2, -2, -1, 0, 4, -6, -1, -2, -2, -8}, /* W */ {0, -6, -5, -8, -7, -7, 0, -7, -3, -5, 0, -3, -2, -4, -4, -6, -5, 2, -2, -5, -6, 17, -4, 0, -6, -8}, /* X */ {0, 0, -1, -3, -1, -1, -2, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, 0, -1, -4, -1, -2, -1, -8}, /* Y */ {0, -3, -3, 0, -4, -4, 7, -5, 0, -1, 0, -4, -1, -2, -2, -5, -4, -4, -3, -3, -2, 0, -2, 10, -4, -8}, /* Z */ {0, 0, 2, -5, 3, 3, -5, 0, 2, -2, 0, 0, -3, -2, 1, 0, 3, 0, 0, -1, -2, -6, -1, -4, 3, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 250 substitution matrix, scale = 0.0693200 // # // # Expected score = -2.81, Entropy = 0.354 bits // # // # Lowest score = -26, Highest score = 57 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 6 -5 1 1 -7 -1 1 4 -4 -2 -6 -4 -4 -12 4 4 4 -19 -12 1 1 0 -1 -26 // R -5 20 0 -4 -12 4 -4 -8 5 -7 -10 11 -1 -15 -1 -1 -3 7 -14 -8 -2 0 -3 -26 // N 1 0 7 7 -12 3 5 1 5 -6 -10 3 -6 -12 -2 2 1 -13 -7 -6 7 4 -1 -26 // D 1 -4 7 13 -17 5 11 2 2 -8 -13 0 -9 -19 -3 1 0 -22 -14 -7 10 9 -2 -26 // C -7 -12 -12 -17 40 -18 -18 -11 -11 -8 -20 -18 -17 -14 -9 0 -7 -26 1 -6 -15 -18 -10 -26 // Q -1 4 3 5 -18 13 8 -4 10 -7 -6 2 -3 -15 1 -2 -3 -16 -13 -6 4 11 -2 -26 // E 1 -4 5 11 -18 8 13 1 2 -7 -11 0 -7 -18 -2 0 -1 -23 -14 -6 9 11 -2 -26 // G 4 -8 1 2 -11 -4 1 16 -7 -8 -13 -6 -9 -16 -2 4 0 -23 -17 -4 2 -1 -3 -26 // H -4 5 5 2 -11 10 2 -7 22 -8 -7 0 -7 -6 -1 -3 -4 -9 0 -7 4 6 -2 -26 // I -2 -7 -6 -8 -8 -7 -7 -8 -8 15 8 -6 7 3 -7 -5 0 -17 -3 12 -7 -7 -2 -26 // L -6 -10 -10 -13 -20 -6 -11 -13 -7 8 20 -9 12 6 -8 -9 -6 -6 -3 6 -11 -9 -4 -26 // K -4 11 3 0 -18 2 0 -6 0 -6 -9 15 1 -17 -4 -1 0 -12 -15 -8 2 1 -3 -26 // M -4 -1 -6 -9 -17 -3 -7 -9 -7 7 12 1 21 1 -7 -5 -2 -14 -8 6 -7 -5 -2 -26 // F -12 -15 -12 -19 -14 -15 -18 -16 -6 3 6 -17 1 30 -15 -11 -10 1 23 -4 -15 -17 -8 -26 // P 4 -1 -2 -3 -9 1 -2 -2 -1 -7 -8 -4 -7 -15 19 3 1 -19 -16 -4 -2 -1 -2 -26 // S 4 -1 2 1 0 -2 0 4 -3 -5 -9 -1 -5 -11 3 5 4 -8 -9 -3 2 -1 -1 -26 // T 4 -3 1 0 -7 -3 -1 0 -4 0 -6 0 -2 -10 1 4 9 -17 -9 1 0 -2 -1 -26 // W -19 7 -13 -22 -26 -16 -23 -23 -9 -17 -6 -12 -14 1 -19 -8 -17 57 0 -21 -18 -19 -13 -26 // Y -12 -14 -7 -14 1 -13 -14 -17 0 -3 -3 -15 -8 23 -16 -9 -9 0 34 -8 -10 -14 -8 -26 // V 1 -8 -6 -7 -6 -6 -6 -4 -7 12 6 -8 6 -4 -4 -3 1 -21 -8 14 -6 -6 -2 -26 // B 1 -2 7 10 -15 4 9 2 4 -7 -11 2 -7 -15 -2 2 0 -18 -10 -6 9 7 -2 -26 // Z 0 0 4 9 -18 11 11 -1 6 -7 -9 1 -5 -17 -1 -1 -2 -19 -14 -6 7 11 -2 -26 // X -1 -3 -1 -2 -10 -2 -2 -3 -2 -2 -4 -3 -2 -8 -2 -1 -1 -13 -8 -2 -2 -2 -3 -26 // * -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 -26 1 // PAM250_cdi = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 6, 1, -7, 1, 1, -12, 4, -4, -2, 0, -4, -6, -4, 1, 4, -1, -5, 4, 4, 1, -19, -1, -12, 0, -26}, /* B */ {0, 1, 9, -15, 10, 9, -15, 2, 4, -7, 0, 2, -11, -7, 7, -2, 4, -2, 2, 0, -6, -18, -2, -10, 7, -26}, /* C */ {0, -7, -15, 40, -17, -18, -14, -11, -11, -8, 0, -18, -20, -17, -12, -9, -18, -12, 0, -7, -6, -26, -10, 1, -18, -26}, /* D */ {0, 1, 10, -17, 13, 11, -19, 2, 2, -8, 0, 0, -13, -9, 7, -3, 5, -4, 1, 0, -7, -22, -2, -14, 9, -26}, /* E */ {0, 1, 9, -18, 11, 13, -18, 1, 2, -7, 0, 0, -11, -7, 5, -2, 8, -4, 0, -1, -6, -23, -2, -14, 11, -26}, /* F */ {0, -12, -15, -14, -19, -18, 30, -16, -6, 3, 0, -17, 6, 1, -12, -15, -15, -15, -11, -10, -4, 1, -8, 23, -17, -26}, /* G */ {0, 4, 2, -11, 2, 1, -16, 16, -7, -8, 0, -6, -13, -9, 1, -2, -4, -8, 4, 0, -4, -23, -3, -17, -1, -26}, /* H */ {0, -4, 4, -11, 2, 2, -6, -7, 22, -8, 0, 0, -7, -7, 5, -1, 10, 5, -3, -4, -7, -9, -2, 0, 6, -26}, /* I */ {0, -2, -7, -8, -8, -7, 3, -8, -8, 15, 0, -6, 8, 7, -6, -7, -7, -7, -5, 0, 12, -17, -2, -3, -7, -26}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -4, 2, -18, 0, 0, -17, -6, 0, -6, 0, 15, -9, 1, 3, -4, 2, 11, -1, 0, -8, -12, -3, -15, 1, -26}, /* L */ {0, -6, -11, -20, -13, -11, 6, -13, -7, 8, 0, -9, 20, 12, -10, -8, -6, -10, -9, -6, 6, -6, -4, -3, -9, -26}, /* M */ {0, -4, -7, -17, -9, -7, 1, -9, -7, 7, 0, 1, 12, 21, -6, -7, -3, -1, -5, -2, 6, -14, -2, -8, -5, -26}, /* N */ {0, 1, 7, -12, 7, 5, -12, 1, 5, -6, 0, 3, -10, -6, 7, -2, 3, 0, 2, 1, -6, -13, -1, -7, 4, -26}, /* P */ {0, 4, -2, -9, -3, -2, -15, -2, -1, -7, 0, -4, -8, -7, -2, 19, 1, -1, 3, 1, -4, -19, -2, -16, -1, -26}, /* Q */ {0, -1, 4, -18, 5, 8, -15, -4, 10, -7, 0, 2, -6, -3, 3, 1, 13, 4, -2, -3, -6, -16, -2, -13, 11, -26}, /* R */ {0, -5, -2, -12, -4, -4, -15, -8, 5, -7, 0, 11, -10, -1, 0, -1, 4, 20, -1, -3, -8, 7, -3, -14, 0, -26}, /* S */ {0, 4, 2, 0, 1, 0, -11, 4, -3, -5, 0, -1, -9, -5, 2, 3, -2, -1, 5, 4, -3, -8, -1, -9, -1, -26}, /* T */ {0, 4, 0, -7, 0, -1, -10, 0, -4, 0, 0, 0, -6, -2, 1, 1, -3, -3, 4, 9, 1, -17, -1, -9, -2, -26}, /* V */ {0, 1, -6, -6, -7, -6, -4, -4, -7, 12, 0, -8, 6, 6, -6, -4, -6, -8, -3, 1, 14, -21, -2, -8, -6, -26}, /* W */ {0, -19, -18, -26, -22, -23, 1, -23, -9, -17, 0, -12, -6, -14, -13, -19, -16, 7, -8, -17, -21, 57, -13, 0, -19, -26}, /* X */ {0, -1, -2, -10, -2, -2, -8, -3, -2, -2, 0, -3, -4, -2, -1, -2, -2, -3, -1, -1, -2, -13, -3, -8, -2, -26}, /* Y */ {0, -12, -10, 1, -14, -14, 23, -17, 0, -3, 0, -15, -3, -8, -7, -16, -13, -14, -9, -9, -8, 0, -8, 34, -14, -26}, /* Z */ {0, 0, 7, -18, 9, 11, -17, -1, 6, -7, 0, 1, -9, -5, 4, -1, 11, 0, -1, -2, -6, -19, -2, -14, 11, -26}, /* * */ {0, -26, -26, -26, -26, -26, -26, -26, -26, -26, 0, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 260 substitution matrix, scale = ln(2)/3 = 0.231049 // # // # Expected score = -0.794, Entropy = 0.330 bits // # // # Lowest score = -7, Highest score = 17 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -1 0 0 -2 0 0 1 -1 0 -2 -1 -1 -3 1 1 1 -6 -3 0 0 0 0 -7 // R -1 6 0 -1 -4 1 -1 -2 2 -2 -3 3 0 -4 0 0 -1 2 -4 -2 -1 0 -1 -7 // N 0 0 2 2 -3 1 1 0 2 -2 -3 1 -2 -3 0 1 0 -4 -2 -2 2 1 0 -7 // D 0 -1 2 4 -5 2 3 1 1 -2 -4 0 -2 -5 -1 0 0 -6 -4 -2 3 3 -1 -7 // C -2 -4 -3 -5 12 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3 0 -2 -7 0 -2 -4 -5 -3 -7 // Q 0 1 1 2 -5 4 2 -1 3 -2 -2 1 -1 -4 0 0 -1 -5 -4 -2 1 3 0 -7 // E 0 -1 1 3 -5 2 4 0 1 -2 -3 0 -2 -5 0 0 0 -7 -4 -2 3 3 -1 -7 // G 1 -2 0 1 -3 -1 0 5 -2 -2 -4 -2 -3 -5 0 1 0 -7 -5 -1 1 0 -1 -7 // H -1 2 2 1 -3 3 1 -2 6 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 -1 -7 // I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 2 -2 2 1 -2 -1 0 -5 -1 4 -2 -2 -1 -7 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 6 -3 4 2 -2 -3 -2 -2 -1 2 -3 -2 -1 -7 // K -1 3 1 0 -5 1 0 -2 0 -2 -3 4 0 -5 -1 0 0 -3 -4 -2 1 0 -1 -7 // M -1 0 -2 -2 -5 -1 -2 -3 -2 2 4 0 6 0 -2 -1 -1 -4 -2 2 -2 -2 -1 -7 // F -3 -4 -3 -5 -4 -4 -5 -5 -2 1 2 -5 0 9 -4 -3 -3 0 7 -1 -4 -5 -2 -7 // P 1 0 0 -1 -3 0 0 0 0 -2 -2 -1 -2 -4 6 1 0 -5 -5 -1 -1 0 -1 -7 // S 1 0 1 0 0 0 0 1 -1 -1 -3 0 -1 -3 1 1 1 -2 -3 -1 0 0 0 -7 // T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 0 1 2 -5 -3 0 0 0 0 -7 // W -6 2 -4 -6 -7 -5 -7 -7 -3 -5 -2 -3 -4 0 -5 -2 -5 17 0 -6 -5 -6 -4 -7 // Y -3 -4 -2 -4 0 -4 -4 -5 0 -1 -1 -4 -2 7 -5 -3 -3 0 10 -2 -3 -4 -2 -7 // V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 -1 -7 // B 0 -1 2 3 -4 1 3 1 1 -2 -3 1 -2 -4 -1 0 0 -5 -3 -2 3 2 0 -7 // Z 0 0 1 3 -5 3 3 0 2 -2 -2 0 -2 -5 0 0 0 -6 -4 -2 2 3 -1 -7 // X 0 -1 0 -1 -3 0 -1 -1 -1 -1 -1 -1 -1 -2 -1 0 0 -4 -2 -1 0 -1 -1 -7 // * -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 1 // PAM260 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -3, 1, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -3, 0, -7}, /* B */ {0, 0, 3, -4, 3, 3, -4, 1, 1, -2, 0, 1, -3, -2, 2, -1, 1, -1, 0, 0, -2, -5, 0, -3, 2, -7}, /* C */ {0, -2, -4, 12, -5, -5, -4, -3, -3, -2, 0, -5, -6, -5, -3, -3, -5, -4, 0, -2, -2, -7, -3, 0, -5, -7}, /* D */ {0, 0, 3, -5, 4, 3, -5, 1, 1, -2, 0, 0, -4, -2, 2, -1, 2, -1, 0, 0, -2, -6, -1, -4, 3, -7}, /* E */ {0, 0, 3, -5, 3, 4, -5, 0, 1, -2, 0, 0, -3, -2, 1, 0, 2, -1, 0, 0, -2, -7, -1, -4, 3, -7}, /* F */ {0, -3, -4, -4, -5, -5, 9, -5, -2, 1, 0, -5, 2, 0, -3, -4, -4, -4, -3, -3, -1, 0, -2, 7, -5, -7}, /* G */ {0, 1, 1, -3, 1, 0, -5, 5, -2, -2, 0, -2, -4, -3, 0, 0, -1, -2, 1, 0, -1, -7, -1, -5, 0, -7}, /* H */ {0, -1, 1, -3, 1, 1, -2, -2, 6, -2, 0, 0, -2, -2, 2, 0, 3, 2, -1, -1, -2, -3, -1, 0, 2, -7}, /* I */ {0, 0, -2, -2, -2, -2, 1, -2, -2, 4, 0, -2, 2, 2, -2, -2, -2, -2, -1, 0, 4, -5, -1, -1, -2, -7}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -5, 0, 0, -5, -2, 0, -2, 0, 4, -3, 0, 1, -1, 1, 3, 0, 0, -2, -3, -1, -4, 0, -7}, /* L */ {0, -2, -3, -6, -4, -3, 2, -4, -2, 2, 0, -3, 6, 4, -3, -2, -2, -3, -3, -2, 2, -2, -1, -1, -2, -7}, /* M */ {0, -1, -2, -5, -2, -2, 0, -3, -2, 2, 0, 0, 4, 6, -2, -2, -1, 0, -1, -1, 2, -4, -1, -2, -2, -7}, /* N */ {0, 0, 2, -3, 2, 1, -3, 0, 2, -2, 0, 1, -3, -2, 2, 0, 1, 0, 1, 0, -2, -4, 0, -2, 1, -7}, /* P */ {0, 1, -1, -3, -1, 0, -4, 0, 0, -2, 0, -1, -2, -2, 0, 6, 0, 0, 1, 0, -1, -5, -1, -5, 0, -7}, /* Q */ {0, 0, 1, -5, 2, 2, -4, -1, 3, -2, 0, 1, -2, -1, 1, 0, 4, 1, 0, -1, -2, -5, 0, -4, 3, -7}, /* R */ {0, -1, -1, -4, -1, -1, -4, -2, 2, -2, 0, 3, -3, 0, 0, 0, 1, 6, 0, -1, -2, 2, -1, -4, 0, -7}, /* S */ {0, 1, 0, 0, 0, 0, -3, 1, -1, -1, 0, 0, -3, -1, 1, 1, 0, 0, 1, 1, -1, -2, 0, -3, 0, -7}, /* T */ {0, 1, 0, -2, 0, 0, -3, 0, -1, 0, 0, 0, -2, -1, 0, 0, -1, -1, 1, 2, 0, -5, 0, -3, 0, -7}, /* V */ {0, 0, -2, -2, -2, -2, -1, -1, -2, 4, 0, -2, 2, 2, -2, -1, -2, -2, -1, 0, 4, -6, -1, -2, -2, -7}, /* W */ {0, -6, -5, -7, -6, -7, 0, -7, -3, -5, 0, -3, -2, -4, -4, -5, -5, 2, -2, -5, -6, 17, -4, 0, -6, -7}, /* X */ {0, 0, 0, -3, -1, -1, -2, -1, -1, -1, 0, -1, -1, -1, 0, -1, 0, -1, 0, 0, -1, -4, -1, -2, -1, -7}, /* Y */ {0, -3, -3, 0, -4, -4, 7, -5, 0, -1, 0, -4, -1, -2, -2, -5, -4, -4, -3, -3, -2, 0, -2, 10, -4, -7}, /* Z */ {0, 0, 2, -5, 3, 3, -5, 0, 2, -2, 0, 0, -2, -2, 1, 0, 3, 0, 0, 0, -2, -6, -1, -4, 3, -7}, /* * */ {0, -7, -7, -7, -7, -7, -7, -7, -7, -7, 0, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 270 substitution matrix, scale = ln(2)/4 = 0.173287 // # // # Expected score = -0.969, Entropy = 0.309 bits // # // # Lowest score = -10, Highest score = 23 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -2 0 0 -2 0 0 2 -2 -1 -2 -1 -1 -4 1 1 1 -7 -4 0 0 0 0 -10 // R -2 8 0 -1 -5 2 -1 -3 2 -2 -4 4 -1 -5 0 0 -1 3 -5 -3 -1 0 -1 -10 // N 0 0 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 1 -5 -3 -2 2 2 0 -10 // D 0 -1 2 5 -6 2 4 1 1 -3 -5 0 -3 -7 -1 0 0 -8 -5 -3 4 3 -1 -10 // C -2 -5 -4 -6 16 -7 -6 -4 -4 -3 -7 -7 -6 -5 -3 0 -3 -10 1 -2 -5 -7 -4 -10 // Q 0 2 1 2 -7 5 3 -1 4 -2 -2 1 -1 -6 0 -1 -1 -6 -5 -2 2 4 -1 -10 // E 0 -1 2 4 -6 3 5 0 1 -2 -4 0 -3 -7 -1 0 0 -9 -5 -2 3 4 -1 -10 // G 2 -3 1 1 -4 -1 0 6 -2 -3 -5 -2 -3 -6 0 1 0 -9 -6 -2 1 0 -1 -10 // H -2 2 2 1 -4 4 1 -2 8 -3 -3 0 -3 -2 0 -1 -1 -3 0 -3 1 2 -1 -10 // I -1 -2 -2 -3 -3 -2 -2 -3 -3 5 3 -2 3 1 -2 -2 0 -6 -1 5 -3 -2 -1 -10 // L -2 -4 -3 -5 -7 -2 -4 -5 -3 3 8 -3 5 2 -3 -3 -2 -2 -1 2 -4 -3 -2 -10 // K -1 4 1 0 -7 1 0 -2 0 -2 -3 6 0 -6 -1 0 0 -4 -5 -3 1 0 -1 -10 // M -1 -1 -2 -3 -6 -1 -3 -3 -3 3 5 0 8 0 -2 -2 -1 -5 -3 2 -3 -2 -1 -10 // F -4 -5 -4 -7 -5 -6 -7 -6 -2 1 2 -6 0 12 -6 -4 -4 1 9 -1 -6 -6 -3 -10 // P 1 0 0 -1 -3 0 -1 0 0 -2 -3 -1 -2 -6 7 1 0 -7 -6 -1 -1 0 -1 -10 // S 1 0 1 0 0 -1 0 1 -1 -2 -3 0 -2 -4 1 2 2 -3 -4 -1 1 0 0 -10 // T 1 -1 1 0 -3 -1 0 0 -1 0 -2 0 -1 -4 0 2 3 -6 -3 0 0 -1 0 -10 // W -7 3 -5 -8 -10 -6 -9 -9 -3 -6 -2 -4 -5 1 -7 -3 -6 23 0 -8 -7 -7 -5 -10 // Y -4 -5 -3 -5 1 -5 -5 -6 0 -1 -1 -5 -3 9 -6 -4 -3 0 13 -3 -4 -5 -3 -10 // V 0 -3 -2 -3 -2 -2 -2 -2 -3 5 2 -3 2 -1 -1 -1 0 -8 -3 5 -2 -2 -1 -10 // B 0 -1 2 4 -5 2 3 1 1 -3 -4 1 -3 -6 -1 1 0 -7 -4 -2 3 3 -1 -10 // Z 0 0 2 3 -7 4 4 0 2 -2 -3 0 -2 -6 0 0 -1 -7 -5 -2 3 4 -1 -10 // X 0 -1 0 -1 -4 -1 -1 -1 -1 -1 -2 -1 -1 -3 -1 0 0 -5 -3 -1 -1 -1 -1 -10 // * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 // PAM270 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -4, 2, -2, -1, 0, -1, -2, -1, 0, 1, 0, -2, 1, 1, 0, -7, 0, -4, 0, -10}, /* B */ {0, 0, 3, -5, 4, 3, -6, 1, 1, -3, 0, 1, -4, -3, 2, -1, 2, -1, 1, 0, -2, -7, -1, -4, 3, -10}, /* C */ {0, -2, -5, 16, -6, -6, -5, -4, -4, -3, 0, -7, -7, -6, -4, -3, -7, -5, 0, -3, -2, -10, -4, 1, -7, -10}, /* D */ {0, 0, 4, -6, 5, 4, -7, 1, 1, -3, 0, 0, -5, -3, 2, -1, 2, -1, 0, 0, -3, -8, -1, -5, 3, -10}, /* E */ {0, 0, 3, -6, 4, 5, -7, 0, 1, -2, 0, 0, -4, -3, 2, -1, 3, -1, 0, 0, -2, -9, -1, -5, 4, -10}, /* F */ {0, -4, -6, -5, -7, -7, 12, -6, -2, 1, 0, -6, 2, 0, -4, -6, -6, -5, -4, -4, -1, 1, -3, 9, -6, -10}, /* G */ {0, 2, 1, -4, 1, 0, -6, 6, -2, -3, 0, -2, -5, -3, 1, 0, -1, -3, 1, 0, -2, -9, -1, -6, 0, -10}, /* H */ {0, -2, 1, -4, 1, 1, -2, -2, 8, -3, 0, 0, -3, -3, 2, 0, 4, 2, -1, -1, -3, -3, -1, 0, 2, -10}, /* I */ {0, -1, -3, -3, -3, -2, 1, -3, -3, 5, 0, -2, 3, 3, -2, -2, -2, -2, -2, 0, 5, -6, -1, -1, -2, -10}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -7, 0, 0, -6, -2, 0, -2, 0, 6, -3, 0, 1, -1, 1, 4, 0, 0, -3, -4, -1, -5, 0, -10}, /* L */ {0, -2, -4, -7, -5, -4, 2, -5, -3, 3, 0, -3, 8, 5, -3, -3, -2, -4, -3, -2, 2, -2, -2, -1, -3, -10}, /* M */ {0, -1, -3, -6, -3, -3, 0, -3, -3, 3, 0, 0, 5, 8, -2, -2, -1, -1, -2, -1, 2, -5, -1, -3, -2, -10}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 2, -2, 0, 1, -3, -2, 2, 0, 1, 0, 1, 1, -2, -5, 0, -3, 2, -10}, /* P */ {0, 1, -1, -3, -1, -1, -6, 0, 0, -2, 0, -1, -3, -2, 0, 7, 0, 0, 1, 0, -1, -7, -1, -6, 0, -10}, /* Q */ {0, 0, 2, -7, 2, 3, -6, -1, 4, -2, 0, 1, -2, -1, 1, 0, 5, 2, -1, -1, -2, -6, -1, -5, 4, -10}, /* R */ {0, -2, -1, -5, -1, -1, -5, -3, 2, -2, 0, 4, -4, -1, 0, 0, 2, 8, 0, -1, -3, 3, -1, -5, 0, -10}, /* S */ {0, 1, 1, 0, 0, 0, -4, 1, -1, -2, 0, 0, -3, -2, 1, 1, -1, 0, 2, 2, -1, -3, 0, -4, 0, -10}, /* T */ {0, 1, 0, -3, 0, 0, -4, 0, -1, 0, 0, 0, -2, -1, 1, 0, -1, -1, 2, 3, 0, -6, 0, -3, -1, -10}, /* V */ {0, 0, -2, -2, -3, -2, -1, -2, -3, 5, 0, -3, 2, 2, -2, -1, -2, -3, -1, 0, 5, -8, -1, -3, -2, -10}, /* W */ {0, -7, -7, -10, -8, -9, 1, -9, -3, -6, 0, -4, -2, -5, -5, -7, -6, 3, -3, -6, -8, 23, -5, 0, -7, -10}, /* X */ {0, 0, -1, -4, -1, -1, -3, -1, -1, -1, 0, -1, -2, -1, 0, -1, -1, -1, 0, 0, -1, -5, -1, -3, -1, -10}, /* Y */ {0, -4, -4, 1, -5, -5, 9, -6, 0, -1, 0, -5, -1, -3, -3, -6, -5, -5, -4, -3, -3, 0, -3, 13, -5, -10}, /* Z */ {0, 0, 3, -7, 3, 4, -6, 0, 2, -2, 0, 0, -3, -2, 2, 0, 4, 0, 0, -1, -2, -7, -1, -5, 4, -10}, /* * */ {0, -10, -10, -10, -10, -10, -10, -10, -10, -10, 0, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 280 substitution matrix, scale = ln(2)/4 = 0.173287 // # // # Expected score = -0.916, Entropy = 0.289 bits // # // # Lowest score = -9, Highest score = 22 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -2 0 0 -2 0 0 2 -1 -1 -2 -1 -1 -4 1 1 1 -7 -4 0 0 0 0 -9 // R -2 7 0 -1 -4 2 -1 -3 2 -2 -3 4 0 -5 0 0 -1 3 -5 -3 -1 0 -1 -9 // N 0 0 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 1 -5 -3 -2 2 1 0 -9 // D 0 -1 2 4 -6 2 4 1 1 -3 -5 0 -3 -7 -1 0 0 -8 -5 -2 4 3 -1 -9 // C -2 -4 -4 -6 15 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -3 -9 1 -2 -5 -6 -3 -9 // Q 0 2 1 2 -6 4 3 -1 3 -2 -2 1 -1 -5 0 0 -1 -6 -5 -2 2 4 -1 -9 // E 0 -1 2 4 -6 3 4 0 1 -2 -4 0 -2 -6 0 0 0 -8 -5 -2 3 4 -1 -9 // G 2 -3 1 1 -4 -1 0 6 -2 -3 -5 -2 -3 -6 0 1 0 -8 -6 -1 1 0 -1 -9 // H -1 2 2 1 -4 3 1 -2 8 -3 -2 0 -2 -2 0 -1 -1 -3 0 -3 1 2 -1 -9 // I -1 -2 -2 -3 -3 -2 -2 -3 -3 5 3 -2 3 1 -2 -2 0 -6 -1 4 -2 -2 -1 -9 // L -2 -3 -3 -5 -7 -2 -4 -5 -2 3 7 -3 5 2 -3 -3 -2 -2 -1 2 -4 -3 -1 -9 // K -1 4 1 0 -6 1 0 -2 0 -2 -3 6 0 -6 -1 0 0 -4 -5 -3 1 1 -1 -9 // M -1 0 -2 -3 -6 -1 -2 -3 -2 3 5 0 7 0 -2 -2 -1 -5 -3 2 -2 -2 -1 -9 // F -4 -5 -4 -7 -5 -5 -6 -6 -2 1 2 -6 0 11 -5 -4 -4 1 9 -1 -5 -6 -3 -9 // P 1 0 0 -1 -3 0 0 0 0 -2 -3 -1 -2 -5 7 1 1 -7 -6 -1 -1 0 -1 -9 // S 1 0 1 0 0 0 0 1 -1 -2 -3 0 -2 -4 1 2 1 -3 -3 -1 1 0 0 -9 // T 1 -1 1 0 -3 -1 0 0 -1 0 -2 0 -1 -4 1 1 3 -6 -3 0 0 0 0 -9 // W -7 3 -5 -8 -9 -6 -8 -8 -3 -6 -2 -4 -5 1 -7 -3 -6 22 0 -7 -6 -7 -5 -9 // Y -4 -5 -3 -5 1 -5 -5 -6 0 -1 -1 -5 -3 9 -6 -3 -3 0 13 -3 -4 -5 -3 -9 // V 0 -3 -2 -2 -2 -2 -2 -1 -3 4 2 -3 2 -1 -1 -1 0 -7 -3 5 -2 -2 -1 -9 // B 0 -1 2 4 -5 2 3 1 1 -2 -4 1 -2 -5 -1 1 0 -6 -4 -2 3 2 -1 -9 // Z 0 0 1 3 -6 4 4 0 2 -2 -3 1 -2 -6 0 0 0 -7 -5 -2 2 4 -1 -9 // X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -1 -1 -1 -3 -1 0 0 -5 -3 -1 -1 -1 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM280 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -4, 2, -1, -1, 0, -1, -2, -1, 0, 1, 0, -2, 1, 1, 0, -7, 0, -4, 0, -9}, /* B */ {0, 0, 3, -5, 4, 3, -5, 1, 1, -2, 0, 1, -4, -2, 2, -1, 2, -1, 1, 0, -2, -6, -1, -4, 2, -9}, /* C */ {0, -2, -5, 15, -6, -6, -5, -4, -4, -3, 0, -6, -7, -6, -4, -3, -6, -4, 0, -3, -2, -9, -3, 1, -6, -9}, /* D */ {0, 0, 4, -6, 4, 4, -7, 1, 1, -3, 0, 0, -5, -3, 2, -1, 2, -1, 0, 0, -2, -8, -1, -5, 3, -9}, /* E */ {0, 0, 3, -6, 4, 4, -6, 0, 1, -2, 0, 0, -4, -2, 2, 0, 3, -1, 0, 0, -2, -8, -1, -5, 4, -9}, /* F */ {0, -4, -5, -5, -7, -6, 11, -6, -2, 1, 0, -6, 2, 0, -4, -5, -5, -5, -4, -4, -1, 1, -3, 9, -6, -9}, /* G */ {0, 2, 1, -4, 1, 0, -6, 6, -2, -3, 0, -2, -5, -3, 1, 0, -1, -3, 1, 0, -1, -8, -1, -6, 0, -9}, /* H */ {0, -1, 1, -4, 1, 1, -2, -2, 8, -3, 0, 0, -2, -2, 2, 0, 3, 2, -1, -1, -3, -3, -1, 0, 2, -9}, /* I */ {0, -1, -2, -3, -3, -2, 1, -3, -3, 5, 0, -2, 3, 3, -2, -2, -2, -2, -2, 0, 4, -6, -1, -1, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -6, 0, 0, -6, -2, 0, -2, 0, 6, -3, 0, 1, -1, 1, 4, 0, 0, -3, -4, -1, -5, 1, -9}, /* L */ {0, -2, -4, -7, -5, -4, 2, -5, -2, 3, 0, -3, 7, 5, -3, -3, -2, -3, -3, -2, 2, -2, -1, -1, -3, -9}, /* M */ {0, -1, -2, -6, -3, -2, 0, -3, -2, 3, 0, 0, 5, 7, -2, -2, -1, 0, -2, -1, 2, -5, -1, -3, -2, -9}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 2, -2, 0, 1, -3, -2, 2, 0, 1, 0, 1, 1, -2, -5, 0, -3, 1, -9}, /* P */ {0, 1, -1, -3, -1, 0, -5, 0, 0, -2, 0, -1, -3, -2, 0, 7, 0, 0, 1, 1, -1, -7, -1, -6, 0, -9}, /* Q */ {0, 0, 2, -6, 2, 3, -5, -1, 3, -2, 0, 1, -2, -1, 1, 0, 4, 2, 0, -1, -2, -6, -1, -5, 4, -9}, /* R */ {0, -2, -1, -4, -1, -1, -5, -3, 2, -2, 0, 4, -3, 0, 0, 0, 2, 7, 0, -1, -3, 3, -1, -5, 0, -9}, /* S */ {0, 1, 1, 0, 0, 0, -4, 1, -1, -2, 0, 0, -3, -2, 1, 1, 0, 0, 2, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -3, 0, 0, -4, 0, -1, 0, 0, 0, -2, -1, 1, 1, -1, -1, 1, 3, 0, -6, 0, -3, 0, -9}, /* V */ {0, 0, -2, -2, -2, -2, -1, -1, -3, 4, 0, -3, 2, 2, -2, -1, -2, -3, -1, 0, 5, -7, -1, -3, -2, -9}, /* W */ {0, -7, -6, -9, -8, -8, 1, -8, -3, -6, 0, -4, -2, -5, -5, -7, -6, 3, -3, -6, -7, 22, -5, 0, -7, -9}, /* X */ {0, 0, -1, -3, -1, -1, -3, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, 0, -1, -5, -1, -3, -1, -9}, /* Y */ {0, -4, -4, 1, -5, -5, 9, -6, 0, -1, 0, -5, -1, -3, -3, -6, -5, -5, -3, -3, -3, 0, -3, 13, -5, -9}, /* Z */ {0, 0, 2, -6, 3, 4, -6, 0, 2, -2, 0, 1, -3, -2, 1, 0, 4, 0, 0, 0, -2, -7, -1, -5, 4, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 290 substitution matrix, scale = ln(2)/4 = 0.173287 // # // # Expected score = -0.877, Entropy = 0.271 bits // # // # Lowest score = -9, Highest score = 22 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -2 0 0 -2 0 0 2 -1 -1 -2 -1 -1 -4 1 1 1 -7 -4 0 0 0 0 -9 // R -2 7 0 -1 -4 2 -1 -3 2 -2 -3 4 0 -5 0 0 -1 3 -5 -3 0 0 -1 -9 // N 0 0 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 1 -5 -3 -2 2 1 0 -9 // D 0 -1 2 4 -6 2 4 1 1 -3 -4 0 -3 -6 -1 0 0 -8 -5 -2 3 3 -1 -9 // C -2 -4 -4 -6 15 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -2 -9 1 -2 -5 -6 -3 -9 // Q 0 2 1 2 -6 4 3 -1 3 -2 -2 1 -1 -5 0 0 -1 -5 -5 -2 2 3 0 -9 // E 0 -1 2 4 -6 3 4 0 1 -2 -4 0 -2 -6 0 0 0 -8 -5 -2 3 4 -1 -9 // G 2 -3 1 1 -4 -1 0 5 -2 -3 -4 -2 -3 -6 0 1 0 -8 -6 -1 1 0 -1 -9 // H -1 2 2 1 -4 3 1 -2 7 -3 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 -1 -9 // I -1 -2 -2 -3 -3 -2 -2 -3 -3 5 3 -2 3 1 -2 -1 0 -6 -1 4 -2 -2 -1 -9 // L -2 -3 -3 -4 -7 -2 -4 -4 -2 3 7 -3 5 3 -3 -3 -2 -2 -1 2 -4 -3 -1 -9 // K -1 4 1 0 -6 1 0 -2 0 -2 -3 5 0 -6 -1 0 0 -4 -5 -3 1 1 -1 -9 // M -1 0 -2 -3 -6 -1 -2 -3 -2 3 5 0 7 0 -2 -2 -1 -5 -2 2 -2 -2 -1 -9 // F -4 -5 -4 -6 -5 -5 -6 -6 -2 1 3 -6 0 11 -5 -4 -3 1 9 -1 -5 -6 -3 -9 // P 1 0 0 -1 -3 0 0 0 0 -2 -3 -1 -2 -5 7 1 1 -6 -6 -1 -1 0 -1 -9 // S 1 0 1 0 0 0 0 1 -1 -1 -3 0 -2 -4 1 2 1 -3 -3 -1 1 0 0 -9 // T 1 -1 1 0 -2 -1 0 0 -1 0 -2 0 -1 -3 1 1 3 -6 -3 0 0 0 0 -9 // W -7 3 -5 -8 -9 -5 -8 -8 -3 -6 -2 -4 -5 1 -6 -3 -6 22 0 -7 -6 -7 -5 -9 // Y -4 -5 -3 -5 1 -5 -5 -6 0 -1 -1 -5 -2 9 -6 -3 -3 0 13 -3 -4 -5 -2 -9 // V 0 -3 -2 -2 -2 -2 -2 -1 -2 4 2 -3 2 -1 -1 -1 0 -7 -3 5 -2 -2 -1 -9 // B 0 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -5 -1 1 0 -6 -4 -2 3 2 0 -9 // Z 0 0 1 3 -6 3 4 0 2 -2 -3 1 -2 -6 0 0 0 -7 -5 -2 2 4 -1 -9 // X 0 -1 0 -1 -3 0 -1 -1 -1 -1 -1 -1 -1 -3 -1 0 0 -5 -2 -1 0 -1 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM290 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -4, 2, -1, -1, 0, -1, -2, -1, 0, 1, 0, -2, 1, 1, 0, -7, 0, -4, 0, -9}, /* B */ {0, 0, 3, -5, 3, 3, -5, 1, 1, -2, 0, 1, -4, -2, 2, -1, 2, 0, 1, 0, -2, -6, 0, -4, 2, -9}, /* C */ {0, -2, -5, 15, -6, -6, -5, -4, -4, -3, 0, -6, -7, -6, -4, -3, -6, -4, 0, -2, -2, -9, -3, 1, -6, -9}, /* D */ {0, 0, 3, -6, 4, 4, -6, 1, 1, -3, 0, 0, -4, -3, 2, -1, 2, -1, 0, 0, -2, -8, -1, -5, 3, -9}, /* E */ {0, 0, 3, -6, 4, 4, -6, 0, 1, -2, 0, 0, -4, -2, 2, 0, 3, -1, 0, 0, -2, -8, -1, -5, 4, -9}, /* F */ {0, -4, -5, -5, -6, -6, 11, -6, -2, 1, 0, -6, 3, 0, -4, -5, -5, -5, -4, -3, -1, 1, -3, 9, -6, -9}, /* G */ {0, 2, 1, -4, 1, 0, -6, 5, -2, -3, 0, -2, -4, -3, 1, 0, -1, -3, 1, 0, -1, -8, -1, -6, 0, -9}, /* H */ {0, -1, 1, -4, 1, 1, -2, -2, 7, -3, 0, 0, -2, -2, 2, 0, 3, 2, -1, -1, -2, -3, -1, 0, 2, -9}, /* I */ {0, -1, -2, -3, -3, -2, 1, -3, -3, 5, 0, -2, 3, 3, -2, -2, -2, -2, -1, 0, 4, -6, -1, -1, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -6, 0, 0, -6, -2, 0, -2, 0, 5, -3, 0, 1, -1, 1, 4, 0, 0, -3, -4, -1, -5, 1, -9}, /* L */ {0, -2, -4, -7, -4, -4, 3, -4, -2, 3, 0, -3, 7, 5, -3, -3, -2, -3, -3, -2, 2, -2, -1, -1, -3, -9}, /* M */ {0, -1, -2, -6, -3, -2, 0, -3, -2, 3, 0, 0, 5, 7, -2, -2, -1, 0, -2, -1, 2, -5, -1, -2, -2, -9}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 2, -2, 0, 1, -3, -2, 2, 0, 1, 0, 1, 1, -2, -5, 0, -3, 1, -9}, /* P */ {0, 1, -1, -3, -1, 0, -5, 0, 0, -2, 0, -1, -3, -2, 0, 7, 0, 0, 1, 1, -1, -6, -1, -6, 0, -9}, /* Q */ {0, 0, 2, -6, 2, 3, -5, -1, 3, -2, 0, 1, -2, -1, 1, 0, 4, 2, 0, -1, -2, -5, 0, -5, 3, -9}, /* R */ {0, -2, 0, -4, -1, -1, -5, -3, 2, -2, 0, 4, -3, 0, 0, 0, 2, 7, 0, -1, -3, 3, -1, -5, 0, -9}, /* S */ {0, 1, 1, 0, 0, 0, -4, 1, -1, -1, 0, 0, -3, -2, 1, 1, 0, 0, 2, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 0, -1, 0, 0, 0, -2, -1, 1, 1, -1, -1, 1, 3, 0, -6, 0, -3, 0, -9}, /* V */ {0, 0, -2, -2, -2, -2, -1, -1, -2, 4, 0, -3, 2, 2, -2, -1, -2, -3, -1, 0, 5, -7, -1, -3, -2, -9}, /* W */ {0, -7, -6, -9, -8, -8, 1, -8, -3, -6, 0, -4, -2, -5, -5, -6, -5, 3, -3, -6, -7, 22, -5, 0, -7, -9}, /* X */ {0, 0, 0, -3, -1, -1, -3, -1, -1, -1, 0, -1, -1, -1, 0, -1, 0, -1, 0, 0, -1, -5, -1, -2, -1, -9}, /* Y */ {0, -4, -4, 1, -5, -5, 9, -6, 0, -1, 0, -5, -1, -2, -3, -6, -5, -5, -3, -3, -3, 0, -2, 13, -5, -9}, /* Z */ {0, 0, 2, -6, 3, 4, -6, 0, 2, -2, 0, 1, -3, -2, 1, 0, 3, 0, 0, 0, -2, -7, -1, -5, 4, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 30 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -5.06, Entropy = 2.57 bits // # // # Lowest score = -17, Highest score = 13 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 6 -7 -4 -3 -6 -4 -2 -2 -7 -5 -6 -7 -5 -8 -2 0 -1 -13 -8 -2 -3 -3 -3 -17 // R -7 8 -6 -10 -8 -2 -9 -9 -2 -5 -8 0 -4 -9 -4 -3 -6 -2 -10 -8 -7 -4 -6 -17 // N -4 -6 8 2 -11 -3 -2 -3 0 -5 -7 -1 -9 -9 -6 0 -2 -8 -4 -8 6 -3 -3 -17 // D -3 -10 2 8 -14 -2 2 -3 -4 -7 -12 -4 -11 -15 -8 -4 -5 -15 -11 -8 6 1 -5 -17 // C -6 -8 -11 -14 10 -14 -14 -9 -7 -6 -15 -14 -13 -13 -8 -3 -8 -15 -4 -6 -12 -14 -9 -17 // Q -4 -2 -3 -2 -14 8 1 -7 1 -8 -5 -3 -4 -13 -3 -5 -5 -13 -12 -7 -3 6 -5 -17 // E -2 -9 -2 2 -14 1 8 -4 -5 -5 -9 -4 -7 -14 -5 -4 -6 -17 -8 -6 1 6 -5 -17 // G -2 -9 -3 -3 -9 -7 -4 6 -9 -11 -10 -7 -8 -9 -6 -2 -6 -15 -14 -5 -3 -5 -5 -17 // H -7 -2 0 -4 -7 1 -5 -9 9 -9 -6 -6 -10 -6 -4 -6 -7 -7 -3 -6 -1 -1 -5 -17 // I -5 -5 -5 -7 -6 -8 -5 -11 -9 8 -1 -6 -1 -2 -8 -7 -2 -14 -6 2 -6 -6 -5 -17 // L -6 -8 -7 -12 -15 -5 -9 -10 -6 -1 7 -8 1 -3 -7 -8 -7 -6 -7 -2 -9 -7 -6 -17 // K -7 0 -1 -4 -14 -3 -4 -7 -6 -6 -8 7 -2 -14 -6 -4 -3 -12 -9 -9 -2 -4 -5 -17 // M -5 -4 -9 -11 -13 -4 -7 -8 -10 -1 1 -2 11 -4 -8 -5 -4 -13 -11 -1 -10 -5 -5 -17 // F -8 -9 -9 -15 -13 -13 -14 -9 -6 -2 -3 -14 -4 9 -10 -6 -9 -4 2 -8 -10 -13 -8 -17 // P -2 -4 -6 -8 -8 -3 -5 -6 -4 -8 -7 -6 -8 -10 8 -2 -4 -14 -13 -6 -7 -4 -5 -17 // S 0 -3 0 -4 -3 -5 -4 -2 -6 -7 -8 -4 -5 -6 -2 6 0 -5 -7 -6 -1 -5 -3 -17 // T -1 -6 -2 -5 -8 -5 -6 -6 -7 -2 -7 -3 -4 -9 -4 0 7 -13 -6 -3 -3 -6 -4 -17 // W -13 -2 -8 -15 -15 -13 -17 -15 -7 -14 -6 -12 -13 -4 -14 -5 -13 13 -5 -15 -10 -14 -11 -17 // Y -8 -10 -4 -11 -4 -12 -8 -14 -3 -6 -7 -9 -11 2 -13 -7 -6 -5 10 -7 -6 -9 -7 -17 // V -2 -8 -8 -8 -6 -7 -6 -5 -6 2 -2 -9 -1 -8 -6 -6 -3 -15 -7 7 -8 -6 -5 -17 // B -3 -7 6 6 -12 -3 1 -3 -1 -6 -9 -2 -10 -10 -7 -1 -3 -10 -6 -8 6 0 -5 -17 // Z -3 -4 -3 1 -14 6 6 -5 -1 -6 -7 -4 -5 -13 -4 -5 -6 -14 -9 -6 0 6 -5 -17 // X -3 -6 -3 -5 -9 -5 -5 -5 -5 -5 -6 -5 -5 -8 -5 -3 -4 -11 -7 -5 -5 -5 -5 -17 // * -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 -17 1 // PAM30 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 6, -3, -6, -3, -2, -8, -2, -7, -5, 0, -7, -6, -5, -4, -2, -4, -7, 0, -1, -2, -13, -3, -8, -3, -17}, /* B */ {0, -3, 6, -12, 6, 1, -10, -3, -1, -6, 0, -2, -9, -10, 6, -7, -3, -7, -1, -3, -8, -10, -5, -6, 0, -17}, /* C */ {0, -6, -12, 10, -14, -14, -13, -9, -7, -6, 0, -14, -15, -13, -11, -8, -14, -8, -3, -8, -6, -15, -9, -4, -14, -17}, /* D */ {0, -3, 6, -14, 8, 2, -15, -3, -4, -7, 0, -4, -12, -11, 2, -8, -2, -10, -4, -5, -8, -15, -5, -11, 1, -17}, /* E */ {0, -2, 1, -14, 2, 8, -14, -4, -5, -5, 0, -4, -9, -7, -2, -5, 1, -9, -4, -6, -6, -17, -5, -8, 6, -17}, /* F */ {0, -8, -10, -13, -15, -14, 9, -9, -6, -2, 0, -14, -3, -4, -9, -10, -13, -9, -6, -9, -8, -4, -8, 2, -13, -17}, /* G */ {0, -2, -3, -9, -3, -4, -9, 6, -9, -11, 0, -7, -10, -8, -3, -6, -7, -9, -2, -6, -5, -15, -5, -14, -5, -17}, /* H */ {0, -7, -1, -7, -4, -5, -6, -9, 9, -9, 0, -6, -6, -10, 0, -4, 1, -2, -6, -7, -6, -7, -5, -3, -1, -17}, /* I */ {0, -5, -6, -6, -7, -5, -2, -11, -9, 8, 0, -6, -1, -1, -5, -8, -8, -5, -7, -2, 2, -14, -5, -6, -6, -17}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -7, -2, -14, -4, -4, -14, -7, -6, -6, 0, 7, -8, -2, -1, -6, -3, 0, -4, -3, -9, -12, -5, -9, -4, -17}, /* L */ {0, -6, -9, -15, -12, -9, -3, -10, -6, -1, 0, -8, 7, 1, -7, -7, -5, -8, -8, -7, -2, -6, -6, -7, -7, -17}, /* M */ {0, -5, -10, -13, -11, -7, -4, -8, -10, -1, 0, -2, 1, 11, -9, -8, -4, -4, -5, -4, -1, -13, -5, -11, -5, -17}, /* N */ {0, -4, 6, -11, 2, -2, -9, -3, 0, -5, 0, -1, -7, -9, 8, -6, -3, -6, 0, -2, -8, -8, -3, -4, -3, -17}, /* P */ {0, -2, -7, -8, -8, -5, -10, -6, -4, -8, 0, -6, -7, -8, -6, 8, -3, -4, -2, -4, -6, -14, -5, -13, -4, -17}, /* Q */ {0, -4, -3, -14, -2, 1, -13, -7, 1, -8, 0, -3, -5, -4, -3, -3, 8, -2, -5, -5, -7, -13, -5, -12, 6, -17}, /* R */ {0, -7, -7, -8, -10, -9, -9, -9, -2, -5, 0, 0, -8, -4, -6, -4, -2, 8, -3, -6, -8, -2, -6, -10, -4, -17}, /* S */ {0, 0, -1, -3, -4, -4, -6, -2, -6, -7, 0, -4, -8, -5, 0, -2, -5, -3, 6, 0, -6, -5, -3, -7, -5, -17}, /* T */ {0, -1, -3, -8, -5, -6, -9, -6, -7, -2, 0, -3, -7, -4, -2, -4, -5, -6, 0, 7, -3, -13, -4, -6, -6, -17}, /* V */ {0, -2, -8, -6, -8, -6, -8, -5, -6, 2, 0, -9, -2, -1, -8, -6, -7, -8, -6, -3, 7, -15, -5, -7, -6, -17}, /* W */ {0, -13, -10, -15, -15, -17, -4, -15, -7, -14, 0, -12, -6, -13, -8, -14, -13, -2, -5, -13, -15, 13, -11, -5, -14, -17}, /* X */ {0, -3, -5, -9, -5, -5, -8, -5, -5, -5, 0, -5, -6, -5, -3, -5, -5, -6, -3, -4, -5, -11, -5, -7, -5, -17}, /* Y */ {0, -8, -6, -4, -11, -8, 2, -14, -3, -6, 0, -9, -7, -11, -4, -13, -12, -10, -7, -6, -7, -5, -7, 10, -9, -17}, /* Z */ {0, -3, 0, -14, 1, 6, -13, -5, -1, -6, 0, -4, -7, -5, -3, -4, 6, -4, -5, -6, -6, -14, -5, -9, 6, -17}, /* * */ {0, -17, -17, -17, -17, -17, -17, -17, -17, -17, 0, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 300 substitution matrix, scale = ln(2)/4 = 0.173287 // # // # Expected score = -0.835, Entropy = 0.254 bits // # // # Lowest score = -9, Highest score = 22 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -1 0 0 -2 0 0 2 -1 0 -2 -1 -1 -4 1 1 1 -6 -4 0 0 0 0 -9 // R -1 7 0 -1 -4 2 -1 -2 2 -2 -3 4 0 -5 0 0 -1 3 -5 -3 0 0 -1 -9 // N 0 0 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 0 -5 -2 -2 2 1 0 -9 // D 0 -1 2 4 -6 2 4 1 1 -2 -4 0 -3 -6 -1 0 0 -7 -5 -2 3 3 -1 -9 // C -2 -4 -4 -6 15 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -2 -9 1 -2 -5 -6 -3 -9 // Q 0 2 1 2 -6 4 3 -1 3 -2 -2 1 -1 -5 0 0 -1 -5 -4 -2 2 3 0 -9 // E 0 -1 2 4 -6 3 4 0 1 -2 -4 0 -2 -6 0 0 0 -8 -5 -2 3 3 -1 -9 // G 2 -2 1 1 -4 -1 0 5 -2 -3 -4 -2 -3 -5 0 1 0 -8 -6 -1 1 0 -1 -9 // H -1 2 2 1 -4 3 1 -2 7 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 0 -9 // I 0 -2 -2 -2 -3 -2 -2 -3 -2 5 3 -2 3 1 -2 -1 0 -6 -1 4 -2 -2 -1 -9 // L -2 -3 -3 -4 -7 -2 -4 -4 -2 3 7 -3 4 3 -3 -3 -2 -2 0 2 -4 -3 -1 -9 // K -1 4 1 0 -6 1 0 -2 0 -2 -3 5 0 -6 -1 0 0 -4 -5 -2 1 1 -1 -9 // M -1 0 -2 -3 -6 -1 -2 -3 -2 3 4 0 6 1 -2 -2 -1 -5 -2 2 -2 -2 -1 -9 // F -4 -5 -4 -6 -5 -5 -6 -5 -2 1 3 -6 1 11 -5 -4 -3 1 9 -1 -5 -5 -2 -9 // P 1 0 0 -1 -3 0 0 0 0 -2 -3 -1 -2 -5 6 1 1 -6 -5 -1 0 0 -1 -9 // S 1 0 1 0 0 0 0 1 -1 -1 -3 0 -2 -4 1 1 1 -3 -3 -1 1 0 0 -9 // T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 1 1 2 -6 -3 0 0 0 0 -9 // W -6 3 -5 -7 -9 -5 -8 -8 -3 -6 -2 -4 -5 1 -6 -3 -6 22 0 -7 -6 -6 -4 -9 // Y -4 -5 -2 -5 1 -4 -5 -6 0 -1 0 -5 -2 9 -5 -3 -3 0 12 -3 -4 -5 -2 -9 // V 0 -3 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -7 -3 5 -2 -2 0 -9 // B 0 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -5 0 1 0 -6 -4 -2 3 2 0 -9 // Z 0 0 1 3 -6 3 3 0 2 -2 -3 1 -2 -5 0 0 0 -6 -5 -2 2 3 -1 -9 // X 0 -1 0 -1 -3 0 -1 -1 0 -1 -1 -1 -1 -2 -1 0 0 -4 -2 0 0 -1 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM300 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -4, 2, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -4, 0, -9}, /* B */ {0, 0, 3, -5, 3, 3, -5, 1, 1, -2, 0, 1, -4, -2, 2, 0, 2, 0, 1, 0, -2, -6, 0, -4, 2, -9}, /* C */ {0, -2, -5, 15, -6, -6, -5, -4, -4, -3, 0, -6, -7, -6, -4, -3, -6, -4, 0, -2, -2, -9, -3, 1, -6, -9}, /* D */ {0, 0, 3, -6, 4, 4, -6, 1, 1, -2, 0, 0, -4, -3, 2, -1, 2, -1, 0, 0, -2, -7, -1, -5, 3, -9}, /* E */ {0, 0, 3, -6, 4, 4, -6, 0, 1, -2, 0, 0, -4, -2, 2, 0, 3, -1, 0, 0, -2, -8, -1, -5, 3, -9}, /* F */ {0, -4, -5, -5, -6, -6, 11, -5, -2, 1, 0, -6, 3, 1, -4, -5, -5, -5, -4, -3, -1, 1, -2, 9, -5, -9}, /* G */ {0, 2, 1, -4, 1, 0, -5, 5, -2, -3, 0, -2, -4, -3, 1, 0, -1, -2, 1, 0, -1, -8, -1, -6, 0, -9}, /* H */ {0, -1, 1, -4, 1, 1, -2, -2, 7, -2, 0, 0, -2, -2, 2, 0, 3, 2, -1, -1, -2, -3, 0, 0, 2, -9}, /* I */ {0, 0, -2, -3, -2, -2, 1, -3, -2, 5, 0, -2, 3, 3, -2, -2, -2, -2, -1, 0, 4, -6, -1, -1, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -6, 0, 0, -6, -2, 0, -2, 0, 5, -3, 0, 1, -1, 1, 4, 0, 0, -2, -4, -1, -5, 1, -9}, /* L */ {0, -2, -4, -7, -4, -4, 3, -4, -2, 3, 0, -3, 7, 4, -3, -3, -2, -3, -3, -2, 2, -2, -1, 0, -3, -9}, /* M */ {0, -1, -2, -6, -3, -2, 1, -3, -2, 3, 0, 0, 4, 6, -2, -2, -1, 0, -2, -1, 2, -5, -1, -2, -2, -9}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 2, -2, 0, 1, -3, -2, 2, 0, 1, 0, 1, 0, -2, -5, 0, -2, 1, -9}, /* P */ {0, 1, 0, -3, -1, 0, -5, 0, 0, -2, 0, -1, -3, -2, 0, 6, 0, 0, 1, 1, -1, -6, -1, -5, 0, -9}, /* Q */ {0, 0, 2, -6, 2, 3, -5, -1, 3, -2, 0, 1, -2, -1, 1, 0, 4, 2, 0, -1, -2, -5, 0, -4, 3, -9}, /* R */ {0, -1, 0, -4, -1, -1, -5, -2, 2, -2, 0, 4, -3, 0, 0, 0, 2, 7, 0, -1, -3, 3, -1, -5, 0, -9}, /* S */ {0, 1, 1, 0, 0, 0, -4, 1, -1, -1, 0, 0, -3, -2, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 0, -1, 0, 0, 0, -2, -1, 0, 1, -1, -1, 1, 2, 0, -6, 0, -3, 0, -9}, /* V */ {0, 0, -2, -2, -2, -2, -1, -1, -2, 4, 0, -2, 2, 2, -2, -1, -2, -3, -1, 0, 5, -7, 0, -3, -2, -9}, /* W */ {0, -6, -6, -9, -7, -8, 1, -8, -3, -6, 0, -4, -2, -5, -5, -6, -5, 3, -3, -6, -7, 22, -4, 0, -6, -9}, /* X */ {0, 0, 0, -3, -1, -1, -2, -1, 0, -1, 0, -1, -1, -1, 0, -1, 0, -1, 0, 0, 0, -4, -1, -2, -1, -9}, /* Y */ {0, -4, -4, 1, -5, -5, 9, -6, 0, -1, 0, -5, 0, -2, -2, -5, -4, -5, -3, -3, -3, 0, -2, 12, -5, -9}, /* Z */ {0, 0, 2, -6, 3, 3, -5, 0, 2, -2, 0, 1, -3, -2, 1, 0, 3, 0, 0, 0, -2, -6, -1, -5, 3, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 310 substitution matrix, scale = ln(2)/4 = 0.173287 // # // # Expected score = -0.779, Entropy = 0.238 bits // # // # Lowest score = -9, Highest score = 22 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -1 0 0 -2 0 0 1 -1 0 -2 -1 -1 -4 1 1 1 -6 -4 0 0 0 0 -9 // R -1 6 0 -1 -4 1 -1 -2 2 -2 -3 4 0 -5 0 0 -1 3 -4 -2 0 0 -1 -9 // N 0 0 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 0 -4 -2 -2 2 1 0 -9 // D 0 -1 2 4 -5 2 4 1 1 -2 -4 0 -2 -6 -1 0 0 -7 -5 -2 3 3 -1 -9 // C -2 -4 -4 -5 15 -6 -6 -3 -4 -2 -6 -6 -6 -4 -3 0 -2 -9 1 -2 -5 -6 -3 -9 // Q 0 1 1 2 -6 4 3 -1 3 -2 -2 1 -1 -5 0 0 -1 -5 -4 -2 2 3 0 -9 // E 0 -1 2 4 -6 3 4 1 1 -2 -3 0 -2 -6 0 0 0 -7 -5 -2 3 3 -1 -9 // G 1 -2 1 1 -3 -1 1 5 -2 -2 -4 -1 -3 -5 0 1 0 -8 -6 -1 1 0 -1 -9 // H -1 2 2 1 -4 3 1 -2 7 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 0 -9 // I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 3 1 -2 -1 0 -5 -1 4 -2 -2 -1 -9 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 7 -3 4 3 -3 -3 -2 -2 0 2 -3 -3 -1 -9 // K -1 4 1 0 -6 1 0 -1 0 -2 -3 5 0 -5 -1 0 0 -3 -5 -2 1 1 -1 -9 // M -1 0 -2 -2 -6 -1 -2 -3 -2 3 4 0 6 1 -2 -2 -1 -4 -2 2 -2 -2 -1 -9 // F -4 -5 -4 -6 -4 -5 -6 -5 -2 1 3 -5 1 11 -5 -4 -3 1 9 -1 -5 -5 -2 -9 // P 1 0 0 -1 -3 0 0 0 0 -2 -3 -1 -2 -5 6 1 1 -6 -5 -1 0 0 0 -9 // S 1 0 1 0 0 0 0 1 -1 -1 -3 0 -2 -4 1 1 1 -3 -3 -1 1 0 0 -9 // T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 1 1 2 -6 -3 0 0 0 0 -9 // W -6 3 -4 -7 -9 -5 -7 -8 -3 -5 -2 -3 -4 1 -6 -3 -6 22 0 -7 -6 -6 -4 -9 // Y -4 -4 -2 -5 1 -4 -5 -6 0 -1 0 -5 -2 9 -5 -3 -3 0 12 -2 -4 -4 -2 -9 // V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -7 -2 4 -2 -2 0 -9 // B 0 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -2 3 2 0 -9 // Z 0 0 1 3 -6 3 3 0 2 -2 -3 1 -2 -5 0 0 0 -6 -4 -2 2 3 0 -9 // X 0 -1 0 -1 -3 0 -1 -1 0 -1 -1 -1 -1 -2 0 0 0 -4 -2 0 0 0 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM310 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 0, -2, 0, 0, -4, 1, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -4, 0, -9}, /* B */ {0, 0, 3, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -2, -6, 0, -4, 2, -9}, /* C */ {0, -2, -5, 15, -5, -6, -4, -3, -4, -2, 0, -6, -6, -6, -4, -3, -6, -4, 0, -2, -2, -9, -3, 1, -6, -9}, /* D */ {0, 0, 3, -5, 4, 4, -6, 1, 1, -2, 0, 0, -4, -2, 2, -1, 2, -1, 0, 0, -2, -7, -1, -5, 3, -9}, /* E */ {0, 0, 3, -6, 4, 4, -6, 1, 1, -2, 0, 0, -3, -2, 2, 0, 3, -1, 0, 0, -2, -7, -1, -5, 3, -9}, /* F */ {0, -4, -5, -4, -6, -6, 11, -5, -2, 1, 0, -5, 3, 1, -4, -5, -5, -5, -4, -3, -1, 1, -2, 9, -5, -9}, /* G */ {0, 1, 1, -3, 1, 1, -5, 5, -2, -2, 0, -1, -4, -3, 1, 0, -1, -2, 1, 0, -1, -8, -1, -6, 0, -9}, /* H */ {0, -1, 1, -4, 1, 1, -2, -2, 7, -2, 0, 0, -2, -2, 2, 0, 3, 2, -1, -1, -2, -3, 0, 0, 2, -9}, /* I */ {0, 0, -2, -2, -2, -2, 1, -2, -2, 4, 0, -2, 3, 3, -2, -2, -2, -2, -1, 0, 4, -5, -1, -1, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -6, 0, 0, -5, -1, 0, -2, 0, 5, -3, 0, 1, -1, 1, 4, 0, 0, -2, -3, -1, -5, 1, -9}, /* L */ {0, -2, -3, -6, -4, -3, 3, -4, -2, 3, 0, -3, 7, 4, -3, -3, -2, -3, -3, -2, 2, -2, -1, 0, -3, -9}, /* M */ {0, -1, -2, -6, -2, -2, 1, -3, -2, 3, 0, 0, 4, 6, -2, -2, -1, 0, -2, -1, 2, -4, -1, -2, -2, -9}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 2, -2, 0, 1, -3, -2, 2, 0, 1, 0, 1, 0, -2, -4, 0, -2, 1, -9}, /* P */ {0, 1, 0, -3, -1, 0, -5, 0, 0, -2, 0, -1, -3, -2, 0, 6, 0, 0, 1, 1, -1, -6, 0, -5, 0, -9}, /* Q */ {0, 0, 2, -6, 2, 3, -5, -1, 3, -2, 0, 1, -2, -1, 1, 0, 4, 1, 0, -1, -2, -5, 0, -4, 3, -9}, /* R */ {0, -1, 0, -4, -1, -1, -5, -2, 2, -2, 0, 4, -3, 0, 0, 0, 1, 6, 0, -1, -2, 3, -1, -4, 0, -9}, /* S */ {0, 1, 1, 0, 0, 0, -4, 1, -1, -1, 0, 0, -3, -2, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 0, -1, 0, 0, 0, -2, -1, 0, 1, -1, -1, 1, 2, 0, -6, 0, -3, 0, -9}, /* V */ {0, 0, -2, -2, -2, -2, -1, -1, -2, 4, 0, -2, 2, 2, -2, -1, -2, -2, -1, 0, 4, -7, 0, -2, -2, -9}, /* W */ {0, -6, -6, -9, -7, -7, 1, -8, -3, -5, 0, -3, -2, -4, -4, -6, -5, 3, -3, -6, -7, 22, -4, 0, -6, -9}, /* X */ {0, 0, 0, -3, -1, -1, -2, -1, 0, -1, 0, -1, -1, -1, 0, 0, 0, -1, 0, 0, 0, -4, -1, -2, 0, -9}, /* Y */ {0, -4, -4, 1, -5, -5, 9, -6, 0, -1, 0, -5, 0, -2, -2, -5, -4, -4, -3, -3, -2, 0, -2, 12, -4, -9}, /* Z */ {0, 0, 2, -6, 3, 3, -5, 0, 2, -2, 0, 1, -3, -2, 1, 0, 3, 0, 0, 0, -2, -6, 0, -4, 3, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 320 substitution matrix, scale = ln(2)/4 = 0.173287 // # // # Expected score = -0.741, Entropy = 0.224 bits // # // # Lowest score = -8, Highest score = 22 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 0 1 -1 0 -2 -1 -1 -4 1 1 1 -6 -4 0 0 0 0 -8 // R -1 6 0 -1 -4 1 -1 -2 2 -2 -3 4 0 -5 0 0 -1 3 -4 -2 0 0 -1 -8 // N 0 0 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 0 -4 -2 -2 2 1 0 -8 // D 1 -1 2 4 -5 2 3 1 1 -2 -4 0 -2 -6 0 0 0 -7 -5 -2 3 3 -1 -8 // C -2 -4 -4 -5 15 -5 -5 -3 -4 -2 -6 -6 -5 -4 -3 0 -2 -8 1 -2 -4 -5 -3 -8 // Q 0 1 1 2 -5 4 2 -1 3 -2 -2 1 -1 -5 0 0 0 -5 -4 -2 2 3 0 -8 // E 0 -1 2 3 -5 2 4 1 1 -2 -3 0 -2 -5 0 0 0 -7 -5 -2 3 3 0 -8 // G 1 -2 1 1 -3 -1 1 5 -2 -2 -4 -1 -3 -5 0 1 0 -7 -5 -1 1 0 -1 -8 // H -1 2 2 1 -4 3 1 -2 6 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 0 -8 // I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 2 1 -2 -1 0 -5 -1 4 -2 -2 0 -8 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 7 -3 4 3 -2 -3 -2 -2 0 2 -3 -3 -1 -8 // K -1 4 1 0 -6 1 0 -1 0 -2 -3 5 0 -5 -1 0 0 -3 -5 -2 1 1 -1 -8 // M -1 0 -2 -2 -5 -1 -2 -3 -2 2 4 0 6 1 -2 -1 -1 -4 -2 2 -2 -2 0 -8 // F -4 -5 -4 -6 -4 -5 -5 -5 -2 1 3 -5 1 11 -5 -3 -3 1 9 -1 -5 -5 -2 -8 // P 1 0 0 0 -3 0 0 0 0 -2 -2 -1 -2 -5 6 1 1 -6 -5 -1 0 0 0 -8 // S 1 0 1 0 0 0 0 1 -1 -1 -3 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -8 // T 1 -1 0 0 -2 0 0 0 -1 0 -2 0 -1 -3 1 1 2 -5 -3 0 0 0 0 -8 // W -6 3 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4 1 -6 -3 -5 22 1 -6 -6 -6 -4 -8 // Y -4 -4 -2 -5 1 -4 -5 -5 0 -1 0 -5 -2 9 -5 -3 -3 1 12 -2 -3 -4 -2 -8 // V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 0 -8 // B 0 0 2 3 -4 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -6 -3 -2 2 2 0 -8 // Z 0 0 1 3 -5 3 3 0 2 -2 -3 1 -2 -5 0 0 0 -6 -4 -2 2 3 0 -8 // X 0 -1 0 -1 -3 0 0 -1 0 0 -1 -1 0 -2 0 0 0 -4 -2 0 0 0 -1 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // PAM320 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 0, -2, 1, 0, -4, 1, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -4, 0, -8}, /* B */ {0, 0, 2, -4, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -2, -6, 0, -3, 2, -8}, /* C */ {0, -2, -4, 15, -5, -5, -4, -3, -4, -2, 0, -6, -6, -5, -4, -3, -5, -4, 0, -2, -2, -8, -3, 1, -5, -8}, /* D */ {0, 1, 3, -5, 4, 3, -6, 1, 1, -2, 0, 0, -4, -2, 2, 0, 2, -1, 0, 0, -2, -7, -1, -5, 3, -8}, /* E */ {0, 0, 3, -5, 3, 4, -5, 1, 1, -2, 0, 0, -3, -2, 2, 0, 2, -1, 0, 0, -2, -7, 0, -5, 3, -8}, /* F */ {0, -4, -5, -4, -6, -5, 11, -5, -2, 1, 0, -5, 3, 1, -4, -5, -5, -5, -3, -3, -1, 1, -2, 9, -5, -8}, /* G */ {0, 1, 1, -3, 1, 1, -5, 5, -2, -2, 0, -1, -4, -3, 1, 0, -1, -2, 1, 0, -1, -7, -1, -5, 0, -8}, /* H */ {0, -1, 1, -4, 1, 1, -2, -2, 6, -2, 0, 0, -2, -2, 2, 0, 3, 2, -1, -1, -2, -3, 0, 0, 2, -8}, /* I */ {0, 0, -2, -2, -2, -2, 1, -2, -2, 4, 0, -2, 3, 2, -2, -2, -2, -2, -1, 0, 4, -5, 0, -1, -2, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -6, 0, 0, -5, -1, 0, -2, 0, 5, -3, 0, 1, -1, 1, 4, 0, 0, -2, -3, -1, -5, 1, -8}, /* L */ {0, -2, -3, -6, -4, -3, 3, -4, -2, 3, 0, -3, 7, 4, -3, -2, -2, -3, -3, -2, 2, -2, -1, 0, -3, -8}, /* M */ {0, -1, -2, -5, -2, -2, 1, -3, -2, 2, 0, 0, 4, 6, -2, -2, -1, 0, -1, -1, 2, -4, 0, -2, -2, -8}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 2, -2, 0, 1, -3, -2, 2, 0, 1, 0, 1, 0, -2, -4, 0, -2, 1, -8}, /* P */ {0, 1, 0, -3, 0, 0, -5, 0, 0, -2, 0, -1, -2, -2, 0, 6, 0, 0, 1, 1, -1, -6, 0, -5, 0, -8}, /* Q */ {0, 0, 2, -5, 2, 2, -5, -1, 3, -2, 0, 1, -2, -1, 1, 0, 4, 1, 0, 0, -2, -5, 0, -4, 3, -8}, /* R */ {0, -1, 0, -4, -1, -1, -5, -2, 2, -2, 0, 4, -3, 0, 0, 0, 1, 6, 0, -1, -2, 3, -1, -4, 0, -8}, /* S */ {0, 1, 1, 0, 0, 0, -3, 1, -1, -1, 0, 0, -3, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -8}, /* T */ {0, 1, 0, -2, 0, 0, -3, 0, -1, 0, 0, 0, -2, -1, 0, 1, 0, -1, 1, 2, 0, -5, 0, -3, 0, -8}, /* V */ {0, 0, -2, -2, -2, -2, -1, -1, -2, 4, 0, -2, 2, 2, -2, -1, -2, -2, -1, 0, 4, -6, 0, -2, -2, -8}, /* W */ {0, -6, -6, -8, -7, -7, 1, -7, -3, -5, 0, -3, -2, -4, -4, -6, -5, 3, -3, -5, -6, 22, -4, 1, -6, -8}, /* X */ {0, 0, 0, -3, -1, 0, -2, -1, 0, 0, 0, -1, -1, 0, 0, 0, 0, -1, 0, 0, 0, -4, -1, -2, 0, -8}, /* Y */ {0, -4, -3, 1, -5, -5, 9, -5, 0, -1, 0, -5, 0, -2, -2, -5, -4, -4, -3, -3, -2, 1, -2, 12, -4, -8}, /* Z */ {0, 0, 2, -5, 3, 3, -5, 0, 2, -2, 0, 1, -3, -2, 1, 0, 3, 0, 0, 0, -2, -6, 0, -4, 3, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 330 substitution matrix, scale = ln(2)/4 = 0.173287 // # // # Expected score = -0.693, Entropy = 0.210 bits // # // # Lowest score = -8, Highest score = 22 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 0 1 -1 0 -2 -1 -1 -3 1 1 1 -6 -3 0 0 0 0 -8 // R -1 6 0 -1 -4 1 -1 -2 2 -2 -3 4 0 -4 0 0 -1 3 -4 -2 0 0 -1 -8 // N 0 0 2 2 -4 1 2 1 1 -2 -3 1 -1 -3 0 1 0 -4 -2 -1 2 1 0 -8 // D 1 -1 2 3 -5 2 3 1 1 -2 -4 0 -2 -5 0 0 0 -7 -4 -2 3 3 0 -8 // C -2 -4 -4 -5 15 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3 0 -2 -8 1 -2 -4 -5 -3 -8 // Q 0 1 1 2 -5 3 2 -1 3 -2 -2 1 -1 -4 0 0 0 -5 -4 -2 1 3 0 -8 // E 0 -1 2 3 -5 2 3 1 1 -2 -3 0 -2 -5 0 0 0 -7 -4 -2 2 3 0 -8 // G 1 -2 1 1 -3 -1 1 5 -2 -2 -4 -1 -2 -5 0 1 0 -7 -5 -1 1 0 -1 -8 // H -1 2 1 1 -3 3 1 -2 6 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 0 -8 // I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 2 1 -2 -1 0 -5 0 4 -2 -2 0 -8 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 6 -3 4 3 -2 -3 -1 -2 0 2 -3 -2 -1 -8 // K -1 4 1 0 -5 1 0 -1 0 -2 -3 5 0 -5 -1 0 0 -3 -4 -2 1 1 -1 -8 // M -1 0 -1 -2 -5 -1 -2 -2 -2 2 4 0 5 1 -2 -1 0 -4 -2 2 -2 -1 0 -8 // F -3 -4 -3 -5 -4 -4 -5 -5 -2 1 3 -5 1 10 -5 -3 -3 1 9 -1 -4 -5 -2 -8 // P 1 0 0 0 -3 0 0 0 0 -2 -2 -1 -2 -5 6 1 1 -6 -5 -1 0 0 0 -8 // S 1 0 1 0 0 0 0 1 -1 -1 -3 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -8 // T 1 -1 0 0 -2 0 0 0 -1 0 -1 0 0 -3 1 1 2 -5 -3 0 0 0 0 -8 // W -6 3 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4 1 -6 -3 -5 22 1 -6 -5 -6 -4 -8 // Y -3 -4 -2 -4 1 -4 -4 -5 0 0 0 -4 -2 9 -5 -3 -3 1 12 -2 -3 -4 -2 -8 // V 0 -2 -1 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 0 -8 // B 0 0 2 3 -4 1 2 1 1 -2 -3 1 -2 -4 0 1 0 -5 -3 -2 2 2 0 -8 // Z 0 0 1 3 -5 3 3 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -2 2 3 0 -8 // X 0 -1 0 0 -3 0 0 -1 0 0 -1 -1 0 -2 0 0 0 -4 -2 0 0 0 -1 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // PAM330 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 0, -2, 1, 0, -3, 1, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -3, 0, -8}, /* B */ {0, 0, 2, -4, 3, 2, -4, 1, 1, -2, 0, 1, -3, -2, 2, 0, 1, 0, 1, 0, -2, -5, 0, -3, 2, -8}, /* C */ {0, -2, -4, 15, -5, -5, -4, -3, -3, -2, 0, -5, -6, -5, -4, -3, -5, -4, 0, -2, -2, -8, -3, 1, -5, -8}, /* D */ {0, 1, 3, -5, 3, 3, -5, 1, 1, -2, 0, 0, -4, -2, 2, 0, 2, -1, 0, 0, -2, -7, 0, -4, 3, -8}, /* E */ {0, 0, 2, -5, 3, 3, -5, 1, 1, -2, 0, 0, -3, -2, 2, 0, 2, -1, 0, 0, -2, -7, 0, -4, 3, -8}, /* F */ {0, -3, -4, -4, -5, -5, 10, -5, -2, 1, 0, -5, 3, 1, -3, -5, -4, -4, -3, -3, -1, 1, -2, 9, -5, -8}, /* G */ {0, 1, 1, -3, 1, 1, -5, 5, -2, -2, 0, -1, -4, -2, 1, 0, -1, -2, 1, 0, -1, -7, -1, -5, 0, -8}, /* H */ {0, -1, 1, -3, 1, 1, -2, -2, 6, -2, 0, 0, -2, -2, 1, 0, 3, 2, -1, -1, -2, -3, 0, 0, 2, -8}, /* I */ {0, 0, -2, -2, -2, -2, 1, -2, -2, 4, 0, -2, 3, 2, -2, -2, -2, -2, -1, 0, 4, -5, 0, 0, -2, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -5, 0, 0, -5, -1, 0, -2, 0, 5, -3, 0, 1, -1, 1, 4, 0, 0, -2, -3, -1, -4, 1, -8}, /* L */ {0, -2, -3, -6, -4, -3, 3, -4, -2, 3, 0, -3, 6, 4, -3, -2, -2, -3, -3, -1, 2, -2, -1, 0, -2, -8}, /* M */ {0, -1, -2, -5, -2, -2, 1, -2, -2, 2, 0, 0, 4, 5, -1, -2, -1, 0, -1, 0, 2, -4, 0, -2, -1, -8}, /* N */ {0, 0, 2, -4, 2, 2, -3, 1, 1, -2, 0, 1, -3, -1, 2, 0, 1, 0, 1, 0, -1, -4, 0, -2, 1, -8}, /* P */ {0, 1, 0, -3, 0, 0, -5, 0, 0, -2, 0, -1, -2, -2, 0, 6, 0, 0, 1, 1, -1, -6, 0, -5, 0, -8}, /* Q */ {0, 0, 1, -5, 2, 2, -4, -1, 3, -2, 0, 1, -2, -1, 1, 0, 3, 1, 0, 0, -2, -5, 0, -4, 3, -8}, /* R */ {0, -1, 0, -4, -1, -1, -4, -2, 2, -2, 0, 4, -3, 0, 0, 0, 1, 6, 0, -1, -2, 3, -1, -4, 0, -8}, /* S */ {0, 1, 1, 0, 0, 0, -3, 1, -1, -1, 0, 0, -3, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -8}, /* T */ {0, 1, 0, -2, 0, 0, -3, 0, -1, 0, 0, 0, -1, 0, 0, 1, 0, -1, 1, 2, 0, -5, 0, -3, 0, -8}, /* V */ {0, 0, -2, -2, -2, -2, -1, -1, -2, 4, 0, -2, 2, 2, -1, -1, -2, -2, -1, 0, 4, -6, 0, -2, -2, -8}, /* W */ {0, -6, -5, -8, -7, -7, 1, -7, -3, -5, 0, -3, -2, -4, -4, -6, -5, 3, -3, -5, -6, 22, -4, 1, -6, -8}, /* X */ {0, 0, 0, -3, 0, 0, -2, -1, 0, 0, 0, -1, -1, 0, 0, 0, 0, -1, 0, 0, 0, -4, -1, -2, 0, -8}, /* Y */ {0, -3, -3, 1, -4, -4, 9, -5, 0, 0, 0, -4, 0, -2, -2, -5, -4, -4, -3, -3, -2, 1, -2, 12, -4, -8}, /* Z */ {0, 0, 2, -5, 3, 3, -5, 0, 2, -2, 0, 1, -2, -1, 1, 0, 3, 0, 0, 0, -2, -6, 0, -4, 3, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 340 substitution matrix, scale = ln(2)/4 = 0.173287 // # // # Expected score = -0.680, Entropy = 0.198 bits // # // # Lowest score = -8, Highest score = 22 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 0 1 -1 0 -2 -1 -1 -3 1 1 1 -6 -3 0 0 0 0 -8 // R -1 6 0 -1 -4 1 0 -2 2 -2 -3 4 0 -4 0 0 0 3 -4 -2 0 0 -1 -8 // N 0 0 1 2 -3 1 1 1 1 -2 -3 1 -1 -3 0 1 0 -4 -2 -1 2 1 0 -8 // D 1 -1 2 3 -5 2 3 1 1 -2 -4 0 -2 -5 0 0 0 -7 -4 -2 3 3 0 -8 // C -2 -4 -3 -5 15 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3 0 -2 -8 1 -2 -4 -5 -3 -8 // Q 0 1 1 2 -5 3 2 -1 3 -2 -2 1 -1 -4 0 0 0 -5 -4 -2 1 3 0 -8 // E 0 0 1 3 -5 2 3 1 1 -2 -3 0 -2 -5 0 0 0 -7 -4 -1 2 3 0 -8 // G 1 -2 1 1 -3 -1 1 4 -2 -2 -4 -1 -2 -5 0 1 0 -7 -5 -1 1 0 -1 -8 // H -1 2 1 1 -3 3 1 -2 6 -2 -2 0 -2 -2 0 0 -1 -2 0 -2 1 2 0 -8 // I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 2 1 -2 -1 0 -5 0 3 -2 -2 0 -8 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 6 -3 4 3 -2 -2 -1 -2 0 2 -3 -2 -1 -8 // K -1 4 1 0 -5 1 0 -1 0 -2 -3 4 0 -5 -1 0 0 -3 -4 -2 1 1 0 -8 // M -1 0 -1 -2 -5 -1 -2 -2 -2 2 4 0 5 1 -2 -1 0 -4 -2 2 -2 -1 0 -8 // F -3 -4 -3 -5 -4 -4 -5 -5 -2 1 3 -5 1 10 -4 -3 -3 1 9 -1 -4 -5 -2 -8 // P 1 0 0 0 -3 0 0 0 0 -2 -2 -1 -2 -4 5 1 1 -5 -5 -1 0 0 0 -8 // S 1 0 1 0 0 0 0 1 0 -1 -2 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -8 // T 1 0 0 0 -2 0 0 0 -1 0 -1 0 0 -3 1 1 2 -5 -3 0 0 0 0 -8 // W -6 3 -4 -7 -8 -5 -7 -7 -2 -5 -2 -3 -4 1 -5 -3 -5 22 1 -6 -5 -6 -4 -8 // Y -3 -4 -2 -4 1 -4 -4 -5 0 0 0 -4 -2 9 -5 -3 -3 1 12 -2 -3 -4 -2 -8 // V 0 -2 -1 -2 -2 -2 -1 -1 -2 3 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 0 -8 // B 0 0 2 3 -4 1 2 1 1 -2 -3 1 -2 -4 0 1 0 -5 -3 -2 2 2 0 -8 // Z 0 0 1 3 -5 3 3 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -2 2 3 0 -8 // X 0 -1 0 0 -3 0 0 -1 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // PAM340 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 0, -2, 1, 0, -3, 1, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -3, 0, -8}, /* B */ {0, 0, 2, -4, 3, 2, -4, 1, 1, -2, 0, 1, -3, -2, 2, 0, 1, 0, 1, 0, -2, -5, 0, -3, 2, -8}, /* C */ {0, -2, -4, 15, -5, -5, -4, -3, -3, -2, 0, -5, -6, -5, -3, -3, -5, -4, 0, -2, -2, -8, -3, 1, -5, -8}, /* D */ {0, 1, 3, -5, 3, 3, -5, 1, 1, -2, 0, 0, -4, -2, 2, 0, 2, -1, 0, 0, -2, -7, 0, -4, 3, -8}, /* E */ {0, 0, 2, -5, 3, 3, -5, 1, 1, -2, 0, 0, -3, -2, 1, 0, 2, 0, 0, 0, -1, -7, 0, -4, 3, -8}, /* F */ {0, -3, -4, -4, -5, -5, 10, -5, -2, 1, 0, -5, 3, 1, -3, -4, -4, -4, -3, -3, -1, 1, -2, 9, -5, -8}, /* G */ {0, 1, 1, -3, 1, 1, -5, 4, -2, -2, 0, -1, -4, -2, 1, 0, -1, -2, 1, 0, -1, -7, -1, -5, 0, -8}, /* H */ {0, -1, 1, -3, 1, 1, -2, -2, 6, -2, 0, 0, -2, -2, 1, 0, 3, 2, 0, -1, -2, -2, 0, 0, 2, -8}, /* I */ {0, 0, -2, -2, -2, -2, 1, -2, -2, 4, 0, -2, 3, 2, -2, -2, -2, -2, -1, 0, 3, -5, 0, 0, -2, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -5, 0, 0, -5, -1, 0, -2, 0, 4, -3, 0, 1, -1, 1, 4, 0, 0, -2, -3, 0, -4, 1, -8}, /* L */ {0, -2, -3, -6, -4, -3, 3, -4, -2, 3, 0, -3, 6, 4, -3, -2, -2, -3, -2, -1, 2, -2, -1, 0, -2, -8}, /* M */ {0, -1, -2, -5, -2, -2, 1, -2, -2, 2, 0, 0, 4, 5, -1, -2, -1, 0, -1, 0, 2, -4, 0, -2, -1, -8}, /* N */ {0, 0, 2, -3, 2, 1, -3, 1, 1, -2, 0, 1, -3, -1, 1, 0, 1, 0, 1, 0, -1, -4, 0, -2, 1, -8}, /* P */ {0, 1, 0, -3, 0, 0, -4, 0, 0, -2, 0, -1, -2, -2, 0, 5, 0, 0, 1, 1, -1, -5, 0, -5, 0, -8}, /* Q */ {0, 0, 1, -5, 2, 2, -4, -1, 3, -2, 0, 1, -2, -1, 1, 0, 3, 1, 0, 0, -2, -5, 0, -4, 3, -8}, /* R */ {0, -1, 0, -4, -1, 0, -4, -2, 2, -2, 0, 4, -3, 0, 0, 0, 1, 6, 0, 0, -2, 3, -1, -4, 0, -8}, /* S */ {0, 1, 1, 0, 0, 0, -3, 1, 0, -1, 0, 0, -2, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -8}, /* T */ {0, 1, 0, -2, 0, 0, -3, 0, -1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 2, 0, -5, 0, -3, 0, -8}, /* V */ {0, 0, -2, -2, -2, -1, -1, -1, -2, 3, 0, -2, 2, 2, -1, -1, -2, -2, -1, 0, 4, -6, 0, -2, -2, -8}, /* W */ {0, -6, -5, -8, -7, -7, 1, -7, -2, -5, 0, -3, -2, -4, -4, -5, -5, 3, -3, -5, -6, 22, -4, 1, -6, -8}, /* X */ {0, 0, 0, -3, 0, 0, -2, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, -4, -1, -2, 0, -8}, /* Y */ {0, -3, -3, 1, -4, -4, 9, -5, 0, 0, 0, -4, 0, -2, -2, -5, -4, -4, -3, -3, -2, 1, -2, 12, -4, -8}, /* Z */ {0, 0, 2, -5, 3, 3, -5, 0, 2, -2, 0, 1, -2, -1, 1, 0, 3, 0, 0, 0, -2, -6, 0, -4, 3, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 350 substitution matrix, scale = ln(2)/5 = 0.138629 // # // # Expected score = -0.701, Entropy = 0.186 bits // # // # Lowest score = -10, Highest score = 27 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 2 -1 0 1 -2 0 1 2 -1 0 -2 -1 -1 -4 1 1 1 -7 -4 0 1 0 0 -10 // R -1 7 1 -1 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 -1 4 -5 -3 0 1 -1 -10 // N 0 1 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 1 -5 -3 -2 2 2 0 -10 // D 1 -1 2 4 -6 2 4 1 1 -2 -4 1 -3 -6 0 1 0 -8 -5 -2 3 3 -1 -10 // C -2 -4 -4 -6 18 -6 -6 -4 -4 -3 -7 -6 -6 -5 -3 0 -2 -10 1 -2 -5 -6 -3 -10 // Q 0 2 1 2 -6 4 3 -1 3 -2 -2 1 -1 -5 1 0 0 -5 -5 -2 2 3 0 -10 // E 1 0 2 4 -6 3 4 1 1 -2 -4 0 -2 -6 0 0 0 -8 -5 -2 3 3 0 -10 // G 2 -2 1 1 -4 -1 1 5 -2 -2 -4 -1 -3 -6 0 1 1 -8 -6 -1 1 0 -1 -10 // H -1 2 2 1 -4 3 1 -2 7 -2 -2 1 -2 -2 0 -1 -1 -3 0 -2 1 2 0 -10 // I 0 -2 -2 -2 -3 -2 -2 -2 -2 5 4 -2 3 2 -2 -1 0 -6 0 4 -2 -2 0 -10 // L -2 -3 -3 -4 -7 -2 -4 -4 -2 4 8 -3 5 3 -3 -3 -2 -2 0 3 -4 -3 -1 -10 // K -1 4 1 1 -6 1 0 -1 1 -2 -3 5 0 -6 -1 0 0 -4 -5 -2 1 1 -1 -10 // M -1 0 -2 -3 -6 -1 -2 -3 -2 3 5 0 6 1 -2 -2 -1 -5 -2 2 -2 -2 0 -10 // F -4 -5 -4 -6 -5 -5 -6 -6 -2 2 3 -6 1 13 -5 -4 -3 1 11 -1 -5 -6 -2 -10 // P 1 0 0 0 -3 1 0 0 0 -2 -3 -1 -2 -5 6 1 1 -7 -6 -1 0 0 0 -10 // S 1 0 1 1 0 0 0 1 -1 -1 -3 0 -2 -4 1 1 1 -3 -3 -1 1 0 0 -10 // T 1 -1 1 0 -2 0 0 1 -1 0 -2 0 -1 -3 1 1 2 -6 -3 0 0 0 0 -10 // W -7 4 -5 -8 -10 -5 -8 -8 -3 -6 -2 -4 -5 1 -7 -3 -6 27 1 -7 -6 -7 -5 -10 // Y -4 -5 -3 -5 1 -5 -5 -6 0 0 0 -5 -2 11 -6 -3 -3 1 14 -2 -4 -5 -2 -10 // V 0 -3 -2 -2 -2 -2 -2 -1 -2 4 3 -2 2 -1 -1 -1 0 -7 -2 5 -2 -2 0 -10 // B 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -5 0 1 0 -6 -4 -2 3 2 0 -10 // Z 0 1 2 3 -6 3 3 0 2 -2 -3 1 -2 -6 0 0 0 -7 -5 -2 2 3 0 -10 // X 0 -1 0 -1 -3 0 0 -1 0 0 -1 -1 0 -2 0 0 0 -5 -2 0 0 0 -1 -10 // * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 // PAM350 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 2, 1, -2, 1, 1, -4, 2, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -7, 0, -4, 0, -10}, /* B */ {0, 1, 3, -5, 3, 3, -5, 1, 1, -2, 0, 1, -4, -2, 2, 0, 2, 0, 1, 0, -2, -6, 0, -4, 2, -10}, /* C */ {0, -2, -5, 18, -6, -6, -5, -4, -4, -3, 0, -6, -7, -6, -4, -3, -6, -4, 0, -2, -2, -10, -3, 1, -6, -10}, /* D */ {0, 1, 3, -6, 4, 4, -6, 1, 1, -2, 0, 1, -4, -3, 2, 0, 2, -1, 1, 0, -2, -8, -1, -5, 3, -10}, /* E */ {0, 1, 3, -6, 4, 4, -6, 1, 1, -2, 0, 0, -4, -2, 2, 0, 3, 0, 0, 0, -2, -8, 0, -5, 3, -10}, /* F */ {0, -4, -5, -5, -6, -6, 13, -6, -2, 2, 0, -6, 3, 1, -4, -5, -5, -5, -4, -3, -1, 1, -2, 11, -6, -10}, /* G */ {0, 2, 1, -4, 1, 1, -6, 5, -2, -2, 0, -1, -4, -3, 1, 0, -1, -2, 1, 1, -1, -8, -1, -6, 0, -10}, /* H */ {0, -1, 1, -4, 1, 1, -2, -2, 7, -2, 0, 1, -2, -2, 2, 0, 3, 2, -1, -1, -2, -3, 0, 0, 2, -10}, /* I */ {0, 0, -2, -3, -2, -2, 2, -2, -2, 5, 0, -2, 4, 3, -2, -2, -2, -2, -1, 0, 4, -6, 0, 0, -2, -10}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -6, 1, 0, -6, -1, 1, -2, 0, 5, -3, 0, 1, -1, 1, 4, 0, 0, -2, -4, -1, -5, 1, -10}, /* L */ {0, -2, -4, -7, -4, -4, 3, -4, -2, 4, 0, -3, 8, 5, -3, -3, -2, -3, -3, -2, 3, -2, -1, 0, -3, -10}, /* M */ {0, -1, -2, -6, -3, -2, 1, -3, -2, 3, 0, 0, 5, 6, -2, -2, -1, 0, -2, -1, 2, -5, 0, -2, -2, -10}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 2, -2, 0, 1, -3, -2, 2, 0, 1, 1, 1, 1, -2, -5, 0, -3, 2, -10}, /* P */ {0, 1, 0, -3, 0, 0, -5, 0, 0, -2, 0, -1, -3, -2, 0, 6, 1, 0, 1, 1, -1, -7, 0, -6, 0, -10}, /* Q */ {0, 0, 2, -6, 2, 3, -5, -1, 3, -2, 0, 1, -2, -1, 1, 1, 4, 2, 0, 0, -2, -5, 0, -5, 3, -10}, /* R */ {0, -1, 0, -4, -1, 0, -5, -2, 2, -2, 0, 4, -3, 0, 1, 0, 2, 7, 0, -1, -3, 4, -1, -5, 1, -10}, /* S */ {0, 1, 1, 0, 1, 0, -4, 1, -1, -1, 0, 0, -3, -2, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -10}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, -1, 0, 0, 0, -2, -1, 1, 1, 0, -1, 1, 2, 0, -6, 0, -3, 0, -10}, /* V */ {0, 0, -2, -2, -2, -2, -1, -1, -2, 4, 0, -2, 3, 2, -2, -1, -2, -3, -1, 0, 5, -7, 0, -2, -2, -10}, /* W */ {0, -7, -6, -10, -8, -8, 1, -8, -3, -6, 0, -4, -2, -5, -5, -7, -5, 4, -3, -6, -7, 27, -5, 1, -7, -10}, /* X */ {0, 0, 0, -3, -1, 0, -2, -1, 0, 0, 0, -1, -1, 0, 0, 0, 0, -1, 0, 0, 0, -5, -1, -2, 0, -10}, /* Y */ {0, -4, -4, 1, -5, -5, 11, -6, 0, 0, 0, -5, 0, -2, -3, -6, -5, -5, -3, -3, -2, 1, -2, 14, -5, -10}, /* Z */ {0, 0, 2, -6, 3, 3, -6, 0, 2, -2, 0, 1, -3, -2, 2, 0, 3, 1, 0, 0, -2, -7, 0, -5, 3, -10}, /* * */ {0, -10, -10, -10, -10, -10, -10, -10, -10, -10, 0, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 360 substitution matrix, scale = ln(2)/5 = 0.138629 // # // # Expected score = -0.697, Entropy = 0.175 bits // # // # Lowest score = -9, Highest score = 27 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 2 -1 0 -2 -1 -1 -4 1 1 1 -7 -4 0 1 0 0 -9 // R -1 6 1 -1 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 4 -5 -2 0 1 -1 -9 // N 0 1 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 1 -5 -3 -2 2 2 0 -9 // D 1 -1 2 4 -6 2 4 1 1 -2 -4 1 -2 -6 0 1 0 -8 -5 -2 3 3 0 -9 // C -2 -4 -4 -6 18 -6 -6 -4 -4 -3 -7 -6 -6 -4 -3 0 -2 -9 1 -2 -5 -6 -3 -9 // Q 0 2 1 2 -6 3 3 -1 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -2 2 3 0 -9 // E 1 0 2 4 -6 3 4 1 1 -2 -3 0 -2 -6 0 0 0 -8 -5 -2 3 3 0 -9 // G 2 -2 1 1 -4 -1 1 5 -2 -2 -4 -1 -3 -6 0 1 1 -8 -6 -1 1 0 -1 -9 // H -1 2 2 1 -4 3 1 -2 7 -2 -2 1 -2 -2 0 0 -1 -3 0 -2 1 2 0 -9 // I 0 -2 -2 -2 -3 -2 -2 -2 -2 4 3 -2 3 2 -2 -1 0 -6 0 4 -2 -2 0 -9 // L -2 -3 -3 -4 -7 -2 -3 -4 -2 3 7 -3 5 3 -3 -3 -2 -2 0 3 -4 -3 -1 -9 // K -1 4 1 1 -6 1 0 -1 1 -2 -3 5 0 -6 -1 0 0 -4 -5 -2 1 1 -1 -9 // M -1 0 -2 -2 -6 -1 -2 -3 -2 3 5 0 6 1 -2 -2 -1 -4 -2 2 -2 -2 0 -9 // F -4 -5 -4 -6 -4 -5 -6 -6 -2 2 3 -6 1 12 -5 -4 -3 2 11 -1 -5 -5 -2 -9 // P 1 0 0 0 -3 1 0 0 0 -2 -3 -1 -2 -5 6 1 1 -6 -5 -1 0 0 0 -9 // S 1 0 1 1 0 0 0 1 0 -1 -3 0 -2 -4 1 1 1 -3 -3 -1 1 0 0 -9 // T 1 0 1 0 -2 0 0 1 -1 0 -2 0 -1 -3 1 1 2 -6 -3 0 0 0 0 -9 // W -7 4 -5 -8 -9 -5 -8 -8 -3 -6 -2 -4 -4 2 -6 -3 -6 27 1 -7 -6 -7 -4 -9 // Y -4 -5 -3 -5 1 -4 -5 -6 0 0 0 -5 -2 11 -5 -3 -3 1 14 -2 -4 -5 -2 -9 // V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 3 -2 2 -1 -1 -1 0 -7 -2 4 -2 -2 0 -9 // B 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -5 0 1 0 -6 -4 -2 2 2 0 -9 // Z 0 1 2 3 -6 3 3 0 2 -2 -3 1 -2 -5 0 0 0 -7 -5 -2 2 3 0 -9 // X 0 -1 0 0 -3 0 0 -1 0 0 -1 -1 0 -2 0 0 0 -4 -2 0 0 0 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM360 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -4, 2, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -7, 0, -4, 0, -9}, /* B */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -4, -2, 2, 0, 2, 0, 1, 0, -2, -6, 0, -4, 2, -9}, /* C */ {0, -2, -5, 18, -6, -6, -4, -4, -4, -3, 0, -6, -7, -6, -4, -3, -6, -4, 0, -2, -2, -9, -3, 1, -6, -9}, /* D */ {0, 1, 3, -6, 4, 4, -6, 1, 1, -2, 0, 1, -4, -2, 2, 0, 2, -1, 1, 0, -2, -8, 0, -5, 3, -9}, /* E */ {0, 1, 3, -6, 4, 4, -6, 1, 1, -2, 0, 0, -3, -2, 2, 0, 3, 0, 0, 0, -2, -8, 0, -5, 3, -9}, /* F */ {0, -4, -5, -4, -6, -6, 12, -6, -2, 2, 0, -6, 3, 1, -4, -5, -5, -5, -4, -3, -1, 2, -2, 11, -5, -9}, /* G */ {0, 2, 1, -4, 1, 1, -6, 5, -2, -2, 0, -1, -4, -3, 1, 0, -1, -2, 1, 1, -1, -8, -1, -6, 0, -9}, /* H */ {0, -1, 1, -4, 1, 1, -2, -2, 7, -2, 0, 1, -2, -2, 2, 0, 3, 2, 0, -1, -2, -3, 0, 0, 2, -9}, /* I */ {0, 0, -2, -3, -2, -2, 2, -2, -2, 4, 0, -2, 3, 3, -2, -2, -2, -2, -1, 0, 4, -6, 0, 0, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -6, 1, 0, -6, -1, 1, -2, 0, 5, -3, 0, 1, -1, 1, 4, 0, 0, -2, -4, -1, -5, 1, -9}, /* L */ {0, -2, -4, -7, -4, -3, 3, -4, -2, 3, 0, -3, 7, 5, -3, -3, -2, -3, -3, -2, 3, -2, -1, 0, -3, -9}, /* M */ {0, -1, -2, -6, -2, -2, 1, -3, -2, 3, 0, 0, 5, 6, -2, -2, -1, 0, -2, -1, 2, -4, 0, -2, -2, -9}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 2, -2, 0, 1, -3, -2, 2, 0, 1, 1, 1, 1, -2, -5, 0, -3, 2, -9}, /* P */ {0, 1, 0, -3, 0, 0, -5, 0, 0, -2, 0, -1, -3, -2, 0, 6, 1, 0, 1, 1, -1, -6, 0, -5, 0, -9}, /* Q */ {0, 0, 2, -6, 2, 3, -5, -1, 3, -2, 0, 1, -2, -1, 1, 1, 3, 2, 0, 0, -2, -5, 0, -4, 3, -9}, /* R */ {0, -1, 0, -4, -1, 0, -5, -2, 2, -2, 0, 4, -3, 0, 1, 0, 2, 6, 0, 0, -2, 4, -1, -5, 1, -9}, /* S */ {0, 1, 1, 0, 1, 0, -4, 1, 0, -1, 0, 0, -3, -2, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, -1, 0, 0, 0, -2, -1, 1, 1, 0, 0, 1, 2, 0, -6, 0, -3, 0, -9}, /* V */ {0, 0, -2, -2, -2, -2, -1, -1, -2, 4, 0, -2, 3, 2, -2, -1, -2, -2, -1, 0, 4, -7, 0, -2, -2, -9}, /* W */ {0, -7, -6, -9, -8, -8, 2, -8, -3, -6, 0, -4, -2, -4, -5, -6, -5, 4, -3, -6, -7, 27, -4, 1, -7, -9}, /* X */ {0, 0, 0, -3, 0, 0, -2, -1, 0, 0, 0, -1, -1, 0, 0, 0, 0, -1, 0, 0, 0, -4, -1, -2, 0, -9}, /* Y */ {0, -4, -4, 1, -5, -5, 11, -6, 0, 0, 0, -5, 0, -2, -3, -5, -4, -5, -3, -3, -2, 1, -2, 14, -5, -9}, /* Z */ {0, 0, 2, -6, 3, 3, -5, 0, 2, -2, 0, 1, -3, -2, 2, 0, 3, 1, 0, 0, -2, -7, 0, -5, 3, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 370 substitution matrix, scale = ln(2)/5 = 0.138629 // # // # Expected score = -0.649, Entropy = 0.165 bits // # // # Lowest score = -9, Highest score = 27 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 2 -1 0 -2 -1 -1 -4 1 1 1 -7 -4 0 1 0 0 -9 // R -1 6 1 0 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 3 -4 -2 0 1 -1 -9 // N 0 1 2 2 -4 1 2 1 2 -2 -3 1 -2 -4 0 1 0 -5 -3 -1 2 1 0 -9 // D 1 0 2 4 -5 2 3 1 1 -2 -4 1 -2 -6 0 1 0 -7 -5 -2 3 3 0 -9 // C -2 -4 -4 -5 18 -6 -6 -3 -4 -2 -6 -6 -6 -4 -3 0 -2 -9 1 -2 -5 -6 -3 -9 // Q 0 2 1 2 -6 3 2 -1 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -2 2 3 0 -9 // E 1 0 2 3 -6 2 3 1 1 -2 -3 1 -2 -6 0 0 0 -8 -5 -2 3 3 0 -9 // G 2 -2 1 1 -3 -1 1 5 -2 -2 -4 -1 -3 -5 0 1 1 -8 -6 -1 1 0 -1 -9 // H -1 2 2 1 -4 3 1 -2 6 -2 -2 1 -2 -2 0 0 -1 -3 0 -2 1 2 0 -9 // I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 3 2 -2 -1 0 -5 0 4 -2 -2 0 -9 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 7 -3 5 3 -3 -3 -1 -2 0 3 -3 -3 -1 -9 // K -1 4 1 1 -6 1 1 -1 1 -2 -3 5 0 -6 -1 0 0 -3 -5 -2 1 1 0 -9 // M -1 0 -2 -2 -6 -1 -2 -3 -2 3 5 0 5 1 -2 -1 0 -4 -2 2 -2 -2 0 -9 // F -4 -5 -4 -6 -4 -5 -6 -5 -2 2 3 -6 1 12 -5 -4 -3 2 11 0 -5 -5 -2 -9 // P 1 0 0 0 -3 1 0 0 0 -2 -3 -1 -2 -5 6 1 1 -6 -5 -1 0 0 0 -9 // S 1 0 1 1 0 0 0 1 0 -1 -3 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -9 // T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 2 -6 -3 0 0 0 0 -9 // W -7 3 -5 -7 -9 -5 -8 -8 -3 -5 -2 -3 -4 2 -6 -3 -6 27 1 -7 -6 -6 -4 -9 // Y -4 -4 -3 -5 1 -4 -5 -6 0 0 0 -5 -2 11 -5 -3 -3 1 14 -2 -4 -5 -2 -9 // V 0 -2 -1 -2 -2 -2 -2 -1 -2 4 3 -2 2 0 -1 -1 0 -7 -2 4 -2 -2 0 -9 // B 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -2 2 2 0 -9 // Z 0 1 1 3 -6 3 3 0 2 -2 -3 1 -2 -5 0 0 0 -6 -5 -2 2 3 0 -9 // X 0 -1 0 0 -3 0 0 -1 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM370 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -4, 2, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -7, 0, -4, 0, -9}, /* B */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -2, -6, 0, -4, 2, -9}, /* C */ {0, -2, -5, 18, -5, -6, -4, -3, -4, -2, 0, -6, -6, -6, -4, -3, -6, -4, 0, -2, -2, -9, -3, 1, -6, -9}, /* D */ {0, 1, 3, -5, 4, 3, -6, 1, 1, -2, 0, 1, -4, -2, 2, 0, 2, 0, 1, 0, -2, -7, 0, -5, 3, -9}, /* E */ {0, 1, 3, -6, 3, 3, -6, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 0, 0, -2, -8, 0, -5, 3, -9}, /* F */ {0, -4, -5, -4, -6, -6, 12, -5, -2, 2, 0, -6, 3, 1, -4, -5, -5, -5, -4, -3, 0, 2, -2, 11, -5, -9}, /* G */ {0, 2, 1, -3, 1, 1, -5, 5, -2, -2, 0, -1, -4, -3, 1, 0, -1, -2, 1, 1, -1, -8, -1, -6, 0, -9}, /* H */ {0, -1, 1, -4, 1, 1, -2, -2, 6, -2, 0, 1, -2, -2, 2, 0, 3, 2, 0, -1, -2, -3, 0, 0, 2, -9}, /* I */ {0, 0, -2, -2, -2, -2, 2, -2, -2, 4, 0, -2, 3, 3, -2, -2, -2, -2, -1, 0, 4, -5, 0, 0, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -6, 1, 1, -6, -1, 1, -2, 0, 5, -3, 0, 1, -1, 1, 4, 0, 0, -2, -3, 0, -5, 1, -9}, /* L */ {0, -2, -3, -6, -4, -3, 3, -4, -2, 3, 0, -3, 7, 5, -3, -3, -2, -3, -3, -1, 3, -2, -1, 0, -3, -9}, /* M */ {0, -1, -2, -6, -2, -2, 1, -3, -2, 3, 0, 0, 5, 5, -2, -2, -1, 0, -1, 0, 2, -4, 0, -2, -2, -9}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 2, -2, 0, 1, -3, -2, 2, 0, 1, 1, 1, 0, -1, -5, 0, -3, 1, -9}, /* P */ {0, 1, 0, -3, 0, 0, -5, 0, 0, -2, 0, -1, -3, -2, 0, 6, 1, 0, 1, 1, -1, -6, 0, -5, 0, -9}, /* Q */ {0, 0, 2, -6, 2, 2, -5, -1, 3, -2, 0, 1, -2, -1, 1, 1, 3, 2, 0, 0, -2, -5, 0, -4, 3, -9}, /* R */ {0, -1, 0, -4, 0, 0, -5, -2, 2, -2, 0, 4, -3, 0, 1, 0, 2, 6, 0, 0, -2, 3, -1, -4, 1, -9}, /* S */ {0, 1, 1, 0, 1, 0, -4, 1, 0, -1, 0, 0, -3, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, -1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 2, 0, -6, 0, -3, 0, -9}, /* V */ {0, 0, -2, -2, -2, -2, 0, -1, -2, 4, 0, -2, 3, 2, -1, -1, -2, -2, -1, 0, 4, -7, 0, -2, -2, -9}, /* W */ {0, -7, -6, -9, -7, -8, 2, -8, -3, -5, 0, -3, -2, -4, -5, -6, -5, 3, -3, -6, -7, 27, -4, 1, -6, -9}, /* X */ {0, 0, 0, -3, 0, 0, -2, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, -4, -1, -2, 0, -9}, /* Y */ {0, -4, -4, 1, -5, -5, 11, -6, 0, 0, 0, -5, 0, -2, -3, -5, -4, -4, -3, -3, -2, 1, -2, 14, -5, -9}, /* Z */ {0, 0, 2, -6, 3, 3, -5, 0, 2, -2, 0, 1, -3, -2, 1, 0, 3, 1, 0, 0, -2, -6, 0, -5, 3, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 380 substitution matrix, scale = ln(2)/5 = 0.138629 // # // # Expected score = -0.612, Entropy = 0.156 bits // # // # Lowest score = -9, Highest score = 26 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 2 -1 0 -2 -1 -1 -4 1 1 1 -6 -4 0 1 0 0 -9 // R -1 6 1 0 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 3 -4 -2 0 1 0 -9 // N 0 1 1 2 -4 1 2 1 1 -2 -3 1 -1 -4 0 1 0 -5 -3 -1 2 1 0 -9 // D 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -6 0 1 0 -7 -5 -2 3 3 0 -9 // C -2 -4 -4 -5 17 -5 -5 -3 -4 -2 -6 -6 -5 -4 -3 0 -2 -9 1 -2 -4 -5 -3 -9 // Q 0 2 1 2 -5 3 2 -1 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -2 2 3 0 -9 // E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 0 0 -7 -5 -2 3 3 0 -9 // G 2 -2 1 1 -3 -1 1 5 -1 -2 -4 -1 -2 -5 0 1 1 -8 -5 -1 1 0 0 -9 // H -1 2 1 1 -4 3 1 -1 6 -2 -2 1 -2 -2 0 0 -1 -3 0 -2 1 2 0 -9 // I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 3 2 -2 -1 0 -5 0 4 -2 -2 0 -9 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 7 -3 4 3 -2 -3 -1 -2 0 3 -3 -3 -1 -9 // K -1 4 1 1 -6 1 1 -1 1 -2 -3 5 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 // M -1 0 -1 -2 -5 -1 -2 -2 -2 3 4 0 5 1 -2 -1 0 -4 -2 2 -2 -1 0 -9 // F -4 -5 -4 -6 -4 -5 -5 -5 -2 2 3 -5 1 12 -5 -4 -3 2 10 0 -5 -5 -2 -9 // P 1 0 0 0 -3 1 0 0 0 -2 -2 0 -2 -5 5 1 1 -6 -5 -1 0 0 0 -9 // S 1 0 1 1 0 0 0 1 0 -1 -3 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -9 // T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 2 -6 -3 0 0 0 0 -9 // W -6 3 -5 -7 -9 -5 -7 -8 -3 -5 -2 -3 -4 2 -6 -3 -6 26 1 -6 -6 -6 -4 -9 // Y -4 -4 -3 -5 1 -4 -5 -5 0 0 0 -5 -2 10 -5 -3 -3 1 13 -2 -4 -4 -2 -9 // V 0 -2 -1 -2 -2 -2 -2 -1 -2 4 3 -2 2 0 -1 -1 0 -6 -2 4 -2 -2 0 -9 // B 1 0 2 3 -4 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -2 2 2 0 -9 // Z 0 1 1 3 -5 3 3 0 2 -2 -3 1 -1 -5 0 0 0 -6 -4 -2 2 3 0 -9 // X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM380 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -4, 2, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -4, 0, -9}, /* B */ {0, 1, 2, -4, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -2, -6, 0, -4, 2, -9}, /* C */ {0, -2, -4, 17, -5, -5, -4, -3, -4, -2, 0, -6, -6, -5, -4, -3, -5, -4, 0, -2, -2, -9, -3, 1, -5, -9}, /* D */ {0, 1, 3, -5, 3, 3, -6, 1, 1, -2, 0, 1, -4, -2, 2, 0, 2, 0, 1, 0, -2, -7, 0, -5, 3, -9}, /* E */ {0, 1, 3, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 0, 0, -2, -7, 0, -5, 3, -9}, /* F */ {0, -4, -5, -4, -6, -5, 12, -5, -2, 2, 0, -5, 3, 1, -4, -5, -5, -5, -4, -3, 0, 2, -2, 10, -5, -9}, /* G */ {0, 2, 1, -3, 1, 1, -5, 5, -1, -2, 0, -1, -4, -2, 1, 0, -1, -2, 1, 1, -1, -8, 0, -5, 0, -9}, /* H */ {0, -1, 1, -4, 1, 1, -2, -1, 6, -2, 0, 1, -2, -2, 1, 0, 3, 2, 0, -1, -2, -3, 0, 0, 2, -9}, /* I */ {0, 0, -2, -2, -2, -2, 2, -2, -2, 4, 0, -2, 3, 3, -2, -2, -2, -2, -1, 0, 4, -5, 0, 0, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -6, 1, 1, -5, -1, 1, -2, 0, 5, -3, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -5, 1, -9}, /* L */ {0, -2, -3, -6, -4, -3, 3, -4, -2, 3, 0, -3, 7, 4, -3, -2, -2, -3, -3, -1, 3, -2, -1, 0, -3, -9}, /* M */ {0, -1, -2, -5, -2, -2, 1, -2, -2, 3, 0, 0, 4, 5, -1, -2, -1, 0, -1, 0, 2, -4, 0, -2, -1, -9}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 1, -2, 0, 1, -3, -1, 1, 0, 1, 1, 1, 0, -1, -5, 0, -3, 1, -9}, /* P */ {0, 1, 0, -3, 0, 0, -5, 0, 0, -2, 0, 0, -2, -2, 0, 5, 1, 0, 1, 1, -1, -6, 0, -5, 0, -9}, /* Q */ {0, 0, 2, -5, 2, 2, -5, -1, 3, -2, 0, 1, -2, -1, 1, 1, 3, 2, 0, 0, -2, -5, 0, -4, 3, -9}, /* R */ {0, -1, 0, -4, 0, 0, -5, -2, 2, -2, 0, 4, -3, 0, 1, 0, 2, 6, 0, 0, -2, 3, 0, -4, 1, -9}, /* S */ {0, 1, 1, 0, 1, 0, -4, 1, 0, -1, 0, 0, -3, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, -1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 2, 0, -6, 0, -3, 0, -9}, /* V */ {0, 0, -2, -2, -2, -2, 0, -1, -2, 4, 0, -2, 3, 2, -1, -1, -2, -2, -1, 0, 4, -6, 0, -2, -2, -9}, /* W */ {0, -6, -6, -9, -7, -7, 2, -8, -3, -5, 0, -3, -2, -4, -5, -6, -5, 3, -3, -6, -6, 26, -4, 1, -6, -9}, /* X */ {0, 0, 0, -3, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, -1, -2, 0, -9}, /* Y */ {0, -4, -4, 1, -5, -5, 10, -5, 0, 0, 0, -5, 0, -2, -3, -5, -4, -4, -3, -3, -2, 1, -2, 13, -4, -9}, /* Z */ {0, 0, 2, -5, 3, 3, -5, 0, 2, -2, 0, 1, -3, -1, 1, 0, 3, 1, 0, 0, -2, -6, 0, -4, 3, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 390 substitution matrix, scale = ln(2)/5 = 0.138629 // # // # Expected score = -0.581, Entropy = 0.147 bits // # // # Lowest score = -9, Highest score = 26 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 1 -1 0 -2 -1 -1 -3 1 1 1 -6 -4 0 1 0 0 -9 // R -1 6 1 0 -4 1 0 -2 2 -2 -3 4 0 -5 0 0 0 3 -4 -2 0 1 0 -9 // N 0 1 1 2 -4 1 2 1 1 -2 -3 1 -1 -4 0 1 0 -4 -3 -1 2 1 0 -9 // D 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -5 0 1 0 -7 -5 -2 3 3 0 -9 // C -2 -4 -4 -5 17 -5 -5 -3 -4 -2 -6 -5 -5 -4 -3 0 -2 -9 1 -2 -4 -5 -3 -9 // Q 0 1 1 2 -5 3 2 0 3 -2 -2 1 -1 -4 0 0 0 -5 -4 -1 2 3 0 -9 // E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 0 0 -7 -5 -1 2 3 0 -9 // G 1 -2 1 1 -3 0 1 5 -1 -2 -4 -1 -2 -5 0 1 1 -7 -5 -1 1 0 0 -9 // H -1 2 1 1 -4 3 1 -1 6 -2 -2 1 -2 -2 0 0 -1 -3 0 -2 1 2 0 -9 // I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 3 -2 3 2 -1 -1 0 -5 0 4 -2 -2 0 -9 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 3 7 -3 4 3 -2 -2 -1 -2 0 3 -3 -2 -1 -9 // K -1 4 1 1 -5 1 1 -1 1 -2 -3 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 // M -1 0 -1 -2 -5 -1 -2 -2 -2 3 4 0 5 1 -2 -1 0 -4 -1 2 -2 -1 0 -9 // F -3 -5 -4 -5 -4 -4 -5 -5 -2 2 3 -5 1 12 -5 -3 -3 2 10 0 -5 -5 -2 -9 // P 1 0 0 0 -3 0 0 0 0 -1 -2 0 -2 -5 5 1 1 -6 -5 -1 0 0 0 -9 // S 1 0 1 1 0 0 0 1 0 -1 -2 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -9 // T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 1 -5 -3 0 0 0 0 -9 // W -6 3 -4 -7 -9 -5 -7 -7 -3 -5 -2 -3 -4 2 -6 -3 -5 26 1 -6 -6 -6 -4 -9 // Y -4 -4 -3 -5 1 -4 -5 -5 0 0 0 -5 -1 10 -5 -3 -3 1 13 -2 -4 -4 -2 -9 // V 0 -2 -1 -2 -2 -1 -1 -1 -2 4 3 -2 2 0 -1 -1 0 -6 -2 4 -2 -1 0 -9 // B 1 0 2 3 -4 2 2 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -2 2 2 0 -9 // Z 0 1 1 3 -5 3 3 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -1 2 3 0 -9 // X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM390 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -3, 1, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -4, 0, -9}, /* B */ {0, 1, 2, -4, 3, 2, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -2, -6, 0, -4, 2, -9}, /* C */ {0, -2, -4, 17, -5, -5, -4, -3, -4, -2, 0, -5, -6, -5, -4, -3, -5, -4, 0, -2, -2, -9, -3, 1, -5, -9}, /* D */ {0, 1, 3, -5, 3, 3, -5, 1, 1, -2, 0, 1, -4, -2, 2, 0, 2, 0, 1, 0, -2, -7, 0, -5, 3, -9}, /* E */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 0, 0, -1, -7, 0, -5, 3, -9}, /* F */ {0, -3, -5, -4, -5, -5, 12, -5, -2, 2, 0, -5, 3, 1, -4, -5, -4, -5, -3, -3, 0, 2, -2, 10, -5, -9}, /* G */ {0, 1, 1, -3, 1, 1, -5, 5, -1, -2, 0, -1, -4, -2, 1, 0, 0, -2, 1, 1, -1, -7, 0, -5, 0, -9}, /* H */ {0, -1, 1, -4, 1, 1, -2, -1, 6, -2, 0, 1, -2, -2, 1, 0, 3, 2, 0, -1, -2, -3, 0, 0, 2, -9}, /* I */ {0, 0, -2, -2, -2, -2, 2, -2, -2, 4, 0, -2, 3, 3, -2, -1, -2, -2, -1, 0, 4, -5, 0, 0, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -5, 1, 1, -5, -1, 1, -2, 0, 4, -3, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -5, 1, -9}, /* L */ {0, -2, -3, -6, -4, -3, 3, -4, -2, 3, 0, -3, 7, 4, -3, -2, -2, -3, -2, -1, 3, -2, -1, 0, -2, -9}, /* M */ {0, -1, -2, -5, -2, -2, 1, -2, -2, 3, 0, 0, 4, 5, -1, -2, -1, 0, -1, 0, 2, -4, 0, -1, -1, -9}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 1, -2, 0, 1, -3, -1, 1, 0, 1, 1, 1, 0, -1, -4, 0, -3, 1, -9}, /* P */ {0, 1, 0, -3, 0, 0, -5, 0, 0, -1, 0, 0, -2, -2, 0, 5, 0, 0, 1, 1, -1, -6, 0, -5, 0, -9}, /* Q */ {0, 0, 2, -5, 2, 2, -4, 0, 3, -2, 0, 1, -2, -1, 1, 0, 3, 1, 0, 0, -1, -5, 0, -4, 3, -9}, /* R */ {0, -1, 0, -4, 0, 0, -5, -2, 2, -2, 0, 4, -3, 0, 1, 0, 1, 6, 0, 0, -2, 3, 0, -4, 1, -9}, /* S */ {0, 1, 1, 0, 1, 0, -3, 1, 0, -1, 0, 0, -2, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, -1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 1, 0, -5, 0, -3, 0, -9}, /* V */ {0, 0, -2, -2, -2, -1, 0, -1, -2, 4, 0, -2, 3, 2, -1, -1, -1, -2, -1, 0, 4, -6, 0, -2, -1, -9}, /* W */ {0, -6, -6, -9, -7, -7, 2, -7, -3, -5, 0, -3, -2, -4, -4, -6, -5, 3, -3, -5, -6, 26, -4, 1, -6, -9}, /* X */ {0, 0, 0, -3, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, -1, -2, 0, -9}, /* Y */ {0, -4, -4, 1, -5, -5, 10, -5, 0, 0, 0, -5, 0, -1, -3, -5, -4, -4, -3, -3, -2, 1, -2, 13, -4, -9}, /* Z */ {0, 0, 2, -5, 3, 3, -5, 0, 2, -2, 0, 1, -2, -1, 1, 0, 3, 1, 0, 0, -1, -6, 0, -4, 3, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 40 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -4.27, Entropy = 2.26 bits // # // # Lowest score = -15, Highest score = 13 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 6 -6 -3 -3 -6 -3 -2 -1 -6 -4 -5 -6 -4 -7 -1 0 0 -12 -7 -2 -3 -2 -3 -15 // R -6 8 -5 -9 -7 -1 -8 -8 -1 -5 -8 1 -3 -8 -3 -2 -5 -1 -9 -7 -6 -3 -5 -15 // N -3 -5 7 2 -9 -3 -1 -2 1 -4 -6 0 -7 -8 -5 0 -1 -7 -4 -7 6 -2 -3 -15 // D -3 -9 2 7 -12 -2 3 -3 -3 -6 -11 -4 -9 -13 -7 -3 -4 -13 -10 -7 6 2 -5 -15 // C -6 -7 -9 -12 9 -12 -12 -8 -7 -5 -13 -12 -12 -11 -7 -2 -7 -14 -3 -5 -11 -12 -8 -15 // Q -3 -1 -3 -2 -12 8 2 -6 1 -7 -4 -2 -3 -11 -2 -4 -5 -11 -10 -6 -2 6 -4 -15 // E -2 -8 -1 3 -12 2 7 -3 -4 -5 -8 -4 -6 -12 -5 -4 -5 -15 -8 -6 2 6 -4 -15 // G -1 -8 -2 -3 -8 -6 -3 6 -8 -9 -9 -6 -7 -8 -5 -1 -5 -13 -12 -5 -2 -4 -4 -15 // H -6 -1 1 -3 -7 1 -4 -8 9 -8 -5 -5 -9 -5 -3 -5 -6 -6 -3 -6 -1 0 -4 -15 // I -4 -5 -4 -6 -5 -7 -5 -9 -8 8 -1 -5 0 -2 -7 -6 -2 -12 -5 2 -5 -5 -4 -15 // L -5 -8 -6 -11 -13 -4 -8 -9 -5 -1 7 -7 1 -2 -6 -7 -6 -5 -6 -2 -8 -6 -5 -15 // K -6 1 0 -4 -12 -2 -4 -6 -5 -5 -7 6 -1 -12 -6 -3 -2 -10 -8 -8 -2 -3 -4 -15 // M -4 -3 -7 -9 -12 -3 -6 -7 -9 0 1 -1 11 -3 -7 -5 -3 -11 -10 -1 -8 -4 -4 -15 // F -7 -8 -8 -13 -11 -11 -12 -8 -5 -2 -2 -12 -3 9 -9 -6 -8 -4 2 -7 -9 -12 -7 -15 // P -1 -3 -5 -7 -7 -2 -5 -5 -3 -7 -6 -6 -7 -9 8 -1 -3 -12 -12 -5 -6 -3 -4 -15 // S 0 -2 0 -3 -2 -4 -4 -1 -5 -6 -7 -3 -5 -6 -1 6 1 -4 -6 -5 -1 -4 -2 -15 // T 0 -5 -1 -4 -7 -5 -5 -5 -6 -2 -6 -2 -3 -8 -3 1 7 -11 -6 -2 -2 -5 -3 -15 // W -12 -1 -7 -13 -14 -11 -15 -13 -6 -12 -5 -10 -11 -4 -12 -4 -11 13 -4 -14 -9 -13 -9 -15 // Y -7 -9 -4 -10 -3 -10 -8 -12 -3 -5 -6 -8 -10 2 -12 -6 -6 -4 10 -6 -6 -8 -7 -15 // V -2 -7 -7 -7 -5 -6 -6 -5 -6 2 -2 -8 -1 -7 -5 -5 -2 -14 -6 7 -7 -6 -4 -15 // B -3 -6 6 6 -11 -2 2 -2 -1 -5 -8 -2 -8 -9 -6 -1 -2 -9 -6 -7 6 1 -4 -15 // Z -2 -3 -2 2 -12 6 6 -4 0 -5 -6 -3 -4 -12 -3 -4 -5 -13 -8 -6 1 6 -4 -15 // X -3 -5 -3 -5 -8 -4 -4 -4 -4 -4 -5 -4 -4 -7 -4 -2 -3 -9 -7 -4 -4 -4 -4 -15 // * -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 -15 1 // PAM40 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 6, -3, -6, -3, -2, -7, -1, -6, -4, 0, -6, -5, -4, -3, -1, -3, -6, 0, 0, -2, -12, -3, -7, -2, -15}, /* B */ {0, -3, 6, -11, 6, 2, -9, -2, -1, -5, 0, -2, -8, -8, 6, -6, -2, -6, -1, -2, -7, -9, -4, -6, 1, -15}, /* C */ {0, -6, -11, 9, -12, -12, -11, -8, -7, -5, 0, -12, -13, -12, -9, -7, -12, -7, -2, -7, -5, -14, -8, -3, -12, -15}, /* D */ {0, -3, 6, -12, 7, 3, -13, -3, -3, -6, 0, -4, -11, -9, 2, -7, -2, -9, -3, -4, -7, -13, -5, -10, 2, -15}, /* E */ {0, -2, 2, -12, 3, 7, -12, -3, -4, -5, 0, -4, -8, -6, -1, -5, 2, -8, -4, -5, -6, -15, -4, -8, 6, -15}, /* F */ {0, -7, -9, -11, -13, -12, 9, -8, -5, -2, 0, -12, -2, -3, -8, -9, -11, -8, -6, -8, -7, -4, -7, 2, -12, -15}, /* G */ {0, -1, -2, -8, -3, -3, -8, 6, -8, -9, 0, -6, -9, -7, -2, -5, -6, -8, -1, -5, -5, -13, -4, -12, -4, -15}, /* H */ {0, -6, -1, -7, -3, -4, -5, -8, 9, -8, 0, -5, -5, -9, 1, -3, 1, -1, -5, -6, -6, -6, -4, -3, 0, -15}, /* I */ {0, -4, -5, -5, -6, -5, -2, -9, -8, 8, 0, -5, -1, 0, -4, -7, -7, -5, -6, -2, 2, -12, -4, -5, -5, -15}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -6, -2, -12, -4, -4, -12, -6, -5, -5, 0, 6, -7, -1, 0, -6, -2, 1, -3, -2, -8, -10, -4, -8, -3, -15}, /* L */ {0, -5, -8, -13, -11, -8, -2, -9, -5, -1, 0, -7, 7, 1, -6, -6, -4, -8, -7, -6, -2, -5, -5, -6, -6, -15}, /* M */ {0, -4, -8, -12, -9, -6, -3, -7, -9, 0, 0, -1, 1, 11, -7, -7, -3, -3, -5, -3, -1, -11, -4, -10, -4, -15}, /* N */ {0, -3, 6, -9, 2, -1, -8, -2, 1, -4, 0, 0, -6, -7, 7, -5, -3, -5, 0, -1, -7, -7, -3, -4, -2, -15}, /* P */ {0, -1, -6, -7, -7, -5, -9, -5, -3, -7, 0, -6, -6, -7, -5, 8, -2, -3, -1, -3, -5, -12, -4, -12, -3, -15}, /* Q */ {0, -3, -2, -12, -2, 2, -11, -6, 1, -7, 0, -2, -4, -3, -3, -2, 8, -1, -4, -5, -6, -11, -4, -10, 6, -15}, /* R */ {0, -6, -6, -7, -9, -8, -8, -8, -1, -5, 0, 1, -8, -3, -5, -3, -1, 8, -2, -5, -7, -1, -5, -9, -3, -15}, /* S */ {0, 0, -1, -2, -3, -4, -6, -1, -5, -6, 0, -3, -7, -5, 0, -1, -4, -2, 6, 1, -5, -4, -2, -6, -4, -15}, /* T */ {0, 0, -2, -7, -4, -5, -8, -5, -6, -2, 0, -2, -6, -3, -1, -3, -5, -5, 1, 7, -2, -11, -3, -6, -5, -15}, /* V */ {0, -2, -7, -5, -7, -6, -7, -5, -6, 2, 0, -8, -2, -1, -7, -5, -6, -7, -5, -2, 7, -14, -4, -6, -6, -15}, /* W */ {0, -12, -9, -14, -13, -15, -4, -13, -6, -12, 0, -10, -5, -11, -7, -12, -11, -1, -4, -11, -14, 13, -9, -4, -13, -15}, /* X */ {0, -3, -4, -8, -5, -4, -7, -4, -4, -4, 0, -4, -5, -4, -3, -4, -4, -5, -2, -3, -4, -9, -4, -7, -4, -15}, /* Y */ {0, -7, -6, -3, -10, -8, 2, -12, -3, -5, 0, -8, -6, -10, -4, -12, -10, -9, -6, -6, -6, -4, -7, 10, -8, -15}, /* Z */ {0, -2, 1, -12, 2, 6, -12, -4, 0, -5, 0, -3, -6, -4, -2, -3, 6, -3, -4, -5, -6, -13, -4, -8, 6, -15}, /* * */ {0, -15, -15, -15, -15, -15, -15, -15, -15, -15, 0, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 400 substitution matrix, scale = ln(2)/5 = 0.138629 // # // # Expected score = -0.521, Entropy = 0.139 bits // # // # Lowest score = -8, Highest score = 26 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 1 -1 0 -2 -1 -1 -3 1 1 1 -6 -3 0 1 0 0 -8 // R -1 5 1 0 -4 1 0 -2 2 -2 -3 4 0 -4 0 0 0 3 -4 -2 0 1 0 -8 // N 0 1 1 2 -3 1 2 1 1 -1 -3 1 -1 -3 0 1 0 -4 -3 -1 2 1 0 -8 // D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -4 -2 2 2 0 -8 // C -2 -4 -3 -5 17 -5 -5 -3 -3 -2 -6 -5 -5 -4 -2 0 -2 -8 1 -2 -4 -5 -3 -8 // Q 0 1 1 2 -5 3 2 0 3 -2 -2 1 -1 -4 0 0 0 -5 -4 -1 2 2 0 -8 // E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 0 0 -7 -4 -1 2 3 0 -8 // G 1 -2 1 1 -3 0 1 4 -1 -2 -3 -1 -2 -5 0 1 1 -7 -5 -1 1 0 0 -8 // H -1 2 1 1 -3 3 1 -1 5 -2 -2 1 -1 -2 0 0 -1 -2 0 -2 1 2 0 -8 // I 0 -2 -1 -2 -2 -2 -2 -2 -2 4 3 -2 2 2 -1 -1 0 -5 0 3 -2 -2 0 -8 // L -2 -3 -3 -3 -6 -2 -3 -3 -2 3 7 -2 4 3 -2 -2 -1 -2 0 3 -3 -2 -1 -8 // K -1 4 1 1 -5 1 1 -1 1 -2 -2 4 0 -5 0 0 0 -3 -4 -2 1 1 0 -8 // M -1 0 -1 -2 -5 -1 -2 -2 -1 2 4 0 5 1 -1 -1 0 -4 -1 2 -2 -1 0 -8 // F -3 -4 -3 -5 -4 -4 -5 -5 -2 2 3 -5 1 11 -4 -3 -3 2 10 0 -4 -5 -2 -8 // P 1 0 0 0 -2 0 0 0 0 -1 -2 0 -1 -4 5 1 1 -6 -5 -1 0 0 0 -8 // S 1 0 1 1 0 0 0 1 0 -1 -2 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -8 // T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 1 -5 -3 0 0 0 0 -8 // W -6 3 -4 -7 -8 -5 -7 -7 -2 -5 -2 -3 -4 2 -6 -3 -5 26 1 -6 -5 -6 -4 -8 // Y -3 -4 -3 -4 1 -4 -4 -5 0 0 0 -4 -1 10 -5 -3 -3 1 13 -2 -3 -4 -2 -8 // V 0 -2 -1 -2 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -6 -2 4 -1 -1 0 -8 // B 1 0 2 2 -4 2 2 1 1 -2 -3 1 -2 -4 0 1 0 -5 -3 -1 2 2 0 -8 // Z 0 1 1 2 -5 2 3 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -1 2 3 0 -8 // X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -8 // * -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1 // PAM400 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -3, 1, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -3, 0, -8}, /* B */ {0, 1, 2, -4, 2, 2, -4, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -5, 0, -3, 2, -8}, /* C */ {0, -2, -4, 17, -5, -5, -4, -3, -3, -2, 0, -5, -6, -5, -3, -2, -5, -4, 0, -2, -2, -8, -3, 1, -5, -8}, /* D */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -2, -7, 0, -4, 2, -8}, /* E */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 0, 0, -1, -7, 0, -4, 3, -8}, /* F */ {0, -3, -4, -4, -5, -5, 11, -5, -2, 2, 0, -5, 3, 1, -3, -4, -4, -4, -3, -3, 0, 2, -2, 10, -5, -8}, /* G */ {0, 1, 1, -3, 1, 1, -5, 4, -1, -2, 0, -1, -3, -2, 1, 0, 0, -2, 1, 1, -1, -7, 0, -5, 0, -8}, /* H */ {0, -1, 1, -3, 1, 1, -2, -1, 5, -2, 0, 1, -2, -1, 1, 0, 3, 2, 0, -1, -2, -2, 0, 0, 2, -8}, /* I */ {0, 0, -2, -2, -2, -2, 2, -2, -2, 4, 0, -2, 3, 2, -1, -1, -2, -2, -1, 0, 3, -5, 0, 0, -2, -8}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -5, 1, 1, -5, -1, 1, -2, 0, 4, -2, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -4, 1, -8}, /* L */ {0, -2, -3, -6, -3, -3, 3, -3, -2, 3, 0, -2, 7, 4, -3, -2, -2, -3, -2, -1, 3, -2, -1, 0, -2, -8}, /* M */ {0, -1, -2, -5, -2, -2, 1, -2, -1, 2, 0, 0, 4, 5, -1, -1, -1, 0, -1, 0, 2, -4, 0, -1, -1, -8}, /* N */ {0, 0, 2, -3, 2, 2, -3, 1, 1, -1, 0, 1, -3, -1, 1, 0, 1, 1, 1, 0, -1, -4, 0, -3, 1, -8}, /* P */ {0, 1, 0, -2, 0, 0, -4, 0, 0, -1, 0, 0, -2, -1, 0, 5, 0, 0, 1, 1, -1, -6, 0, -5, 0, -8}, /* Q */ {0, 0, 2, -5, 2, 2, -4, 0, 3, -2, 0, 1, -2, -1, 1, 0, 3, 1, 0, 0, -1, -5, 0, -4, 2, -8}, /* R */ {0, -1, 0, -4, 0, 0, -4, -2, 2, -2, 0, 4, -3, 0, 1, 0, 1, 5, 0, 0, -2, 3, 0, -4, 1, -8}, /* S */ {0, 1, 1, 0, 1, 0, -3, 1, 0, -1, 0, 0, -2, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -8}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, -1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 1, 0, -5, 0, -3, 0, -8}, /* V */ {0, 0, -1, -2, -2, -1, 0, -1, -2, 3, 0, -2, 3, 2, -1, -1, -1, -2, -1, 0, 4, -6, 0, -2, -1, -8}, /* W */ {0, -6, -5, -8, -7, -7, 2, -7, -2, -5, 0, -3, -2, -4, -4, -6, -5, 3, -3, -5, -6, 26, -4, 1, -6, -8}, /* X */ {0, 0, 0, -3, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, -1, -2, 0, -8}, /* Y */ {0, -3, -3, 1, -4, -4, 10, -5, 0, 0, 0, -4, 0, -1, -3, -5, -4, -4, -3, -3, -2, 1, -2, 13, -4, -8}, /* Z */ {0, 0, 2, -5, 2, 3, -5, 0, 2, -2, 0, 1, -2, -1, 1, 0, 2, 1, 0, 0, -1, -6, 0, -4, 3, -8}, /* * */ {0, -8, -8, -8, -8, -8, -8, -8, -8, -8, 0, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 40 substitution matrix, scale = 0.0693200 // # // # Expected score = -21.3, Entropy = 2.26 bits // # // # Lowest score = -74, Highest score = 64 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 28 -30 -14 -13 -28 -17 -8 -5 -31 -19 -27 -29 -20 -37 -4 1 0 -59 -34 -8 -14 -12 -13 -74 // R -30 41 -23 -43 -35 -5 -38 -41 -4 -23 -38 5 -17 -42 -15 -12 -27 -6 -45 -33 -30 -15 -23 -74 // N -14 -23 36 10 -47 -14 -7 -12 4 -22 -31 -2 -37 -38 -24 2 -6 -36 -19 -33 28 -10 -14 -74 // D -13 -43 10 37 -62 -8 15 -13 -15 -32 -54 -18 -47 -64 -33 -14 -19 -67 -49 -35 29 8 -23 -74 // C -28 -35 -47 -62 47 -61 -62 -41 -33 -27 -66 -62 -59 -56 -35 -11 -34 -70 -16 -25 -53 -62 -39 -74 // Q -17 -5 -14 -8 -61 40 8 -30 7 -33 -21 -10 -16 -57 -11 -22 -23 -56 -51 -29 -10 30 -19 -74 // E -8 -38 -7 15 -62 8 36 -17 -20 -24 -41 -18 -30 -62 -23 -18 -25 -74 -38 -28 8 29 -20 -74 // G -5 -41 -12 -13 -41 -30 -17 31 -38 -46 -47 -31 -37 -41 -26 -5 -24 -67 -60 -24 -12 -21 -22 -74 // H -31 -4 4 -15 -33 7 -20 -38 44 -39 -26 -25 -44 -25 -17 -25 -31 -32 -13 -28 -3 -2 -21 -74 // I -19 -23 -22 -32 -27 -33 -24 -46 -39 40 -3 -26 0 -8 -37 -29 -9 -60 -26 12 -26 -27 -20 -74 // L -27 -38 -31 -54 -66 -21 -41 -47 -26 -3 33 -36 6 -9 -31 -36 -29 -26 -29 -8 -39 -29 -26 -74 // K -29 5 -2 -18 -62 -10 -18 -31 -25 -26 -36 32 -5 -61 -28 -16 -12 -51 -42 -39 -9 -14 -22 -74 // M -20 -17 -37 -47 -59 -16 -30 -37 -44 0 6 -5 54 -16 -35 -23 -16 -55 -48 -3 -41 -22 -21 -74 // F -37 -42 -38 -64 -56 -57 -62 -41 -25 -8 -9 -61 -16 43 -44 -28 -38 -18 12 -33 -47 -60 -34 -74 // P -4 -15 -24 -33 -35 -11 -23 -26 -17 -37 -31 -28 -35 -44 39 -5 -17 -60 -59 -24 -28 -16 -21 -74 // S 1 -12 2 -14 -11 -22 -18 -5 -25 -29 -36 -16 -23 -28 -5 30 4 -22 -30 -26 -5 -19 -12 -74 // T 0 -27 -6 -19 -34 -23 -25 -24 -31 -9 -29 -12 -16 -38 -17 4 34 -56 -28 -10 -12 -24 -15 -74 // W -59 -6 -36 -67 -70 -56 -74 -67 -32 -60 -26 -51 -55 -18 -60 -22 -56 64 -21 -68 -45 -63 -47 -74 // Y -34 -45 -19 -49 -16 -51 -38 -60 -13 -26 -29 -42 -48 12 -59 -30 -28 -21 48 -32 -28 -42 -33 -74 // V -8 -33 -33 -35 -25 -29 -28 -24 -28 12 -8 -39 -3 -33 -24 -26 -10 -68 -32 34 -34 -28 -19 -74 // B -14 -30 28 29 -53 -10 8 -12 -3 -26 -39 -9 -41 -47 -28 -5 -12 -45 -28 -34 29 3 -19 -74 // Z -12 -15 -10 8 -62 30 29 -21 -2 -27 -29 -14 -22 -60 -16 -19 -24 -63 -42 -28 3 30 -20 -74 // X -13 -23 -14 -23 -39 -19 -20 -22 -21 -20 -26 -22 -21 -34 -21 -12 -15 -47 -33 -19 -19 -20 -21 -74 // * -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 -74 1 // PAM40_cdi = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 28, -14, -28, -13, -8, -37, -5, -31, -19, 0, -29, -27, -20, -14, -4, -17, -30, 1, 0, -8, -59, -13, -34, -12, -74}, /* B */ {0, -14, 29, -53, 29, 8, -47, -12, -3, -26, 0, -9, -39, -41, 28, -28, -10, -30, -5, -12, -34, -45, -19, -28, 3, -74}, /* C */ {0, -28, -53, 47, -62, -62, -56, -41, -33, -27, 0, -62, -66, -59, -47, -35, -61, -35, -11, -34, -25, -70, -39, -16, -62, -74}, /* D */ {0, -13, 29, -62, 37, 15, -64, -13, -15, -32, 0, -18, -54, -47, 10, -33, -8, -43, -14, -19, -35, -67, -23, -49, 8, -74}, /* E */ {0, -8, 8, -62, 15, 36, -62, -17, -20, -24, 0, -18, -41, -30, -7, -23, 8, -38, -18, -25, -28, -74, -20, -38, 29, -74}, /* F */ {0, -37, -47, -56, -64, -62, 43, -41, -25, -8, 0, -61, -9, -16, -38, -44, -57, -42, -28, -38, -33, -18, -34, 12, -60, -74}, /* G */ {0, -5, -12, -41, -13, -17, -41, 31, -38, -46, 0, -31, -47, -37, -12, -26, -30, -41, -5, -24, -24, -67, -22, -60, -21, -74}, /* H */ {0, -31, -3, -33, -15, -20, -25, -38, 44, -39, 0, -25, -26, -44, 4, -17, 7, -4, -25, -31, -28, -32, -21, -13, -2, -74}, /* I */ {0, -19, -26, -27, -32, -24, -8, -46, -39, 40, 0, -26, -3, 0, -22, -37, -33, -23, -29, -9, 12, -60, -20, -26, -27, -74}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -29, -9, -62, -18, -18, -61, -31, -25, -26, 0, 32, -36, -5, -2, -28, -10, 5, -16, -12, -39, -51, -22, -42, -14, -74}, /* L */ {0, -27, -39, -66, -54, -41, -9, -47, -26, -3, 0, -36, 33, 6, -31, -31, -21, -38, -36, -29, -8, -26, -26, -29, -29, -74}, /* M */ {0, -20, -41, -59, -47, -30, -16, -37, -44, 0, 0, -5, 6, 54, -37, -35, -16, -17, -23, -16, -3, -55, -21, -48, -22, -74}, /* N */ {0, -14, 28, -47, 10, -7, -38, -12, 4, -22, 0, -2, -31, -37, 36, -24, -14, -23, 2, -6, -33, -36, -14, -19, -10, -74}, /* P */ {0, -4, -28, -35, -33, -23, -44, -26, -17, -37, 0, -28, -31, -35, -24, 39, -11, -15, -5, -17, -24, -60, -21, -59, -16, -74}, /* Q */ {0, -17, -10, -61, -8, 8, -57, -30, 7, -33, 0, -10, -21, -16, -14, -11, 40, -5, -22, -23, -29, -56, -19, -51, 30, -74}, /* R */ {0, -30, -30, -35, -43, -38, -42, -41, -4, -23, 0, 5, -38, -17, -23, -15, -5, 41, -12, -27, -33, -6, -23, -45, -15, -74}, /* S */ {0, 1, -5, -11, -14, -18, -28, -5, -25, -29, 0, -16, -36, -23, 2, -5, -22, -12, 30, 4, -26, -22, -12, -30, -19, -74}, /* T */ {0, 0, -12, -34, -19, -25, -38, -24, -31, -9, 0, -12, -29, -16, -6, -17, -23, -27, 4, 34, -10, -56, -15, -28, -24, -74}, /* V */ {0, -8, -34, -25, -35, -28, -33, -24, -28, 12, 0, -39, -8, -3, -33, -24, -29, -33, -26, -10, 34, -68, -19, -32, -28, -74}, /* W */ {0, -59, -45, -70, -67, -74, -18, -67, -32, -60, 0, -51, -26, -55, -36, -60, -56, -6, -22, -56, -68, 64, -47, -21, -63, -74}, /* X */ {0, -13, -19, -39, -23, -20, -34, -22, -21, -20, 0, -22, -26, -21, -14, -21, -19, -23, -12, -15, -19, -47, -21, -33, -20, -74}, /* Y */ {0, -34, -28, -16, -49, -38, 12, -60, -13, -26, 0, -42, -29, -48, -19, -59, -51, -45, -30, -28, -32, -21, -33, 48, -42, -74}, /* Z */ {0, -12, 3, -62, 8, 29, -60, -21, -2, -27, 0, -14, -29, -22, -10, -16, 30, -15, -19, -24, -28, -63, -20, -42, 30, -74}, /* * */ {0, -74, -74, -74, -74, -74, -74, -74, -74, -74, 0, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 410 substitution matrix, scale = ln(2)/6 = 0.115525 // # // # Expected score = -0.617, Entropy = 0.131 bits // # // # Lowest score = -10, Highest score = 31 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 2 -1 0 -2 -1 -1 -4 1 1 1 -7 -4 0 1 0 0 -10 // R -1 6 1 0 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 4 -5 -2 0 1 0 -10 // N 0 1 1 2 -4 1 2 1 1 -2 -3 1 -2 -4 0 1 1 -5 -3 -1 2 2 0 -10 // D 1 0 2 3 -6 2 3 1 1 -2 -4 1 -2 -6 0 1 0 -8 -5 -2 3 3 0 -10 // C -2 -4 -4 -6 20 -6 -6 -4 -4 -3 -7 -6 -6 -4 -3 0 -2 -10 1 -2 -5 -6 -3 -10 // Q 0 2 1 2 -6 3 2 0 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -2 2 3 0 -10 // E 1 0 2 3 -6 2 3 1 1 -2 -3 1 -2 -6 0 1 0 -8 -5 -2 3 3 0 -10 // G 2 -2 1 1 -4 0 1 5 -1 -2 -4 -1 -3 -6 0 1 1 -8 -6 -1 1 0 0 -10 // H -1 2 1 1 -4 3 1 -1 6 -2 -2 1 -2 -2 0 0 -1 -3 0 -2 1 2 0 -10 // I 0 -2 -2 -2 -3 -2 -2 -2 -2 4 4 -2 3 2 -2 -1 0 -6 0 4 -2 -2 0 -10 // L -2 -3 -3 -4 -7 -2 -3 -4 -2 4 8 -3 5 4 -3 -3 -1 -2 1 3 -3 -3 -1 -10 // K -1 4 1 1 -6 1 1 -1 1 -2 -3 5 0 -6 0 0 0 -3 -5 -2 1 1 0 -10 // M -1 0 -2 -2 -6 -1 -2 -3 -2 3 5 0 5 1 -2 -1 0 -4 -2 2 -2 -2 0 -10 // F -4 -5 -4 -6 -4 -5 -6 -6 -2 2 4 -6 1 14 -5 -4 -3 2 12 0 -5 -5 -2 -10 // P 1 0 0 0 -3 1 0 0 0 -2 -3 0 -2 -5 6 1 1 -7 -5 -1 0 0 0 -10 // S 1 0 1 1 0 0 1 1 0 -1 -3 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -10 // T 1 0 1 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 2 -6 -3 0 0 0 0 -10 // W -7 4 -5 -8 -10 -5 -8 -8 -3 -6 -2 -3 -4 2 -7 -3 -6 31 2 -7 -6 -7 -4 -10 // Y -4 -5 -3 -5 1 -4 -5 -6 0 0 1 -5 -2 12 -5 -3 -3 2 15 -2 -4 -5 -2 -10 // V 0 -2 -1 -2 -2 -2 -2 -1 -2 4 3 -2 2 0 -1 -1 0 -7 -2 4 -2 -2 0 -10 // B 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -2 2 2 0 -10 // Z 0 1 2 3 -6 3 3 0 2 -2 -3 1 -2 -5 0 0 0 -7 -5 -2 2 3 0 -10 // X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -10 // * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 // PAM410 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -4, 2, -1, 0, 0, -1, -2, -1, 0, 1, 0, -1, 1, 1, 0, -7, 0, -4, 0, -10}, /* B */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -2, -6, 0, -4, 2, -10}, /* C */ {0, -2, -5, 20, -6, -6, -4, -4, -4, -3, 0, -6, -7, -6, -4, -3, -6, -4, 0, -2, -2, -10, -3, 1, -6, -10}, /* D */ {0, 1, 3, -6, 3, 3, -6, 1, 1, -2, 0, 1, -4, -2, 2, 0, 2, 0, 1, 0, -2, -8, 0, -5, 3, -10}, /* E */ {0, 1, 3, -6, 3, 3, -6, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -2, -8, 0, -5, 3, -10}, /* F */ {0, -4, -5, -4, -6, -6, 14, -6, -2, 2, 0, -6, 4, 1, -4, -5, -5, -5, -4, -3, 0, 2, -2, 12, -5, -10}, /* G */ {0, 2, 1, -4, 1, 1, -6, 5, -1, -2, 0, -1, -4, -3, 1, 0, 0, -2, 1, 1, -1, -8, 0, -6, 0, -10}, /* H */ {0, -1, 1, -4, 1, 1, -2, -1, 6, -2, 0, 1, -2, -2, 1, 0, 3, 2, 0, -1, -2, -3, 0, 0, 2, -10}, /* I */ {0, 0, -2, -3, -2, -2, 2, -2, -2, 4, 0, -2, 4, 3, -2, -2, -2, -2, -1, 0, 4, -6, 0, 0, -2, -10}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -1, 1, -6, 1, 1, -6, -1, 1, -2, 0, 5, -3, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -5, 1, -10}, /* L */ {0, -2, -3, -7, -4, -3, 4, -4, -2, 4, 0, -3, 8, 5, -3, -3, -2, -3, -3, -1, 3, -2, -1, 1, -3, -10}, /* M */ {0, -1, -2, -6, -2, -2, 1, -3, -2, 3, 0, 0, 5, 5, -2, -2, -1, 0, -1, 0, 2, -4, 0, -2, -2, -10}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 1, -2, 0, 1, -3, -2, 1, 0, 1, 1, 1, 1, -1, -5, 0, -3, 2, -10}, /* P */ {0, 1, 0, -3, 0, 0, -5, 0, 0, -2, 0, 0, -3, -2, 0, 6, 1, 0, 1, 1, -1, -7, 0, -5, 0, -10}, /* Q */ {0, 0, 2, -6, 2, 2, -5, 0, 3, -2, 0, 1, -2, -1, 1, 1, 3, 2, 0, 0, -2, -5, 0, -4, 3, -10}, /* R */ {0, -1, 0, -4, 0, 0, -5, -2, 2, -2, 0, 4, -3, 0, 1, 0, 2, 6, 0, 0, -2, 4, 0, -5, 1, -10}, /* S */ {0, 1, 1, 0, 1, 1, -4, 1, 0, -1, 0, 0, -3, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -10}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, -1, 0, 0, 0, -1, 0, 1, 1, 0, 0, 1, 2, 0, -6, 0, -3, 0, -10}, /* V */ {0, 0, -2, -2, -2, -2, 0, -1, -2, 4, 0, -2, 3, 2, -1, -1, -2, -2, -1, 0, 4, -7, 0, -2, -2, -10}, /* W */ {0, -7, -6, -10, -8, -8, 2, -8, -3, -6, 0, -3, -2, -4, -5, -7, -5, 4, -3, -6, -7, 31, -4, 2, -7, -10}, /* X */ {0, 0, 0, -3, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, -1, -2, 0, -10}, /* Y */ {0, -4, -4, 1, -5, -5, 12, -6, 0, 0, 0, -5, 1, -2, -3, -5, -4, -5, -3, -3, -2, 2, -2, 15, -5, -10}, /* Z */ {0, 0, 2, -6, 3, 3, -5, 0, 2, -2, 0, 1, -3, -2, 2, 0, 3, 1, 0, 0, -2, -7, 0, -5, 3, -10}, /* * */ {0, -10, -10, -10, -10, -10, -10, -10, -10, -10, 0, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 420 substitution matrix, scale = ln(2)/6 = 0.115525 // # // # Expected score = -0.599, Entropy = 0.124 bits // # // # Lowest score = -10, Highest score = 31 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 2 -1 0 -2 0 -1 -4 1 1 1 -7 -4 0 1 0 0 -10 // R -1 6 1 0 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 4 -5 -2 0 1 0 -10 // N 0 1 1 2 -4 1 2 1 1 -2 -3 1 -1 -4 0 1 0 -5 -3 -1 2 2 0 -10 // D 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -6 0 1 0 -8 -5 -2 3 3 0 -10 // C -2 -4 -4 -5 20 -6 -6 -3 -4 -3 -7 -6 -6 -4 -3 0 -2 -10 1 -2 -5 -6 -3 -10 // Q 0 2 1 2 -6 3 2 0 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -2 2 3 0 -10 // E 1 0 2 3 -6 2 3 1 1 -2 -3 1 -2 -6 0 1 0 -8 -5 -2 3 3 0 -10 // G 2 -2 1 1 -3 0 1 5 -1 -2 -4 -1 -2 -6 0 1 1 -8 -6 -1 1 0 0 -10 // H -1 2 1 1 -4 3 1 -1 6 -2 -2 1 -2 -2 0 0 -1 -3 0 -2 1 2 0 -10 // I 0 -2 -2 -2 -3 -2 -2 -2 -2 4 4 -2 3 2 -2 -1 0 -6 0 4 -2 -2 0 -10 // L -2 -3 -3 -4 -7 -2 -3 -4 -2 4 7 -3 5 4 -2 -3 -1 -2 1 3 -3 -3 -1 -10 // K 0 4 1 1 -6 1 1 -1 1 -2 -3 5 0 -6 0 0 0 -3 -5 -2 1 1 0 -10 // M -1 0 -1 -2 -6 -1 -2 -2 -2 3 5 0 5 1 -2 -1 0 -4 -1 2 -2 -1 0 -10 // F -4 -5 -4 -6 -4 -5 -6 -6 -2 2 4 -6 1 13 -5 -4 -3 2 12 0 -5 -5 -2 -10 // P 1 0 0 0 -3 1 0 0 0 -2 -2 0 -2 -5 5 1 1 -6 -5 -1 0 0 0 -10 // S 1 0 1 1 0 0 1 1 0 -1 -3 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -10 // T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -10 // W -7 4 -5 -8 -10 -5 -8 -8 -3 -6 -2 -3 -4 2 -6 -3 -6 31 2 -7 -6 -7 -4 -10 // Y -4 -5 -3 -5 1 -4 -5 -6 0 0 1 -5 -1 12 -5 -3 -3 2 15 -2 -4 -5 -2 -10 // V 0 -2 -1 -2 -2 -2 -2 -1 -2 4 3 -2 2 0 -1 -1 0 -7 -2 4 -2 -2 0 -10 // B 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -2 2 2 0 -10 // Z 0 1 2 3 -6 3 3 0 2 -2 -3 1 -1 -5 0 0 0 -7 -5 -2 2 3 0 -10 // X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -10 // * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 // PAM420 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -4, 2, -1, 0, 0, 0, -2, -1, 0, 1, 0, -1, 1, 1, 0, -7, 0, -4, 0, -10}, /* B */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -2, -6, 0, -4, 2, -10}, /* C */ {0, -2, -5, 20, -5, -6, -4, -3, -4, -3, 0, -6, -7, -6, -4, -3, -6, -4, 0, -2, -2, -10, -3, 1, -6, -10}, /* D */ {0, 1, 3, -5, 3, 3, -6, 1, 1, -2, 0, 1, -4, -2, 2, 0, 2, 0, 1, 0, -2, -8, 0, -5, 3, -10}, /* E */ {0, 1, 3, -6, 3, 3, -6, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -2, -8, 0, -5, 3, -10}, /* F */ {0, -4, -5, -4, -6, -6, 13, -6, -2, 2, 0, -6, 4, 1, -4, -5, -5, -5, -4, -3, 0, 2, -2, 12, -5, -10}, /* G */ {0, 2, 1, -3, 1, 1, -6, 5, -1, -2, 0, -1, -4, -2, 1, 0, 0, -2, 1, 1, -1, -8, 0, -6, 0, -10}, /* H */ {0, -1, 1, -4, 1, 1, -2, -1, 6, -2, 0, 1, -2, -2, 1, 0, 3, 2, 0, -1, -2, -3, 0, 0, 2, -10}, /* I */ {0, 0, -2, -3, -2, -2, 2, -2, -2, 4, 0, -2, 4, 3, -2, -2, -2, -2, -1, 0, 4, -6, 0, 0, -2, -10}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, 0, 1, -6, 1, 1, -6, -1, 1, -2, 0, 5, -3, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -5, 1, -10}, /* L */ {0, -2, -3, -7, -4, -3, 4, -4, -2, 4, 0, -3, 7, 5, -3, -2, -2, -3, -3, -1, 3, -2, -1, 1, -3, -10}, /* M */ {0, -1, -2, -6, -2, -2, 1, -2, -2, 3, 0, 0, 5, 5, -1, -2, -1, 0, -1, 0, 2, -4, 0, -1, -1, -10}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 1, -2, 0, 1, -3, -1, 1, 0, 1, 1, 1, 0, -1, -5, 0, -3, 2, -10}, /* P */ {0, 1, 0, -3, 0, 0, -5, 0, 0, -2, 0, 0, -2, -2, 0, 5, 1, 0, 1, 1, -1, -6, 0, -5, 0, -10}, /* Q */ {0, 0, 2, -6, 2, 2, -5, 0, 3, -2, 0, 1, -2, -1, 1, 1, 3, 2, 0, 0, -2, -5, 0, -4, 3, -10}, /* R */ {0, -1, 0, -4, 0, 0, -5, -2, 2, -2, 0, 4, -3, 0, 1, 0, 2, 6, 0, 0, -2, 4, 0, -5, 1, -10}, /* S */ {0, 1, 1, 0, 1, 1, -4, 1, 0, -1, 0, 0, -3, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -10}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, -1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 1, 0, -6, 0, -3, 0, -10}, /* V */ {0, 0, -2, -2, -2, -2, 0, -1, -2, 4, 0, -2, 3, 2, -1, -1, -2, -2, -1, 0, 4, -7, 0, -2, -2, -10}, /* W */ {0, -7, -6, -10, -8, -8, 2, -8, -3, -6, 0, -3, -2, -4, -5, -6, -5, 4, -3, -6, -7, 31, -4, 2, -7, -10}, /* X */ {0, 0, 0, -3, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, -1, -2, 0, -10}, /* Y */ {0, -4, -4, 1, -5, -5, 12, -6, 0, 0, 0, -5, 1, -1, -3, -5, -4, -5, -3, -3, -2, 2, -2, 15, -5, -10}, /* Z */ {0, 0, 2, -6, 3, 3, -5, 0, 2, -2, 0, 1, -3, -1, 2, 0, 3, 1, 0, 0, -2, -7, 0, -5, 3, -10}, /* * */ {0, -10, -10, -10, -10, -10, -10, -10, -10, -10, 0, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 430 substitution matrix, scale = ln(2)/6 = 0.115525 // # // # Expected score = -0.543, Entropy = 0.117 bits // # // # Lowest score = -9, Highest score = 31 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 2 -1 0 -2 0 -1 -4 1 1 1 -7 -4 0 1 0 0 -9 // R -1 6 1 0 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 4 -4 -2 0 1 0 -9 // N 0 1 1 2 -4 1 2 1 1 -2 -3 1 -1 -4 0 1 0 -5 -3 -1 2 1 0 -9 // D 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -6 0 1 0 -7 -5 -2 3 3 0 -9 // C -2 -4 -4 -5 20 -6 -5 -3 -4 -2 -6 -6 -5 -4 -3 0 -2 -9 1 -2 -4 -5 -3 -9 // Q 0 2 1 2 -6 3 2 0 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -1 2 3 0 -9 // E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -6 0 1 0 -8 -5 -1 2 3 0 -9 // G 2 -2 1 1 -3 0 1 5 -1 -2 -4 -1 -2 -5 0 1 1 -8 -5 -1 1 0 0 -9 // H -1 2 1 1 -4 3 1 -1 5 -2 -2 1 -1 -2 0 0 -1 -3 0 -2 1 2 0 -9 // I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 4 -2 3 2 -1 -1 0 -5 0 4 -2 -2 0 -9 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 4 7 -3 5 4 -2 -2 -1 -2 1 3 -3 -3 -1 -9 // K 0 4 1 1 -6 1 1 -1 1 -2 -3 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 // M -1 0 -1 -2 -5 -1 -2 -2 -1 3 5 0 5 1 -2 -1 0 -4 -1 2 -2 -1 0 -9 // F -4 -5 -4 -6 -4 -5 -6 -5 -2 2 4 -5 1 13 -5 -4 -3 2 12 0 -5 -5 -2 -9 // P 1 0 0 0 -3 1 0 0 0 -1 -2 0 -2 -5 5 1 1 -6 -5 -1 0 0 0 -9 // S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -9 // T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -9 // W -7 4 -5 -7 -9 -5 -8 -8 -3 -5 -2 -3 -4 2 -6 -3 -6 31 2 -7 -6 -6 -4 -9 // Y -4 -4 -3 -5 1 -4 -5 -5 0 0 1 -5 -1 12 -5 -3 -3 2 15 -2 -4 -5 -2 -9 // V 0 -2 -1 -2 -2 -1 -1 -1 -2 4 3 -2 2 0 -1 -1 0 -7 -2 4 -1 -1 0 -9 // B 1 0 2 3 -4 2 2 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -1 2 2 0 -9 // Z 0 1 1 3 -5 3 3 0 2 -2 -3 1 -1 -5 0 0 0 -6 -5 -1 2 3 0 -9 // X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM430 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -4, 2, -1, 0, 0, 0, -2, -1, 0, 1, 0, -1, 1, 1, 0, -7, 0, -4, 0, -9}, /* B */ {0, 1, 2, -4, 3, 2, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -6, 0, -4, 2, -9}, /* C */ {0, -2, -4, 20, -5, -5, -4, -3, -4, -2, 0, -6, -6, -5, -4, -3, -6, -4, 0, -2, -2, -9, -3, 1, -5, -9}, /* D */ {0, 1, 3, -5, 3, 3, -6, 1, 1, -2, 0, 1, -4, -2, 2, 0, 2, 0, 1, 0, -2, -7, 0, -5, 3, -9}, /* E */ {0, 1, 2, -5, 3, 3, -6, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -8, 0, -5, 3, -9}, /* F */ {0, -4, -5, -4, -6, -6, 13, -5, -2, 2, 0, -5, 4, 1, -4, -5, -5, -5, -4, -3, 0, 2, -2, 12, -5, -9}, /* G */ {0, 2, 1, -3, 1, 1, -5, 5, -1, -2, 0, -1, -4, -2, 1, 0, 0, -2, 1, 1, -1, -8, 0, -5, 0, -9}, /* H */ {0, -1, 1, -4, 1, 1, -2, -1, 5, -2, 0, 1, -2, -1, 1, 0, 3, 2, 0, -1, -2, -3, 0, 0, 2, -9}, /* I */ {0, 0, -2, -2, -2, -2, 2, -2, -2, 4, 0, -2, 4, 3, -2, -1, -2, -2, -1, 0, 4, -5, 0, 0, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, 0, 1, -6, 1, 1, -5, -1, 1, -2, 0, 4, -3, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -5, 1, -9}, /* L */ {0, -2, -3, -6, -4, -3, 4, -4, -2, 4, 0, -3, 7, 5, -3, -2, -2, -3, -2, -1, 3, -2, -1, 1, -3, -9}, /* M */ {0, -1, -2, -5, -2, -2, 1, -2, -1, 3, 0, 0, 5, 5, -1, -2, -1, 0, -1, 0, 2, -4, 0, -1, -1, -9}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 1, -2, 0, 1, -3, -1, 1, 0, 1, 1, 1, 0, -1, -5, 0, -3, 1, -9}, /* P */ {0, 1, 0, -3, 0, 0, -5, 0, 0, -1, 0, 0, -2, -2, 0, 5, 1, 0, 1, 1, -1, -6, 0, -5, 0, -9}, /* Q */ {0, 0, 2, -6, 2, 2, -5, 0, 3, -2, 0, 1, -2, -1, 1, 1, 3, 2, 0, 0, -1, -5, 0, -4, 3, -9}, /* R */ {0, -1, 0, -4, 0, 0, -5, -2, 2, -2, 0, 4, -3, 0, 1, 0, 2, 6, 0, 0, -2, 4, 0, -4, 1, -9}, /* S */ {0, 1, 1, 0, 1, 1, -4, 1, 0, -1, 0, 0, -2, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, -1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 1, 0, -6, 0, -3, 0, -9}, /* V */ {0, 0, -1, -2, -2, -1, 0, -1, -2, 4, 0, -2, 3, 2, -1, -1, -1, -2, -1, 0, 4, -7, 0, -2, -1, -9}, /* W */ {0, -7, -6, -9, -7, -8, 2, -8, -3, -5, 0, -3, -2, -4, -5, -6, -5, 4, -3, -6, -7, 31, -4, 2, -6, -9}, /* X */ {0, 0, 0, -3, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, -1, -2, 0, -9}, /* Y */ {0, -4, -4, 1, -5, -5, 12, -5, 0, 0, 0, -5, 1, -1, -3, -5, -4, -4, -3, -3, -2, 2, -2, 15, -5, -9}, /* Z */ {0, 0, 2, -5, 3, 3, -5, 0, 2, -2, 0, 1, -3, -1, 1, 0, 3, 1, 0, 0, -1, -6, 0, -5, 3, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 440 substitution matrix, scale = ln(2)/6 = 0.115525 // # // # Expected score = -0.529, Entropy = 0.111 bits // # // # Lowest score = -9, Highest score = 30 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 2 -1 0 -2 0 -1 -4 1 1 1 -6 -4 0 1 0 0 -9 // R -1 5 1 0 -4 2 0 -2 2 -2 -3 4 0 -5 0 0 0 4 -4 -2 0 1 0 -9 // N 0 1 1 2 -4 1 2 1 1 -2 -3 1 -1 -4 0 1 0 -5 -3 -1 2 1 0 -9 // D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -6 0 1 0 -7 -5 -2 2 2 0 -9 // C -2 -4 -4 -5 20 -5 -5 -3 -4 -2 -6 -5 -5 -4 -3 0 -2 -9 1 -2 -4 -5 -3 -9 // Q 0 2 1 2 -5 3 2 0 3 -2 -2 1 -1 -4 1 0 0 -5 -4 -1 2 2 0 -9 // E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -5 -1 2 3 0 -9 // G 2 -2 1 1 -3 0 1 4 -1 -2 -4 -1 -2 -5 0 1 1 -8 -5 -1 1 0 0 -9 // H -1 2 1 1 -4 3 1 -1 5 -2 -2 1 -1 -2 0 0 -1 -3 0 -2 1 2 0 -9 // I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 4 -2 3 2 -1 -1 0 -5 0 3 -2 -2 0 -9 // L -2 -3 -3 -3 -6 -2 -3 -4 -2 4 7 -3 5 4 -2 -2 -1 -2 1 3 -3 -2 -1 -9 // K 0 4 1 1 -5 1 1 -1 1 -2 -3 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 // M -1 0 -1 -2 -5 -1 -2 -2 -1 3 5 0 4 1 -1 -1 0 -4 -1 2 -2 -1 0 -9 // F -4 -5 -4 -6 -4 -4 -5 -5 -2 2 4 -5 1 13 -5 -4 -3 2 12 0 -5 -5 -2 -9 // P 1 0 0 0 -3 1 0 0 0 -1 -2 0 -1 -5 5 1 1 -6 -5 -1 0 0 0 -9 // S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -9 // T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -9 // W -6 4 -5 -7 -9 -5 -7 -8 -3 -5 -2 -3 -4 2 -6 -3 -6 30 2 -6 -6 -6 -4 -9 // Y -4 -4 -3 -5 1 -4 -5 -5 0 0 1 -5 -1 12 -5 -3 -3 2 15 -2 -4 -4 -2 -9 // V 0 -2 -1 -2 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -6 -2 4 -1 -1 0 -9 // B 1 0 2 2 -4 2 2 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -1 2 2 0 -9 // Z 0 1 1 2 -5 2 3 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -1 2 3 0 -9 // X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 -1 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM440 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -4, 2, -1, 0, 0, 0, -2, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -4, 0, -9}, /* B */ {0, 1, 2, -4, 2, 2, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -6, 0, -4, 2, -9}, /* C */ {0, -2, -4, 20, -5, -5, -4, -3, -4, -2, 0, -5, -6, -5, -4, -3, -5, -4, 0, -2, -2, -9, -3, 1, -5, -9}, /* D */ {0, 1, 2, -5, 3, 3, -6, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -2, -7, 0, -5, 2, -9}, /* E */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -7, 0, -5, 3, -9}, /* F */ {0, -4, -5, -4, -6, -5, 13, -5, -2, 2, 0, -5, 4, 1, -4, -5, -4, -5, -4, -3, 0, 2, -2, 12, -5, -9}, /* G */ {0, 2, 1, -3, 1, 1, -5, 4, -1, -2, 0, -1, -4, -2, 1, 0, 0, -2, 1, 1, -1, -8, 0, -5, 0, -9}, /* H */ {0, -1, 1, -4, 1, 1, -2, -1, 5, -2, 0, 1, -2, -1, 1, 0, 3, 2, 0, -1, -2, -3, 0, 0, 2, -9}, /* I */ {0, 0, -2, -2, -2, -2, 2, -2, -2, 4, 0, -2, 4, 3, -2, -1, -2, -2, -1, 0, 3, -5, 0, 0, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, 0, 1, -5, 1, 1, -5, -1, 1, -2, 0, 4, -3, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -5, 1, -9}, /* L */ {0, -2, -3, -6, -3, -3, 4, -4, -2, 4, 0, -3, 7, 5, -3, -2, -2, -3, -2, -1, 3, -2, -1, 1, -2, -9}, /* M */ {0, -1, -2, -5, -2, -2, 1, -2, -1, 3, 0, 0, 5, 4, -1, -1, -1, 0, -1, 0, 2, -4, 0, -1, -1, -9}, /* N */ {0, 0, 2, -4, 2, 2, -4, 1, 1, -2, 0, 1, -3, -1, 1, 0, 1, 1, 1, 0, -1, -5, 0, -3, 1, -9}, /* P */ {0, 1, 0, -3, 0, 0, -5, 0, 0, -1, 0, 0, -2, -1, 0, 5, 1, 0, 1, 1, -1, -6, 0, -5, 0, -9}, /* Q */ {0, 0, 2, -5, 2, 2, -4, 0, 3, -2, 0, 1, -2, -1, 1, 1, 3, 2, 0, 0, -1, -5, 0, -4, 2, -9}, /* R */ {0, -1, 0, -4, 0, 0, -5, -2, 2, -2, 0, 4, -3, 0, 1, 0, 2, 5, 0, 0, -2, 4, 0, -4, 1, -9}, /* S */ {0, 1, 1, 0, 1, 1, -4, 1, 0, -1, 0, 0, -2, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, -1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 1, 0, -6, 0, -3, 0, -9}, /* V */ {0, 0, -1, -2, -2, -1, 0, -1, -2, 3, 0, -2, 3, 2, -1, -1, -1, -2, -1, 0, 4, -6, 0, -2, -1, -9}, /* W */ {0, -6, -6, -9, -7, -7, 2, -8, -3, -5, 0, -3, -2, -4, -5, -6, -5, 4, -3, -6, -6, 30, -4, 2, -6, -9}, /* X */ {0, 0, 0, -3, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, -1, -2, 0, -9}, /* Y */ {0, -4, -4, 1, -5, -5, 12, -5, 0, 0, 0, -5, 1, -1, -3, -5, -4, -4, -3, -3, -2, 2, -2, 15, -4, -9}, /* Z */ {0, 0, 2, -5, 2, 3, -5, 0, 2, -2, 0, 1, -2, -1, 1, 0, 2, 1, 0, 0, -1, -6, 0, -4, 3, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 450 substitution matrix, scale = ln(2)/6 = 0.115525 // # // # Expected score = -0.476, Entropy = 0.105 bits // # // # Lowest score = -9, Highest score = 30 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 1 -1 0 -2 0 -1 -3 1 1 1 -6 -4 0 1 0 0 -9 // R -1 5 1 0 -4 2 0 -1 2 -2 -3 4 0 -4 0 0 0 4 -4 -2 0 1 0 -9 // N 0 1 1 2 -4 1 2 1 1 -1 -2 1 -1 -4 0 1 0 -4 -3 -1 1 1 0 -9 // D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -5 -1 2 2 0 -9 // C -2 -4 -4 -5 20 -5 -5 -3 -4 -2 -6 -5 -5 -4 -2 0 -2 -9 1 -2 -4 -5 -2 -9 // Q 0 2 1 2 -5 3 2 0 3 -1 -2 1 -1 -4 1 0 0 -5 -4 -1 2 2 0 -9 // E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -5 -1 2 3 0 -9 // G 1 -1 1 1 -3 0 1 4 -1 -2 -3 -1 -2 -5 0 1 1 -8 -5 -1 1 0 0 -9 // H -1 2 1 1 -4 3 1 -1 5 -2 -2 1 -1 -2 0 0 -1 -2 0 -2 1 2 0 -9 // I 0 -2 -1 -2 -2 -1 -2 -2 -2 4 3 -2 3 2 -1 -1 0 -5 0 3 -2 -2 0 -9 // L -2 -3 -2 -3 -6 -2 -3 -3 -2 3 7 -2 4 4 -2 -2 -1 -1 1 3 -3 -2 -1 -9 // K 0 4 1 1 -5 1 1 -1 1 -2 -2 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 // M -1 0 -1 -2 -5 -1 -2 -2 -1 3 4 0 4 1 -1 -1 0 -4 -1 2 -2 -1 0 -9 // F -3 -4 -4 -5 -4 -4 -5 -5 -2 2 4 -5 1 13 -5 -3 -3 2 12 0 -4 -5 -2 -9 // P 1 0 0 0 -2 1 0 0 0 -1 -2 0 -1 -5 5 1 1 -6 -5 -1 0 0 0 -9 // S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -9 // T 1 0 0 0 -2 0 0 1 -1 0 -1 0 0 -3 1 1 1 -5 -3 0 0 0 0 -9 // W -6 4 -4 -7 -9 -5 -7 -8 -2 -5 -1 -3 -4 2 -6 -3 -5 30 2 -6 -6 -6 -4 -9 // Y -4 -4 -3 -5 1 -4 -5 -5 0 0 1 -5 -1 12 -5 -3 -3 2 14 -2 -4 -4 -2 -9 // V 0 -2 -1 -1 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -6 -2 3 -1 -1 0 -9 // B 1 0 1 2 -4 2 2 1 1 -2 -3 1 -2 -4 0 1 0 -6 -4 -1 2 2 0 -9 // Z 0 1 1 2 -5 2 3 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -1 2 2 0 -9 // X 0 0 0 0 -2 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 0 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM450 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -3, 1, -1, 0, 0, 0, -2, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -4, 0, -9}, /* B */ {0, 1, 2, -4, 2, 2, -4, 1, 1, -2, 0, 1, -3, -2, 1, 0, 2, 0, 1, 0, -1, -6, 0, -4, 2, -9}, /* C */ {0, -2, -4, 20, -5, -5, -4, -3, -4, -2, 0, -5, -6, -5, -4, -2, -5, -4, 0, -2, -2, -9, -2, 1, -5, -9}, /* D */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -7, 0, -5, 2, -9}, /* E */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -7, 0, -5, 3, -9}, /* F */ {0, -3, -4, -4, -5, -5, 13, -5, -2, 2, 0, -5, 4, 1, -4, -5, -4, -4, -3, -3, 0, 2, -2, 12, -5, -9}, /* G */ {0, 1, 1, -3, 1, 1, -5, 4, -1, -2, 0, -1, -3, -2, 1, 0, 0, -1, 1, 1, -1, -8, 0, -5, 0, -9}, /* H */ {0, -1, 1, -4, 1, 1, -2, -1, 5, -2, 0, 1, -2, -1, 1, 0, 3, 2, 0, -1, -2, -2, 0, 0, 2, -9}, /* I */ {0, 0, -2, -2, -2, -2, 2, -2, -2, 4, 0, -2, 3, 3, -1, -1, -1, -2, -1, 0, 3, -5, 0, 0, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, 0, 1, -5, 1, 1, -5, -1, 1, -2, 0, 4, -2, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -5, 1, -9}, /* L */ {0, -2, -3, -6, -3, -3, 4, -3, -2, 3, 0, -2, 7, 4, -2, -2, -2, -3, -2, -1, 3, -1, -1, 1, -2, -9}, /* M */ {0, -1, -2, -5, -2, -2, 1, -2, -1, 3, 0, 0, 4, 4, -1, -1, -1, 0, -1, 0, 2, -4, 0, -1, -1, -9}, /* N */ {0, 0, 1, -4, 2, 2, -4, 1, 1, -1, 0, 1, -2, -1, 1, 0, 1, 1, 1, 0, -1, -4, 0, -3, 1, -9}, /* P */ {0, 1, 0, -2, 0, 0, -5, 0, 0, -1, 0, 0, -2, -1, 0, 5, 1, 0, 1, 1, -1, -6, 0, -5, 0, -9}, /* Q */ {0, 0, 2, -5, 2, 2, -4, 0, 3, -1, 0, 1, -2, -1, 1, 1, 3, 2, 0, 0, -1, -5, 0, -4, 2, -9}, /* R */ {0, -1, 0, -4, 0, 0, -4, -1, 2, -2, 0, 4, -3, 0, 1, 0, 2, 5, 0, 0, -2, 4, 0, -4, 1, -9}, /* S */ {0, 1, 1, 0, 1, 1, -3, 1, 0, -1, 0, 0, -2, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, -1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 1, 0, -5, 0, -3, 0, -9}, /* V */ {0, 0, -1, -2, -1, -1, 0, -1, -2, 3, 0, -2, 3, 2, -1, -1, -1, -2, -1, 0, 3, -6, 0, -2, -1, -9}, /* W */ {0, -6, -6, -9, -7, -7, 2, -8, -2, -5, 0, -3, -1, -4, -4, -6, -5, 4, -3, -5, -6, 30, -4, 2, -6, -9}, /* X */ {0, 0, 0, -2, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, -2, 0, -9}, /* Y */ {0, -4, -4, 1, -5, -5, 12, -5, 0, 0, 0, -5, 1, -1, -3, -5, -4, -4, -3, -3, -2, 2, -2, 14, -4, -9}, /* Z */ {0, 0, 2, -5, 2, 3, -5, 0, 2, -2, 0, 1, -2, -1, 1, 0, 2, 1, 0, 0, -1, -6, 0, -4, 2, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 460 substitution matrix, scale = ln(2)/6 = 0.115525 // # // # Expected score = -0.429, Entropy = 0.0994 bits // # // # Lowest score = -9, Highest score = 30 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 1 0 0 -1 0 -1 -3 1 1 1 -6 -3 0 1 0 0 -9 // R -1 5 1 0 -4 1 0 -1 2 -2 -2 4 0 -4 0 0 0 4 -4 -2 0 1 0 -9 // N 0 1 1 2 -3 1 1 1 1 -1 -2 1 -1 -3 0 1 0 -4 -3 -1 1 1 0 -9 // D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -4 -1 2 2 0 -9 // C -2 -4 -3 -5 19 -5 -5 -3 -3 -2 -6 -5 -5 -3 -2 0 -2 -9 2 -2 -4 -5 -2 -9 // Q 0 1 1 2 -5 2 2 0 2 -1 -2 1 -1 -4 1 0 0 -5 -4 -1 1 2 0 -9 // E 1 0 1 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -4 -1 2 2 0 -9 // G 1 -1 1 1 -3 0 1 4 -1 -2 -3 -1 -2 -5 1 1 1 -7 -5 -1 1 0 0 -9 // H 0 2 1 1 -3 2 1 -1 5 -2 -2 1 -1 -2 0 0 0 -2 0 -2 1 2 0 -9 // I 0 -2 -1 -2 -2 -1 -2 -2 -2 3 3 -2 2 2 -1 -1 0 -5 0 3 -2 -2 0 -9 // L -1 -2 -2 -3 -6 -2 -3 -3 -2 3 7 -2 4 3 -2 -2 -1 -1 1 3 -3 -2 -1 -9 // K 0 4 1 1 -5 1 1 -1 1 -2 -2 4 0 -5 0 0 0 -3 -4 -2 1 1 0 -9 // M -1 0 -1 -2 -5 -1 -2 -2 -1 2 4 0 4 1 -1 -1 0 -4 -1 2 -2 -1 0 -9 // F -3 -4 -3 -5 -3 -4 -5 -5 -2 2 3 -5 1 12 -4 -3 -3 2 11 0 -4 -5 -2 -9 // P 1 0 0 0 -2 1 0 1 0 -1 -2 0 -1 -4 4 1 1 -6 -5 -1 0 0 0 -9 // S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -9 // T 1 0 0 0 -2 0 0 1 0 0 -1 0 0 -3 1 1 1 -5 -3 0 0 0 0 -9 // W -6 4 -4 -7 -9 -5 -7 -7 -2 -5 -1 -3 -4 2 -6 -3 -5 30 2 -6 -6 -6 -4 -9 // Y -3 -4 -3 -4 2 -4 -4 -5 0 0 1 -4 -1 11 -5 -3 -3 2 14 -2 -4 -4 -2 -9 // V 0 -2 -1 -1 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -6 -2 3 -1 -1 0 -9 // B 1 0 1 2 -4 1 2 1 1 -2 -3 1 -2 -4 0 1 0 -6 -4 -1 2 2 0 -9 // Z 0 1 1 2 -5 2 2 0 2 -2 -2 1 -1 -5 0 0 0 -6 -4 -1 2 2 0 -9 // X 0 0 0 0 -2 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 0 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM460 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -3, 1, 0, 0, 0, 0, -1, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -3, 0, -9}, /* B */ {0, 1, 2, -4, 2, 2, -4, 1, 1, -2, 0, 1, -3, -2, 1, 0, 1, 0, 1, 0, -1, -6, 0, -4, 2, -9}, /* C */ {0, -2, -4, 19, -5, -5, -3, -3, -3, -2, 0, -5, -6, -5, -3, -2, -5, -4, 0, -2, -2, -9, -2, 2, -5, -9}, /* D */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -7, 0, -4, 2, -9}, /* E */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 1, 0, 2, 0, 1, 0, -1, -7, 0, -4, 2, -9}, /* F */ {0, -3, -4, -3, -5, -5, 12, -5, -2, 2, 0, -5, 3, 1, -3, -4, -4, -4, -3, -3, 0, 2, -2, 11, -5, -9}, /* G */ {0, 1, 1, -3, 1, 1, -5, 4, -1, -2, 0, -1, -3, -2, 1, 1, 0, -1, 1, 1, -1, -7, 0, -5, 0, -9}, /* H */ {0, 0, 1, -3, 1, 1, -2, -1, 5, -2, 0, 1, -2, -1, 1, 0, 2, 2, 0, 0, -2, -2, 0, 0, 2, -9}, /* I */ {0, 0, -2, -2, -2, -2, 2, -2, -2, 3, 0, -2, 3, 2, -1, -1, -1, -2, -1, 0, 3, -5, 0, 0, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, 0, 1, -5, 1, 1, -5, -1, 1, -2, 0, 4, -2, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -4, 1, -9}, /* L */ {0, -1, -3, -6, -3, -3, 3, -3, -2, 3, 0, -2, 7, 4, -2, -2, -2, -2, -2, -1, 3, -1, -1, 1, -2, -9}, /* M */ {0, -1, -2, -5, -2, -2, 1, -2, -1, 2, 0, 0, 4, 4, -1, -1, -1, 0, -1, 0, 2, -4, 0, -1, -1, -9}, /* N */ {0, 0, 1, -3, 2, 1, -3, 1, 1, -1, 0, 1, -2, -1, 1, 0, 1, 1, 1, 0, -1, -4, 0, -3, 1, -9}, /* P */ {0, 1, 0, -2, 0, 0, -4, 1, 0, -1, 0, 0, -2, -1, 0, 4, 1, 0, 1, 1, -1, -6, 0, -5, 0, -9}, /* Q */ {0, 0, 1, -5, 2, 2, -4, 0, 2, -1, 0, 1, -2, -1, 1, 1, 2, 1, 0, 0, -1, -5, 0, -4, 2, -9}, /* R */ {0, -1, 0, -4, 0, 0, -4, -1, 2, -2, 0, 4, -2, 0, 1, 0, 1, 5, 0, 0, -2, 4, 0, -4, 1, -9}, /* S */ {0, 1, 1, 0, 1, 1, -3, 1, 0, -1, 0, 0, -2, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 1, 0, -5, 0, -3, 0, -9}, /* V */ {0, 0, -1, -2, -1, -1, 0, -1, -2, 3, 0, -2, 3, 2, -1, -1, -1, -2, -1, 0, 3, -6, 0, -2, -1, -9}, /* W */ {0, -6, -6, -9, -7, -7, 2, -7, -2, -5, 0, -3, -1, -4, -4, -6, -5, 4, -3, -5, -6, 30, -4, 2, -6, -9}, /* X */ {0, 0, 0, -2, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, -2, 0, -9}, /* Y */ {0, -3, -4, 2, -4, -4, 11, -5, 0, 0, 0, -4, 1, -1, -3, -5, -4, -4, -3, -3, -2, 2, -2, 14, -4, -9}, /* Z */ {0, 0, 2, -5, 2, 2, -5, 0, 2, -2, 0, 1, -2, -1, 1, 0, 2, 1, 0, 0, -1, -6, 0, -4, 2, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 470 substitution matrix, scale = ln(2)/7 = 0.0990210 // # // # Expected score = -0.520, Entropy = 0.0942 bits // # // # Lowest score = -10, Highest score = 35 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 1 1 -2 0 1 2 -1 0 -2 0 -1 -4 1 1 1 -7 -4 0 1 0 0 -10 // R -1 6 1 0 -4 2 0 -1 2 -2 -3 4 0 -5 0 0 0 4 -5 -2 0 1 0 -10 // N 1 1 1 2 -4 1 2 1 1 -2 -3 1 -1 -4 0 1 0 -5 -3 -1 2 1 0 -10 // D 1 0 2 3 -5 2 3 1 1 -2 -4 1 -2 -6 0 1 0 -8 -5 -2 3 3 0 -10 // C -2 -4 -4 -5 22 -6 -5 -3 -4 -2 -6 -6 -6 -4 -3 0 -2 -10 2 -2 -5 -6 -3 -10 // Q 0 2 1 2 -6 3 2 0 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -1 2 2 0 -10 // E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -6 0 1 0 -8 -5 -1 2 3 0 -10 // G 2 -1 1 1 -3 0 1 5 -1 -2 -4 -1 -2 -6 1 1 1 -8 -6 -1 1 1 0 -10 // H -1 2 1 1 -4 3 1 -1 5 -2 -2 1 -1 -2 0 0 0 -3 0 -2 1 2 0 -10 // I 0 -2 -2 -2 -2 -2 -2 -2 -2 4 4 -2 3 2 -1 -1 0 -5 0 3 -2 -2 0 -10 // L -2 -3 -3 -4 -6 -2 -3 -4 -2 4 8 -3 5 4 -2 -2 -1 -2 1 3 -3 -3 -1 -10 // K 0 4 1 1 -6 1 1 -1 1 -2 -3 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -10 // M -1 0 -1 -2 -6 -1 -2 -2 -1 3 5 0 4 1 -1 -1 0 -4 -1 2 -2 -1 0 -10 // F -4 -5 -4 -6 -4 -5 -6 -6 -2 2 4 -5 1 14 -5 -4 -3 3 13 0 -5 -5 -2 -10 // P 1 0 0 0 -3 1 0 1 0 -1 -2 0 -1 -5 5 1 1 -6 -5 -1 0 1 0 -10 // S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -4 1 1 1 -4 -3 -1 1 0 0 -10 // T 1 0 0 0 -2 0 0 1 0 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -10 // W -7 4 -5 -8 -10 -5 -8 -8 -3 -5 -2 -3 -4 3 -6 -4 -6 35 2 -7 -6 -7 -4 -10 // Y -4 -5 -3 -5 2 -4 -5 -6 0 0 1 -5 -1 13 -5 -3 -3 2 16 -2 -4 -5 -2 -10 // V 0 -2 -1 -2 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -7 -2 4 -1 -1 0 -10 // B 1 0 2 3 -5 2 2 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -1 2 2 0 -10 // Z 0 1 1 3 -6 2 3 1 2 -2 -3 1 -1 -5 1 0 0 -7 -5 -1 2 3 0 -10 // X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 0 -10 // * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 // PAM470 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -4, 2, -1, 0, 0, 0, -2, -1, 1, 1, 0, -1, 1, 1, 0, -7, 0, -4, 0, -10}, /* B */ {0, 1, 2, -5, 3, 2, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -6, 0, -4, 2, -10}, /* C */ {0, -2, -5, 22, -5, -5, -4, -3, -4, -2, 0, -6, -6, -6, -4, -3, -6, -4, 0, -2, -2, -10, -3, 2, -6, -10}, /* D */ {0, 1, 3, -5, 3, 3, -6, 1, 1, -2, 0, 1, -4, -2, 2, 0, 2, 0, 1, 0, -2, -8, 0, -5, 3, -10}, /* E */ {0, 1, 2, -5, 3, 3, -6, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -8, 0, -5, 3, -10}, /* F */ {0, -4, -5, -4, -6, -6, 14, -6, -2, 2, 0, -5, 4, 1, -4, -5, -5, -5, -4, -3, 0, 3, -2, 13, -5, -10}, /* G */ {0, 2, 1, -3, 1, 1, -6, 5, -1, -2, 0, -1, -4, -2, 1, 1, 0, -1, 1, 1, -1, -8, 0, -6, 1, -10}, /* H */ {0, -1, 1, -4, 1, 1, -2, -1, 5, -2, 0, 1, -2, -1, 1, 0, 3, 2, 0, 0, -2, -3, 0, 0, 2, -10}, /* I */ {0, 0, -2, -2, -2, -2, 2, -2, -2, 4, 0, -2, 4, 3, -2, -1, -2, -2, -1, 0, 3, -5, 0, 0, -2, -10}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, 0, 1, -6, 1, 1, -5, -1, 1, -2, 0, 4, -3, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -5, 1, -10}, /* L */ {0, -2, -3, -6, -4, -3, 4, -4, -2, 4, 0, -3, 8, 5, -3, -2, -2, -3, -2, -1, 3, -2, -1, 1, -3, -10}, /* M */ {0, -1, -2, -6, -2, -2, 1, -2, -1, 3, 0, 0, 5, 4, -1, -1, -1, 0, -1, 0, 2, -4, 0, -1, -1, -10}, /* N */ {0, 1, 2, -4, 2, 2, -4, 1, 1, -2, 0, 1, -3, -1, 1, 0, 1, 1, 1, 0, -1, -5, 0, -3, 1, -10}, /* P */ {0, 1, 0, -3, 0, 0, -5, 1, 0, -1, 0, 0, -2, -1, 0, 5, 1, 0, 1, 1, -1, -6, 0, -5, 1, -10}, /* Q */ {0, 0, 2, -6, 2, 2, -5, 0, 3, -2, 0, 1, -2, -1, 1, 1, 3, 2, 0, 0, -1, -5, 0, -4, 2, -10}, /* R */ {0, -1, 0, -4, 0, 0, -5, -1, 2, -2, 0, 4, -3, 0, 1, 0, 2, 6, 0, 0, -2, 4, 0, -5, 1, -10}, /* S */ {0, 1, 1, 0, 1, 1, -4, 1, 0, -1, 0, 0, -2, -1, 1, 1, 0, 0, 1, 1, -1, -4, 0, -3, 0, -10}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 1, 0, -6, 0, -3, 0, -10}, /* V */ {0, 0, -1, -2, -2, -1, 0, -1, -2, 3, 0, -2, 3, 2, -1, -1, -1, -2, -1, 0, 4, -7, 0, -2, -1, -10}, /* W */ {0, -7, -6, -10, -8, -8, 3, -8, -3, -5, 0, -3, -2, -4, -5, -6, -5, 4, -4, -6, -7, 35, -4, 2, -7, -10}, /* X */ {0, 0, 0, -3, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, -2, 0, -10}, /* Y */ {0, -4, -4, 2, -5, -5, 13, -6, 0, 0, 0, -5, 1, -1, -3, -5, -4, -5, -3, -3, -2, 2, -2, 16, -5, -10}, /* Z */ {0, 0, 2, -6, 3, 3, -5, 1, 2, -2, 0, 1, -3, -1, 1, 1, 2, 1, 0, 0, -1, -7, 0, -5, 3, -10}, /* * */ {0, -10, -10, -10, -10, -10, -10, -10, -10, -10, 0, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 480 substitution matrix, scale = ln(2)/7 = 0.0990210 // # // # Expected score = -0.494, Entropy = 0.0893 bits // # // # Lowest score = -10, Highest score = 35 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 1 1 -2 0 1 2 0 0 -2 0 -1 -4 1 1 1 -7 -4 0 1 0 0 -10 // R -1 5 1 0 -4 2 0 -1 2 -2 -3 4 0 -5 0 0 0 4 -4 -2 0 1 0 -10 // N 1 1 1 2 -4 1 2 1 1 -1 -3 1 -1 -4 0 1 0 -5 -3 -1 2 1 0 -10 // D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -6 0 1 0 -7 -5 -1 2 2 0 -10 // C -2 -4 -4 -5 22 -5 -5 -3 -4 -2 -6 -6 -5 -4 -3 0 -2 -10 2 -2 -4 -5 -3 -10 // Q 0 2 1 2 -5 3 2 0 3 -2 -2 1 -1 -5 1 0 0 -5 -4 -1 2 2 0 -10 // E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -8 -5 -1 2 3 0 -10 // G 2 -1 1 1 -3 0 1 4 -1 -2 -4 -1 -2 -5 1 1 1 -8 -5 -1 1 1 0 -10 // H 0 2 1 1 -4 3 1 -1 5 -2 -2 1 -1 -2 0 0 0 -3 0 -2 1 2 0 -10 // I 0 -2 -1 -2 -2 -2 -2 -2 -2 4 4 -2 3 2 -1 -1 0 -5 0 3 -2 -2 0 -10 // L -2 -3 -3 -3 -6 -2 -3 -4 -2 4 7 -3 5 4 -2 -2 -1 -2 1 3 -3 -3 -1 -10 // K 0 4 1 1 -6 1 1 -1 1 -2 -3 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -10 // M -1 0 -1 -2 -5 -1 -2 -2 -1 3 5 0 4 1 -1 -1 0 -4 -1 2 -2 -1 0 -10 // F -4 -5 -4 -6 -4 -5 -5 -5 -2 2 4 -5 1 14 -5 -4 -3 3 13 0 -5 -5 -2 -10 // P 1 0 0 0 -3 1 0 1 0 -1 -2 0 -1 -5 5 1 1 -6 -5 -1 0 1 0 -10 // S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -10 // T 1 0 0 0 -2 0 0 1 0 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -10 // W -7 4 -5 -7 -10 -5 -8 -8 -3 -5 -2 -3 -4 3 -6 -3 -6 35 2 -7 -6 -6 -4 -10 // Y -4 -4 -3 -5 2 -4 -5 -5 0 0 1 -5 -1 13 -5 -3 -3 2 16 -2 -4 -5 -2 -10 // V 0 -2 -1 -1 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -7 -2 3 -1 -1 0 -10 // B 1 0 2 2 -4 2 2 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -1 2 2 0 -10 // Z 0 1 1 2 -5 2 3 1 2 -2 -3 1 -1 -5 1 0 0 -6 -5 -1 2 2 0 -10 // X 0 0 0 0 -3 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 0 -10 // * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 // PAM480 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -4, 2, 0, 0, 0, 0, -2, -1, 1, 1, 0, -1, 1, 1, 0, -7, 0, -4, 0, -10}, /* B */ {0, 1, 2, -4, 2, 2, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -6, 0, -4, 2, -10}, /* C */ {0, -2, -4, 22, -5, -5, -4, -3, -4, -2, 0, -6, -6, -5, -4, -3, -5, -4, 0, -2, -2, -10, -3, 2, -5, -10}, /* D */ {0, 1, 2, -5, 3, 3, -6, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -7, 0, -5, 2, -10}, /* E */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -8, 0, -5, 3, -10}, /* F */ {0, -4, -5, -4, -6, -5, 14, -5, -2, 2, 0, -5, 4, 1, -4, -5, -5, -5, -4, -3, 0, 3, -2, 13, -5, -10}, /* G */ {0, 2, 1, -3, 1, 1, -5, 4, -1, -2, 0, -1, -4, -2, 1, 1, 0, -1, 1, 1, -1, -8, 0, -5, 1, -10}, /* H */ {0, 0, 1, -4, 1, 1, -2, -1, 5, -2, 0, 1, -2, -1, 1, 0, 3, 2, 0, 0, -2, -3, 0, 0, 2, -10}, /* I */ {0, 0, -2, -2, -2, -2, 2, -2, -2, 4, 0, -2, 4, 3, -1, -1, -2, -2, -1, 0, 3, -5, 0, 0, -2, -10}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, 0, 1, -6, 1, 1, -5, -1, 1, -2, 0, 4, -3, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -5, 1, -10}, /* L */ {0, -2, -3, -6, -3, -3, 4, -4, -2, 4, 0, -3, 7, 5, -3, -2, -2, -3, -2, -1, 3, -2, -1, 1, -3, -10}, /* M */ {0, -1, -2, -5, -2, -2, 1, -2, -1, 3, 0, 0, 5, 4, -1, -1, -1, 0, -1, 0, 2, -4, 0, -1, -1, -10}, /* N */ {0, 1, 2, -4, 2, 2, -4, 1, 1, -1, 0, 1, -3, -1, 1, 0, 1, 1, 1, 0, -1, -5, 0, -3, 1, -10}, /* P */ {0, 1, 0, -3, 0, 0, -5, 1, 0, -1, 0, 0, -2, -1, 0, 5, 1, 0, 1, 1, -1, -6, 0, -5, 1, -10}, /* Q */ {0, 0, 2, -5, 2, 2, -5, 0, 3, -2, 0, 1, -2, -1, 1, 1, 3, 2, 0, 0, -1, -5, 0, -4, 2, -10}, /* R */ {0, -1, 0, -4, 0, 0, -5, -1, 2, -2, 0, 4, -3, 0, 1, 0, 2, 5, 0, 0, -2, 4, 0, -4, 1, -10}, /* S */ {0, 1, 1, 0, 1, 1, -4, 1, 0, -1, 0, 0, -2, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -10}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 1, 0, -6, 0, -3, 0, -10}, /* V */ {0, 0, -1, -2, -1, -1, 0, -1, -2, 3, 0, -2, 3, 2, -1, -1, -1, -2, -1, 0, 3, -7, 0, -2, -1, -10}, /* W */ {0, -7, -6, -10, -7, -8, 3, -8, -3, -5, 0, -3, -2, -4, -5, -6, -5, 4, -3, -6, -7, 35, -4, 2, -6, -10}, /* X */ {0, 0, 0, -3, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, -2, 0, -10}, /* Y */ {0, -4, -4, 2, -5, -5, 13, -5, 0, 0, 0, -5, 1, -1, -3, -5, -4, -4, -3, -3, -2, 2, -2, 16, -5, -10}, /* Z */ {0, 0, 2, -5, 2, 3, -5, 1, 2, -2, 0, 1, -3, -1, 1, 1, 2, 1, 0, 0, -1, -6, 0, -5, 2, -10}, /* * */ {0, -10, -10, -10, -10, -10, -10, -10, -10, -10, 0, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 490 substitution matrix, scale = ln(2)/7 = 0.0990210 // # // # Expected score = -0.431, Entropy = 0.0847 bits // # // # Lowest score = -9, Highest score = 34 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 2 0 0 -1 0 -1 -3 1 1 1 -6 -4 0 1 0 0 -9 // R -1 5 1 0 -4 2 0 -1 2 -2 -3 4 0 -5 0 0 0 4 -4 -2 0 1 0 -9 // N 0 1 1 2 -4 1 2 1 1 -1 -2 1 -1 -4 0 1 0 -5 -3 -1 1 1 0 -9 // D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -5 -1 2 2 0 -9 // C -2 -4 -4 -5 22 -5 -5 -3 -4 -2 -6 -5 -5 -4 -3 0 -2 -9 2 -2 -4 -5 -2 -9 // Q 0 2 1 2 -5 2 2 0 2 -1 -2 1 -1 -4 1 0 0 -5 -4 -1 2 2 0 -9 // E 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -5 -1 2 2 0 -9 // G 2 -1 1 1 -3 0 1 4 -1 -2 -3 -1 -2 -5 1 1 1 -8 -5 -1 1 1 0 -9 // H 0 2 1 1 -4 2 1 -1 5 -2 -2 1 -1 -2 0 0 0 -3 0 -2 1 2 0 -9 // I 0 -2 -1 -2 -2 -1 -2 -2 -2 3 4 -2 3 2 -1 -1 0 -5 0 3 -2 -2 0 -9 // L -1 -3 -2 -3 -6 -2 -3 -3 -2 4 7 -2 5 4 -2 -2 -1 -1 1 3 -3 -2 -1 -9 // K 0 4 1 1 -5 1 1 -1 1 -2 -2 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 // M -1 0 -1 -2 -5 -1 -2 -2 -1 3 5 0 4 1 -1 -1 0 -4 -1 2 -2 -1 0 -9 // F -3 -5 -4 -5 -4 -4 -5 -5 -2 2 4 -5 1 14 -5 -4 -3 3 13 0 -5 -5 -2 -9 // P 1 0 0 0 -3 1 0 1 0 -1 -2 0 -1 -5 4 1 1 -6 -5 -1 0 1 0 -9 // S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -4 1 1 1 -3 -3 -1 1 0 0 -9 // T 1 0 0 0 -2 0 0 1 0 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -9 // W -6 4 -5 -7 -9 -5 -7 -8 -3 -5 -1 -3 -4 3 -6 -3 -6 34 2 -6 -6 -6 -4 -9 // Y -4 -4 -3 -5 2 -4 -5 -5 0 0 1 -5 -1 13 -5 -3 -3 2 15 -2 -4 -4 -2 -9 // V 0 -2 -1 -1 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -6 -2 3 -1 -1 0 -9 // B 1 0 1 2 -4 2 2 1 1 -2 -3 1 -2 -5 0 1 0 -6 -4 -1 2 2 0 -9 // Z 0 1 1 2 -5 2 2 1 2 -2 -2 1 -1 -5 1 0 0 -6 -4 -1 2 2 0 -9 // X 0 0 0 0 -2 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 0 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM490 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -3, 2, 0, 0, 0, 0, -1, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -4, 0, -9}, /* B */ {0, 1, 2, -4, 2, 2, -5, 1, 1, -2, 0, 1, -3, -2, 1, 0, 2, 0, 1, 0, -1, -6, 0, -4, 2, -9}, /* C */ {0, -2, -4, 22, -5, -5, -4, -3, -4, -2, 0, -5, -6, -5, -4, -3, -5, -4, 0, -2, -2, -9, -2, 2, -5, -9}, /* D */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -7, 0, -5, 2, -9}, /* E */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -7, 0, -5, 2, -9}, /* F */ {0, -3, -5, -4, -5, -5, 14, -5, -2, 2, 0, -5, 4, 1, -4, -5, -4, -5, -4, -3, 0, 3, -2, 13, -5, -9}, /* G */ {0, 2, 1, -3, 1, 1, -5, 4, -1, -2, 0, -1, -3, -2, 1, 1, 0, -1, 1, 1, -1, -8, 0, -5, 1, -9}, /* H */ {0, 0, 1, -4, 1, 1, -2, -1, 5, -2, 0, 1, -2, -1, 1, 0, 2, 2, 0, 0, -2, -3, 0, 0, 2, -9}, /* I */ {0, 0, -2, -2, -2, -2, 2, -2, -2, 3, 0, -2, 4, 3, -1, -1, -1, -2, -1, 0, 3, -5, 0, 0, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, 0, 1, -5, 1, 1, -5, -1, 1, -2, 0, 4, -2, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -5, 1, -9}, /* L */ {0, -1, -3, -6, -3, -3, 4, -3, -2, 4, 0, -2, 7, 5, -2, -2, -2, -3, -2, -1, 3, -1, -1, 1, -2, -9}, /* M */ {0, -1, -2, -5, -2, -2, 1, -2, -1, 3, 0, 0, 5, 4, -1, -1, -1, 0, -1, 0, 2, -4, 0, -1, -1, -9}, /* N */ {0, 0, 1, -4, 2, 2, -4, 1, 1, -1, 0, 1, -2, -1, 1, 0, 1, 1, 1, 0, -1, -5, 0, -3, 1, -9}, /* P */ {0, 1, 0, -3, 0, 0, -5, 1, 0, -1, 0, 0, -2, -1, 0, 4, 1, 0, 1, 1, -1, -6, 0, -5, 1, -9}, /* Q */ {0, 0, 2, -5, 2, 2, -4, 0, 2, -1, 0, 1, -2, -1, 1, 1, 2, 2, 0, 0, -1, -5, 0, -4, 2, -9}, /* R */ {0, -1, 0, -4, 0, 0, -5, -1, 2, -2, 0, 4, -3, 0, 1, 0, 2, 5, 0, 0, -2, 4, 0, -4, 1, -9}, /* S */ {0, 1, 1, 0, 1, 1, -4, 1, 0, -1, 0, 0, -2, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 1, 0, -6, 0, -3, 0, -9}, /* V */ {0, 0, -1, -2, -1, -1, 0, -1, -2, 3, 0, -2, 3, 2, -1, -1, -1, -2, -1, 0, 3, -6, 0, -2, -1, -9}, /* W */ {0, -6, -6, -9, -7, -7, 3, -8, -3, -5, 0, -3, -1, -4, -5, -6, -5, 4, -3, -6, -6, 34, -4, 2, -6, -9}, /* X */ {0, 0, 0, -2, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, -2, 0, -9}, /* Y */ {0, -4, -4, 2, -5, -5, 13, -5, 0, 0, 0, -5, 1, -1, -3, -5, -4, -4, -3, -3, -2, 2, -2, 15, -4, -9}, /* Z */ {0, 0, 2, -5, 2, 2, -5, 1, 2, -2, 0, 1, -2, -1, 1, 1, 2, 1, 0, 0, -1, -6, 0, -4, 2, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 50 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -3.70, Entropy = 2.00 bits // # // # Lowest score = -13, Highest score = 13 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 5 -5 -2 -2 -5 -3 -1 -1 -5 -3 -5 -5 -4 -7 0 0 0 -11 -6 -1 -2 -2 -2 -13 // R -5 8 -4 -7 -6 0 -7 -7 0 -4 -7 1 -3 -8 -3 -2 -5 -1 -8 -6 -5 -2 -4 -13 // N -2 -4 7 2 -8 -2 -1 -2 1 -4 -6 0 -6 -7 -4 1 -1 -7 -3 -6 5 -1 -2 -13 // D -2 -7 2 7 -11 -1 3 -2 -2 -6 -10 -3 -8 -12 -6 -2 -3 -12 -9 -6 6 2 -4 -13 // C -5 -6 -8 -11 9 -11 -11 -7 -6 -5 -12 -11 -11 -10 -6 -2 -6 -13 -3 -5 -9 -11 -7 -13 // Q -3 0 -2 -1 -11 8 2 -5 2 -6 -4 -2 -3 -10 -2 -4 -4 -10 -9 -5 -2 6 -3 -13 // E -1 -7 -1 3 -11 2 7 -3 -3 -4 -7 -3 -5 -11 -4 -3 -4 -13 -7 -5 2 6 -3 -13 // G -1 -7 -2 -2 -7 -5 -3 6 -7 -8 -9 -6 -7 -8 -4 -1 -4 -12 -11 -4 -2 -4 -4 -13 // H -5 0 1 -2 -6 2 -3 -7 9 -7 -5 -4 -8 -5 -3 -4 -5 -6 -2 -5 0 0 -4 -13 // I -3 -4 -4 -6 -5 -6 -4 -8 -7 8 0 -5 0 -1 -7 -5 -1 -11 -5 3 -5 -5 -3 -13 // L -5 -7 -6 -10 -12 -4 -7 -9 -5 0 6 -6 2 -1 -6 -7 -5 -5 -5 -1 -7 -5 -5 -13 // K -5 1 0 -3 -11 -2 -3 -6 -4 -5 -6 6 -1 -11 -5 -3 -2 -9 -8 -7 -1 -2 -4 -13 // M -4 -3 -6 -8 -11 -3 -5 -7 -8 0 2 -1 10 -3 -6 -4 -3 -10 -8 0 -7 -4 -4 -13 // F -7 -8 -7 -12 -10 -10 -11 -8 -5 -1 -1 -11 -3 9 -8 -5 -7 -3 3 -6 -9 -11 -6 -13 // P 0 -3 -4 -6 -6 -2 -4 -4 -3 -7 -6 -5 -6 -8 8 -1 -3 -11 -11 -4 -5 -3 -4 -13 // S 0 -2 1 -2 -2 -4 -3 -1 -4 -5 -7 -3 -4 -5 -1 6 1 -4 -5 -4 -1 -3 -2 -13 // T 0 -5 -1 -3 -6 -4 -4 -4 -5 -1 -5 -2 -3 -7 -3 1 6 -10 -5 -2 -2 -4 -2 -13 // W -11 -1 -7 -12 -13 -10 -13 -12 -6 -11 -5 -9 -10 -3 -11 -4 -10 13 -4 -12 -8 -11 -9 -13 // Y -6 -8 -3 -9 -3 -9 -7 -11 -2 -5 -5 -8 -8 3 -11 -5 -5 -4 9 -6 -5 -8 -6 -13 // V -1 -6 -6 -6 -5 -5 -5 -4 -5 3 -1 -7 0 -6 -4 -4 -2 -12 -6 7 -6 -5 -3 -13 // B -2 -5 5 6 -9 -2 2 -2 0 -5 -7 -1 -7 -9 -5 -1 -2 -8 -5 -6 5 1 -3 -13 // Z -2 -2 -1 2 -11 6 6 -4 0 -5 -5 -2 -4 -11 -3 -3 -4 -11 -8 -5 1 6 -3 -13 // X -2 -4 -2 -4 -7 -3 -3 -4 -4 -3 -5 -4 -4 -6 -4 -2 -2 -9 -6 -3 -3 -3 -4 -13 // * -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 -13 1 // PAM50 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 5, -2, -5, -2, -1, -7, -1, -5, -3, 0, -5, -5, -4, -2, 0, -3, -5, 0, 0, -1, -11, -2, -6, -2, -13}, /* B */ {0, -2, 5, -9, 6, 2, -9, -2, 0, -5, 0, -1, -7, -7, 5, -5, -2, -5, -1, -2, -6, -8, -3, -5, 1, -13}, /* C */ {0, -5, -9, 9, -11, -11, -10, -7, -6, -5, 0, -11, -12, -11, -8, -6, -11, -6, -2, -6, -5, -13, -7, -3, -11, -13}, /* D */ {0, -2, 6, -11, 7, 3, -12, -2, -2, -6, 0, -3, -10, -8, 2, -6, -1, -7, -2, -3, -6, -12, -4, -9, 2, -13}, /* E */ {0, -1, 2, -11, 3, 7, -11, -3, -3, -4, 0, -3, -7, -5, -1, -4, 2, -7, -3, -4, -5, -13, -3, -7, 6, -13}, /* F */ {0, -7, -9, -10, -12, -11, 9, -8, -5, -1, 0, -11, -1, -3, -7, -8, -10, -8, -5, -7, -6, -3, -6, 3, -11, -13}, /* G */ {0, -1, -2, -7, -2, -3, -8, 6, -7, -8, 0, -6, -9, -7, -2, -4, -5, -7, -1, -4, -4, -12, -4, -11, -4, -13}, /* H */ {0, -5, 0, -6, -2, -3, -5, -7, 9, -7, 0, -4, -5, -8, 1, -3, 2, 0, -4, -5, -5, -6, -4, -2, 0, -13}, /* I */ {0, -3, -5, -5, -6, -4, -1, -8, -7, 8, 0, -5, 0, 0, -4, -7, -6, -4, -5, -1, 3, -11, -3, -5, -5, -13}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -5, -1, -11, -3, -3, -11, -6, -4, -5, 0, 6, -6, -1, 0, -5, -2, 1, -3, -2, -7, -9, -4, -8, -2, -13}, /* L */ {0, -5, -7, -12, -10, -7, -1, -9, -5, 0, 0, -6, 6, 2, -6, -6, -4, -7, -7, -5, -1, -5, -5, -5, -5, -13}, /* M */ {0, -4, -7, -11, -8, -5, -3, -7, -8, 0, 0, -1, 2, 10, -6, -6, -3, -3, -4, -3, 0, -10, -4, -8, -4, -13}, /* N */ {0, -2, 5, -8, 2, -1, -7, -2, 1, -4, 0, 0, -6, -6, 7, -4, -2, -4, 1, -1, -6, -7, -2, -3, -1, -13}, /* P */ {0, 0, -5, -6, -6, -4, -8, -4, -3, -7, 0, -5, -6, -6, -4, 8, -2, -3, -1, -3, -4, -11, -4, -11, -3, -13}, /* Q */ {0, -3, -2, -11, -1, 2, -10, -5, 2, -6, 0, -2, -4, -3, -2, -2, 8, 0, -4, -4, -5, -10, -3, -9, 6, -13}, /* R */ {0, -5, -5, -6, -7, -7, -8, -7, 0, -4, 0, 1, -7, -3, -4, -3, 0, 8, -2, -5, -6, -1, -4, -8, -2, -13}, /* S */ {0, 0, -1, -2, -2, -3, -5, -1, -4, -5, 0, -3, -7, -4, 1, -1, -4, -2, 6, 1, -4, -4, -2, -5, -3, -13}, /* T */ {0, 0, -2, -6, -3, -4, -7, -4, -5, -1, 0, -2, -5, -3, -1, -3, -4, -5, 1, 6, -2, -10, -2, -5, -4, -13}, /* V */ {0, -1, -6, -5, -6, -5, -6, -4, -5, 3, 0, -7, -1, 0, -6, -4, -5, -6, -4, -2, 7, -12, -3, -6, -5, -13}, /* W */ {0, -11, -8, -13, -12, -13, -3, -12, -6, -11, 0, -9, -5, -10, -7, -11, -10, -1, -4, -10, -12, 13, -9, -4, -11, -13}, /* X */ {0, -2, -3, -7, -4, -3, -6, -4, -4, -3, 0, -4, -5, -4, -2, -4, -3, -4, -2, -2, -3, -9, -4, -6, -3, -13}, /* Y */ {0, -6, -5, -3, -9, -7, 3, -11, -2, -5, 0, -8, -5, -8, -3, -11, -9, -8, -5, -5, -6, -4, -6, 9, -8, -13}, /* Z */ {0, -2, 1, -11, 2, 6, -11, -4, 0, -5, 0, -2, -5, -4, -1, -3, 6, -2, -3, -4, -5, -11, -3, -8, 6, -13}, /* * */ {0, -13, -13, -13, -13, -13, -13, -13, -13, -13, 0, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 500 substitution matrix, scale = ln(2)/7 = 0.0990210 // # // # Expected score = -0.401, Entropy = 0.0803 bits // # // # Lowest score = -9, Highest score = 34 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 1 -1 0 1 -2 0 1 1 0 0 -1 0 -1 -3 1 1 1 -6 -3 0 1 0 0 -9 // R -1 5 1 0 -4 2 0 -1 2 -2 -2 4 0 -4 0 0 0 4 -4 -2 0 1 0 -9 // N 0 1 1 2 -3 1 1 1 1 -1 -2 1 -1 -4 0 1 0 -5 -3 -1 1 1 0 -9 // D 1 0 2 3 -5 2 3 1 1 -2 -3 1 -2 -5 0 1 0 -7 -5 -1 2 2 0 -9 // C -2 -4 -3 -5 22 -5 -5 -3 -4 -2 -6 -5 -5 -3 -2 0 -2 -9 2 -2 -4 -5 -2 -9 // Q 0 2 1 2 -5 2 2 0 2 -1 -2 1 -1 -4 1 0 0 -5 -4 -1 2 2 0 -9 // E 1 0 1 3 -5 2 3 1 1 -2 -3 1 -1 -5 0 1 0 -7 -5 -1 2 2 0 -9 // G 1 -1 1 1 -3 0 1 4 -1 -2 -3 0 -2 -5 1 1 1 -8 -5 -1 1 1 0 -9 // H 0 2 1 1 -4 2 1 -1 4 -2 -2 1 -1 -2 0 0 0 -2 0 -2 1 2 0 -9 // I 0 -2 -1 -2 -2 -1 -2 -2 -2 3 4 -2 3 2 -1 -1 0 -5 0 3 -2 -2 0 -9 // L -1 -2 -2 -3 -6 -2 -3 -3 -2 4 7 -2 4 4 -2 -2 -1 -1 1 3 -3 -2 -1 -9 // K 0 4 1 1 -5 1 1 0 1 -2 -2 4 0 -5 0 0 0 -3 -5 -2 1 1 0 -9 // M -1 0 -1 -2 -5 -1 -1 -2 -1 3 4 0 4 1 -1 -1 0 -4 -1 2 -1 -1 0 -9 // F -3 -4 -4 -5 -3 -4 -5 -5 -2 2 4 -5 1 13 -4 -3 -3 3 13 0 -4 -5 -2 -9 // P 1 0 0 0 -2 1 0 1 0 -1 -2 0 -1 -4 4 1 1 -6 -5 -1 0 1 0 -9 // S 1 0 1 1 0 0 1 1 0 -1 -2 0 -1 -3 1 1 1 -3 -3 -1 1 0 0 -9 // T 1 0 0 0 -2 0 0 1 0 0 -1 0 0 -3 1 1 1 -6 -3 0 0 0 0 -9 // W -6 4 -5 -7 -9 -5 -7 -8 -2 -5 -1 -3 -4 3 -6 -3 -6 34 2 -6 -6 -6 -4 -9 // Y -3 -4 -3 -5 2 -4 -5 -5 0 0 1 -5 -1 13 -5 -3 -3 2 15 -1 -4 -4 -2 -9 // V 0 -2 -1 -1 -2 -1 -1 -1 -2 3 3 -2 2 0 -1 -1 0 -6 -1 3 -1 -1 0 -9 // B 1 0 1 2 -4 2 2 1 1 -2 -3 1 -1 -4 0 1 0 -6 -4 -1 2 2 0 -9 // Z 0 1 1 2 -5 2 2 1 2 -2 -2 1 -1 -5 1 0 0 -6 -4 -1 2 2 0 -9 // X 0 0 0 0 -2 0 0 0 0 0 -1 0 0 -2 0 0 0 -4 -2 0 0 0 0 -9 // * -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 1 // PAM500 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 1, 1, -2, 1, 1, -3, 1, 0, 0, 0, 0, -1, -1, 0, 1, 0, -1, 1, 1, 0, -6, 0, -3, 0, -9}, /* B */ {0, 1, 2, -4, 2, 2, -4, 1, 1, -2, 0, 1, -3, -1, 1, 0, 2, 0, 1, 0, -1, -6, 0, -4, 2, -9}, /* C */ {0, -2, -4, 22, -5, -5, -3, -3, -4, -2, 0, -5, -6, -5, -3, -2, -5, -4, 0, -2, -2, -9, -2, 2, -5, -9}, /* D */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -2, 2, 0, 2, 0, 1, 0, -1, -7, 0, -5, 2, -9}, /* E */ {0, 1, 2, -5, 3, 3, -5, 1, 1, -2, 0, 1, -3, -1, 1, 0, 2, 0, 1, 0, -1, -7, 0, -5, 2, -9}, /* F */ {0, -3, -4, -3, -5, -5, 13, -5, -2, 2, 0, -5, 4, 1, -4, -4, -4, -4, -3, -3, 0, 3, -2, 13, -5, -9}, /* G */ {0, 1, 1, -3, 1, 1, -5, 4, -1, -2, 0, 0, -3, -2, 1, 1, 0, -1, 1, 1, -1, -8, 0, -5, 1, -9}, /* H */ {0, 0, 1, -4, 1, 1, -2, -1, 4, -2, 0, 1, -2, -1, 1, 0, 2, 2, 0, 0, -2, -2, 0, 0, 2, -9}, /* I */ {0, 0, -2, -2, -2, -2, 2, -2, -2, 3, 0, -2, 4, 3, -1, -1, -1, -2, -1, 0, 3, -5, 0, 0, -2, -9}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, 0, 1, -5, 1, 1, -5, 0, 1, -2, 0, 4, -2, 0, 1, 0, 1, 4, 0, 0, -2, -3, 0, -5, 1, -9}, /* L */ {0, -1, -3, -6, -3, -3, 4, -3, -2, 4, 0, -2, 7, 4, -2, -2, -2, -2, -2, -1, 3, -1, -1, 1, -2, -9}, /* M */ {0, -1, -1, -5, -2, -1, 1, -2, -1, 3, 0, 0, 4, 4, -1, -1, -1, 0, -1, 0, 2, -4, 0, -1, -1, -9}, /* N */ {0, 0, 1, -3, 2, 1, -4, 1, 1, -1, 0, 1, -2, -1, 1, 0, 1, 1, 1, 0, -1, -5, 0, -3, 1, -9}, /* P */ {0, 1, 0, -2, 0, 0, -4, 1, 0, -1, 0, 0, -2, -1, 0, 4, 1, 0, 1, 1, -1, -6, 0, -5, 1, -9}, /* Q */ {0, 0, 2, -5, 2, 2, -4, 0, 2, -1, 0, 1, -2, -1, 1, 1, 2, 2, 0, 0, -1, -5, 0, -4, 2, -9}, /* R */ {0, -1, 0, -4, 0, 0, -4, -1, 2, -2, 0, 4, -2, 0, 1, 0, 2, 5, 0, 0, -2, 4, 0, -4, 1, -9}, /* S */ {0, 1, 1, 0, 1, 1, -3, 1, 0, -1, 0, 0, -2, -1, 1, 1, 0, 0, 1, 1, -1, -3, 0, -3, 0, -9}, /* T */ {0, 1, 0, -2, 0, 0, -3, 1, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 1, 0, -6, 0, -3, 0, -9}, /* V */ {0, 0, -1, -2, -1, -1, 0, -1, -2, 3, 0, -2, 3, 2, -1, -1, -1, -2, -1, 0, 3, -6, 0, -1, -1, -9}, /* W */ {0, -6, -6, -9, -7, -7, 3, -8, -2, -5, 0, -3, -1, -4, -5, -6, -5, 4, -3, -6, -6, 34, -4, 2, -6, -9}, /* X */ {0, 0, 0, -2, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, -2, 0, -9}, /* Y */ {0, -3, -4, 2, -5, -5, 13, -5, 0, 0, 0, -5, 1, -1, -3, -5, -4, -4, -3, -3, -1, 2, -2, 15, -4, -9}, /* Z */ {0, 0, 2, -5, 2, 2, -5, 1, 2, -2, 0, 1, -2, -1, 1, 1, 2, 1, 0, 0, -1, -6, 0, -4, 2, -9}, /* * */ {0, -9, -9, -9, -9, -9, -9, -9, -9, -9, 0, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 60 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -3.21, Entropy = 1.79 bits // # // # Lowest score = -12, Highest score = 13 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 5 -5 -2 -2 -5 -3 -1 0 -5 -3 -4 -5 -3 -6 0 1 1 -10 -6 -1 -2 -2 -2 -12 // R -5 8 -3 -6 -6 0 -6 -7 0 -4 -6 2 -2 -7 -2 -2 -4 0 -8 -5 -5 -2 -4 -12 // N -2 -3 6 2 -7 -2 0 -1 1 -4 -5 0 -6 -6 -4 1 -1 -6 -3 -5 5 -1 -2 -12 // D -2 -6 2 7 -10 -1 3 -2 -2 -5 -9 -2 -7 -11 -5 -2 -3 -11 -8 -6 5 2 -3 -12 // C -5 -6 -7 -10 9 -10 -10 -7 -6 -4 -11 -10 -10 -9 -6 -1 -5 -12 -2 -4 -9 -10 -6 -12 // Q -3 0 -2 -1 -10 7 2 -5 2 -5 -3 -1 -2 -9 -1 -3 -4 -9 -8 -5 -1 6 -3 -12 // E -1 -6 0 3 -10 2 7 -2 -3 -4 -7 -3 -5 -10 -3 -2 -4 -12 -7 -4 2 5 -3 -12 // G 0 -7 -1 -2 -7 -5 -2 6 -6 -7 -8 -5 -6 -7 -4 0 -3 -11 -10 -4 -2 -3 -3 -12 // H -5 0 1 -2 -6 2 -3 -6 8 -6 -4 -4 -7 -4 -2 -4 -5 -5 -2 -5 0 0 -3 -12 // I -3 -4 -4 -5 -4 -5 -4 -7 -6 7 0 -4 1 -1 -6 -4 -1 -10 -4 3 -4 -4 -3 -12 // L -4 -6 -5 -9 -11 -3 -7 -8 -4 0 6 -6 2 -1 -5 -6 -5 -4 -5 -1 -7 -5 -4 -12 // K -5 2 0 -2 -10 -1 -3 -5 -4 -4 -6 6 0 -10 -4 -2 -2 -8 -7 -6 -1 -2 -3 -12 // M -3 -2 -6 -7 -10 -2 -5 -6 -7 1 2 0 10 -2 -6 -4 -2 -9 -7 0 -6 -4 -3 -12 // F -6 -7 -6 -11 -9 -9 -10 -7 -4 -1 -1 -10 -2 8 -7 -5 -6 -3 3 -5 -8 -10 -5 -12 // P 0 -2 -4 -5 -6 -1 -3 -4 -2 -6 -5 -4 -6 -7 7 0 -2 -10 -10 -4 -4 -2 -3 -12 // S 1 -2 1 -2 -1 -3 -2 0 -4 -4 -6 -2 -4 -5 0 5 1 -4 -5 -4 0 -3 -2 -12 // T 1 -4 -1 -3 -5 -4 -4 -3 -5 -1 -5 -2 -2 -6 -2 1 6 -9 -5 -1 -2 -4 -2 -12 // W -10 0 -6 -11 -12 -9 -12 -11 -5 -10 -4 -8 -9 -3 -10 -4 -9 13 -3 -11 -8 -11 -8 -12 // Y -6 -8 -3 -8 -2 -8 -7 -10 -2 -4 -5 -7 -7 3 -10 -5 -5 -3 9 -5 -5 -7 -5 -12 // V -1 -5 -5 -6 -4 -5 -4 -4 -5 3 -1 -6 0 -5 -4 -4 -1 -11 -5 6 -5 -5 -3 -12 // B -2 -5 5 5 -9 -1 2 -2 0 -4 -7 -1 -6 -8 -4 0 -2 -8 -5 -5 5 1 -3 -12 // Z -2 -2 -1 2 -10 6 5 -3 0 -4 -5 -2 -4 -10 -2 -3 -4 -11 -7 -5 1 5 -3 -12 // X -2 -4 -2 -3 -6 -3 -3 -3 -3 -3 -4 -3 -3 -5 -3 -2 -2 -8 -5 -3 -3 -3 -3 -12 // * -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12 1 // PAM60 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 5, -2, -5, -2, -1, -6, 0, -5, -3, 0, -5, -4, -3, -2, 0, -3, -5, 1, 1, -1, -10, -2, -6, -2, -12}, /* B */ {0, -2, 5, -9, 5, 2, -8, -2, 0, -4, 0, -1, -7, -6, 5, -4, -1, -5, 0, -2, -5, -8, -3, -5, 1, -12}, /* C */ {0, -5, -9, 9, -10, -10, -9, -7, -6, -4, 0, -10, -11, -10, -7, -6, -10, -6, -1, -5, -4, -12, -6, -2, -10, -12}, /* D */ {0, -2, 5, -10, 7, 3, -11, -2, -2, -5, 0, -2, -9, -7, 2, -5, -1, -6, -2, -3, -6, -11, -3, -8, 2, -12}, /* E */ {0, -1, 2, -10, 3, 7, -10, -2, -3, -4, 0, -3, -7, -5, 0, -3, 2, -6, -2, -4, -4, -12, -3, -7, 5, -12}, /* F */ {0, -6, -8, -9, -11, -10, 8, -7, -4, -1, 0, -10, -1, -2, -6, -7, -9, -7, -5, -6, -5, -3, -5, 3, -10, -12}, /* G */ {0, 0, -2, -7, -2, -2, -7, 6, -6, -7, 0, -5, -8, -6, -1, -4, -5, -7, 0, -3, -4, -11, -3, -10, -3, -12}, /* H */ {0, -5, 0, -6, -2, -3, -4, -6, 8, -6, 0, -4, -4, -7, 1, -2, 2, 0, -4, -5, -5, -5, -3, -2, 0, -12}, /* I */ {0, -3, -4, -4, -5, -4, -1, -7, -6, 7, 0, -4, 0, 1, -4, -6, -5, -4, -4, -1, 3, -10, -3, -4, -4, -12}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -5, -1, -10, -2, -3, -10, -5, -4, -4, 0, 6, -6, 0, 0, -4, -1, 2, -2, -2, -6, -8, -3, -7, -2, -12}, /* L */ {0, -4, -7, -11, -9, -7, -1, -8, -4, 0, 0, -6, 6, 2, -5, -5, -3, -6, -6, -5, -1, -4, -4, -5, -5, -12}, /* M */ {0, -3, -6, -10, -7, -5, -2, -6, -7, 1, 0, 0, 2, 10, -6, -6, -2, -2, -4, -2, 0, -9, -3, -7, -4, -12}, /* N */ {0, -2, 5, -7, 2, 0, -6, -1, 1, -4, 0, 0, -5, -6, 6, -4, -2, -3, 1, -1, -5, -6, -2, -3, -1, -12}, /* P */ {0, 0, -4, -6, -5, -3, -7, -4, -2, -6, 0, -4, -5, -6, -4, 7, -1, -2, 0, -2, -4, -10, -3, -10, -2, -12}, /* Q */ {0, -3, -1, -10, -1, 2, -9, -5, 2, -5, 0, -1, -3, -2, -2, -1, 7, 0, -3, -4, -5, -9, -3, -8, 6, -12}, /* R */ {0, -5, -5, -6, -6, -6, -7, -7, 0, -4, 0, 2, -6, -2, -3, -2, 0, 8, -2, -4, -5, 0, -4, -8, -2, -12}, /* S */ {0, 1, 0, -1, -2, -2, -5, 0, -4, -4, 0, -2, -6, -4, 1, 0, -3, -2, 5, 1, -4, -4, -2, -5, -3, -12}, /* T */ {0, 1, -2, -5, -3, -4, -6, -3, -5, -1, 0, -2, -5, -2, -1, -2, -4, -4, 1, 6, -1, -9, -2, -5, -4, -12}, /* V */ {0, -1, -5, -4, -6, -4, -5, -4, -5, 3, 0, -6, -1, 0, -5, -4, -5, -5, -4, -1, 6, -11, -3, -5, -5, -12}, /* W */ {0, -10, -8, -12, -11, -12, -3, -11, -5, -10, 0, -8, -4, -9, -6, -10, -9, 0, -4, -9, -11, 13, -8, -3, -11, -12}, /* X */ {0, -2, -3, -6, -3, -3, -5, -3, -3, -3, 0, -3, -4, -3, -2, -3, -3, -4, -2, -2, -3, -8, -3, -5, -3, -12}, /* Y */ {0, -6, -5, -2, -8, -7, 3, -10, -2, -4, 0, -7, -5, -7, -3, -10, -8, -8, -5, -5, -5, -3, -5, 9, -7, -12}, /* Z */ {0, -2, 1, -10, 2, 5, -10, -3, 0, -4, 0, -2, -5, -4, -1, -2, 6, -2, -3, -4, -5, -11, -3, -7, 5, -12}, /* * */ {0, -12, -12, -12, -12, -12, -12, -12, -12, -12, 0, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 70 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -2.77, Entropy = 1.60 bits // # // # Lowest score = -11, Highest score = 13 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 5 -4 -2 -1 -4 -2 -1 0 -4 -2 -4 -4 -3 -6 0 1 1 -9 -5 -1 -1 -1 -2 -11 // R -4 8 -3 -6 -5 0 -5 -6 0 -3 -6 2 -2 -7 -2 -1 -4 0 -7 -5 -4 -2 -3 -11 // N -2 -3 6 3 -7 -1 0 -1 1 -3 -5 0 -5 -6 -3 1 0 -6 -3 -5 5 -1 -2 -11 // D -1 -6 3 6 -9 0 3 -1 -1 -5 -8 -2 -7 -10 -4 -1 -2 -10 -7 -5 5 2 -3 -11 // C -4 -5 -7 -9 9 -9 -9 -6 -5 -4 -10 -9 -9 -8 -5 -1 -5 -11 -2 -4 -8 -9 -6 -11 // Q -2 0 -1 0 -9 7 2 -4 2 -5 -3 -1 -2 -9 -1 -3 -3 -8 -8 -4 -1 5 -2 -11 // E -1 -5 0 3 -9 2 6 -2 -2 -4 -6 -2 -4 -9 -3 -2 -3 -11 -6 -4 2 5 -3 -11 // G 0 -6 -1 -1 -6 -4 -2 6 -6 -6 -7 -5 -6 -7 -3 0 -3 -10 -9 -3 -1 -3 -3 -11 // H -4 0 1 -1 -5 2 -2 -6 8 -6 -4 -3 -6 -4 -2 -3 -4 -5 -1 -4 0 1 -3 -11 // I -2 -3 -3 -5 -4 -5 -4 -6 -6 7 1 -4 1 0 -5 -4 -1 -9 -4 3 -4 -4 -3 -11 // L -4 -6 -5 -8 -10 -3 -6 -7 -4 1 6 -5 2 -1 -5 -6 -4 -4 -4 0 -6 -4 -4 -11 // K -4 2 0 -2 -9 -1 -2 -5 -3 -4 -5 6 0 -9 -4 -2 -1 -7 -7 -6 -1 -2 -3 -11 // M -3 -2 -5 -7 -9 -2 -4 -6 -6 1 2 0 10 -2 -5 -3 -2 -8 -7 0 -6 -3 -3 -11 // F -6 -7 -6 -10 -8 -9 -9 -7 -4 0 -1 -9 -2 8 -7 -4 -6 -2 4 -5 -7 -9 -5 -11 // P 0 -2 -3 -4 -5 -1 -3 -3 -2 -5 -5 -4 -5 -7 7 0 -2 -9 -9 -3 -4 -2 -3 -11 // S 1 -1 1 -1 -1 -3 -2 0 -3 -4 -6 -2 -3 -4 0 5 2 -3 -5 -3 0 -2 -1 -11 // T 1 -4 0 -2 -5 -3 -3 -3 -4 -1 -4 -1 -2 -6 -2 2 6 -8 -4 -1 -1 -3 -2 -11 // W -9 0 -6 -10 -11 -8 -11 -10 -5 -9 -4 -7 -8 -2 -9 -3 -8 13 -3 -10 -7 -10 -7 -11 // Y -5 -7 -3 -7 -2 -8 -6 -9 -1 -4 -4 -7 -7 4 -9 -5 -4 -3 9 -5 -4 -7 -5 -11 // V -1 -5 -5 -5 -4 -4 -4 -3 -4 3 0 -6 0 -5 -3 -3 -1 -10 -5 6 -5 -4 -2 -11 // B -1 -4 5 5 -8 -1 2 -1 0 -4 -6 -1 -6 -7 -4 0 -1 -7 -4 -5 5 1 -2 -11 // Z -1 -2 -1 2 -9 5 5 -3 1 -4 -4 -2 -3 -9 -2 -2 -3 -10 -7 -4 1 5 -3 -11 // X -2 -3 -2 -3 -6 -2 -3 -3 -3 -3 -4 -3 -3 -5 -3 -1 -2 -7 -5 -2 -2 -3 -3 -11 // * -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 1 // PAM70 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 5, -1, -4, -1, -1, -6, 0, -4, -2, 0, -4, -4, -3, -2, 0, -2, -4, 1, 1, -1, -9, -2, -5, -1, -11}, /* B */ {0, -1, 5, -8, 5, 2, -7, -1, 0, -4, 0, -1, -6, -6, 5, -4, -1, -4, 0, -1, -5, -7, -2, -4, 1, -11}, /* C */ {0, -4, -8, 9, -9, -9, -8, -6, -5, -4, 0, -9, -10, -9, -7, -5, -9, -5, -1, -5, -4, -11, -6, -2, -9, -11}, /* D */ {0, -1, 5, -9, 6, 3, -10, -1, -1, -5, 0, -2, -8, -7, 3, -4, 0, -6, -1, -2, -5, -10, -3, -7, 2, -11}, /* E */ {0, -1, 2, -9, 3, 6, -9, -2, -2, -4, 0, -2, -6, -4, 0, -3, 2, -5, -2, -3, -4, -11, -3, -6, 5, -11}, /* F */ {0, -6, -7, -8, -10, -9, 8, -7, -4, 0, 0, -9, -1, -2, -6, -7, -9, -7, -4, -6, -5, -2, -5, 4, -9, -11}, /* G */ {0, 0, -1, -6, -1, -2, -7, 6, -6, -6, 0, -5, -7, -6, -1, -3, -4, -6, 0, -3, -3, -10, -3, -9, -3, -11}, /* H */ {0, -4, 0, -5, -1, -2, -4, -6, 8, -6, 0, -3, -4, -6, 1, -2, 2, 0, -3, -4, -4, -5, -3, -1, 1, -11}, /* I */ {0, -2, -4, -4, -5, -4, 0, -6, -6, 7, 0, -4, 1, 1, -3, -5, -5, -3, -4, -1, 3, -9, -3, -4, -4, -11}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -4, -1, -9, -2, -2, -9, -5, -3, -4, 0, 6, -5, 0, 0, -4, -1, 2, -2, -1, -6, -7, -3, -7, -2, -11}, /* L */ {0, -4, -6, -10, -8, -6, -1, -7, -4, 1, 0, -5, 6, 2, -5, -5, -3, -6, -6, -4, 0, -4, -4, -4, -4, -11}, /* M */ {0, -3, -6, -9, -7, -4, -2, -6, -6, 1, 0, 0, 2, 10, -5, -5, -2, -2, -3, -2, 0, -8, -3, -7, -3, -11}, /* N */ {0, -2, 5, -7, 3, 0, -6, -1, 1, -3, 0, 0, -5, -5, 6, -3, -1, -3, 1, 0, -5, -6, -2, -3, -1, -11}, /* P */ {0, 0, -4, -5, -4, -3, -7, -3, -2, -5, 0, -4, -5, -5, -3, 7, -1, -2, 0, -2, -3, -9, -3, -9, -2, -11}, /* Q */ {0, -2, -1, -9, 0, 2, -9, -4, 2, -5, 0, -1, -3, -2, -1, -1, 7, 0, -3, -3, -4, -8, -2, -8, 5, -11}, /* R */ {0, -4, -4, -5, -6, -5, -7, -6, 0, -3, 0, 2, -6, -2, -3, -2, 0, 8, -1, -4, -5, 0, -3, -7, -2, -11}, /* S */ {0, 1, 0, -1, -1, -2, -4, 0, -3, -4, 0, -2, -6, -3, 1, 0, -3, -1, 5, 2, -3, -3, -1, -5, -2, -11}, /* T */ {0, 1, -1, -5, -2, -3, -6, -3, -4, -1, 0, -1, -4, -2, 0, -2, -3, -4, 2, 6, -1, -8, -2, -4, -3, -11}, /* V */ {0, -1, -5, -4, -5, -4, -5, -3, -4, 3, 0, -6, 0, 0, -5, -3, -4, -5, -3, -1, 6, -10, -2, -5, -4, -11}, /* W */ {0, -9, -7, -11, -10, -11, -2, -10, -5, -9, 0, -7, -4, -8, -6, -9, -8, 0, -3, -8, -10, 13, -7, -3, -10, -11}, /* X */ {0, -2, -2, -6, -3, -3, -5, -3, -3, -3, 0, -3, -4, -3, -2, -3, -2, -3, -1, -2, -2, -7, -3, -5, -3, -11}, /* Y */ {0, -5, -4, -2, -7, -6, 4, -9, -1, -4, 0, -7, -4, -7, -3, -9, -8, -7, -5, -4, -5, -3, -5, 9, -7, -11}, /* Z */ {0, -1, 1, -9, 2, 5, -9, -3, 1, -4, 0, -2, -4, -3, -1, -2, 5, -2, -2, -3, -4, -10, -3, -7, 5, -11}, /* * */ {0, -11, -11, -11, -11, -11, -11, -11, -11, -11, 0, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 80 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -2.55, Entropy = 1.44 bits // # // # Lowest score = -11, Highest score = 13 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 4 -4 -1 -1 -4 -2 -1 0 -4 -2 -4 -4 -3 -5 0 1 1 -8 -5 0 -1 -1 -1 -11 // R -4 7 -2 -5 -5 0 -4 -6 0 -3 -5 2 -2 -6 -2 -1 -3 0 -7 -5 -3 -1 -3 -11 // N -1 -2 5 3 -6 -1 0 -1 2 -3 -5 0 -4 -5 -3 1 0 -5 -3 -4 4 0 -1 -11 // D -1 -5 3 6 -9 0 4 -1 -1 -4 -7 -2 -6 -9 -4 -1 -2 -10 -7 -5 5 2 -3 -11 // C -4 -5 -6 -9 9 -9 -9 -6 -5 -4 -9 -9 -8 -8 -5 -1 -4 -10 -2 -3 -7 -9 -5 -11 // Q -2 0 -1 0 -9 7 2 -4 2 -4 -3 -1 -2 -8 -1 -3 -3 -8 -7 -4 0 5 -2 -11 // E -1 -4 0 4 -9 2 6 -2 -2 -3 -6 -2 -4 -9 -3 -2 -3 -11 -6 -4 2 5 -2 -11 // G 0 -6 -1 -1 -6 -4 -2 6 -5 -6 -7 -4 -5 -6 -3 0 -2 -10 -8 -3 -1 -2 -3 -11 // H -4 0 2 -1 -5 2 -2 -5 8 -5 -4 -3 -5 -3 -2 -3 -4 -4 -1 -4 0 1 -2 -11 // I -2 -3 -3 -4 -4 -4 -3 -6 -5 7 1 -4 1 0 -5 -4 -1 -8 -3 3 -4 -4 -2 -11 // L -4 -5 -5 -7 -9 -3 -6 -7 -4 1 6 -5 2 0 -4 -5 -4 -3 -4 0 -6 -4 -3 -11 // K -4 2 0 -2 -9 -1 -2 -4 -3 -4 -5 6 0 -9 -4 -2 -1 -7 -6 -5 -1 -1 -3 -11 // M -3 -2 -4 -6 -8 -2 -4 -5 -5 1 2 0 9 -2 -5 -3 -2 -7 -6 1 -5 -3 -2 -11 // F -5 -6 -5 -9 -8 -8 -9 -6 -3 0 0 -9 -2 8 -7 -4 -5 -2 4 -4 -7 -8 -5 -11 // P 0 -2 -3 -4 -5 -1 -3 -3 -2 -5 -4 -4 -5 -7 7 0 -2 -9 -8 -3 -3 -2 -2 -11 // S 1 -1 1 -1 -1 -3 -2 0 -3 -4 -5 -2 -3 -4 0 4 2 -3 -4 -3 0 -2 -1 -11 // T 1 -3 0 -2 -4 -3 -3 -2 -4 -1 -4 -1 -2 -5 -2 2 5 -8 -4 -1 -1 -3 -1 -11 // W -8 0 -5 -10 -10 -8 -11 -10 -4 -8 -3 -7 -7 -2 -9 -3 -8 13 -2 -10 -7 -9 -7 -11 // Y -5 -7 -3 -7 -2 -7 -6 -8 -1 -3 -4 -6 -6 4 -8 -4 -4 -2 9 -5 -4 -6 -4 -11 // V 0 -5 -4 -5 -3 -4 -4 -3 -4 3 0 -5 1 -4 -3 -3 -1 -10 -5 6 -4 -4 -2 -11 // B -1 -3 4 5 -7 0 2 -1 0 -4 -6 -1 -5 -7 -3 0 -1 -7 -4 -4 5 2 -2 -11 // Z -1 -1 0 2 -9 5 5 -2 1 -4 -4 -1 -3 -8 -2 -2 -3 -9 -6 -4 2 5 -2 -11 // X -1 -3 -1 -3 -5 -2 -2 -3 -2 -2 -3 -3 -2 -5 -2 -1 -1 -7 -4 -2 -2 -2 -3 -11 // * -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 -11 1 // PAM80 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 4, -1, -4, -1, -1, -5, 0, -4, -2, 0, -4, -4, -3, -1, 0, -2, -4, 1, 1, 0, -8, -1, -5, -1, -11}, /* B */ {0, -1, 5, -7, 5, 2, -7, -1, 0, -4, 0, -1, -6, -5, 4, -3, 0, -3, 0, -1, -4, -7, -2, -4, 2, -11}, /* C */ {0, -4, -7, 9, -9, -9, -8, -6, -5, -4, 0, -9, -9, -8, -6, -5, -9, -5, -1, -4, -3, -10, -5, -2, -9, -11}, /* D */ {0, -1, 5, -9, 6, 4, -9, -1, -1, -4, 0, -2, -7, -6, 3, -4, 0, -5, -1, -2, -5, -10, -3, -7, 2, -11}, /* E */ {0, -1, 2, -9, 4, 6, -9, -2, -2, -3, 0, -2, -6, -4, 0, -3, 2, -4, -2, -3, -4, -11, -2, -6, 5, -11}, /* F */ {0, -5, -7, -8, -9, -9, 8, -6, -3, 0, 0, -9, 0, -2, -5, -7, -8, -6, -4, -5, -4, -2, -5, 4, -8, -11}, /* G */ {0, 0, -1, -6, -1, -2, -6, 6, -5, -6, 0, -4, -7, -5, -1, -3, -4, -6, 0, -2, -3, -10, -3, -8, -2, -11}, /* H */ {0, -4, 0, -5, -1, -2, -3, -5, 8, -5, 0, -3, -4, -5, 2, -2, 2, 0, -3, -4, -4, -4, -2, -1, 1, -11}, /* I */ {0, -2, -4, -4, -4, -3, 0, -6, -5, 7, 0, -4, 1, 1, -3, -5, -4, -3, -4, -1, 3, -8, -2, -3, -4, -11}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -4, -1, -9, -2, -2, -9, -4, -3, -4, 0, 6, -5, 0, 0, -4, -1, 2, -2, -1, -5, -7, -3, -6, -1, -11}, /* L */ {0, -4, -6, -9, -7, -6, 0, -7, -4, 1, 0, -5, 6, 2, -5, -4, -3, -5, -5, -4, 0, -3, -3, -4, -4, -11}, /* M */ {0, -3, -5, -8, -6, -4, -2, -5, -5, 1, 0, 0, 2, 9, -4, -5, -2, -2, -3, -2, 1, -7, -2, -6, -3, -11}, /* N */ {0, -1, 4, -6, 3, 0, -5, -1, 2, -3, 0, 0, -5, -4, 5, -3, -1, -2, 1, 0, -4, -5, -1, -3, 0, -11}, /* P */ {0, 0, -3, -5, -4, -3, -7, -3, -2, -5, 0, -4, -4, -5, -3, 7, -1, -2, 0, -2, -3, -9, -2, -8, -2, -11}, /* Q */ {0, -2, 0, -9, 0, 2, -8, -4, 2, -4, 0, -1, -3, -2, -1, -1, 7, 0, -3, -3, -4, -8, -2, -7, 5, -11}, /* R */ {0, -4, -3, -5, -5, -4, -6, -6, 0, -3, 0, 2, -5, -2, -2, -2, 0, 7, -1, -3, -5, 0, -3, -7, -1, -11}, /* S */ {0, 1, 0, -1, -1, -2, -4, 0, -3, -4, 0, -2, -5, -3, 1, 0, -3, -1, 4, 2, -3, -3, -1, -4, -2, -11}, /* T */ {0, 1, -1, -4, -2, -3, -5, -2, -4, -1, 0, -1, -4, -2, 0, -2, -3, -3, 2, 5, -1, -8, -1, -4, -3, -11}, /* V */ {0, 0, -4, -3, -5, -4, -4, -3, -4, 3, 0, -5, 0, 1, -4, -3, -4, -5, -3, -1, 6, -10, -2, -5, -4, -11}, /* W */ {0, -8, -7, -10, -10, -11, -2, -10, -4, -8, 0, -7, -3, -7, -5, -9, -8, 0, -3, -8, -10, 13, -7, -2, -9, -11}, /* X */ {0, -1, -2, -5, -3, -2, -5, -3, -2, -2, 0, -3, -3, -2, -1, -2, -2, -3, -1, -1, -2, -7, -3, -4, -2, -11}, /* Y */ {0, -5, -4, -2, -7, -6, 4, -8, -1, -3, 0, -6, -4, -6, -3, -8, -7, -7, -4, -4, -5, -2, -4, 9, -6, -11}, /* Z */ {0, -1, 2, -9, 2, 5, -8, -2, 1, -4, 0, -1, -4, -3, 0, -2, 5, -1, -2, -3, -4, -9, -2, -6, 5, -11}, /* * */ {0, -11, -11, -11, -11, -11, -11, -11, -11, -11, 0, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 80 substitution matrix, scale = 0.0693200 // # // # Expected score = -12.6, Entropy = 1.44 bits // # // # Lowest score = -53, Highest score = 63 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 21 -19 -6 -6 -19 -10 -3 1 -20 -10 -18 -18 -13 -27 1 5 5 -42 -25 -2 -6 -5 -6 -53 // R -19 37 -12 -25 -26 1 -22 -28 2 -16 -26 10 -9 -31 -8 -6 -16 1 -33 -23 -17 -7 -14 -53 // N -6 -12 27 13 -31 -5 1 -5 8 -15 -23 2 -22 -27 -14 5 -1 -27 -13 -21 21 -1 -7 -53 // D -6 -25 13 30 -43 0 18 -5 -6 -22 -37 -9 -30 -45 -20 -6 -10 -49 -34 -23 24 12 -13 -53 // C -19 -26 -31 -43 46 -43 -43 -29 -24 -19 -47 -44 -42 -39 -24 -5 -22 -52 -8 -17 -36 -43 -27 -53 // Q -10 1 -5 0 -43 34 12 -19 12 -22 -14 -4 -9 -39 -4 -13 -14 -39 -35 -19 -2 25 -10 -53 // E -3 -22 1 18 -43 12 30 -9 -9 -17 -29 -10 -21 -44 -14 -9 -14 -53 -29 -18 12 24 -11 -53 // G 1 -28 -5 -5 -29 -19 -9 28 -25 -29 -34 -21 -26 -31 -15 0 -12 -49 -42 -15 -5 -12 -13 -53 // H -20 2 8 -6 -24 12 -9 -25 39 -26 -18 -14 -27 -17 -9 -14 -19 -22 -6 -19 2 4 -12 -53 // I -10 -16 -15 -22 -19 -22 -17 -29 -26 34 4 -18 5 -1 -24 -18 -3 -42 -16 16 -18 -19 -11 -53 // L -18 -26 -23 -37 -47 -14 -29 -34 -18 4 30 -25 12 -1 -22 -25 -19 -17 -19 0 -29 -20 -16 -53 // K -18 10 2 -9 -44 -4 -10 -21 -14 -18 -25 28 0 -43 -18 -8 -6 -33 -31 -26 -3 -7 -13 -53 // M -13 -9 -22 -30 -42 -9 -21 -26 -27 5 12 0 47 -8 -23 -15 -9 -37 -30 3 -26 -15 -12 -53 // F -27 -31 -27 -45 -39 -39 -44 -31 -17 -1 -1 -43 -8 41 -33 -21 -26 -10 19 -20 -34 -42 -23 -53 // P 1 -8 -14 -20 -24 -4 -14 -15 -9 -24 -22 -18 -23 -33 35 1 -8 -43 -41 -15 -17 -9 -12 -53 // S 5 -6 5 -6 -5 -13 -9 0 -14 -18 -25 -8 -15 -21 1 22 8 -15 -21 -15 0 -10 -6 -53 // T 5 -16 -1 -10 -22 -14 -14 -12 -19 -3 -19 -6 -9 -26 -8 8 27 -39 -20 -4 -5 -14 -7 -53 // W -42 1 -27 -49 -52 -39 -53 -49 -22 -42 -17 -33 -37 -10 -43 -15 -39 63 -12 -49 -35 -45 -33 -53 // Y -25 -33 -13 -34 -8 -35 -29 -42 -6 -16 -19 -31 -30 19 -41 -21 -20 -12 45 -23 -20 -31 -22 -53 // V -2 -23 -21 -23 -17 -19 -18 -15 -19 16 0 -26 3 -20 -15 -15 -4 -49 -23 29 -22 -19 -11 -53 // B -6 -17 21 24 -36 -2 12 -5 2 -18 -29 -3 -26 -34 -17 0 -5 -35 -20 -22 23 8 -10 -53 // Z -5 -7 -1 12 -43 25 24 -12 4 -19 -20 -7 -15 -42 -9 -10 -14 -45 -31 -19 8 25 -11 -53 // X -6 -14 -7 -13 -27 -10 -11 -13 -12 -11 -16 -13 -12 -23 -12 -6 -7 -33 -22 -11 -10 -11 -13 -53 // * -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 -53 1 // PAM80_cdi = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 21, -6, -19, -6, -3, -27, 1, -20, -10, 0, -18, -18, -13, -6, 1, -10, -19, 5, 5, -2, -42, -6, -25, -5, -53}, /* B */ {0, -6, 23, -36, 24, 12, -34, -5, 2, -18, 0, -3, -29, -26, 21, -17, -2, -17, 0, -5, -22, -35, -10, -20, 8, -53}, /* C */ {0, -19, -36, 46, -43, -43, -39, -29, -24, -19, 0, -44, -47, -42, -31, -24, -43, -26, -5, -22, -17, -52, -27, -8, -43, -53}, /* D */ {0, -6, 24, -43, 30, 18, -45, -5, -6, -22, 0, -9, -37, -30, 13, -20, 0, -25, -6, -10, -23, -49, -13, -34, 12, -53}, /* E */ {0, -3, 12, -43, 18, 30, -44, -9, -9, -17, 0, -10, -29, -21, 1, -14, 12, -22, -9, -14, -18, -53, -11, -29, 24, -53}, /* F */ {0, -27, -34, -39, -45, -44, 41, -31, -17, -1, 0, -43, -1, -8, -27, -33, -39, -31, -21, -26, -20, -10, -23, 19, -42, -53}, /* G */ {0, 1, -5, -29, -5, -9, -31, 28, -25, -29, 0, -21, -34, -26, -5, -15, -19, -28, 0, -12, -15, -49, -13, -42, -12, -53}, /* H */ {0, -20, 2, -24, -6, -9, -17, -25, 39, -26, 0, -14, -18, -27, 8, -9, 12, 2, -14, -19, -19, -22, -12, -6, 4, -53}, /* I */ {0, -10, -18, -19, -22, -17, -1, -29, -26, 34, 0, -18, 4, 5, -15, -24, -22, -16, -18, -3, 16, -42, -11, -16, -19, -53}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -18, -3, -44, -9, -10, -43, -21, -14, -18, 0, 28, -25, 0, 2, -18, -4, 10, -8, -6, -26, -33, -13, -31, -7, -53}, /* L */ {0, -18, -29, -47, -37, -29, -1, -34, -18, 4, 0, -25, 30, 12, -23, -22, -14, -26, -25, -19, 0, -17, -16, -19, -20, -53}, /* M */ {0, -13, -26, -42, -30, -21, -8, -26, -27, 5, 0, 0, 12, 47, -22, -23, -9, -9, -15, -9, 3, -37, -12, -30, -15, -53}, /* N */ {0, -6, 21, -31, 13, 1, -27, -5, 8, -15, 0, 2, -23, -22, 27, -14, -5, -12, 5, -1, -21, -27, -7, -13, -1, -53}, /* P */ {0, 1, -17, -24, -20, -14, -33, -15, -9, -24, 0, -18, -22, -23, -14, 35, -4, -8, 1, -8, -15, -43, -12, -41, -9, -53}, /* Q */ {0, -10, -2, -43, 0, 12, -39, -19, 12, -22, 0, -4, -14, -9, -5, -4, 34, 1, -13, -14, -19, -39, -10, -35, 25, -53}, /* R */ {0, -19, -17, -26, -25, -22, -31, -28, 2, -16, 0, 10, -26, -9, -12, -8, 1, 37, -6, -16, -23, 1, -14, -33, -7, -53}, /* S */ {0, 5, 0, -5, -6, -9, -21, 0, -14, -18, 0, -8, -25, -15, 5, 1, -13, -6, 22, 8, -15, -15, -6, -21, -10, -53}, /* T */ {0, 5, -5, -22, -10, -14, -26, -12, -19, -3, 0, -6, -19, -9, -1, -8, -14, -16, 8, 27, -4, -39, -7, -20, -14, -53}, /* V */ {0, -2, -22, -17, -23, -18, -20, -15, -19, 16, 0, -26, 0, 3, -21, -15, -19, -23, -15, -4, 29, -49, -11, -23, -19, -53}, /* W */ {0, -42, -35, -52, -49, -53, -10, -49, -22, -42, 0, -33, -17, -37, -27, -43, -39, 1, -15, -39, -49, 63, -33, -12, -45, -53}, /* X */ {0, -6, -10, -27, -13, -11, -23, -13, -12, -11, 0, -13, -16, -12, -7, -12, -10, -14, -6, -7, -11, -33, -13, -22, -11, -53}, /* Y */ {0, -25, -20, -8, -34, -29, 19, -42, -6, -16, 0, -31, -19, -30, -13, -41, -35, -33, -21, -20, -23, -12, -22, 45, -31, -53}, /* Z */ {0, -5, 8, -43, 12, 24, -42, -12, 4, -19, 0, -7, -20, -15, -1, -9, 25, -7, -10, -14, -19, -45, -11, -31, 25, -53}, /* * */ {0, -53, -53, -53, -53, -53, -53, -53, -53, -53, 0, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 1}, } // # // # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] // # // # PAM 90 substitution matrix, scale = ln(2)/2 = 0.346574 // # // # Expected score = -2.26, Entropy = 1.30 bits // # // # Lowest score = -10, Highest score = 13 // # // A R N D C Q E G H I L K M F P S T W Y V B Z X * // A 4 -4 -1 -1 -3 -2 0 0 -4 -2 -3 -3 -2 -5 0 1 1 -8 -5 0 -1 -1 -1 -10 // R -4 7 -2 -5 -5 0 -4 -5 1 -3 -5 2 -2 -6 -1 -1 -3 0 -6 -4 -3 -1 -2 -10 // N -1 -2 5 3 -6 -1 0 -1 2 -3 -4 1 -4 -5 -2 1 0 -5 -2 -4 4 0 -1 -10 // D -1 -5 3 6 -8 0 4 -1 -1 -4 -7 -2 -5 -8 -4 -1 -2 -9 -6 -4 5 3 -2 -10 // C -3 -5 -6 -8 9 -8 -8 -5 -5 -3 -9 -8 -8 -7 -5 -1 -4 -10 -1 -3 -7 -8 -5 -10 // Q -2 0 -1 0 -8 6 2 -3 2 -4 -3 -1 -2 -7 -1 -2 -3 -7 -6 -4 0 5 -2 -10 // E 0 -4 0 4 -8 2 6 -1 -1 -3 -5 -2 -4 -8 -2 -2 -2 -10 -6 -3 2 5 -2 -10 // G 0 -5 -1 -1 -5 -3 -1 5 -5 -5 -6 -4 -5 -6 -3 0 -2 -9 -8 -3 -1 -2 -2 -10 // H -4 1 2 -1 -5 2 -1 -5 8 -5 -3 -2 -5 -3 -2 -3 -3 -4 -1 -4 1 1 -2 -10 // I -2 -3 -3 -4 -3 -4 -3 -5 -5 6 1 -3 1 0 -4 -3 0 -8 -3 3 -3 -3 -2 -10 // L -3 -5 -4 -7 -9 -3 -5 -6 -3 1 6 -5 2 0 -4 -5 -3 -3 -3 0 -5 -4 -3 -10 // K -3 2 1 -2 -8 -1 -2 -4 -2 -3 -5 5 0 -8 -3 -1 -1 -6 -6 -5 0 -1 -2 -10 // M -2 -2 -4 -5 -8 -2 -4 -5 -5 1 2 0 9 -1 -4 -3 -2 -7 -6 1 -5 -3 -2 -10 // F -5 -6 -5 -8 -7 -7 -8 -6 -3 0 0 -8 -1 8 -6 -4 -5 -2 4 -4 -6 -8 -4 -10 // P 0 -1 -2 -4 -5 -1 -2 -3 -2 -4 -4 -3 -4 -6 7 0 -1 -8 -8 -3 -3 -2 -2 -10 // S 1 -1 1 -1 -1 -2 -2 0 -3 -3 -5 -1 -3 -4 0 4 2 -3 -4 -3 0 -2 -1 -10 // T 1 -3 0 -2 -4 -3 -2 -2 -3 0 -3 -1 -2 -5 -1 2 5 -7 -4 -1 -1 -2 -1 -10 // W -8 0 -5 -9 -10 -7 -10 -9 -4 -8 -3 -6 -7 -2 -8 -3 -7 13 -2 -9 -7 -8 -6 -10 // Y -5 -6 -2 -6 -1 -6 -6 -8 -1 -3 -3 -6 -6 4 -8 -4 -4 -2 9 -4 -4 -6 -4 -10 // V 0 -4 -4 -4 -3 -4 -3 -3 -4 3 0 -5 1 -4 -3 -3 -1 -9 -4 6 -4 -3 -2 -10 // B -1 -3 4 5 -7 0 2 -1 1 -3 -5 0 -5 -6 -3 0 -1 -7 -4 -4 4 2 -2 -10 // Z -1 -1 0 3 -8 5 5 -2 1 -3 -4 -1 -3 -8 -2 -2 -2 -8 -6 -3 2 5 -2 -10 // X -1 -2 -1 -2 -5 -2 -2 -2 -2 -2 -3 -2 -2 -4 -2 -1 -1 -6 -4 -2 -2 -2 -2 -10 // * -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 1 // PAM90 = [][]int{ /* - A B C D E F G H I J K L M N P Q R S T V W X Y Z * */ /* - */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* A */ {0, 4, -1, -3, -1, 0, -5, 0, -4, -2, 0, -3, -3, -2, -1, 0, -2, -4, 1, 1, 0, -8, -1, -5, -1, -10}, /* B */ {0, -1, 4, -7, 5, 2, -6, -1, 1, -3, 0, 0, -5, -5, 4, -3, 0, -3, 0, -1, -4, -7, -2, -4, 2, -10}, /* C */ {0, -3, -7, 9, -8, -8, -7, -5, -5, -3, 0, -8, -9, -8, -6, -5, -8, -5, -1, -4, -3, -10, -5, -1, -8, -10}, /* D */ {0, -1, 5, -8, 6, 4, -8, -1, -1, -4, 0, -2, -7, -5, 3, -4, 0, -5, -1, -2, -4, -9, -2, -6, 3, -10}, /* E */ {0, 0, 2, -8, 4, 6, -8, -1, -1, -3, 0, -2, -5, -4, 0, -2, 2, -4, -2, -2, -3, -10, -2, -6, 5, -10}, /* F */ {0, -5, -6, -7, -8, -8, 8, -6, -3, 0, 0, -8, 0, -1, -5, -6, -7, -6, -4, -5, -4, -2, -4, 4, -8, -10}, /* G */ {0, 0, -1, -5, -1, -1, -6, 5, -5, -5, 0, -4, -6, -5, -1, -3, -3, -5, 0, -2, -3, -9, -2, -8, -2, -10}, /* H */ {0, -4, 1, -5, -1, -1, -3, -5, 8, -5, 0, -2, -3, -5, 2, -2, 2, 1, -3, -3, -4, -4, -2, -1, 1, -10}, /* I */ {0, -2, -3, -3, -4, -3, 0, -5, -5, 6, 0, -3, 1, 1, -3, -4, -4, -3, -3, 0, 3, -8, -2, -3, -3, -10}, /* J */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* K */ {0, -3, 0, -8, -2, -2, -8, -4, -2, -3, 0, 5, -5, 0, 1, -3, -1, 2, -1, -1, -5, -6, -2, -6, -1, -10}, /* L */ {0, -3, -5, -9, -7, -5, 0, -6, -3, 1, 0, -5, 6, 2, -4, -4, -3, -5, -5, -3, 0, -3, -3, -3, -4, -10}, /* M */ {0, -2, -5, -8, -5, -4, -1, -5, -5, 1, 0, 0, 2, 9, -4, -4, -2, -2, -3, -2, 1, -7, -2, -6, -3, -10}, /* N */ {0, -1, 4, -6, 3, 0, -5, -1, 2, -3, 0, 1, -4, -4, 5, -2, -1, -2, 1, 0, -4, -5, -1, -2, 0, -10}, /* P */ {0, 0, -3, -5, -4, -2, -6, -3, -2, -4, 0, -3, -4, -4, -2, 7, -1, -1, 0, -1, -3, -8, -2, -8, -2, -10}, /* Q */ {0, -2, 0, -8, 0, 2, -7, -3, 2, -4, 0, -1, -3, -2, -1, -1, 6, 0, -2, -3, -4, -7, -2, -6, 5, -10}, /* R */ {0, -4, -3, -5, -5, -4, -6, -5, 1, -3, 0, 2, -5, -2, -2, -1, 0, 7, -1, -3, -4, 0, -2, -6, -1, -10}, /* S */ {0, 1, 0, -1, -1, -2, -4, 0, -3, -3, 0, -1, -5, -3, 1, 0, -2, -1, 4, 2, -3, -3, -1, -4, -2, -10}, /* T */ {0, 1, -1, -4, -2, -2, -5, -2, -3, 0, 0, -1, -3, -2, 0, -1, -3, -3, 2, 5, -1, -7, -1, -4, -2, -10}, /* V */ {0, 0, -4, -3, -4, -3, -4, -3, -4, 3, 0, -5, 0, 1, -4, -3, -4, -4, -3, -1, 6, -9, -2, -4, -3, -10}, /* W */ {0, -8, -7, -10, -9, -10, -2, -9, -4, -8, 0, -6, -3, -7, -5, -8, -7, 0, -3, -7, -9, 13, -6, -2, -8, -10}, /* X */ {0, -1, -2, -5, -2, -2, -4, -2, -2, -2, 0, -2, -3, -2, -1, -2, -2, -2, -1, -1, -2, -6, -2, -4, -2, -10}, /* Y */ {0, -5, -4, -1, -6, -6, 4, -8, -1, -3, 0, -6, -3, -6, -2, -8, -6, -6, -4, -4, -4, -2, -4, 9, -6, -10}, /* Z */ {0, -1, 2, -8, 3, 5, -8, -2, 1, -3, 0, -1, -4, -3, 0, -2, 5, -1, -2, -2, -3, -8, -2, -6, 5, -10}, /* * */ {0, -10, -10, -10, -10, -10, -10, -10, -10, -10, 0, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 1}, } ) biogo-1.0.4/align/fitted_affine_letters.go0000644000175000017500000001577714136731467020150 0ustar nileshnilesh// This file is automatically generated. Do not edit - make changes to relevant got file. // Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line fitted_affine_type.got:17 func drawFittedAffineTableLetters(rSeq, qSeq alphabet.Letters, index alphabet.Index, table [][3]int, a FittedAffine) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) for l := 0; l < 3; l++ { fmt.Fprintf(tw, "%c\tqSeq\t", "MUL"[l]) for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1]) } for j := 0; j < c; j++ { p := pointerFittedAffineLetters(rSeq, qSeq, i, j, l, table, index, a, c) var vi interface{} if vi = table[i*c+j][l]; vi == minInt { vi = "-Inf" } if p != "" { fmt.Fprintf(tw, "%s % 4v\t", p, vi) } else { fmt.Fprintf(tw, "%v\t", vi) } } fmt.Fprintln(tw) } fmt.Fprintln(tw) } tw.Flush() } func pointerFittedAffineLetters(rSeq, qSeq alphabet.Letters, i, j, l int, table [][3]int, index alphabet.Index, a FittedAffine, c int) string { if j == 0 { return "" } if i == 0 { if l == left { return "⬅ l" } return "" } rVal := index[rSeq[i-1]] qVal := index[qSeq[j-1]] if rVal < 0 || qVal < 0 { return "" } switch p := i*c + j; table[p][l] { case table[p-c][up] + a.Matrix[rVal][gap]: return "⬆ u" case table[p-1][left] + a.Matrix[gap][qVal]: return "⬅ l" case table[p-c][diag] + a.GapOpen + a.Matrix[rVal][gap]: return "⬆ m" case table[p-1][diag] + a.GapOpen + a.Matrix[gap][qVal]: return "⬅ m" case table[p-c-1][up] + a.Matrix[rVal][qVal]: return "⬉ u" case table[p-c-1][left] + a.Matrix[rVal][qVal]: return "⬉ l" case table[p-c-1][diag] + a.Matrix[rVal][qVal]: return "⬉ m" default: return [3]string{"", "⬆ u", "⬅ l"}[l] } } func (a FittedAffine) alignLetters(rSeq, qSeq alphabet.Letters, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a.Matrix) la := make([]int, 0, let*let) for _, row := range a.Matrix { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } index := alpha.LetterIndex() r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([][3]int, r*c) table[0] = [3]int{ diag: 0, up: minInt, left: minInt, } table[1] = [3]int{ diag: minInt, up: minInt, } table[1][left] = a.GapOpen + la[index[qSeq[0]]] for j := range table[2:c] { table[j+2] = [3]int{ diag: minInt, up: minInt, left: table[j+1][left] + la[index[qSeq[j+1]]], } } table[c] = [3]int{ diag: minInt, left: minInt, } for i := 2; i < r; i++ { table[i*c] = [3]int{ diag: minInt, left: minInt, } } for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1], i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1], j-1) } p := i*c + j diagScore := table[p-c-1][diag] upScore := table[p-c-1][up] leftScore := table[p-c-1][left] table[p][diag] = max3(diagScore, upScore, leftScore) + la[rVal*let+qVal] table[p][up] = max2( add(table[p-c][diag], a.GapOpen+la[rVal*let]), add(table[p-c][up], la[rVal*let]), ) table[p][left] = max2( add(table[p-1][diag], a.GapOpen+la[qVal]), add(table[p-1][left], la[qVal]), ) } } if debugFittedAffine { drawFittedAffineTableLetters(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last, layer := 0, diag, diag var ( i int j = c - 1 ) max := minInt for y := 1; y < r; y++ { v := table[(y*c)+c-1][diag] if v >= max { i = y max = v } } maxI, maxJ := i, j for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) switch p := i*c + j; table[p][layer] { case table[p-c][up] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][up] i-- layer = up last = up case table[p-1][left] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][left] j-- layer = left last = left case table[p-c][diag] + a.GapOpen + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][diag] i-- layer = diag last = up case table[p-1][diag] + a.GapOpen + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][diag] j-- layer = diag last = left case table[p-c-1][up] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][up] i-- j-- layer = up last = diag case table[p-c-1][left] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][left] i-- j-- layer = left last = diag case table[p-c-1][diag] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][diag] i-- j-- layer = diag last = diag default: panic(fmt.Sprintf("align: fitted nw affine internal error: no path at row: %d col:%d layer:%s\n", i, j, "mul"[layer:layer+1])) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/sw_affine_type.got0000644000175000017500000001563014136731467016771 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line sw_affine_type.got:17 func drawSWAffineTableType(rSeq, qSeq Type, index alphabet.Index, table [][3]int, a SWAffine) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) for l := 0; l < 3; l++ { fmt.Fprintf(tw, "%c\tqSeq\t", "MUL"[l]) for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1]) } for j := 0; j < c; j++ { p := pointerSWAffineType(rSeq, qSeq, i, j, l, table, index, a, c) var vi interface{} if vi = table[i*c+j][l]; vi == minInt { vi = "-Inf" } fmt.Fprintf(tw, "%s % 4v\t", p, vi) } fmt.Fprintln(tw) } fmt.Fprintln(tw) } tw.Flush() } func pointerSWAffineType(rSeq, qSeq Type, i, j, l int, table [][3]int, index alphabet.Index, a SWAffine, c int) string { if i == 0 || j == 0 { return " " } rVal := index[rSeq[i-1]] qVal := index[qSeq[j-1]] if rVal < 0 || qVal < 0 { return " " } switch p := i*c + j; { case table[p][l] == 0: return " " case table[p-c][up] + a.Matrix[rVal][gap] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬆ u" case table[p-1][left] + a.Matrix[gap][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬅ l" case table[p-c][diag] + a.GapOpen + a.Matrix[rVal][gap] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬆ m" case table[p-1][diag] + a.GapOpen + a.Matrix[gap][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬅ m" case table[p-c-1][diag] + a.Matrix[rVal][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬉ m" case table[p-c-1][up] + a.Matrix[rVal][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬉ u" case table[p-c-1][left] + a.Matrix[rVal][qVal] == table[p][l] && table[(i-1)*c+j-1][l] != 0: return "⬉ l" default: return [3]string{"⌜ ", "⬆ u", "⬅ l"}[l] } } func (a SWAffine) alignType(rSeq, qSeq Type, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a.Matrix) if let < alpha.Len() { return nil, ErrMatrixWrongSize{Size: let, Len: alpha.Len()} } la := make([]int, 0, let*let) for _, row := range a.Matrix { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([][3]int, r*c) var ( index = alpha.LetterIndex() maxS, maxI, maxJ = 0, 0, 0 score int ) for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1], i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1], j-1) } p := i*c + j diagScore := table[p-c-1][diag] upScore := table[p-c-1][up] leftScore := table[p-c-1][left] score = max3(diagScore, upScore, leftScore) matched := score == diagScore score += la[rVal*let+qVal] switch { case score > 0: if score >= maxS && matched { maxS, maxI, maxJ = score, i, j } default: score = 0 } table[p][diag] = score score = max2( table[p-c][diag]+a.GapOpen+la[rVal*let], table[p-c][up]+la[rVal*let], ) if score < 0 { score = 0 } table[p][up] = score score = max2( table[p-1][diag]+a.GapOpen+la[qVal], table[p-1][left]+la[qVal], ) if score < 0 { score = 0 } table[p][left] = score } } if debugSmithAffine { drawSWAffineTableType(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last, layer := 0, diag, diag i, j := maxI, maxJ loop: for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) switch p := i*c + j; table[p][layer] { case 0: break loop case table[p-c][up] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][up] i-- layer = up last = up case table[p-1][left] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][left] j-- layer = left last = left case table[p-c][diag] + a.GapOpen + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][diag] i-- layer = diag last = up case table[p-1][diag] + a.GapOpen + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][diag] j-- layer = diag last = left case table[p-c-1][diag] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][diag] i-- j-- layer = diag last = diag case table[p-c-1][up] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][up] i-- j-- layer = up last = diag case table[p-c-1][left] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][left] i-- j-- layer = left last = diag default: panic(fmt.Sprintf("align: sw affine internal error: no path at row: %d col:%d layer:%s\n", i, j, "mul"[layer:layer+1])) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/fitted.go0000644000175000017500000000273714136731467015066 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" ) // Setting debugFitted to true gives verbose scoring table output for the dynamic programming. const debugFitted = false // Fitted is the linear gap penalty fitted Needleman-Wunsch aligner type. type Fitted Linear // Align aligns two sequences using a modified Needleman-Wunsch algorithm that finds a local region of // the reference with high similarity to the query. It returns an alignment description or an error if // the scoring matrix is not square, or the sequence data types or alphabets do not match. func (a Fitted) Align(reference, query AlphabetSlicer) ([]feat.Pair, error) { alpha := reference.Alphabet() if alpha == nil { return nil, ErrNoAlphabet } if alpha != query.Alphabet() { return nil, ErrMismatchedAlphabets } if alpha.IndexOf(alpha.Gap()) != 0 { return nil, ErrNotGappedAlphabet } switch rSeq := reference.Slice().(type) { case alphabet.Letters: qSeq, ok := query.Slice().(alphabet.Letters) if !ok { return nil, ErrMismatchedTypes } return a.alignLetters(rSeq, qSeq, alpha) case alphabet.QLetters: qSeq, ok := query.Slice().(alphabet.QLetters) if !ok { return nil, ErrMismatchedTypes } return a.alignQLetters(rSeq, qSeq, alpha) default: return nil, ErrTypeNotHandled } } biogo-1.0.4/align/nw_example_test.go0000644000175000017500000000355414136731467017003 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq/linear" "fmt" ) func ExampleNW_Align() { nwsa := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("AGACTAGTTA"))} nwsa.Alpha = alphabet.DNAgapped nwsb := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("GACAGACG"))} nwsb.Alpha = alphabet.DNAgapped // Query letter // - A C G T // - 0 -5 -5 -5 -5 // A -5 10 -3 -1 -4 // C -5 -3 9 -5 0 // G -5 -1 -5 7 -3 // T -5 -4 0 -3 8 needle := NW{ {0, -5, -5, -5, -5}, {-5, 10, -3, -1, -4}, {-5, -3, 9, -5, 0}, {-5, -1, -5, 7, -3}, {-5, -4, 0, -3, 8}, } aln, err := needle.Align(nwsa, nwsb) if err == nil { fmt.Printf("%s\n", aln) fa := Format(nwsa, nwsb, aln, '-') fmt.Printf("%s\n%s\n", fa[0], fa[1]) } // Output: //[[0,1)/-=-5 [1,4)/[0,3)=26 [4,5)/-=-5 [5,10)/[3,8)=12] // AGACTAGTTA // -GAC-AGACG } func ExampleNWAffine_Align() { nwsa := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("ATAGGAAG"))} nwsa.Alpha = alphabet.DNAgapped nwsb := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("ATTGGCAATG"))} nwsb.Alpha = alphabet.DNAgapped // Query letter // - A C G T // - 0 -1 -1 -1 -1 // A -1 1 -1 -1 -1 // C -1 -1 1 -1 -1 // G -1 -1 -1 1 -1 // T -1 -1 -1 -1 1 // // Gap open: -5 needle := NWAffine{ Matrix: Linear{ {0, -1, -1, -1, -1}, {-1, 1, -1, -1, -1}, {-1, -1, 1, -1, -1}, {-1, -1, -1, 1, -1}, {-1, -1, -1, -1, 1}, }, GapOpen: -5, } aln, err := needle.Align(nwsa, nwsb) if err == nil { fmt.Printf("%s\n", aln) fa := Format(nwsa, nwsb, aln, '-') fmt.Printf("%s\n%s\n", fa[0], fa[1]) } // Output: // [[0,7)/[0,7)=3 -/[7,9)=-7 [7,8)/[9,10)=1] // ATAGGAA--G // ATTGGCAATG } biogo-1.0.4/align/fitted_affine_qletters.go0000644000175000017500000001603514136731467020315 0ustar nileshnilesh// This file is automatically generated. Do not edit - make changes to relevant got file. // Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line fitted_affine_type.got:17 func drawFittedAffineTableQLetters(rSeq, qSeq alphabet.QLetters, index alphabet.Index, table [][3]int, a FittedAffine) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) for l := 0; l < 3; l++ { fmt.Fprintf(tw, "%c\tqSeq\t", "MUL"[l]) for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1].L) } for j := 0; j < c; j++ { p := pointerFittedAffineQLetters(rSeq, qSeq, i, j, l, table, index, a, c) var vi interface{} if vi = table[i*c+j][l]; vi == minInt { vi = "-Inf" } if p != "" { fmt.Fprintf(tw, "%s % 4v\t", p, vi) } else { fmt.Fprintf(tw, "%v\t", vi) } } fmt.Fprintln(tw) } fmt.Fprintln(tw) } tw.Flush() } func pointerFittedAffineQLetters(rSeq, qSeq alphabet.QLetters, i, j, l int, table [][3]int, index alphabet.Index, a FittedAffine, c int) string { if j == 0 { return "" } if i == 0 { if l == left { return "⬅ l" } return "" } rVal := index[rSeq[i-1].L] qVal := index[qSeq[j-1].L] if rVal < 0 || qVal < 0 { return "" } switch p := i*c + j; table[p][l] { case table[p-c][up] + a.Matrix[rVal][gap]: return "⬆ u" case table[p-1][left] + a.Matrix[gap][qVal]: return "⬅ l" case table[p-c][diag] + a.GapOpen + a.Matrix[rVal][gap]: return "⬆ m" case table[p-1][diag] + a.GapOpen + a.Matrix[gap][qVal]: return "⬅ m" case table[p-c-1][up] + a.Matrix[rVal][qVal]: return "⬉ u" case table[p-c-1][left] + a.Matrix[rVal][qVal]: return "⬉ l" case table[p-c-1][diag] + a.Matrix[rVal][qVal]: return "⬉ m" default: return [3]string{"", "⬆ u", "⬅ l"}[l] } } func (a FittedAffine) alignQLetters(rSeq, qSeq alphabet.QLetters, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a.Matrix) la := make([]int, 0, let*let) for _, row := range a.Matrix { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } index := alpha.LetterIndex() r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([][3]int, r*c) table[0] = [3]int{ diag: 0, up: minInt, left: minInt, } table[1] = [3]int{ diag: minInt, up: minInt, } table[1][left] = a.GapOpen + la[index[qSeq[0].L]] for j := range table[2:c] { table[j+2] = [3]int{ diag: minInt, up: minInt, left: table[j+1][left] + la[index[qSeq[j+1].L]], } } table[c] = [3]int{ diag: minInt, left: minInt, } for i := 2; i < r; i++ { table[i*c] = [3]int{ diag: minInt, left: minInt, } } for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1].L] qVal = index[qSeq[j-1].L] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1].L, i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1].L, j-1) } p := i*c + j diagScore := table[p-c-1][diag] upScore := table[p-c-1][up] leftScore := table[p-c-1][left] table[p][diag] = max3(diagScore, upScore, leftScore) + la[rVal*let+qVal] table[p][up] = max2( add(table[p-c][diag], a.GapOpen+la[rVal*let]), add(table[p-c][up], la[rVal*let]), ) table[p][left] = max2( add(table[p-1][diag], a.GapOpen+la[qVal]), add(table[p-1][left], la[qVal]), ) } } if debugFittedAffine { drawFittedAffineTableQLetters(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last, layer := 0, diag, diag var ( i int j = c - 1 ) max := minInt for y := 1; y < r; y++ { v := table[(y*c)+c-1][diag] if v >= max { i = y max = v } } maxI, maxJ := i, j for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1].L] qVal = index[qSeq[j-1].L] ) switch p := i*c + j; table[p][layer] { case table[p-c][up] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][up] i-- layer = up last = up case table[p-1][left] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][left] j-- layer = left last = left case table[p-c][diag] + a.GapOpen + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][diag] i-- layer = diag last = up case table[p-1][diag] + a.GapOpen + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][diag] j-- layer = diag last = left case table[p-c-1][up] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][up] i-- j-- layer = up last = diag case table[p-c-1][left] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][left] i-- j-- layer = left last = diag case table[p-c-1][diag] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][diag] i-- j-- layer = diag last = diag default: panic(fmt.Sprintf("align: fitted nw affine internal error: no path at row: %d col:%d layer:%s\n", i, j, "mul"[layer:layer+1])) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/sw.go0000644000175000017500000000275114136731467014234 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" ) // Setting debugSmith to true gives verbose scoring table output for the dynamic programming. const debugSmith = false // SW is the Smith-Waterman aligner type. // Matrix is a square scoring matrix with the last column and last row specifying gap penalties. // Currently gap opening is not considered. type SW Linear // Align aligns two sequences using the Smith-Waterman algorithm. It returns an alignment description // or an error if the scoring matrix is not square, or the sequence data types or alphabets do not match. func (a SW) Align(reference, query AlphabetSlicer) ([]feat.Pair, error) { alpha := reference.Alphabet() if alpha == nil { return nil, ErrNoAlphabet } if alpha != query.Alphabet() { return nil, ErrMismatchedAlphabets } if alpha.IndexOf(alpha.Gap()) != 0 { return nil, ErrNotGappedAlphabet } switch rSeq := reference.Slice().(type) { case alphabet.Letters: qSeq, ok := query.Slice().(alphabet.Letters) if !ok { return nil, ErrMismatchedTypes } return a.alignLetters(rSeq, qSeq, alpha) case alphabet.QLetters: qSeq, ok := query.Slice().(alphabet.QLetters) if !ok { return nil, ErrMismatchedTypes } return a.alignQLetters(rSeq, qSeq, alpha) default: return nil, ErrTypeNotHandled } } biogo-1.0.4/align/fitted_type.got0000644000175000017500000001041314136731467016301 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line fitted_type.got:17 func drawFittedTableType(rSeq, qSeq Type, index alphabet.Index, table []int, a [][]int) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) fmt.Fprint(tw, "\tqSeq\t") for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1]) } for j := 0; j < c; j++ { p := pointerFittedType(rSeq, qSeq, i, j, table, index, a, c) if p != "" { fmt.Fprintf(tw, "%s % 3v\t", p, table[i*c+j]) } else { fmt.Fprintf(tw, "%v\t", table[i*c+j]) } } fmt.Fprintln(tw) } tw.Flush() } func pointerFittedType(rSeq, qSeq Type, i, j int, table []int, index alphabet.Index, a [][]int, c int) string { if i == 0 || j == 0 { return "" } rVal := index[rSeq[i-1]] qVal := index[qSeq[j-1]] if rVal < 0 || qVal < 0 { return "" } switch p := i*c + j; table[p] { case table[p-c-1] + a[rVal][qVal]: return "⬉" case table[p-c] + a[rVal][gap]: return "⬆" case table[p-1] + a[gap][qVal]: return "⬅" default: return "" } } func (a Fitted) alignType(rSeq, qSeq Type, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a) la := make([]int, 0, let*let) for _, row := range a { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } index := alpha.LetterIndex() r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([]int, r*c) for j := range table[1:c] { table[j+1] = table[j] + la[index[qSeq[j]]] } for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1], i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1], j-1) } p := i*c + j diagScore := table[p-c-1] + la[rVal*let+qVal] upScore := table[p-c] + la[rVal*let] leftScore := table[p-1] + la[qVal] table[p] = max3(diagScore, upScore, leftScore) } } if debugFitted { drawFittedTableType(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last := 0, diag max := minInt var ( i int j = c - 1 qVal int ) for { qVal = index[qSeq[j-1]] if qVal >= 0 { break } j-- } for y := 1; y < r; y++ { v := table[(y*c)+c-1] rVal := index[rSeq[y-1]] if rVal < 0 { continue } if v >= max && la[rVal*let+qVal] >= 0 { i = y max = v } } maxI, maxJ := i, j for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) switch p := i*c + j; table[p] { case table[p-c-1] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c-1] i-- j-- last = diag case table[p-c] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c] i-- last = up case table[p-1] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-1] j-- last = left default: panic(fmt.Sprintf("align: fitted nw internal error: no path at row: %d col:%d\n", i, j)) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/nw_type.got0000644000175000017500000001052014136731467015445 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line nw_type.got:17 func drawNWTableType(rSeq, qSeq Type, index alphabet.Index, table []int, a [][]int) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) fmt.Fprint(tw, "\tqSeq\t") for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1]) } for j := 0; j < c; j++ { p := pointerNWType(rSeq, qSeq, i, j, table, index, a, c) if p != "" { fmt.Fprintf(tw, "%s % 3v\t", p, table[i*c+j]) } else { fmt.Fprintf(tw, "%v\t", table[i*c+j]) } } fmt.Fprintln(tw) } tw.Flush() } func pointerNWType(rSeq, qSeq Type, i, j int, table []int, index alphabet.Index, a [][]int, c int) string { switch { case i == 0 && j == 0: return "" case i == 0: return "⬅" case j == 0: return "⬆" } rVal := index[rSeq[i-1]] qVal := index[qSeq[j-1]] if rVal < 0 || qVal < 0 { return "" } switch p := i*c + j; table[p] { case table[p-c-1] + a[rVal][qVal]: return "⬉" case table[p-c] + a[rVal][gap]: return "⬆" case table[p-1] + a[gap][qVal]: return "⬅" default: return "" } } func (a NW) alignType(rSeq, qSeq Type, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a) if let < alpha.Len() { return nil, ErrMatrixWrongSize{Size: let, Len: alpha.Len()} } la := make([]int, 0, let*let) for _, row := range a { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } index := alpha.LetterIndex() r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([]int, r*c) for j := range table[1:c] { table[j+1] = table[j] + la[index[qSeq[j]]] } for i := 1; i < r; i++ { table[i*c] = table[(i-1)*c] + la[index[rSeq[i-1]]*let] } for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1], i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1], j-1) } p := i*c + j diagScore := table[p-c-1] + la[rVal*let+qVal] upScore := table[p-c] + la[rVal*let] leftScore := table[p-1] + la[qVal] table[p] = max3(diagScore, upScore, leftScore) } } if debugNeedle { drawNWTableType(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last := 0, diag i, j := r-1, c-1 maxI, maxJ := i, j for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) switch p := i*c + j; table[p] { case table[p-c-1] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c-1] i-- j-- last = diag case table[p-c] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c] i-- last = up case table[p-1] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-1] j-- last = left default: panic(fmt.Sprintf("align: nw internal error: no path at row: %d col:%d\n", i, j)) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) if i != j { aln = append(aln, &featPair{ a: feature{start: 0, end: i}, b: feature{start: 0, end: j}, score: table[i*c+j], }) } for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/sw_example_test.go0000644000175000017500000000465114136731467017007 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq/linear" "fmt" ) func ExampleSW_Align_a() { swsa := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("ACACACTA"))} swsa.Alpha = alphabet.DNAgapped swsb := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("AGCACACA"))} swsb.Alpha = alphabet.DNAgapped // w(gap) = -1 // w(match) = +2 // w(mismatch) = -1 smith := SW{ {0, -1, -1, -1, -1}, {-1, 2, -1, -1, -1}, {-1, -1, 2, -1, -1}, {-1, -1, -1, 2, -1}, {-1, -1, -1, -1, 2}, } aln, err := smith.Align(swsa, swsb) if err == nil { fmt.Printf("%v\n", aln) fa := Format(swsa, swsb, aln, '-') fmt.Printf("%s\n%s\n", fa[0], fa[1]) } // Output: // [[0,1)/[0,1)=2 -/[1,2)=-1 [1,6)/[2,7)=10 [6,7)/-=-1 [7,8)/[7,8)=2] // A-CACACTA // AGCACAC-A } func ExampleSW_Align_b() { swsa := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("AAAATTTAAAA"))} swsa.Alpha = alphabet.DNAgapped swsb := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("AAAAGGGAAAA"))} swsb.Alpha = alphabet.DNAgapped // w(gap) = 0 // w(match) = +2 // w(mismatch) = -1 smith := SW{ {0, 0, 0, 0, 0}, {0, 2, -1, -1, -1}, {0, -1, 2, -1, -1}, {0, -1, -1, 2, -1}, {0, -1, -1, -1, 2}, } aln, err := smith.Align(swsa, swsb) if err == nil { fmt.Printf("%v\n", aln) fa := Format(swsa, swsb, aln, '-') fmt.Printf("%s\n%s\n", fa[0], fa[1]) } // Output: // [[0,4)/[0,4)=8 -/[4,7)=0 [4,7)/-=0 [7,11)/[7,11)=8] // AAAA---TTTAAAA // AAAAGGG---AAAA } func ExampleSWAffine_Align() { swsa := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("ATAGGAAG"))} swsa.Alpha = alphabet.DNAgapped swsb := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("ATTGGCAATG"))} swsb.Alpha = alphabet.DNAgapped // Query letter // - A C G T // - 0 -1 -1 -1 -1 // A -1 1 -1 -1 -1 // C -1 -1 1 -1 -1 // G -1 -1 -1 1 -1 // T -1 -1 -1 -1 1 // // Gap open: -5 smith := SWAffine{ Matrix: Linear{ {0, -1, -1, -1, -1}, {-1, 1, -1, -1, -1}, {-1, -1, 1, -1, -1}, {-1, -1, -1, 1, -1}, {-1, -1, -1, -1, 1}, }, GapOpen: -5, } aln, err := smith.Align(swsa, swsb) if err == nil { fmt.Printf("%s\n", aln) fa := Format(swsa, swsb, aln, '-') fmt.Printf("%s\n%s\n", fa[0], fa[1]) } // Output: // [[0,7)/[0,7)=3] // ATAGGAA // ATTGGCA } biogo-1.0.4/align/nw_affine.go0000644000175000017500000000262314136731467015535 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" ) // Setting debugNeedleAffine to true gives verbose scoring table output for the dynamic programming. const debugNeedleAffine = false // NWAffine is the affine gap penalty Needleman-Wunsch aligner type. type NWAffine Affine // Align aligns two sequences using the Needleman-Wunsch algorithm. It returns an alignment description // or an error if the scoring matrix is not square, or the sequence data types or alphabets do not match. func (a NWAffine) Align(reference, query AlphabetSlicer) ([]feat.Pair, error) { alpha := reference.Alphabet() if alpha == nil { return nil, ErrNoAlphabet } if alpha != query.Alphabet() { return nil, ErrMismatchedAlphabets } if alpha.IndexOf(alpha.Gap()) != 0 { return nil, ErrNotGappedAlphabet } switch rSeq := reference.Slice().(type) { case alphabet.Letters: qSeq, ok := query.Slice().(alphabet.Letters) if !ok { return nil, ErrMismatchedTypes } return a.alignLetters(rSeq, qSeq, alpha) case alphabet.QLetters: qSeq, ok := query.Slice().(alphabet.QLetters) if !ok { return nil, ErrMismatchedTypes } return a.alignQLetters(rSeq, qSeq, alpha) default: return nil, ErrTypeNotHandled } } biogo-1.0.4/align/fitted_affine_type.got0000644000175000017500000001556114136731467017622 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line fitted_affine_type.got:17 func drawFittedAffineTableType(rSeq, qSeq Type, index alphabet.Index, table [][3]int, a FittedAffine) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) for l := 0; l < 3; l++ { fmt.Fprintf(tw, "%c\tqSeq\t", "MUL"[l]) for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1]) } for j := 0; j < c; j++ { p := pointerFittedAffineType(rSeq, qSeq, i, j, l, table, index, a, c) var vi interface{} if vi = table[i*c+j][l]; vi == minInt { vi = "-Inf" } if p != "" { fmt.Fprintf(tw, "%s % 4v\t", p, vi) } else { fmt.Fprintf(tw, "%v\t", vi) } } fmt.Fprintln(tw) } fmt.Fprintln(tw) } tw.Flush() } func pointerFittedAffineType(rSeq, qSeq Type, i, j, l int, table [][3]int, index alphabet.Index, a FittedAffine, c int) string { if j == 0 { return "" } if i == 0 { if l == left { return "⬅ l" } return "" } rVal := index[rSeq[i-1]] qVal := index[qSeq[j-1]] if rVal < 0 || qVal < 0 { return "" } switch p := i*c + j; table[p][l] { case table[p-c][up] + a.Matrix[rVal][gap]: return "⬆ u" case table[p-1][left] + a.Matrix[gap][qVal]: return "⬅ l" case table[p-c][diag] + a.GapOpen + a.Matrix[rVal][gap]: return "⬆ m" case table[p-1][diag] + a.GapOpen + a.Matrix[gap][qVal]: return "⬅ m" case table[p-c-1][up] + a.Matrix[rVal][qVal]: return "⬉ u" case table[p-c-1][left] + a.Matrix[rVal][qVal]: return "⬉ l" case table[p-c-1][diag] + a.Matrix[rVal][qVal]: return "⬉ m" default: return [3]string{"", "⬆ u", "⬅ l"}[l] } } func (a FittedAffine) alignType(rSeq, qSeq Type, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a.Matrix) la := make([]int, 0, let*let) for _, row := range a.Matrix { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } index := alpha.LetterIndex() r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([][3]int, r*c) table[0] = [3]int{ diag: 0, up: minInt, left: minInt, } table[1] = [3]int{ diag: minInt, up: minInt, } table[1][left] = a.GapOpen + la[index[qSeq[0]]] for j := range table[2:c] { table[j+2] = [3]int{ diag: minInt, up: minInt, left: table[j+1][left] + la[index[qSeq[j+1]]], } } table[c] = [3]int{ diag: minInt, left: minInt, } for i := 2; i < r; i++ { table[i*c] = [3]int{ diag: minInt, left: minInt, } } for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1], i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1], j-1) } p := i*c + j diagScore := table[p-c-1][diag] upScore := table[p-c-1][up] leftScore := table[p-c-1][left] table[p][diag] = max3(diagScore, upScore, leftScore) + la[rVal*let+qVal] table[p][up] = max2( add(table[p-c][diag], a.GapOpen+la[rVal*let]), add(table[p-c][up], la[rVal*let]), ) table[p][left] = max2( add(table[p-1][diag], a.GapOpen+la[qVal]), add(table[p-1][left], la[qVal]), ) } } if debugFittedAffine { drawFittedAffineTableType(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last, layer := 0, diag, diag var ( i int j = c - 1 ) max := minInt for y := 1; y < r; y++ { v := table[(y*c)+c-1][diag] if v >= max { i = y max = v } } maxI, maxJ := i, j for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) switch p := i*c + j; table[p][layer] { case table[p-c][up] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][up] i-- layer = up last = up case table[p-1][left] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][left] j-- layer = left last = left case table[p-c][diag] + a.GapOpen + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][diag] i-- layer = diag last = up case table[p-1][diag] + a.GapOpen + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][diag] j-- layer = diag last = left case table[p-c-1][up] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][up] i-- j-- layer = up last = diag case table[p-c-1][left] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][left] i-- j-- layer = left last = diag case table[p-c-1][diag] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][diag] i-- j-- layer = diag last = diag default: panic(fmt.Sprintf("align: fitted nw affine internal error: no path at row: %d col:%d layer:%s\n", i, j, "mul"[layer:layer+1])) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/nw_affine_letters.go0000644000175000017500000001705314136731467017302 0ustar nileshnilesh// This file is automatically generated. Do not edit - make changes to relevant got file. // Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line nw_affine_type.got:17 func drawNWAffineTableLetters(rSeq, qSeq alphabet.Letters, index alphabet.Index, table [][3]int, a NWAffine) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) for l := 0; l < 3; l++ { fmt.Fprintf(tw, "%c\tqSeq\t", "MUL"[l]) for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1]) } for j := 0; j < c; j++ { p := pointerNWAffineLetters(rSeq, qSeq, i, j, l, table, index, a, c) var vi interface{} if vi = table[i*c+j][l]; vi == minInt { vi = "-Inf" } if p != "" { fmt.Fprintf(tw, "%s % 4v\t", p, vi) } else { fmt.Fprintf(tw, "%v\t", vi) } } fmt.Fprintln(tw) } fmt.Fprintln(tw) } tw.Flush() } func pointerNWAffineLetters(rSeq, qSeq alphabet.Letters, i, j, l int, table [][3]int, index alphabet.Index, a NWAffine, c int) string { switch { case i == 0 && j == 0: return "" case i == 0: if j == 1 { return "⬅ m" } return "⬅ l" case j == 0: if i == 1 { return "⬆ m" } return "⬆ u" } rVal := index[rSeq[i-1]] qVal := index[qSeq[j-1]] if rVal < 0 || qVal < 0 { return "" } switch p := i*c + j; table[p][l] { case table[p-c][up] + a.Matrix[rVal][gap]: return "⬆ u" case table[p-1][left] + a.Matrix[gap][qVal]: return "⬅ l" case table[p-c][diag] + a.GapOpen + a.Matrix[rVal][gap]: return "⬆ m" case table[p-1][diag] + a.GapOpen + a.Matrix[gap][qVal]: return "⬅ m" case table[p-c-1][up] + a.Matrix[rVal][qVal]: return "⬉ u" case table[p-c-1][left] + a.Matrix[rVal][qVal]: return "⬉ l" case table[p-c-1][diag] + a.Matrix[rVal][qVal]: return "⬉ m" default: return [3]string{"", "⬆ u", "⬅ l"}[l] } } func (a NWAffine) alignLetters(rSeq, qSeq alphabet.Letters, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a.Matrix) if let < alpha.Len() { return nil, ErrMatrixWrongSize{Size: let, Len: alpha.Len()} } la := make([]int, 0, let*let) for _, row := range a.Matrix { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } index := alpha.LetterIndex() r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([][3]int, r*c) table[0] = [3]int{ diag: 0, up: minInt, left: minInt, } table[1] = [3]int{ diag: minInt, up: minInt, left: a.GapOpen + la[index[qSeq[0]]], } for j := range table[2:c] { table[j+2] = [3]int{ diag: minInt, up: minInt, left: table[j+1][left] + la[index[qSeq[j+1]]], } } table[c] = [3]int{ diag: minInt, up: a.GapOpen + la[index[rSeq[0]]*let], left: minInt, } for i := 2; i < r; i++ { table[i*c] = [3]int{ diag: minInt, up: table[(i-1)*c][up] + la[index[rSeq[i-1]]*let], left: minInt, } } for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1], i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1], j-1) } p := i*c + j diagScore := table[p-c-1][diag] upScore := table[p-c-1][up] leftScore := table[p-c-1][left] table[p][diag] = max3(diagScore, upScore, leftScore) + la[rVal*let+qVal] table[p][up] = max2( add(table[p-c][diag], a.GapOpen+la[rVal*let]), add(table[p-c][up], la[rVal*let]), ) table[p][left] = max2( add(table[p-1][diag], a.GapOpen+la[qVal]), add(table[p-1][left], la[qVal]), ) } } if debugNeedleAffine { drawNWAffineTableLetters(rSeq, qSeq, index, table, a) } var ( aln []feat.Pair layer int ) score, last := 0, diag i, j := r-1, c-1 t := table[i*c+j] best := t[0] for i, s := range t[1:] { if s > best { best, layer = s, i+1 } } maxI, maxJ := i, j for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) switch p := i*c + j; table[p][layer] { case table[p-c][up] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][up] i-- layer = up last = up case table[p-1][left] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][left] j-- layer = left last = left case table[p-c][diag] + a.GapOpen + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c][diag] i-- layer = diag last = up case table[p-1][diag] + a.GapOpen + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-1][diag] j-- layer = diag last = left case table[p-c-1][up] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][up] i-- j-- layer = up last = diag case table[p-c-1][left] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][left] i-- j-- layer = left last = diag case table[p-c-1][diag] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p][layer] - table[p-c-1][diag] i-- j-- layer = diag last = diag default: panic(fmt.Sprintf("align: nw affine internal error: no path at row: %d col:%d layer:%s\n", i, j, "mul"[layer:layer+1])) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) if i != j { switch 0 { case i: last = left case j: last = up default: panic(fmt.Sprintf("align: nw affine internal error: unexpected final segment: row: %d col: %d", i, j)) } aln = append(aln, &featPair{ a: feature{start: 0, end: i}, b: feature{start: 0, end: j}, score: table[i*c+j][last], }) } for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/sw_affine.go0000644000175000017500000000261514136731467015543 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" ) // Setting debugSmithAffine to true gives verbose scoring table output for the dynamic programming. const debugSmithAffine = false // SWAffine is the affine gap penalty Smith-Waterman aligner type. type SWAffine Affine // Align aligns two sequences using the Smith-Waterman algorithm. It returns an alignment description // or an error if the scoring matrix is not square, or the sequence data types or alphabets do not match. func (a SWAffine) Align(reference, query AlphabetSlicer) ([]feat.Pair, error) { alpha := reference.Alphabet() if alpha == nil { return nil, ErrNoAlphabet } if alpha != query.Alphabet() { return nil, ErrMismatchedAlphabets } if alpha.IndexOf(alpha.Gap()) != 0 { return nil, ErrNotGappedAlphabet } switch rSeq := reference.Slice().(type) { case alphabet.Letters: qSeq, ok := query.Slice().(alphabet.Letters) if !ok { return nil, ErrMismatchedTypes } return a.alignLetters(rSeq, qSeq, alpha) case alphabet.QLetters: qSeq, ok := query.Slice().(alphabet.QLetters) if !ok { return nil, ErrMismatchedTypes } return a.alignQLetters(rSeq, qSeq, alpha) default: return nil, ErrTypeNotHandled } } biogo-1.0.4/align/sw_qletters.go0000644000175000017500000001054014136731467016152 0ustar nileshnilesh// This file is automatically generated. Do not edit - make changes to relevant got file. // Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line sw_type.got:17 func drawSWTableQLetters(rSeq, qSeq alphabet.QLetters, index alphabet.Index, table []int, a [][]int) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) fmt.Fprint(tw, "\tqSeq\t") for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1].L) } for j := 0; j < c; j++ { p := pointerSWQLetters(rSeq, qSeq, i, j, table, index, a, c) fmt.Fprintf(tw, "%s %3v\t", p, table[i*c+j]) } fmt.Fprintln(tw) } tw.Flush() } func pointerSWQLetters(rSeq, qSeq alphabet.QLetters, i, j int, table []int, index alphabet.Index, a [][]int, c int) string { if i == 0 || j == 0 { return " " } rVal := index[rSeq[i-1].L] qVal := index[qSeq[j-1].L] if rVal < 0 || qVal < 0 { return " " } switch p := i*c + j; { case table[p] == 0: return " " case table[p-c-1]+a[rVal][qVal] == table[p] && table[p-c-1] != 0: return "⬉" case table[p-c]+a[rVal][gap] == table[p] && table[p-c] != 0: return "⬆" case table[p-1]+a[gap][qVal] == table[p] && table[p-1] != 0: return "⬅" default: return "⌜" } } func (a SW) alignQLetters(rSeq, qSeq alphabet.QLetters, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a) if let < alpha.Len() { return nil, ErrMatrixWrongSize{Size: let, Len: alpha.Len()} } la := make([]int, 0, let*let) for _, row := range a { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([]int, r*c) var ( index = alpha.LetterIndex() maxS, maxI, maxJ = 0, 0, 0 score int ) for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1].L] qVal = index[qSeq[j-1].L] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1].L, i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1].L, j-1) } p := i*c + j diagScore := table[p-c-1] + la[rVal*let+qVal] upScore := table[p-c] + la[rVal*let] leftScore := table[p-1] + la[qVal] score = max3(diagScore, upScore, leftScore) switch { case score > 0: if score >= maxS && score == diagScore { maxS, maxI, maxJ = score, i, j } default: score = 0 } table[p] = score } } if debugSmith { drawSWTableQLetters(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last := 0, diag i, j := maxI, maxJ loop: for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1].L] qVal = index[qSeq[j-1].L] ) switch p := i*c + j; table[p] { case 0: break loop case table[p-c-1] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c-1] i-- j-- last = diag case table[p-c] + la[rVal*let]: if last != up { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c] i-- last = up case table[p-1] + la[qVal]: if last != left { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-1] j-- last = left default: panic(fmt.Sprintf("align: sw internal error: no path at row: %d col:%d\n", i, j)) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/fitted_affine.go0000644000175000017500000000277514136731467016400 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" ) // Setting debugFittedAffine to true gives verbose scoring table output for the dynamic programming. const debugFittedAffine = false // FittedAffine is the affine gap penalty fitted Needleman-Wunsch aligner type. type FittedAffine Affine // Align aligns two sequences using a modified Needleman-Wunsch algorithm that finds a local region of // the reference with high similarity to the query. It returns an alignment description or an error if // the scoring matrix is not square, or the sequence data types or alphabets do not match. func (a FittedAffine) Align(reference, query AlphabetSlicer) ([]feat.Pair, error) { alpha := reference.Alphabet() if alpha == nil { return nil, ErrNoAlphabet } if alpha != query.Alphabet() { return nil, ErrMismatchedAlphabets } if alpha.IndexOf(alpha.Gap()) != 0 { return nil, ErrNotGappedAlphabet } switch rSeq := reference.Slice().(type) { case alphabet.Letters: qSeq, ok := query.Slice().(alphabet.Letters) if !ok { return nil, ErrMismatchedTypes } return a.alignLetters(rSeq, qSeq, alpha) case alphabet.QLetters: qSeq, ok := query.Slice().(alphabet.QLetters) if !ok { return nil, ErrMismatchedTypes } return a.alignQLetters(rSeq, qSeq, alpha) default: return nil, ErrTypeNotHandled } } biogo-1.0.4/align/fitted_example_test.go0000644000175000017500000000352414136731467017633 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq/linear" "fmt" ) func ExampleFitted_Align() { fsa := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("GTTGACAGACTAGATTCACG"))} fsa.Alpha = alphabet.DNAgapped fsb := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("GACAGACGA"))} fsb.Alpha = alphabet.DNAgapped // Query letter // - A C G T // - 0 -5 -5 -5 -5 // A -5 10 -3 -1 -4 // C -5 -3 9 -5 0 // G -5 -1 -5 7 -3 // T -5 -4 0 -3 8 fitted := Fitted{ {0, -5, -5, -5, -5}, {-5, 10, -3, -1, -4}, {-5, -3, 9, -5, 0}, {-5, -1, -5, 7, -3}, {-5, -4, 0, -3, 8}, } aln, err := fitted.Align(fsa, fsb) if err == nil { fmt.Printf("%s\n", aln) fa := Format(fsa, fsb, aln, '-') fmt.Printf("%s\n%s\n", fa[0], fa[1]) } // Output: // [[3,10)/[0,7)=62 [10,12)/-=-10 [12,14)/[7,9)=17] // GACAGACTAGA // GACAGAC--GA } func ExampleFittedAffine_Align() { fsa := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("ATTGGCAATGA"))} fsa.Alpha = alphabet.DNAgapped fsb := &linear.Seq{Seq: alphabet.BytesToLetters([]byte("ATAGGAA"))} fsb.Alpha = alphabet.DNAgapped // Query letter // - A C G T // - 0 -1 -1 -1 -1 // A -1 1 -1 -1 -1 // C -1 -1 1 -1 -1 // G -1 -1 -1 1 -1 // T -1 -1 -1 -1 1 // // Gap open: -5 fitted := FittedAffine{ Matrix: Linear{ {0, -1, -1, -1, -1}, {-1, 1, -1, -1, -1}, {-1, -1, 1, -1, -1}, {-1, -1, -1, 1, -1}, {-1, -1, -1, -1, 1}, }, GapOpen: -5, } aln, err := fitted.Align(fsa, fsb) if err == nil { fmt.Printf("%s\n", aln) fa := Format(fsa, fsb, aln, '-') fmt.Printf("%s\n%s\n", fa[0], fa[1]) } // Output: // [[0,7)/[0,7)=3] // ATTGGCA // ATAGGAA } biogo-1.0.4/align/fitted_letters.go0000644000175000017500000001063114136731467016620 0ustar nileshnilesh// This file is automatically generated. Do not edit - make changes to relevant got file. // Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package align import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "fmt" "os" "text/tabwriter" ) //line fitted_type.got:17 func drawFittedTableLetters(rSeq, qSeq alphabet.Letters, index alphabet.Index, table []int, a [][]int) { tw := tabwriter.NewWriter(os.Stdout, 0, 0, 0, ' ', tabwriter.AlignRight|tabwriter.Debug) fmt.Printf("rSeq: %s\n", rSeq) fmt.Printf("qSeq: %s\n", qSeq) fmt.Fprint(tw, "\tqSeq\t") for _, l := range qSeq { fmt.Fprintf(tw, "%c\t", l) } fmt.Fprintln(tw) r, c := rSeq.Len()+1, qSeq.Len()+1 fmt.Fprint(tw, "rSeq\t") for i := 0; i < r; i++ { if i != 0 { fmt.Fprintf(tw, "%c\t", rSeq[i-1]) } for j := 0; j < c; j++ { p := pointerFittedLetters(rSeq, qSeq, i, j, table, index, a, c) if p != "" { fmt.Fprintf(tw, "%s % 3v\t", p, table[i*c+j]) } else { fmt.Fprintf(tw, "%v\t", table[i*c+j]) } } fmt.Fprintln(tw) } tw.Flush() } func pointerFittedLetters(rSeq, qSeq alphabet.Letters, i, j int, table []int, index alphabet.Index, a [][]int, c int) string { if i == 0 || j == 0 { return "" } rVal := index[rSeq[i-1]] qVal := index[qSeq[j-1]] if rVal < 0 || qVal < 0 { return "" } switch p := i*c + j; table[p] { case table[p-c-1] + a[rVal][qVal]: return "⬉" case table[p-c] + a[rVal][gap]: return "⬆" case table[p-1] + a[gap][qVal]: return "⬅" default: return "" } } func (a Fitted) alignLetters(rSeq, qSeq alphabet.Letters, alpha alphabet.Alphabet) ([]feat.Pair, error) { let := len(a) la := make([]int, 0, let*let) for _, row := range a { if len(row) != let { return nil, ErrMatrixNotSquare } la = append(la, row...) } index := alpha.LetterIndex() r, c := rSeq.Len()+1, qSeq.Len()+1 table := make([]int, r*c) for j := range table[1:c] { table[j+1] = table[j] + la[index[qSeq[j]]] } for i := 1; i < r; i++ { for j := 1; j < c; j++ { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) if rVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in rSeq", rSeq[i-1], i-1) } if qVal < 0 { return nil, fmt.Errorf("align: illegal letter %q at position %d in qSeq", qSeq[j-1], j-1) } p := i*c + j diagScore := table[p-c-1] + la[rVal*let+qVal] upScore := table[p-c] + la[rVal*let] leftScore := table[p-1] + la[qVal] table[p] = max3(diagScore, upScore, leftScore) } } if debugFitted { drawFittedTableLetters(rSeq, qSeq, index, table, a) } var aln []feat.Pair score, last := 0, diag max := minInt var ( i int j = c - 1 qVal int ) for { qVal = index[qSeq[j-1]] if qVal >= 0 { break } j-- } for y := 1; y < r; y++ { v := table[(y*c)+c-1] rVal := index[rSeq[y-1]] if rVal < 0 { continue } if v >= max && la[rVal*let+qVal] >= 0 { i = y max = v } } maxI, maxJ := i, j for i > 0 && j > 0 { var ( rVal = index[rSeq[i-1]] qVal = index[qSeq[j-1]] ) switch p := i*c + j; table[p] { case table[p-c-1] + la[rVal*let+qVal]: if last != diag { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c-1] i-- j-- last = diag case table[p-c] + la[rVal*let]: if last != up && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-c] i-- last = up case table[p-1] + la[qVal]: if last != left && p != len(table)-1 { aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) maxI, maxJ = i, j score = 0 } score += table[p] - table[p-1] j-- last = left default: panic(fmt.Sprintf("align: fitted nw internal error: no path at row: %d col:%d\n", i, j)) } } aln = append(aln, &featPair{ a: feature{start: i, end: maxI}, b: feature{start: j, end: maxJ}, score: score, }) for i, j := 0, len(aln)-1; i < j; i, j = i+1, j-1 { aln[i], aln[j] = aln[j], aln[i] } return aln, nil } biogo-1.0.4/align/genCode.sh0000755000175000017500000001014114136731467015147 0ustar nileshnilesh#!/bin/bash # Copyright ©2011-2012 The bíogo Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. WARNING="// This file is automatically generated. Do not edit - make changes to relevant got file.\n" echo -e $WARNING\ > sw_letters.go cat < sw_type.got \ | gofmt -r 'alignType -> alignLetters' \ | gofmt -r 'Type -> alphabet.Letters' \ | gofmt -r 'drawSWTableType -> drawSWTableLetters' \ | gofmt -r 'pointerSWType -> pointerSWLetters' \ >> sw_letters.go echo -e $WARNING\ > sw_qletters.go cat < sw_type.got \ | gofmt -r 'alignType -> alignQLetters' \ | gofmt -r 'Type -> alphabet.QLetters' \ | gofmt -r 'drawSWTableType -> drawSWTableQLetters' \ | gofmt -r 'pointerSWType -> pointerSWQLetters' \ | gofmt -r 'rSeq[i] -> rSeq[i].L' \ | gofmt -r 'qSeq[i] -> qSeq[i].L' \ >> sw_qletters.go echo -e $WARNING\ > nw_letters.go cat < nw_type.got \ | gofmt -r 'alignType -> alignLetters' \ | gofmt -r 'Type -> alphabet.Letters' \ | gofmt -r 'drawNWTableType -> drawNWTableLetters' \ | gofmt -r 'pointerNWType -> pointerNWLetters' \ >> nw_letters.go echo -e $WARNING\ > nw_qletters.go cat < nw_type.got \ | gofmt -r 'alignType -> alignQLetters' \ | gofmt -r 'Type -> alphabet.QLetters' \ | gofmt -r 'drawNWTableType -> drawNWTableQLetters' \ | gofmt -r 'pointerNWType -> pointerNWQLetters' \ | gofmt -r 'rSeq[i] -> rSeq[i].L' \ | gofmt -r 'qSeq[i] -> qSeq[i].L' \ >> nw_qletters.go echo -e $WARNING\ > fitted_letters.go cat < fitted_type.got \ | gofmt -r 'alignType -> alignLetters' \ | gofmt -r 'Type -> alphabet.Letters' \ | gofmt -r 'drawFittedTableType -> drawFittedTableLetters' \ | gofmt -r 'pointerFittedType -> pointerFittedLetters' \ >> fitted_letters.go echo -e $WARNING\ > fitted_qletters.go cat < fitted_type.got \ | gofmt -r 'alignType -> alignQLetters' \ | gofmt -r 'Type -> alphabet.QLetters' \ | gofmt -r 'drawFittedTableType -> drawFittedTableQLetters' \ | gofmt -r 'pointerFittedType -> pointerFittedQLetters' \ | gofmt -r 'rSeq[i] -> rSeq[i].L' \ | gofmt -r 'qSeq[i] -> qSeq[i].L' \ >> fitted_qletters.go echo -e $WARNING\ > fitted_affine_letters.go cat < fitted_affine_type.got \ | gofmt -r 'alignType -> alignLetters' \ | gofmt -r 'Type -> alphabet.Letters' \ | gofmt -r 'drawFittedAffineTableType -> drawFittedAffineTableLetters' \ | gofmt -r 'pointerFittedAffineType -> pointerFittedAffineLetters' \ >> fitted_affine_letters.go echo -e $WARNING\ > fitted_affine_qletters.go cat < fitted_affine_type.got \ | gofmt -r 'alignType -> alignQLetters' \ | gofmt -r 'Type -> alphabet.QLetters' \ | gofmt -r 'drawFittedAffineTableType -> drawFittedAffineTableQLetters' \ | gofmt -r 'pointerFittedAffineType -> pointerFittedAffineQLetters' \ | gofmt -r 'rSeq[i] -> rSeq[i].L' \ | gofmt -r 'qSeq[i] -> qSeq[i].L' \ >> fitted_affine_qletters.go echo -e $WARNING\ > sw_affine_letters.go cat < sw_affine_type.got \ | gofmt -r 'alignType -> alignLetters' \ | gofmt -r 'Type -> alphabet.Letters' \ | gofmt -r 'drawSWAffineTableType -> drawSWAffineTableLetters' \ | gofmt -r 'pointerSWAffineType -> pointerSWAffineLetters' \ >> sw_affine_letters.go echo -e $WARNING\ > sw_affine_qletters.go cat < sw_affine_type.got \ | gofmt -r 'alignType -> alignQLetters' \ | gofmt -r 'Type -> alphabet.QLetters' \ | gofmt -r 'drawSWAffineTableType -> drawSWAffineTableQLetters' \ | gofmt -r 'pointerSWAffineType -> pointerSWAffineQLetters' \ | gofmt -r 'rSeq[i] -> rSeq[i].L' \ | gofmt -r 'qSeq[i] -> qSeq[i].L' \ >> sw_affine_qletters.go echo -e $WARNING\ > nw_affine_letters.go cat < nw_affine_type.got \ | gofmt -r 'alignType -> alignLetters' \ | gofmt -r 'Type -> alphabet.Letters' \ | gofmt -r 'drawNWAffineTableType -> drawNWAffineTableLetters' \ | gofmt -r 'pointerNWAffineType -> pointerNWAffineLetters' \ >> nw_affine_letters.go echo -e $WARNING\ > nw_affine_qletters.go cat < nw_affine_type.got \ | gofmt -r 'alignType -> alignQLetters' \ | gofmt -r 'Type -> alphabet.QLetters' \ | gofmt -r 'drawNWAffineTableType -> drawNWAffineTableQLetters' \ | gofmt -r 'pointerNWAffineType -> pointerNWAffineQLetters' \ | gofmt -r 'rSeq[i] -> rSeq[i].L' \ | gofmt -r 'qSeq[i] -> qSeq[i].L' \ >> nw_affine_qletters.go biogo-1.0.4/AUTHORS0000644000175000017500000000161414136731467013227 0ustar nileshnilesh# This is the official list of bíogo authors for copyright purposes. # This file is distinct from the CONTRIBUTORS files. # See the latter for an explanation. # Names should be added to this file as # Name or Organization # The email address is not required for organizations. # Please keep the list sorted. Brent Pedersen Clayton Wheeler Davor Kapsa Dan Kortschak David Rook Emmanouil "Manolis" Maragkakis Gordon Gremme Harry Scells Jason Travis Josh Bleecher Snyder Olga Botvinnik Peter Mattis Senthil Murugapiran Yaz Saito The University of Adelaide biogo-1.0.4/errors/0000755000175000017500000000000014136731467013471 5ustar nileshnileshbiogo-1.0.4/errors/chain.go0000644000175000017500000000625714136731467015114 0ustar nileshnilesh// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package errors import ( "sync" ) // Chain is an error and layered error annotations. type Chain interface { // The error behavior of a Chain is based on the last annotation applied. error // Cause returns the initial error in the Chain. Cause() error // Link adds an annotation layer to the Chain. Link(error) Chain // Last returns the Chain, or nil if the Chain is empty, and the most recent annotation. Last() (Chain, error) } // Links is an optional interface used by the Errors function. type Links interface { Errors() []error // Errors returns a flat list of errors in temporal order of annotation. } // NewChain returns a new Chain based on the provided error. If the error is a Chain it // is returned unaltered. func NewChain(err error) Chain { if c, ok := err.(Chain); ok { return c } return chain{m: new(sync.RWMutex), errors: []error{err}} } // Cause returns the initially identified cause of an error if the error is a Chain, or the error // itself if it is not. func Cause(err error) error { if c, ok := err.(Chain); ok { return c.Cause() } return err } // Link adds an annotation to an error, returning a Chain. func Link(err, annotation error) Chain { return NewChain(err).Link(annotation) } // Last returns the most recent annotation of an error and the remaining chain // after the annotation is removed or nil if no further errors remain. Last returns // a nil Chain if the error is not a Chain. func Last(err error) (Chain, error) { if c, ok := err.(Chain); ok { return c.Last() } return nil, err } // Errors returns a flat list of errors in temporal order of annotation. If the provided // error is not a Chain a single element slice of error is returned containing the error. // If the error implements Links, its Errors method is called and the result returned. func Errors(err error) []error { if err == nil { return nil } switch c := err.(type) { case Links: return c.Errors() case Chain: var errs []error for c != nil { c, err = c.Last() errs = append(errs, err) } return reverse(errs) default: return []error{err} } } func reverse(err []error) []error { for i, j := 0, len(err)-1; i < j; i, j = i+1, j-1 { err[i], err[j] = err[j], err[i] } return err } // chain is the basic implementation. type chain struct { m *sync.RWMutex errors []error } func (c chain) Error() string { c.m.RLock() defer c.m.RUnlock() if len(c.errors) > 0 { return c.errors[len(c.errors)-1].Error() } return "" } func (c chain) Cause() error { c.m.RLock() defer c.m.RUnlock() if len(c.errors) > 0 { return c.errors[0] } return nil } func (c chain) Link(err error) Chain { c.m.Lock() defer c.m.Unlock() c.errors = append(c.errors, err) return c } func (c chain) Last() (Chain, error) { c.m.RLock() defer c.m.RUnlock() switch len(c.errors) { case 0: return nil, nil case 1: return nil, c.errors[0] default: c.errors = c.errors[:len(c.errors)-1] return c, c.errors[len(c.errors)-1] } } func (c chain) Errors() []error { c.m.RLock() defer c.m.RUnlock() return c.errors } biogo-1.0.4/errors/errors.go0000644000175000017500000000660414136731467015342 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package errors supports generic rich error reporting. // // This package is deprecated. Since it was written much better // approaches have been developed. package errors import ( "bytes" "fmt" "runtime" "strings" ) // Type Error is the interface for rich error reporting supported by the // errors package. type Error interface { // FileLine returns the file name and line number of caller // stored at creation of the Error. FileLine() (file string, line int) // Trace returns a slice continuing the stack trace stored at // creation of the Error. Trace() (stack []*runtime.Func) // Package returns the package name of the stored caller. Package() string // Function returns the function name of the stored caller. Function() string // Items returns any items retained by caller. Items() []interface{} // Tracef returns a formatted stack trace of the error // extending depth frames into the stack, 0 indicates no limit. Tracef(depth int) string error } type errorBase struct { *runtime.Func pc []uintptr message string items []interface{} } // Make creates a new Error with message, storing information about the // caller stack frame skip levels above the caller and any item that may // be needed for handling the error. The number of frames stored is specified // by the depth parameter. If depth is zero, Make will panic. func Make(message string, skip, depth int, items ...interface{}) Error { if depth == 0 { panic("errors: zero trace depth") } err := &errorBase{ pc: make([]uintptr, depth), message: message, items: items, } var n int if n = runtime.Callers(skip+2, err.pc); n > 0 { err.Func = runtime.FuncForPC(err.pc[0]) } err.pc = err.pc[:n] return err } // Return the file name and line number of caller stored at creation of // the Error. func (err *errorBase) FileLine() (file string, line int) { return err.Func.FileLine(err.pc[0]) } // Return a slice contining the stack trace stored at creation of the Error. func (err *errorBase) Trace() (stack []*runtime.Func) { stack = make([]*runtime.Func, len(err.pc)) for i, pc := range err.pc { stack[i] = runtime.FuncForPC(pc) } return } // Return the package name of the stored caller. func (err *errorBase) Package() string { caller := strings.Split(err.Func.Name(), ".") return strings.Join(caller[0:len(caller)-1], ".") } // Return the function name of the stored caller. func (err *errorBase) Function() string { caller := strings.Split(err.Func.Name(), ".") return caller[len(caller)-1] } // Return any items retained by caller. func (err *errorBase) Items() []interface{} { return err.items } // A formatted stack trace of the error extending depth frames into the // stack, 0 indicates no limit. func (err *errorBase) Tracef(depth int) string { var last, name string b := &bytes.Buffer{} fmt.Fprintf(b, "Trace: %s:\n", err.message) for i, frame := range err.Trace() { if depth > 0 && i >= depth { break } file, line := frame.FileLine(err.pc[i]) if name = frame.Name(); name != last { fmt.Fprintf(b, "\n %s:\n", frame.Name()) } last = name fmt.Fprintf(b, "\t%s#L=%d\n", file, line) } return string(b.Bytes()) } // Satisfy the error interface. func (err *errorBase) Error() string { return err.message } biogo-1.0.4/errors/chain_test.go0000644000175000017500000000264014136731467016143 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package errors import ( "fmt" "io" "gopkg.in/check.v1" ) func (s *S) TestChain(c *check.C) { err := io.EOF err = Link(err, fmt.Errorf("failed: %v", err)) c.Check(err.Error(), check.Equals, "failed: EOF") c.Check(Cause(err), check.Equals, io.EOF) c.Check(Errors(err), check.DeepEquals, []error{io.EOF, fmt.Errorf("failed: EOF")}) } // userChain is the basic implementation without an UnwrapAll method. type userChain []error func (c userChain) Error() string { if len(c) > 0 { return c[len(c)-1].Error() } return "" } func (c userChain) Cause() error { if len(c) > 0 { return c[0] } return nil } func (c userChain) Link(err error) Chain { return append(c, err) } func (c userChain) Last() (Chain, error) { switch len(c) { case 0: return nil, nil case 1: return nil, c[0] default: return c[:len(c)-1], c[len(c)-1] } } func (s *S) TestUserChain(c *check.C) { var err error = userChain{io.EOF} err = Link(err, fmt.Errorf("failed: %v", err)) c.Check(err.Error(), check.Equals, "failed: EOF") c.Check(Cause(err), check.Equals, io.EOF) unwrapped := Errors(err) c.Check(Cause(err), check.Equals, unwrapped[0]) for i, e := range unwrapped { c.Check(e.Error(), check.Equals, []error{io.EOF, fmt.Errorf("failed: EOF")}[i].Error()) } } biogo-1.0.4/errors/errors_test.go0000644000175000017500000000314214136731467016373 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package errors import ( "testing" "gopkg.in/check.v1" ) func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) // Helpers func f(i int) error { if i == 0 { return Make("message", 0, 10) } i-- return f(i) } var traceRE = `Trace: message: github.com/biogo/biogo/errors.f: (?:[A-Z]:)?/.*/github.com/biogo/biogo/errors/errors_test.go#L=22 (?:[A-Z]:)?/.*/github.com/biogo/biogo/errors/errors_test.go#L=26 (?:[A-Z]:)?/.*/github.com/biogo/biogo/errors/errors_test.go#L=26 (?:[A-Z]:)?/.*/github.com/biogo/biogo/errors/errors_test.go#L=26 (?:[A-Z]:)?/.*/github.com/biogo/biogo/errors/errors_test.go#L=26 (?:[A-Z]:)?/.*/github.com/biogo/biogo/errors/errors_test.go#L=26 github.com/biogo/biogo/errors.\(\*S\).TestCaller: (?:[A-Z]:)?/.*/github.com/biogo/biogo/errors/errors_test.go#L=52 ` // Tests func (s *S) TestCaller(c *check.C) { c.Skip("This fails after Go1.15.") err := Make("message", 0, 10, "item") c.Check(err.Error(), check.Equals, "message") fn, ln := err.FileLine() c.Check(fn, check.Matches, "(?:[A-Z]:)?/.*/biogo/errors/errors_test.go") c.Check(ln, check.Equals, 45) c.Check(err.Package(), check.Equals, "github.com/biogo/biogo/errors.(*S)") c.Check(err.Function(), check.Equals, "TestCaller") err = f(5).(Error) c.Check(err.Tracef(7), check.Matches, traceRE) } func (s *S) TestMakeFail(c *check.C) { c.Check(func() { Make("message", 0, 0) }, check.Panics, "errors: zero trace depth") } biogo-1.0.4/io/0000755000175000017500000000000014136731467012564 5ustar nileshnileshbiogo-1.0.4/io/featio/0000755000175000017500000000000014136731467014033 5ustar nileshnileshbiogo-1.0.4/io/featio/gff/0000755000175000017500000000000014136731467014575 5ustar nileshnileshbiogo-1.0.4/io/featio/gff/gff_test.go0000644000175000017500000001463614136731467016737 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package gff import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/linear" "bytes" "io" "strings" "testing" "time" "gopkg.in/check.v1" ) // Helpers func floatPtr(f float64) *float64 { return &f } func mustTime(t time.Time, err error) time.Time { if err != nil { panic(err) } return t } // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) var ( gffTests = []struct { gff string feat []*Feature }{ { gff: `SEQ1 EMBL atg 103 105 . + 0 SEQ1 EMBL exon 103 172 . + 0 SEQ1 EMBL splice5 172 173 . + . SEQ1 netgene splice5 172 173 0.94 + . SEQ1 genie sp5-20 163 182 2.3 + . SEQ1 genie sp5-10 168 177 2.1 + . SEQ2 grail ATG 17 19 2.1 - 0 `, feat: []*Feature{ {SeqName: "SEQ1", Source: "EMBL", Feature: "atg", FeatStart: 102, FeatEnd: 105, FeatScore: nil, FeatFrame: Frame0, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "EMBL", Feature: "exon", FeatStart: 102, FeatEnd: 172, FeatScore: nil, FeatFrame: Frame0, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "EMBL", Feature: "splice5", FeatStart: 171, FeatEnd: 173, FeatScore: nil, FeatFrame: NoFrame, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "netgene", Feature: "splice5", FeatStart: 171, FeatEnd: 173, FeatScore: floatPtr(0.94), FeatFrame: NoFrame, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "genie", Feature: "sp5-20", FeatStart: 162, FeatEnd: 182, FeatScore: floatPtr(2.3), FeatFrame: NoFrame, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "genie", Feature: "sp5-10", FeatStart: 167, FeatEnd: 177, FeatScore: floatPtr(2.1), FeatFrame: NoFrame, FeatStrand: seq.Plus}, {SeqName: "SEQ2", Source: "grail", Feature: "ATG", FeatStart: 16, FeatEnd: 19, FeatScore: floatPtr(2.1), FeatFrame: Frame0, FeatStrand: seq.Minus}, }, }, } metaTests = []struct { date string format string sourceVersion string version int name string molType feat.Moltype gff string feat []feat.Feature write []interface{} }{ { date: "1997-11-08", format: Astronomical, sourceVersion: " ", version: 2, name: "", molType: feat.DNA, gff: `##gff-version 2 ##source-version ##date 1997-11-08 ##Type DNA ##DNA ##acggctcggattggcgctggatgatagatcagacgac ##... ##end-DNA ##RNA ##acggcucggauuggcgcuggaugauagaucagacgac ##... ##end-RNA ##Protein ##MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSF ##... ##end-Protein ##sequence-region 1 5 `, feat: []feat.Feature{ linear.NewSeq("", alphabet.BytesToLetters([]byte("acggctcggattggcgctggatgatagatcagacgac...")), alphabet.DNA), linear.NewSeq("", alphabet.BytesToLetters([]byte("acggcucggauuggcgcuggaugauagaucagacgac...")), alphabet.RNA), linear.NewSeq("", alphabet.BytesToLetters([]byte("MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSF...")), alphabet.Protein), &Region{Sequence: Sequence{SeqName: "", Type: feat.DNA}, RegionStart: 0, RegionEnd: 5}, }, write: []interface{}{ 2, "source-version ", mustTime(time.Parse(Astronomical, "1997-11-08")), Sequence{SeqName: "", Type: feat.DNA}, linear.NewSeq("", alphabet.BytesToLetters([]byte("acggctcggattggcgctggatgatagatcagacgac...")), alphabet.DNA), linear.NewSeq("", alphabet.BytesToLetters([]byte("acggcucggauuggcgcuggaugauagaucagacgac...")), alphabet.RNA), linear.NewSeq("", alphabet.BytesToLetters([]byte("MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSF...")), alphabet.Protein), &Region{Sequence: Sequence{SeqName: ""}, RegionStart: 0, RegionEnd: 5}, }, }, } ) func (s *S) TestUnsafeString(c *check.C) { for _, t := range []string{ "I", "Lorem", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", } { b := []byte(t) c.Check(unsafeString(b), check.Equals, t) } } func (s *S) TestReadGFF(c *check.C) { for i, g := range gffTests { buf := strings.NewReader(g.gff) r := NewReader(buf) for j := 0; ; j++ { f, err := r.Read() if err == io.EOF { c.Check(j, check.Equals, len(g.feat)) break } c.Check(f, check.DeepEquals, g.feat[j], check.Commentf("Test: %d Line: %d", i, j+1)) c.Check(err, check.Equals, nil) } } } func (s *S) TestReadMetaline(c *check.C) { for i, g := range metaTests { buf := strings.NewReader(g.gff) r := NewReader(buf) for j := 0; ; j++ { f, err := r.Read() if err == io.EOF { c.Check(j, check.Equals, len(g.feat)) break } c.Check(f, check.DeepEquals, g.feat[j], check.Commentf("Test: %d Line: %d", i, j+1)) c.Check(err, check.Equals, nil) } c.Check(r.Version, check.Equals, g.version) date, err := time.Parse(g.format, g.date) c.Assert(err, check.Equals, nil) c.Check(r.Name, check.Equals, g.name) c.Check(r.Type, check.Equals, g.molType) c.Check(r.Date, check.Equals, date) c.Check(r.SourceVersion, check.Equals, g.sourceVersion) } } const width = 37 // Not the normal fasta width - this matches the examples from the GFF spec page. func (s *S) TestWriteGff(c *check.C) { for i, g := range gffTests { buf := &bytes.Buffer{} w := NewWriter(buf, width, false) var n int for _, f := range g.feat { _n, err := w.Write(f) c.Check(err, check.Equals, nil) n += _n } c.Check(buf.Len(), check.Equals, n) c.Check(buf.String(), check.Equals, g.gff, check.Commentf("Test: %d", i)) } } func (s *S) TestWriteMetadata(c *check.C) { for i, g := range metaTests { buf := &bytes.Buffer{} w := NewWriter(buf, width, false) var n int for _, d := range g.write { _n, err := w.WriteMetaData(d) c.Check(err, check.Equals, nil) n += _n } c.Check(buf.Len(), check.Equals, n) c.Check(buf.String(), check.Equals, g.gff, check.Commentf("Test: %d", i)) } } biogo-1.0.4/io/featio/gff/gff.go0000644000175000017500000004537714136731467015706 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package gff provides types to read and write version 2 General Feature Format // files according to the Sanger Institute specification. // // The specification can be found at http://www.sanger.ac.uk/resources/software/gff/spec.html. package gff import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/feat" "github.com/biogo/biogo/io/featio" "github.com/biogo/biogo/io/seqio/fasta" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/linear" "bufio" "bytes" "encoding/csv" "fmt" "io" "math" "runtime" "strconv" "time" "unicode" "unsafe" ) var ( _ featio.Reader = (*Reader)(nil) _ featio.Writer = (*Writer)(nil) ) // Version is the GFF version that is read and written. const Version = 2 // "Astronomical" time format is the format specified in the GFF specification const Astronomical = "2006-1-02" type Error struct{ string } func (e Error) Error() string { return e.string } var ( ErrBadFeature = Error{"gff: feature start not less than feature end"} ErrBadStrandField = Error{"gff: bad strand field"} ErrBadStrand = Error{"gff: invalid strand"} ErrClosed = Error{"gff: writer closed"} ErrBadTag = Error{"gff: invalid tag"} ErrCannotHeader = Error{"gff: cannot write header: data written"} ErrNotHandled = Error{"gff: type not handled"} ErrFieldMissing = Error{"gff: missing fields"} ErrBadMoltype = Error{"gff: invalid moltype"} ErrEmptyMetaLine = Error{"gff: empty comment metaline"} ErrBadMetaLine = Error{"gff: incomplete metaline"} ErrBadSequence = Error{"gff: corrupt metasequence"} ) const ( nameField = iota sourceField featureField startField endField scoreField strandField frameField attributeField commentField lastField ) // Frame holds feature frame information. type Frame int8 func (f Frame) String() string { if f <= NoFrame || f > Frame2 { return "." } return [...]string{"0", "1", "2"}[f] } const ( NoFrame Frame = iota - 1 Frame0 Frame1 Frame2 ) // A Sequence is a feat.Feature type Sequence struct { SeqName string Type feat.Moltype } func (s Sequence) Start() int { return 0 } func (s Sequence) End() int { return 0 } func (s Sequence) Len() int { return 0 } func (s Sequence) Name() string { return string(s.SeqName) } func (s Sequence) Description() string { return "GFF sequence" } func (s Sequence) Location() feat.Feature { return nil } func (s Sequence) MolType() feat.Moltype { return s.Type } // A Region is a feat.Feature type Region struct { Sequence RegionStart int RegionEnd int } func (r *Region) Start() int { return r.RegionStart } func (r *Region) End() int { return r.RegionEnd } func (r *Region) Len() int { return r.RegionEnd - r.RegionStart } func (r *Region) Description() string { return "GFF region" } func (r *Region) Location() feat.Feature { return r.Sequence } // An Attribute represents a GFF2 attribute field record. Attribute field records // must have an tag value structure following the syntax used within objects in a // .ace file, flattened onto one line by semicolon separators. // Tags must be standard identifiers ([A-Za-z][A-Za-z0-9_]*). Free text values // must be quoted with double quotes. // // Note: all non-printing characters in free text value strings (e.g. newlines, // tabs, control characters, etc) must be explicitly represented by their C (UNIX) // style backslash-escaped representation. type Attribute struct { Tag, Value string } type Attributes []Attribute func (a Attributes) Get(tag string) string { for _, tv := range a { if tv.Tag == tag { return tv.Value } } return "" } func (a Attributes) Format(fs fmt.State, c rune) { for i, tv := range a { fmt.Fprintf(fs, "%s %s", tv.Tag, tv.Value) if i < len(a)-1 { fs.Write([]byte("; ")) } } } // A Feature represents a standard GFF2 feature. type Feature struct { // The name of the sequence. Having an explicit sequence name allows // a feature file to be prepared for a data set of multiple sequences. // Normally the seqname will be the identifier of the sequence in an // accompanying fasta format file. An alternative is that SeqName is // the identifier for a sequence in a public database, such as an // EMBL/Genbank/DDBJ accession number. Which is the case, and which // file or database to use, should be explained in accompanying // information. SeqName string // The source of this feature. This field will normally be used to // indicate the program making the prediction, or if it comes from // public database annotation, or is experimentally verified, etc. Source string // The feature type name. Feature string // FeatStart must be less than FeatEnd and non-negative - GFF indexing // is one-base and GFF features cannot have a zero length or a negative // position. gff.Feature indexing is, to be consistent with the rest of // the library zero-based half open. Translation between zero- and one- // based indexing is handled by the gff package. FeatStart, FeatEnd int // A floating point value representing the score for the feature. A nil // value indicates the score is not available. FeatScore *float64 // The strand of the feature - one of seq.Plus, seq.Minus or seq.None. // seq.None should be used when strand is not relevant, e.g. for // dinucleotide repeats. This field should be set to seq.None for RNA // and protein features. FeatStrand seq.Strand // FeatFrame indicates the frame of the feature. and takes the values // Frame0, Frame1, Frame2 or NoFrame. Frame0 indicates that the // specified region is in frame. Frame1 indicates that there is one // extra base, and Frame2 means that the third base of the region // is the first base of a codon. If the FeatStrand is seq.Minus, then // the first base of the region is value of FeatEnd, because the // corresponding coding region will run from FeatEnd to FeatStart on // the reverse strand. As with FeatStrand, if the frame is not relevant // then set FeatFrame to NoFram. This field should be set to seq.None // for RNA and protein features. FeatFrame Frame // FeatAttributes represents a collection of GFF2 attributes. FeatAttributes Attributes // Free comments. Comments string } func (g *Feature) Start() int { return g.FeatStart } func (g *Feature) End() int { return g.FeatEnd } func (g *Feature) Len() int { return g.FeatEnd - g.FeatStart } func (g *Feature) Name() string { return fmt.Sprintf("%s/%s:[%d,%d)", g.Feature, g.SeqName, g.FeatStart, g.FeatEnd) } func (g *Feature) Description() string { return fmt.Sprintf("%s/%s", g.Feature, g.Source) } func (g *Feature) Location() feat.Feature { return Sequence{SeqName: g.SeqName} } func handlePanic(f *feat.Feature, err *error) { r := recover() if r != nil { e, ok := r.(error) if !ok { panic(r) } if _, ok = r.(runtime.Error); ok { panic(r) } *err = e *f = nil } } // This function cannot be used to create strings that are expected to persist. func unsafeString(b []byte) string { return *(*string)(unsafe.Pointer(&b)) } func mustAtoi(f [][]byte, index, line int) int { i, err := strconv.ParseInt(unsafeString(f[index]), 0, 0) if err != nil { panic(&csv.ParseError{Line: line, Column: index, Err: err}) } return int(i) } func mustAtofPtr(f [][]byte, index, line int) *float64 { if len(f[index]) == 1 && f[index][0] == '.' { return nil } i, err := strconv.ParseFloat(unsafeString(f[index]), 64) if err != nil { panic(&csv.ParseError{Line: line, Column: index, Err: err}) } return &i } func mustAtoFr(f [][]byte, index, line int) Frame { if len(f[index]) == 1 && f[index][0] == '.' { return NoFrame } b, err := strconv.ParseInt(unsafeString(f[index]), 0, 8) if err != nil { panic(&csv.ParseError{Line: line, Column: index, Err: err}) } return Frame(b) } var charToStrand = func() [256]seq.Strand { var t [256]seq.Strand for i := range t { t[i] = 0x7f } t['+'] = seq.Plus t['.'] = seq.None t['-'] = seq.Minus return t }() func mustAtos(f [][]byte, index, line int) seq.Strand { if len(f[index]) != 1 { panic(&csv.ParseError{Line: line, Column: index, Err: ErrBadStrandField}) } s := charToStrand[f[index][0]] if s == 0x7f { panic(&csv.ParseError{Line: line, Column: index, Err: ErrBadStrand}) } return s } var alphaNum = func() [256]bool { var t [256]bool for i := 'a'; i <= 'z'; i++ { t[i] = true } for i := 'A'; i <= 'Z'; i++ { t[i] = true } t['_'] = true return t }() func splitAnnot(f []byte, column, line int) (tag, value []byte) { var ( i int b byte split bool ) for i, b = range f { space := unicode.IsSpace(rune(b)) if !split { if !space && !alphaNum[b] { panic(&csv.ParseError{Line: line, Column: column, Err: ErrBadTag}) } if space { split = true tag = f[:i] } } else if !space { break } } if !split { return f, nil } return tag, f[i:] } func mustAtoa(f [][]byte, index, line int) []Attribute { c := bytes.Split(f[index], []byte{';'}) a := make([]Attribute, 0, len(c)) for _, f := range c { f = bytes.TrimSpace(f) if len(f) == 0 { continue } tag, value := splitAnnot(f, index, line) if len(tag) == 0 { panic(&csv.ParseError{Line: line, Column: index, Err: ErrBadTag}) } else { a = append(a, Attribute{Tag: string(tag), Value: string(value)}) } } return a } type Metadata struct { Name string Date time.Time Version int SourceVersion string Type feat.Moltype } // A Reader can parse GFFv2 formatted io.Reader and return feat.Features. type Reader struct { r *bufio.Reader line int TimeFormat string // Required for parsing date fields. Defaults to astronomical format. Metadata } // NewReader returns a new GFFv2 format reader that reads from r. func NewReader(r io.Reader) *Reader { return &Reader{ r: bufio.NewReader(r), TimeFormat: Astronomical, Metadata: Metadata{Type: feat.Undefined}, } } func (r *Reader) commentMetaline(line []byte) (f feat.Feature, err error) { fields := bytes.Split(line, []byte{' '}) if len(fields) < 1 { return nil, &csv.ParseError{Line: r.line, Err: ErrEmptyMetaLine} } switch unsafeString(fields[0]) { case "gff-version": v := mustAtoi(fields, 1, r.line) if v > Version { return nil, &csv.ParseError{Line: r.line, Err: ErrNotHandled} } r.Version = Version return r.Read() case "source-version": if len(fields) <= 1 { return nil, &csv.ParseError{Line: r.line, Err: ErrBadMetaLine} } r.SourceVersion = string(bytes.Join(fields[1:], []byte{' '})) return r.Read() case "date": if len(fields) <= 1 { return nil, &csv.ParseError{Line: r.line, Err: ErrBadMetaLine} } if len(r.TimeFormat) > 0 { r.Date, err = time.Parse(r.TimeFormat, unsafeString(bytes.Join(fields[1:], []byte{' '}))) if err != nil { return nil, err } } return r.Read() case "Type", "type": if len(fields) <= 1 { return nil, &csv.ParseError{Line: r.line, Err: ErrBadMetaLine} } r.Type = feat.ParseMoltype(unsafeString(fields[1])) if len(fields) > 2 { r.Name = string(fields[2]) } return r.Read() case "sequence-region": if len(fields) <= 3 { return nil, &csv.ParseError{Line: r.line, Err: ErrBadMetaLine} } return &Region{ Sequence: Sequence{SeqName: string(fields[1]), Type: r.Type}, RegionStart: feat.OneToZero(mustAtoi(fields, 2, r.line)), RegionEnd: mustAtoi(fields, 3, r.line), }, nil case "DNA", "RNA", "Protein", "dna", "rna", "protein": if len(fields) <= 1 { return nil, &csv.ParseError{Line: r.line, Err: ErrBadMetaLine} } return r.metaSeq(fields[0], fields[1]) default: return nil, &csv.ParseError{Line: r.line, Err: ErrNotHandled} } } func (r *Reader) metaSeq(moltype, id []byte) (seq.Sequence, error) { var line, body []byte var err error for { line, err = r.r.ReadBytes('\n') if err != nil { if err == io.EOF { return nil, err } return nil, &csv.ParseError{Line: r.line, Err: err} } r.line++ line = bytes.TrimSpace(line) if len(line) == 0 { continue } if len(line) < 2 || !bytes.HasPrefix(line, []byte("##")) { return nil, &csv.ParseError{Line: r.line, Err: ErrBadSequence} } line = bytes.TrimSpace(line[2:]) if unsafeString(line) == "end-"+unsafeString(moltype) { break } else { line = bytes.Join(bytes.Fields(line), nil) body = append(body, line...) } } var alpha alphabet.Alphabet switch feat.ParseMoltype(unsafeString(moltype)) { case feat.DNA: alpha = alphabet.DNA case feat.RNA: alpha = alphabet.RNA case feat.Protein: alpha = alphabet.Protein default: return nil, ErrBadMoltype } s := linear.NewSeq(string(id), alphabet.BytesToLetters(body), alpha) return s, err } // Read reads a single feature or part and return it or an error. A call to read may // have side effects on the Reader's Metadata field. func (r *Reader) Read() (f feat.Feature, err error) { defer handlePanic(&f, &err) var line []byte for { line, err = r.r.ReadBytes('\n') if err != nil { if err == io.EOF { return f, err } return nil, &csv.ParseError{Line: r.line, Err: err} } r.line++ line = bytes.TrimSpace(line) if len(line) == 0 { // ignore blank lines continue } else if bytes.HasPrefix(line, []byte("##")) { f, err = r.commentMetaline(line[2:]) return } else if line[0] != '#' { // ignore comments break } } fields := bytes.SplitN(line, []byte{'\t'}, lastField) if len(fields) < frameField { return nil, &csv.ParseError{Line: r.line, Column: len(fields), Err: ErrFieldMissing} } gff := &Feature{ SeqName: string(fields[nameField]), Source: string(fields[sourceField]), Feature: string(fields[featureField]), FeatStart: feat.OneToZero(mustAtoi(fields, startField, r.line)), FeatEnd: mustAtoi(fields, endField, r.line), FeatScore: mustAtofPtr(fields, scoreField, r.line), FeatStrand: mustAtos(fields, strandField, r.line), FeatFrame: mustAtoFr(fields, frameField, r.line), } if len(fields) <= attributeField { return gff, nil } gff.FeatAttributes = mustAtoa(fields, attributeField, r.line) if len(fields) <= commentField { return gff, nil } gff.Comments = string(fields[commentField]) if gff.FeatStart >= gff.FeatEnd { err = ErrBadFeature } return gff, nil } // A Writer outputs features and sequences into GFFv2 format. type Writer struct { w io.Writer TimeFormat string Precision int Width int header bool } // Returns a new GFF format writer using w. When header is true, // a version header will be written to the GFF. func NewWriter(w io.Writer, width int, header bool) *Writer { gw := &Writer{ w: w, Width: width, TimeFormat: Astronomical, Precision: -1, } if header { gw.WriteMetaData(Version) } return gw } // Write writes a single feature and return the number of bytes written and any error. // gff.Features are written as a canonical GFF line, seq.Sequences are written as inline // sequence in GFF format (note that only sequences of feat.Moltype DNA, RNA and Protein // are supported). gff.Sequences are not handled as they have a zero length. All other // feat.Feature are written as sequence region metadata lines. func (w *Writer) Write(f feat.Feature) (n int, err error) { if f.Start() >= f.End() { return 0, ErrBadFeature } w.header = true switch f := f.(type) { case *Feature: defer func() { if err != nil { return } _, err = w.w.Write([]byte{'\n'}) if err != nil { return } n++ }() n, err = fmt.Fprintf(w.w, "%s\t%s\t%s\t%d\t%d\t", f.SeqName, f.Source, f.Feature, feat.ZeroToOne(f.FeatStart), f.FeatEnd, ) if err != nil { return n, err } var _n int if f.FeatScore != nil && !math.IsNaN(*f.FeatScore) { if w.Precision < 0 { _n, err = fmt.Fprintf(w.w, "%v", *f.FeatScore) } else { _n, err = fmt.Fprintf(w.w, "%.*f", w.Precision, *f.FeatScore) } if err != nil { return n, err } n += _n } else { _, err = w.w.Write([]byte{'.'}) if err != nil { return n, err } n++ } _n, err = fmt.Fprintf(w.w, "\t%s\t%s", f.FeatStrand, f.FeatFrame, ) n += _n if err != nil { return n, err } if f.FeatAttributes != nil { _n, err = fmt.Fprintf(w.w, "\t%v", f.FeatAttributes) if err != nil { return n, err } n += _n } else if f.Comments != "" { _, err = w.w.Write([]byte{'\t'}) if err != nil { return } n++ } if f.Comments != "" { _n, err = fmt.Fprintf(w.w, "\t%s", f.Comments) n += _n } return n, err case seq.Sequence: sw := fasta.NewWriter(w.w, w.Width) moltype := f.Alphabet().Moltype() if moltype < feat.DNA || moltype > feat.Protein { return 0, ErrNotHandled } sw.IDPrefix = [...][]byte{ feat.DNA: []byte("##DNA "), feat.RNA: []byte("##RNA "), feat.Protein: []byte("##Protein "), }[moltype] sw.SeqPrefix = []byte("##") n, err = sw.Write(f) if err != nil { return n, err } var _n int _n, err = w.w.Write([...][]byte{ feat.DNA: []byte("##end-DNA\n"), feat.RNA: []byte("##end-RNA\n"), feat.Protein: []byte("##end-Protein\n"), }[moltype]) return n + _n, err case Sequence: return 0, ErrNotHandled case *Region: return fmt.Fprintf(w.w, "##sequence-region %s %d %d\n", f.SeqName, feat.ZeroToOne(f.RegionStart), f.RegionEnd) default: return fmt.Fprintf(w.w, "##sequence-region %s %d %d\n", f.Name(), feat.ZeroToOne(f.Start()), f.End()) } } // WriteMetaData writes a meta data line to a GFF file. The type of metadata line // depends on the type of d: strings and byte slices are written verbatim, an int is // interpreted as a version number and can only be written before any other data, // feat.Moltype and gff.Sequence types are written as sequence type lines, gff.Features // and gff.Regions are written as sequence regions, sequences are written _n GFF // format and time.Time values are written as date line. All other type return an // ErrNotHandled. func (w *Writer) WriteMetaData(d interface{}) (n int, err error) { defer func() { w.header = true }() switch d := d.(type) { case string: return fmt.Fprintf(w.w, "##%s\n", d) case []byte: return fmt.Fprintf(w.w, "##%s\n", d) case int: if w.header { return 0, ErrCannotHeader } return fmt.Fprintf(w.w, "##gff-version %d\n", d) case feat.Moltype: return fmt.Fprintf(w.w, "##Type %s\n", d) case Sequence: return fmt.Fprintf(w.w, "##Type %s %s\n", d.Type, d.SeqName) case *Feature: return fmt.Fprintf(w.w, "##sequence-region %s %d %d\n", d.SeqName, feat.ZeroToOne(d.FeatStart), d.FeatEnd) case feat.Feature: return w.Write(d) case time.Time: return fmt.Fprintf(w.w, "##date %s\n", d.Format(w.TimeFormat)) } return 0, ErrNotHandled } // WriteComment writes a comment line to a GFF file. func (w *Writer) WriteComment(c string) (n int, err error) { return fmt.Fprintf(w.w, "# %s\n", c) } biogo-1.0.4/io/featio/featio_test.go0000644000175000017500000001004214136731467016665 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package featio_test import ( "github.com/biogo/biogo/io/featio" "github.com/biogo/biogo/io/featio/gff" "github.com/biogo/biogo/seq" "bytes" "testing" "gopkg.in/check.v1" ) // Helpers func floatPtr(f float64) *float64 { return &f } // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) func (s *S) TestReadGFF(c *check.C) { for i, g := range []struct { gff string feat []*gff.Feature }{ { gff: `SEQ1 EMBL atg 103 105 . + 0 SEQ1 EMBL exon 103 172 . + 0 SEQ1 EMBL splice5 172 173 . + . SEQ1 netgene splice5 172 173 0.94 + . SEQ1 genie sp5-20 163 182 2.3 + . SEQ1 genie sp5-10 168 177 2.1 + . SEQ2 grail ATG 17 19 2.1 - 0 `, feat: []*gff.Feature{ {SeqName: "SEQ1", Source: "EMBL", Feature: "atg", FeatStart: 102, FeatEnd: 105, FeatScore: nil, FeatFrame: gff.Frame0, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "EMBL", Feature: "exon", FeatStart: 102, FeatEnd: 172, FeatScore: nil, FeatFrame: gff.Frame0, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "EMBL", Feature: "splice5", FeatStart: 171, FeatEnd: 173, FeatScore: nil, FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "netgene", Feature: "splice5", FeatStart: 171, FeatEnd: 173, FeatScore: floatPtr(0.94), FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "genie", Feature: "sp5-20", FeatStart: 162, FeatEnd: 182, FeatScore: floatPtr(2.3), FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "genie", Feature: "sp5-10", FeatStart: 167, FeatEnd: 177, FeatScore: floatPtr(2.1), FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, {SeqName: "SEQ2", Source: "grail", Feature: "ATG", FeatStart: 16, FeatEnd: 19, FeatScore: floatPtr(2.1), FeatFrame: gff.Frame0, FeatStrand: seq.Minus}, }, }, } { sc := featio.NewScanner( gff.NewReader( bytes.NewBufferString(g.gff), ), ) var j int for sc.Next() { f := sc.Feat() c.Check(f, check.DeepEquals, g.feat[j], check.Commentf("Test: %d Line: %d", i, j+1)) j++ } c.Check(sc.Error(), check.Equals, nil) c.Check(j, check.Equals, len(g.feat)) } } func (s *S) TestReadFromFunc(c *check.C) { for i, g := range []struct { gff string feat []*gff.Feature }{ { gff: `SEQ1 EMBL atg 103 105 . + 0 SEQ1 EMBL exon 103 172 . + 0 SEQ1 EMBL splice5 172 173 . + . SEQ1 netgene splice5 172 173 0.94 + . SEQ1 genie sp5-20 163 182 2.3 + . SEQ1 genie sp5-10 168 177 2.1 + . SEQ2 grail ATG 17 19 2.1 - 0 `, feat: []*gff.Feature{ {SeqName: "SEQ1", Source: "EMBL", Feature: "atg", FeatStart: 102, FeatEnd: 105, FeatScore: nil, FeatFrame: gff.Frame0, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "EMBL", Feature: "exon", FeatStart: 102, FeatEnd: 172, FeatScore: nil, FeatFrame: gff.Frame0, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "EMBL", Feature: "splice5", FeatStart: 171, FeatEnd: 173, FeatScore: nil, FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "netgene", Feature: "splice5", FeatStart: 171, FeatEnd: 173, FeatScore: floatPtr(0.94), FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "genie", Feature: "sp5-20", FeatStart: 162, FeatEnd: 182, FeatScore: floatPtr(2.3), FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, {SeqName: "SEQ1", Source: "genie", Feature: "sp5-10", FeatStart: 167, FeatEnd: 177, FeatScore: floatPtr(2.1), FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, {SeqName: "SEQ2", Source: "grail", Feature: "ATG", FeatStart: 16, FeatEnd: 19, FeatScore: floatPtr(2.1), FeatFrame: gff.Frame0, FeatStrand: seq.Minus}, }, }, } { sc := featio.NewScannerFromFunc( gff.NewReader( bytes.NewBufferString(g.gff), ).Read, ) var j int for sc.Next() { f := sc.Feat() c.Check(f, check.DeepEquals, g.feat[j], check.Commentf("Test: %d Line: %d", i, j+1)) j++ } c.Check(sc.Error(), check.Equals, nil) c.Check(j, check.Equals, len(g.feat)) } } biogo-1.0.4/io/featio/featio.go0000644000175000017500000000453214136731467015635 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package featio provides interfaces for feature I/O functions. package featio import ( "github.com/biogo/biogo/feat" "io" ) // Reader is the common feat.Feature reader interface. type Reader interface { // Read reads a feat.Feature, returning any error that occurs during the read. Read() (feat.Feature, error) } // Writer is the common feat.Feature writer interface. type Writer interface { // Write write a feat.Feature, returning the number of bytes written and any // error that occurs during the write. Write(feat.Feature) (n int, err error) } // Scanner wraps a Reader to provide a convenient loop interface for reading feature data. // Successive calls to the Scan method will step through the features of the provided // Reader. Scanning stops unrecoverably at EOF or the first error. // // Note that it is possible for a Reader to return a valid feature and a non-nil error. So // programs that need more control over error handling should use a Reader directly instead. type Scanner struct { r Reader f feat.Feature err error } // NewScanner returns a Scanner to read from r. func NewScanner(r Reader) *Scanner { return &Scanner{r: r} } type funcReader func() (feat.Feature, error) func (f funcReader) Read() (feat.Feature, error) { return f() } // NewScannerFromFunc returns a Scanner to read features returned by calls to f. func NewScannerFromFunc(f func() (feat.Feature, error)) *Scanner { return &Scanner{r: funcReader(f)} } // Next advances the Scanner past the next feature, which will then be available through // the Feat method. It returns false when the scan stops, either by reaching the end of the // input or an error. After Next returns false, the Error method will return any error that // occurred during scanning, except that if it was io.EOF, Error will return nil. func (s *Scanner) Next() bool { if s.err != nil { return false } s.f, s.err = s.r.Read() return s.err == nil } // Error returns the first non-EOF error that was encountered by the Scanner. func (s *Scanner) Error() error { if s.err == io.EOF { return nil } return s.err } // Feat returns the most recent feature read by a call to Next. func (s *Scanner) Feat() feat.Feature { return s.f } biogo-1.0.4/io/featio/bed/0000755000175000017500000000000014136731467014565 5ustar nileshnileshbiogo-1.0.4/io/featio/bed/bed.go0000644000175000017500000003335114136731467015653 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package bed provides types to read and write BED format files according to // the UCSC specification. // // The specification can be found at http://genome.ucsc.edu/FAQ/FAQformat.html#format1. package bed import ( "github.com/biogo/biogo/feat" "github.com/biogo/biogo/io/featio" "github.com/biogo/biogo/seq" "bufio" "bytes" "encoding/csv" "errors" "fmt" "image/color" "io" "reflect" "runtime" "strconv" "unsafe" ) var ( ErrBadBedType = errors.New("bed: bad bed type") ErrBadStrandField = errors.New("bad strand field") ErrBadStrand = errors.New("invalid strand") ErrBadColorField = errors.New("bad color field") ErrMissingBlockValues = errors.New("missing block values") ErrNoChromField = errors.New("no chrom field available") ) const ( chromField = iota startField endField nameField scoreField strandField thickStartField thickEndField rgbField blockCountField blockSizesField blockStartsField ) var ( _ featio.Reader = (*Reader)(nil) _ featio.Writer = (*Writer)(nil) _ feat.Feature = (*Bed3)(nil) _ feat.Feature = (*Bed4)(nil) _ feat.Feature = (*Bed5)(nil) _ feat.Feature = (*Bed6)(nil) _ feat.Feature = (*Bed12)(nil) _ Bed = (*Bed3)(nil) _ Bed = (*Bed4)(nil) _ Bed = (*Bed5)(nil) _ Bed = (*Bed6)(nil) _ Bed = (*Bed12)(nil) _ feat.Orienter = (*Bed6)(nil) _ feat.Orienter = (*Bed12)(nil) ) type Bed interface { feat.Feature canBed(int) bool } func handlePanic(f feat.Feature, err *error) { r := recover() if r != nil { e, ok := r.(error) if !ok { panic(r) } if _, ok = r.(runtime.Error); ok { panic(r) } *err = e } } // This function cannot be used to create strings that are expected to persist. func unsafeString(b []byte) string { return *(*string)(unsafe.Pointer(&b)) } func mustAtoi(f []byte, column int) int { i, err := strconv.ParseInt(unsafeString(f), 0, 0) if err != nil { panic(&csv.ParseError{Column: column, Err: err}) } return int(i) } func mustAtob(f []byte, column int) byte { b, err := strconv.ParseUint(unsafeString(f), 0, 8) if err != nil { panic(&csv.ParseError{Column: column, Err: err}) } return byte(b) } var charToStrand = func() [256]seq.Strand { var t [256]seq.Strand for i := range t { t[i] = 0x7f } t['+'] = seq.Plus t['.'] = seq.None t['-'] = seq.Minus return t }() func mustAtos(f []byte, index int) seq.Strand { if len(f) != 1 { panic(&csv.ParseError{Column: index, Err: ErrBadStrandField}) } s := charToStrand[f[0]] if s == 0x7f { panic(&csv.ParseError{Column: index, Err: ErrBadStrand}) } return s } func mustAtoRgb(f []byte, index int) color.RGBA { c := bytes.SplitN(f, []byte{','}, 4) l := len(c) if l == 0 || (l == 1 && mustAtoi(c[0], index) == 0) { return color.RGBA{} } if l < 3 { panic(&csv.ParseError{Column: index, Err: ErrBadColorField}) } return color.RGBA{ R: mustAtob(c[0], index), G: mustAtob(c[1], index), B: mustAtob(c[2], index), A: 0xff, } } func mustAtoa(f []byte, index int) []int { c := bytes.Split(f, []byte{','}) a := make([]int, len(c)) for i, f := range c { if len(f) == 0 { return a[:i] } a[i] = mustAtoi(f, index) } return a } type Chrom string func (c Chrom) Start() int { return 0 } func (c Chrom) End() int { return 0 } func (c Chrom) Len() int { return 0 } func (c Chrom) Name() string { return string(c) } func (c Chrom) Description() string { return "bed chrom" } func (c Chrom) Location() feat.Feature { return nil } type Bed3 struct { Chrom string ChromStart int ChromEnd int } func parseBed3(line []byte) (b *Bed3, err error) { const n = 3 defer handlePanic(b, &err) f := bytes.SplitN(line, []byte{'\t'}, n+1) if len(f) < n { return nil, ErrBadBedType } b = &Bed3{ Chrom: string(f[chromField]), ChromStart: mustAtoi(f[startField], startField), ChromEnd: mustAtoi(f[endField], endField), } return } func (b *Bed3) Start() int { return b.ChromStart } func (b *Bed3) End() int { return b.ChromEnd } func (b *Bed3) Len() int { return b.ChromEnd - b.ChromStart } func (b *Bed3) Name() string { return fmt.Sprintf("%s:[%d,%d)", b.Chrom, b.ChromStart, b.ChromEnd) } func (b *Bed3) Description() string { return "bed3 feature" } func (b *Bed3) Location() feat.Feature { return Chrom(b.Chrom) } func (b *Bed3) canBed(i int) bool { return i <= 3 } func (b *Bed3) Format(fs fmt.State, c rune) { format(b, fs, c) } type Bed4 struct { Chrom string ChromStart int ChromEnd int FeatName string } func parseBed4(line []byte) (b *Bed4, err error) { const n = 4 defer handlePanic(b, &err) f := bytes.SplitN(line, []byte{'\t'}, n+1) if len(f) < n { return nil, ErrBadBedType } b = &Bed4{ Chrom: string(f[chromField]), ChromStart: mustAtoi(f[startField], startField), ChromEnd: mustAtoi(f[endField], endField), FeatName: string(f[nameField]), } return } func (b *Bed4) Start() int { return b.ChromStart } func (b *Bed4) End() int { return b.ChromEnd } func (b *Bed4) Len() int { return b.ChromEnd - b.ChromStart } func (b *Bed4) Name() string { return b.FeatName } func (b *Bed4) Description() string { return "bed4 feature" } func (b *Bed4) Location() feat.Feature { return Chrom(b.Chrom) } func (b *Bed4) canBed(i int) bool { return i <= 4 } func (b *Bed4) Format(fs fmt.State, c rune) { format(b, fs, c) } type Bed5 struct { Chrom string ChromStart int ChromEnd int FeatName string FeatScore int } func parseBed5(line []byte) (b *Bed5, err error) { const n = 5 defer handlePanic(b, &err) f := bytes.SplitN(line, []byte{'\t'}, n+1) if len(f) < n { return nil, ErrBadBedType } b = &Bed5{ Chrom: string(f[chromField]), ChromStart: mustAtoi(f[startField], startField), ChromEnd: mustAtoi(f[endField], endField), FeatName: string(f[nameField]), FeatScore: mustAtoi(f[scoreField], scoreField), } return } func (b *Bed5) Start() int { return b.ChromStart } func (b *Bed5) End() int { return b.ChromEnd } func (b *Bed5) Len() int { return b.ChromEnd - b.ChromStart } func (b *Bed5) Name() string { return b.FeatName } func (b *Bed5) Description() string { return "bed5 feature" } func (b *Bed5) Location() feat.Feature { return Chrom(b.Chrom) } func (b *Bed5) canBed(i int) bool { return i <= 5 } func (b *Bed5) Format(fs fmt.State, c rune) { format(b, fs, c) } type Bed6 struct { Chrom string ChromStart int ChromEnd int FeatName string FeatScore int FeatStrand seq.Strand } func parseBed6(line []byte) (b *Bed6, err error) { const n = 6 defer handlePanic(b, &err) f := bytes.SplitN(line, []byte{'\t'}, n+1) if len(f) < n { return nil, ErrBadBedType } b = &Bed6{ Chrom: string(f[chromField]), ChromStart: mustAtoi(f[startField], startField), ChromEnd: mustAtoi(f[endField], endField), FeatName: string(f[nameField]), FeatScore: mustAtoi(f[scoreField], scoreField), FeatStrand: mustAtos(f[strandField], strandField), } return } func (b *Bed6) Start() int { return b.ChromStart } func (b *Bed6) End() int { return b.ChromEnd } func (b *Bed6) Len() int { return b.ChromEnd - b.ChromStart } func (b *Bed6) Name() string { return b.FeatName } func (b *Bed6) Description() string { return "bed6 feature" } func (b *Bed6) Location() feat.Feature { return Chrom(b.Chrom) } func (b *Bed6) Orientation() feat.Orientation { return feat.Orientation(b.FeatStrand) } func (b *Bed6) canBed(i int) bool { return i <= 6 } func (b *Bed6) Format(fs fmt.State, c rune) { format(b, fs, c) } type Bed12 struct { Chrom string ChromStart int ChromEnd int FeatName string FeatScore int FeatStrand seq.Strand ThickStart int ThickEnd int Rgb color.RGBA BlockCount int BlockSizes []int BlockStarts []int } func parseBed12(line []byte) (b *Bed12, err error) { const n = 12 defer handlePanic(b, &err) f := bytes.SplitN(line, []byte{'\t'}, n+1) if len(f) < n { return nil, ErrBadBedType } b = &Bed12{ Chrom: string(f[chromField]), ChromStart: mustAtoi(f[startField], startField), ChromEnd: mustAtoi(f[endField], endField), FeatName: string(f[nameField]), FeatScore: mustAtoi(f[scoreField], scoreField), FeatStrand: mustAtos(f[strandField], strandField), ThickStart: mustAtoi(f[thickStartField], thickStartField), ThickEnd: mustAtoi(f[thickEndField], thickEndField), Rgb: mustAtoRgb(f[rgbField], rgbField), BlockCount: mustAtoi(f[blockCountField], blockCountField), BlockSizes: mustAtoa(f[blockSizesField], blockSizesField), BlockStarts: mustAtoa(f[blockStartsField], blockStartsField), } if b.BlockCount != len(b.BlockSizes) || b.BlockCount != len(b.BlockStarts) { return nil, ErrMissingBlockValues } return } func (b *Bed12) Start() int { return b.ChromStart } func (b *Bed12) End() int { return b.ChromEnd } func (b *Bed12) Len() int { return b.ChromEnd - b.ChromStart } func (b *Bed12) Name() string { return b.FeatName } func (b *Bed12) Description() string { return "bed12 feature" } func (b *Bed12) Location() feat.Feature { return Chrom(b.Chrom) } func (b *Bed12) Orientation() feat.Orientation { return feat.Orientation(b.FeatStrand) } func (b *Bed12) canBed(i int) bool { return i <= 12 } func (b *Bed12) Format(fs fmt.State, c rune) { format(b, fs, c) } // BED format reader type. type Reader struct { r *bufio.Reader BedType int line int } // Returns a new BED format reader using r. func NewReader(r io.Reader, b int) (*Reader, error) { switch b { case 3, 4, 5, 6, 12: default: return nil, ErrBadBedType } return &Reader{ r: bufio.NewReader(r), BedType: b, }, nil } // Read a single feature and return it or an error. func (r *Reader) Read() (f feat.Feature, err error) { line, err := r.r.ReadBytes('\n') if err != nil { return } r.line++ line = bytes.TrimSpace(line) switch r.BedType { case 3: f, err = parseBed3(line) case 4: f, err = parseBed4(line) case 5: f, err = parseBed5(line) case 6: f, err = parseBed6(line) case 12: f, err = parseBed12(line) default: return nil, ErrBadBedType } if err != nil { if err, ok := err.(*csv.ParseError); ok { err.Line = r.line return nil, err } return nil, fmt.Errorf("%v at line %d", err, r.line) } return } // Return the current line number func (r *Reader) Line() int { return r.line } func format(b Bed, fs fmt.State, c rune) { bv := reflect.ValueOf(b) if bv.IsNil() { fmt.Fprint(fs, "") return } bv = bv.Elem() switch c { case 'v': if fs.Flag('#') { fmt.Fprintf(fs, "&%#v", bv.Interface()) return } fallthrough case 's': width, _ := fs.Width() if !b.canBed(width) { fmt.Fprintf(fs, "%%!(BADWIDTH)%T", b) return } if width == 0 { width = bv.NumField() } for i := 0; i < width; i++ { f := bv.Field(i).Interface() if i >= rgbField { switch i { case rgbField: rv := reflect.ValueOf(f) if reflect.DeepEqual(rv.Interface(), color.RGBA{}) { fs.Write([]byte{'0'}) } else { fmt.Fprintf(fs, "%d,%d,%d", rv.Field(0).Interface(), rv.Field(1).Interface(), rv.Field(2).Interface()) } case blockCountField: fmt.Fprint(fs, f) case blockSizesField, blockStartsField: av := reflect.ValueOf(f) l := av.Len() for j := 0; j < l; j++ { fmt.Fprint(fs, av.Index(j).Interface()) if j < l-1 { fs.Write([]byte{','}) } } } } else { fmt.Fprint(fs, f) } if i < width-1 { fs.Write([]byte{'\t'}) } } default: fmt.Fprintf(fs, "%%!%c(%T=%3s)", c, b, b) } } // BED format writer type. type Writer struct { w io.Writer BedType int } // Returns a new BED format writer using w. func NewWriter(w io.Writer, b int) (*Writer, error) { switch b { case 3, 4, 5, 6, 12: default: return nil, ErrBadBedType } return &Writer{ w: w, BedType: b, }, nil } type Scorer interface { Score() int } // Write a single feature and return the number of bytes written and any error. func (w *Writer) Write(f feat.Feature) (n int, err error) { defer func() { if err != nil { return } _, err = w.w.Write([]byte{'\n'}) if err != nil { return } n++ }() // Handle Bed types. if f, ok := f.(Bed); ok { if !f.canBed(w.BedType) { return 0, ErrBadBedType } return fmt.Fprintf(w.w, "%*s", w.BedType, f) } // Handle other feature types. if f.Location() == nil { return 0, ErrNoChromField } // Bed3 n, err = fmt.Fprintf(w.w, "%s\t%d\t%d", f.Location(), f.Start(), f.End()) if w.BedType == 3 { return n, err } // Bed4 _n, err := fmt.Fprintf(w.w, "\t%s", f.Name()) n += _n if w.BedType == 4 || err != nil { return n, err } // Bed5 if f, ok := f.(Scorer); ok { _n, err := fmt.Fprintf(w.w, "\t%d", f.Score()) n += _n if err != nil { return n, err } } else { _n, err := fmt.Fprintf(w.w, "\t0") n += _n if err != nil { return n, err } } if w.BedType == 5 { return } // Bed6 if f, ok := f.(feat.Orienter); ok { _n, err := fmt.Fprintf(w.w, "\t%s", seq.Strand(f.Orientation())) n += _n if err != nil { return n, err } } else { _n, err := fmt.Fprintf(w.w, "\t.") n += _n if err != nil { return n, err } } if w.BedType == 6 || w.BedType == 0 { return } // Don't handle Bed12. _n, err = w.w.Write([]byte{'\n'}) n += _n return n, ErrBadBedType } biogo-1.0.4/io/featio/bed/bed_test.go0000644000175000017500000002351714136731467016715 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package bed import ( "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" "bytes" "fmt" "image/color" "strings" "testing" "gopkg.in/check.v1" ) var ( validBeds = []int{3, 4, 5, 6, 12} bedTests = []struct { fields int line string skipWrite bool // We do not trail with commas on lists, but we do handle them on read. beds []Bed }{ { 3, "chr1 11873 14409\n", false, []Bed{ &Bed3{"chr1", 11873, 14409}, }, }, { 4, "chr1 11873 14409 uc001aaa.3\n", false, []Bed{ &Bed3{"chr1", 11873, 14409}, &Bed4{"chr1", 11873, 14409, "uc001aaa.3"}, }, }, { 5, "chr1 11873 14409 uc001aaa.3 3\n", false, []Bed{ &Bed3{"chr1", 11873, 14409}, &Bed4{"chr1", 11873, 14409, "uc001aaa.3"}, &Bed5{"chr1", 11873, 14409, "uc001aaa.3", 3}, }, }, { 6, "chr1 11873 14409 uc001aaa.3 3 +\n", false, []Bed{ &Bed3{"chr1", 11873, 14409}, &Bed4{"chr1", 11873, 14409, "uc001aaa.3"}, &Bed5{"chr1", 11873, 14409, "uc001aaa.3", 3}, &Bed6{"chr1", 11873, 14409, "uc001aaa.3", 3, seq.Plus}, }, }, { 6, "chr1 11873 14409 uc001aaa.3 3 -\n", false, []Bed{ &Bed3{"chr1", 11873, 14409}, &Bed4{"chr1", 11873, 14409, "uc001aaa.3"}, &Bed5{"chr1", 11873, 14409, "uc001aaa.3", 3}, &Bed6{"chr1", 11873, 14409, "uc001aaa.3", 3, seq.Minus}, }, }, { 6, "chr1 11873 14409 uc001aaa.3 3 .\n", false, []Bed{ &Bed3{"chr1", 11873, 14409}, &Bed4{"chr1", 11873, 14409, "uc001aaa.3"}, &Bed5{"chr1", 11873, 14409, "uc001aaa.3", 3}, &Bed6{"chr1", 11873, 14409, "uc001aaa.3", 3, seq.None}, }, }, { 12, "chr1 11873 14409 uc001aaa.3 3 + 11873 11873 0 3 354,109,1189, 0,739,1347,\n", true, []Bed{ &Bed3{"chr1", 11873, 14409}, &Bed4{"chr1", 11873, 14409, "uc001aaa.3"}, &Bed5{"chr1", 11873, 14409, "uc001aaa.3", 3}, &Bed6{"chr1", 11873, 14409, "uc001aaa.3", 3, seq.Plus}, &Bed12{"chr1", 11873, 14409, "uc001aaa.3", 3, seq.Plus, 11873, 11873, color.RGBA{}, 3, []int{354, 109, 1189}, []int{0, 739, 1347}}, }, }, { 12, "chr1 11873 14409 uc001aaa.3 3 + 11873 11873 255,128,0 3 354,109,1189, 0,739,1347,\n", true, []Bed{ &Bed3{"chr1", 11873, 14409}, &Bed4{"chr1", 11873, 14409, "uc001aaa.3"}, &Bed5{"chr1", 11873, 14409, "uc001aaa.3", 3}, &Bed6{"chr1", 11873, 14409, "uc001aaa.3", 3, seq.Plus}, &Bed12{"chr1", 11873, 14409, "uc001aaa.3", 3, seq.Plus, 11873, 11873, color.RGBA{255, 128, 0, 255}, 3, []int{354, 109, 1189}, []int{0, 739, 1347}}, }, }, { 12, "chr1 11873 14409 uc001aaa.3 3 + 11873 11873 0 3 354,109,1189 0,739,1347\n", false, []Bed{ &Bed3{"chr1", 11873, 14409}, &Bed4{"chr1", 11873, 14409, "uc001aaa.3"}, &Bed5{"chr1", 11873, 14409, "uc001aaa.3", 3}, &Bed6{"chr1", 11873, 14409, "uc001aaa.3", 3, seq.Plus}, &Bed12{"chr1", 11873, 14409, "uc001aaa.3", 3, seq.Plus, 11873, 11873, color.RGBA{}, 3, []int{354, 109, 1189}, []int{0, 739, 1347}}, }, }, } ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) func (s *S) TestUnsafeString(c *check.C) { for _, t := range []string{ "I", "Lorem", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", } { b := []byte(t) c.Check(unsafeString(b), check.Equals, t) } } func (s *S) TestReadBed(c *check.C) { for i, b := range bedTests { for j, typ := range validBeds { buf := strings.NewReader(b.line) r, err := NewReader(buf, typ) c.Assert(err, check.Equals, nil) f, err := r.Read() if typ <= b.fields { c.Check(f, check.DeepEquals, b.beds[j], check.Commentf("Test: %d type: Bed%d", i, typ)) c.Check(err, check.Equals, nil) } else { c.Check(f, check.Equals, nil) c.Check(err, check.ErrorMatches, fmt.Sprintf("%s.*", ErrBadBedType), check.Commentf("Test: %d type: Bed%d", i, typ)) } } } } func (s *S) TestWriteBed(c *check.C) { for i, b := range bedTests { for _, typ := range validBeds { buf := &bytes.Buffer{} w, err := NewWriter(buf, typ) c.Assert(err, check.Equals, nil) n, err := w.Write(b.beds[len(b.beds)-1]) c.Check(n, check.Equals, buf.Len()) if typ <= b.fields { trunc := strings.Join(strings.Split(b.line, "\t")[:typ], "\t") if trunc[len(trunc)-1] != '\n' { trunc += "\n" } c.Check(err, check.Equals, nil) if !b.skipWrite { c.Check(buf.String(), check.Equals, trunc, check.Commentf("Test: %d type: Bed%d", i, typ)) } } else { c.Check(buf.String(), check.Equals, "") c.Check(err, check.ErrorMatches, fmt.Sprintf("%s.*", ErrBadBedType), check.Commentf("Test: %d type: Bed%d", i, typ)) } } } } type tf struct { chrom feat.Feature start, end int name string } func (f *tf) Start() int { return f.start } func (f *tf) End() int { return f.end } func (f *tf) Len() int { return f.end - f.start } func (f *tf) Name() string { if f.name == "" { return fmt.Sprintf("%s", f.chrom) } return f.name } func (f *tf) Description() string { return "test feat" } func (f *tf) Location() feat.Feature { return f.chrom } type sctf struct { tf score int } func (f *sctf) Score() int { return f.score } type sttf struct { tf strand seq.Strand } func (f *sttf) Orientation() feat.Orientation { return feat.Orientation(f.strand) } type ctf struct { tf score int strand seq.Strand } func (f *ctf) Score() int { return f.score } func (f *ctf) Orientation() feat.Orientation { return feat.Orientation(f.strand) } func (s *S) TestWriteFeature(c *check.C) { for i, f := range []struct { feat feat.Feature typ int line string err error }{ // Vanilla feature. { &tf{chrom: Chrom("test chrom"), start: 1, end: 99}, 3, "test chrom\t1\t99\n", nil, }, { &tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, 3, "test chrom\t1\t99\n", nil, }, { &tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, 4, "test chrom\t1\t99\ttest feat\n", nil, }, { &tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, 5, "test chrom\t1\t99\ttest feat\t0\n", nil, }, { &tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, 6, "test chrom\t1\t99\ttest feat\t0\t.\n", nil, }, { &tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, 12, "test chrom\t1\t99\ttest feat\t0\t.\n", ErrBadBedType, }, // Scorer. { &sctf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99}, score: 100}, 3, "test chrom\t1\t99\n", nil, }, { &sctf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, score: 100}, 3, "test chrom\t1\t99\n", nil, }, { &sctf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, score: 100}, 4, "test chrom\t1\t99\ttest feat\n", nil, }, { &sctf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, score: 100}, 5, "test chrom\t1\t99\ttest feat\t100\n", nil, }, { &sctf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, score: 100}, 6, "test chrom\t1\t99\ttest feat\t100\t.\n", nil, }, { &sctf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, score: 100}, 12, "test chrom\t1\t99\ttest feat\t100\t.\n", ErrBadBedType, }, // feat.Orientater. { &sttf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99}, strand: +1}, 3, "test chrom\t1\t99\n", nil, }, { &sttf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, strand: +1}, 3, "test chrom\t1\t99\n", nil, }, { &sttf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, strand: +1}, 4, "test chrom\t1\t99\ttest feat\n", nil, }, { &sttf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, strand: +1}, 5, "test chrom\t1\t99\ttest feat\t0\n", nil, }, { &sttf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, strand: +1}, 6, "test chrom\t1\t99\ttest feat\t0\t+\n", nil, }, { &sttf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, strand: +1}, 12, "test chrom\t1\t99\ttest feat\t0\t+\n", ErrBadBedType, }, // Complete. { &ctf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99}, score: 100, strand: +1}, 3, "test chrom\t1\t99\n", nil, }, { &ctf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, score: 100, strand: +1}, 3, "test chrom\t1\t99\n", nil, }, { &ctf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, score: 100, strand: +1}, 4, "test chrom\t1\t99\ttest feat\n", nil, }, { &ctf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, score: 100, strand: +1}, 5, "test chrom\t1\t99\ttest feat\t100\n", nil, }, { &ctf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, score: 100, strand: +1}, 6, "test chrom\t1\t99\ttest feat\t100\t+\n", nil, }, { &ctf{tf: tf{chrom: Chrom("test chrom"), start: 1, end: 99, name: "test feat"}, score: 100, strand: +1}, 12, "test chrom\t1\t99\ttest feat\t100\t+\n", ErrBadBedType, }, } { buf := &bytes.Buffer{} w, err := NewWriter(buf, f.typ) c.Assert(err, check.Equals, nil) n, err := w.Write(f.feat) c.Check(n, check.Equals, buf.Len()) c.Check(err, check.Equals, f.err) c.Check(buf.String(), check.Equals, f.line, check.Commentf("Test: %d type: Bed%d", i, f.typ)) } } biogo-1.0.4/io/seqio/0000755000175000017500000000000014136731467013704 5ustar nileshnileshbiogo-1.0.4/io/seqio/alignio/0000755000175000017500000000000014136731467015326 5ustar nileshnileshbiogo-1.0.4/io/seqio/alignio/alignio_test.go0000644000175000017500000000220514136731467020335 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package alignio import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/io/seqio/fasta" "github.com/biogo/biogo/io/seqio/fastq" "github.com/biogo/biogo/seq" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/seq/multi" "strings" "testing" "gopkg.in/check.v1" ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) func (s *S) TestReadFasta(c *check.C) { r := fasta.NewReader(strings.NewReader(fa), linear.NewSeq("", nil, alphabet.Protein)) m, _ := multi.NewMulti("", nil, seq.DefaultConsensus) a, err := NewReader(r, m).Read() c.Check(err, check.Equals, nil) c.Check(a.Rows(), check.Equals, 11) } func (s *S) TestReadFastq(c *check.C) { r := fastq.NewReader(strings.NewReader(fq), linear.NewQSeq("", nil, alphabet.DNA, alphabet.Sanger)) m, _ := multi.NewMulti("", nil, seq.DefaultQConsensus) a, err := NewReader(r, m).Read() c.Check(err, check.Equals, nil) c.Check(a.Rows(), check.Equals, 25) } biogo-1.0.4/io/seqio/alignio/alignio.go0000644000175000017500000000273114136731467017302 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package alignio for reading and writing multiple sequence alignment files package alignio import ( "github.com/biogo/biogo/io/seqio" "github.com/biogo/biogo/seq/multi" "io" ) // Reader implements multiple sequence reading from a seqio.Reader. type Reader struct { r seqio.Reader m *multi.Multi } // NewReader return a new Reader that will read sequences from r into m. func NewReader(r seqio.Reader, m *multi.Multi) *Reader { return &Reader{r, m} } // Read the contents of the embedded seqio.Reader into a seq.Sequence. // Returns the Alignment, or nil and an error if an error occurs. func (r *Reader) Read() (*multi.Multi, error) { for { s, err := r.r.Read() if err != nil { if err == io.EOF { break } else { return nil, err } } r.m.Add(s) } m, t := r.m, *r.m t.Seq = nil r.m = &t return m, nil } // Writer implements multiple sequence writing to a seqio.Writer. type Writer struct { w seqio.Writer } // Return a new Writer. func NewWriter(w seqio.Writer) *Writer { return &Writer{w} } // Write a multi.Multi to the embedded seqio.Writer. // Returns the number of bytes written and any error. func (w *Writer) Write(m *multi.Multi) (n int, err error) { var _n int for _, s := range m.Seq { _n, err = w.w.Write(s) n += _n if err != nil { break } } return } biogo-1.0.4/io/seqio/alignio/data_test.go0000644000175000017500000001636614136731467017641 0ustar nileshnileshpackage alignio var ( fa = `>AK1H_ECOLI/114-431 DESCRIPTION HERE CPDSINAALICRGEKMSIAIMAGVLEARGH-N--VTVIDPVEKLLAVG-HYLESTVDIAE STRRIAASRIP------A-DHMVLMAGFTAGN-EKGELVVLGRNGSDYSAAVLAACLRAD CCEIWTDVNGVYTCDP-------------RQVPDARLLKSMSYQEAMELSY--FGAKVLH PRTITPIAQFQIPCLIKNTGNPQAPGTL-IG--ASRDEDELP----VKGISNLN------ NMAMFSVSGP-GMKGMVGMAARVFAAMS-------RARISVVLITQSSSEYSISFCVPQS DCVRAERAMLEEFY-----LELKEGLLEPLAVAERLAIISV-VGDGLRTLRGISAKF--- ---FAALARANINIVAIA >AKH_HAEIN 114-431 -----------------VEDAVKATIDCRGEKLSIAMMKAWFEARGY-S--VHIVDPVKQ LLAKG-GYLESSVEIEESTKRVDAANIA--K-DKVVLMAGF---TAGNEKGELVLLGRNG SDYSAAC-----------------LAACLGASVCEIWTDVDGVYTCDP--RLVPDARLLP TLSYREAMELSYFGAKVIHPRTIGPLLPQNIPCVIKNTGNPSAPGSI-ID--GNVKSESL Q----VKGITNLDNLAMFNVSGPGMQGM---VGMASRVFSAMSGAGISVILITQSSSEYS ---ISFCVPVKSAEVAKTVLETEFA-----NELNEHQLEPIEVIKDLSIISV-VGDGMKQ AKGIAARF------FSALAQANISIVAIA >AKH1_MAIZE/117-440 -----------------ATESFSDFVVGHGELWSAQMLSYAIQKSGT-P--CSWMDTREV LVVNPSGANQVDPDYLESEKRLEKWFSRC-P-AETIIATGF---IASTPENIPTTLKRDG SDFSAAI-----------------IGSLVKARQVTIWTDVDGVFSADP--RKVSEAVILS TLSYQEAWEMSYFGANVLHPRTIIPVMKYNIPIVIRNIFNTSAPGTM-IC--QQPANENG DLEACVKAFATIDKLALVNVEGTGMAGV---PGTANAIFGAVKDVGANVIMISQASSEHS ---VCFAVPEKEVALVSAALHARFR-----EALAAGRLSKVEVIHNCSILAT-VGLRMAS TPGVSATL------FDALAKANINVRAIA >AK2H_ECOLI/112-431 -----------------INDAVYAEVVGHGEVWSARLMSAVLNQQG-----LPAAWLDAR EFLRAERAAQPQVDEGLSYPLLQQLLVQH-P-GKRLVVTGF---ISRNNAGETVLLGRNG SDYSATQ-----------------IGALAGVSRVTIWSDVAGVYSADP--RKVKDACLLP LLRLDEASELARLAAPVLHARTLQPVSGSEIDLQLRCSYTPDQGSTRIERVLASGTGARI VTSHDDVCLI-EFQVPASQDFKLAHKEI--DQILKRAQVRPLAVGVHNDRQLLQFCYTSE VADSALKILDEAG---------LPGELRLRQGLALVAMVGAGVTRNPLHCHRFWQQLKGQ PVEFTWQSDDGISLVAVL >AK1_BACSU/66-374 -----------------ISPREQDLLLSCGETISSVVFTSMLLDNGVKA--AALTGAQAG FLTNDQHTNAKIIEMKPER--LFSVLAN----HDAVVVAGF---QGATEKGDTTTIGRGG SDTSAAA-----------------LGAAVDAEYIDIFTDVEGVMTADP--RVVENAKPLP VVTYTEICNLAYQGAKVISPRAVEIAMQAKVPIRVRSTYS-NDKGTLVTSHHSSKVGSDV FERLITGIAH-VKDVTQFKVPAKIGQYN-----VQTEVFKAMANAGISVDFFNITPSEIV YTVAGNKTETAQR------------ILMDMGYDPMVTRNCAKVSAVGAGIMGVPGVTSKI ------VSALSEKEIPILQSA >AK2_BACST/63-370 -----------------KRE--MDMLLSTGEQVSIALLAMSLHEKGYKA--VSLTGWQAG ITTEEMHGNARIMNIDTT--RIRRCLDE----GAIVIVAGF---QGVTETGEITTLGRGG SDTTAVA-----------------LAAALKAEKCDIYTDVTGVFTTDP--RYVKTARKIK EISYDEMLELANLGAGVLHPRAVEFAKNYEVPLEVRSSME-NERGTMVK--EEVSMEQHL IVRGIAFEDQ-VTRVTVVGIEKYLQSVA--------TIFTALANRGINVDIIIQNA---- ----------------TNSETAS--VSFSIRTEDLPETLQVLQ-------------ALEG ADVHYESGLAKVSI-VGSGMISNPGVAARV------FEVLADQGIEIKMVS >AK2_BACSU/63-373 -----------------KRE--MDMLLATGEQVTISLLSMALQEKGYDA--VSYTGWQAG IRTEAIHGNARITDIDTS--VLADQLEK----GKIVIVAGF---QGMTEDCEITTLGRGG SDTTAVA-----------------LAAALKVDKCDIYTDVPGVFTTDP--RYVKSARKLE GISYDEMLELANLGAGVLHPRAVEFAKNYQVPLEVRSSTE-TEAGTLIE--EESSMEQNL IVRGIAFEDQ-ITRVTIYGLTSGLTTLS--------TIFTTLAKRNINVDIIIQTQ---- ----------------AEDKTG---ISFSVKTEDADQTVAVLEEYK---------DALEF EKIETESKLAKVSI-VGSGMVSNPGVAAEM------FAVLAQKNILIKMVS >AKAB_CORFL/63-379 -----------------ARE--MDMLLTAGERISNALVAMAIESLGAEA--QSFTGSQAG VLTTERHGNARIVDVTPG--RVREALDE----GKICIVAGF--QGVNKETRDVTTLGRGG SDTTAVA-----------------LAAALNADVCEIYSDVDGVYTADP--RIVPNAQKLE KLSFEEMLELAAVGSKILVLRSVEYARAFNVPLRVRSSYS-NDPGTLIAGSMEDIPVEEA VLTGVATDKS-EAKVTVLGISDKPGEAA--------KVFRALADAEINIDMVLQNV---- ----------------SSVEDGTTDITFTCPRADGRRAMEILKKLQ---------VQGNW TNVLYDDQVDKVSL-VGAGMKSHPGVTAEF------MEALRDVNVNIELIS >AKAB_MYCSM/63-379 -----------------PRE--MDMLLTAGERISNALVAMAIESLGAQA--RSFTGSQAG VITTGTHGNAKIIDVTPG--RLRDALDE----GQIVLVAGF--QGVSQDSKDVTTLGRGG SDTTAVA-----------------VAAALDADVCEIYTDVDGIFTADP--RIVPNARHLD TVSFEEMLEMAACGAKVLMLRCVEYARRYNVPIHVRSSYS-DKPGTIVKGSIEDIPMEDA ILTGVAHDRS-EAKVTVVGLPDVPGYAA--------KVFRAVAEADVNIDMVLQNI---- ----------------SKIEDGKTDITFTCARDNGPRAVEKLSALK---------SEIGF SQVLYDDHIGKVSL-IGAGMRSHPGVTATF------CEALAEAGINIDLIS >AK3_ECOLI/106-407 -----------------TSPALTDELVSHGELMSTLLFVEILRERD--V--QAQWFDVRK VMRTNDRFGRAEPDIAALAELAALQLLPR-LNEGLVITQGF---IGSENKGRTTTLGRGG SDYTAAL-----------------LAEALHASRVDIWTDVPGIYTTDP--RVVSAAKRID EIAFAEAAEMATFGAKVLHPATLLPAVRSDIPVFVGSSKDPRAGGTLVCNKTENPPLFRA LAL--RRNQT-LLTLHSLNMLHSRGFLA--------EVFGILARHNISVDLITTSEVSVA LTLDTTGSTSTG----------DTLLTQSLLMELSALCRVEVEEGLALVALIG------- ---NDLSKACGVGKEVF >AK_YEAST/134-472 A COMMENT FOR YEAST -----------------VSSRTVDLVMSCGEKLSCLFMTALCNDRGCKAKYVDLSHIVPS DFSASALDNSFYTFLVQALKEKLAPFVSA-KERIVPVFTGF---FGLVPTGLLNGVGRGY TDLCAAL-----------------IAVAVNADELQVWKEVDGIFTADP--RKVPEARLLD SVTPEEASELTYYGSEVIHPFTMEQVIRAKIPIRIKNVQNPLGNGTIIYPDNVAKKGEST PPHPPENLSS----SFYEKRKRGATAITTKN----DIFVINIHSNKKTLSHGFLAQIFTI LDKYKLVVDLISTSEVHVSMALPIPDADS-LKSLRQAEEKLRILGSVDITKKLSIVSLVG KHMKQYIGIAG---TMFTTLAEEGINIEMIS ` fq = `@FC12044_91407_8_200_406_24 GTTAGCTCCCACCTTAAGATGTTTA +FC12044_91407_8_200_406_24 SXXTXXXXXXXXXTTSUXSSXKTMQ @FC12044_91407_8_200_720_610 CTCTGTGGCACCCCATCCCTCACTT +FC12044_91407_8_200_720_610 OXXXXXXXXXXXXXXXXXTSXQTXU @FC12044_91407_8_200_345_133 GATTTTTTAACAATAAACGTACATA +FC12044_91407_8_200_345_133 OQTOOSFORTFFFIIOFFFFFFFFF @FC12044_91407_8_200_106_131 GTTGCCCAGGCTCGTCTTGAACTCC +FC12044_91407_8_200_106_131 XXXXXXXXXXXXXXSXXXXISTXQS @FC12044_91407_8_200_916_471 TGATTGAAGGTAGGGTAGCATACTG +FC12044_91407_8_200_916_471 XXXXXXXXXXXXXXXUXXUSXXTXW @FC12044_91407_8_200_57_85 GCTCCAATAGCGCAGAGGAAACCTG +FC12044_91407_8_200_57_85 XFXMXSXXSXXXOSQROOSROFQIQ @FC12044_91407_8_200_10_437 GCTGCTTGGGAGGCTGAGGCAGGAG +FC12044_91407_8_200_10_437 USXSXXXXXXUXXXSXQXXUQXXKS @FC12044_91407_8_200_154_436 AGACCTTTGGATACAATGAACGACT +FC12044_91407_8_200_154_436 MKKMQTSRXMSQTOMRFOOIFFFFF @FC12044_91407_8_200_336_64 AGGGAATTTTAGAGGAGGGCTGCCG +FC12044_91407_8_200_336_64 STQMOSXSXSQXQXXKXXXKFXFFK @FC12044_91407_8_200_620_233 TCTCCATGTTGGTCAGGCTGGTCTC +FC12044_91407_8_200_620_233 XXXXXXXXXXXXXXXXXXXXXSXSW @FC12044_91407_8_200_902_349 TGAACGTCGAGACGCAAGGCCCGCC +FC12044_91407_8_200_902_349 XMXSSXMXXSXQSXTSQXFKSKTOF @FC12044_91407_8_200_40_618 CTGTCCCCACGGCGGGGGGGCCTGG +FC12044_91407_8_200_40_618 TXXXXSXXXXXXXXXXXXXRKFOXS @FC12044_91407_8_200_83_511 GATGTACTCTTACACCCAGACTTTG +FC12044_91407_8_200_83_511 SOXXXXXUXXXXXXQKQKKROOQSU @FC12044_91407_8_200_76_246 TCAAGGGTGGATCTTGGCTCCCAGT +FC12044_91407_8_200_76_246 XTXTUXXXXXRXXXTXXSUXSRFXQ @FC12044_91407_8_200_303_427 TTGCGACAGAGTTTTGCTCTTGTCC +FC12044_91407_8_200_303_427 XXQROXXXXIXFQXXXOIQSSXUFF @FC12044_91407_8_200_31_299 TCTGCTCCAGCTCCAAGACGCCGCC +FC12044_91407_8_200_31_299 XRXTSXXXRXXSXQQOXQTSQSXKQ @FC12044_91407_8_200_553_135 TACGGAGCCGCGGGCGGGAAAGGCG +FC12044_91407_8_200_553_135 XSQQXXXXXXXXXXSXXMFFQXTKU @FC12044_91407_8_200_139_74 CCTCCCAGGTTCAAGCGATTATCCT +FC12044_91407_8_200_139_74 RMXUSXTXXQXXQUXXXSQISISSO @FC12044_91407_8_200_108_33 GTCATGGCGGCCCGCGCGGGGAGCG +FC12044_91407_8_200_108_33 OOOSSXXSXXOMKMOFMKFOKFFFF @FC12044_91407_8_200_980_965 ACAGTGGGTTCTTAAAGAAGAGTCG +FC12044_91407_8_200_980_965 TOSSRXXXSSMSXMOMXIRXOXFFS @FC12044_91407_8_200_981_857 AACGAGGGGCGCGACTTGACCTTGG +FC12044_91407_8_200_981_857 RXMSSXXXXSXQXQXFSXQFQKMXS @FC12044_91407_8_200_8_865 TTTCCCACCCCAGGAAGCCTTGGAC +FC12044_91407_8_200_8_865 XXXFKOROMKOORMIMRIIKKORFF @FC12044_91407_8_200_292_484 TCAGCCTCCGTGCCCAGCCCACTCC +FC12044_91407_8_200_292_484 XQXOSXXXXXUXXXXIXXXXQTOXF @FC12044_91407_8_200_675_16 CTCGGGAGGCTGAGGCAGGGGGGTT +FC12044_91407_8_200_675_16 OXTXXXSXXQXXOXXKMXXMXOKQF @FC12044_91407_8_200_285_136 CCAAATCTTGAATTGTAGCTCCCCT +FC12044_91407_8_200_285_136 OSXOQXXXXXSXXUXXTXXXXTRMS ` ) biogo-1.0.4/io/seqio/seqio_test.go0000644000175000017500000004775414136731467016433 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package seqio_test import ( "bytes" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/io/seqio" "github.com/biogo/biogo/io/seqio/fasta" "github.com/biogo/biogo/io/seqio/fastq" "github.com/biogo/biogo/seq/linear" "testing" "gopkg.in/check.v1" ) func TestSeqio(t *testing.T) { var ( _ seqio.Reader = (*fasta.Reader)(nil) _ seqio.Reader = (*fastq.Reader)(nil) _ seqio.Writer = (*fasta.Writer)(nil) _ seqio.Writer = (*fastq.Writer)(nil) ) } // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) var ( testaln0 = `>AK1H_ECOLI/114-431 DESCRIPTION HERE CPDSINAALICRGEKMSIAIMAGVLEARGH-N--VTVIDPVEKLLAVG-HYLESTVDIAE STRRIAASRIP------A-DHMVLMAGFTAGN-EKGELVVLGRNGSDYSAAVLAACLRAD CCEIWTDVNGVYTCDP-------------RQVPDARLLKSMSYQEAMELSY--FGAKVLH PRTITPIAQFQIPCLIKNTGNPQAPGTL-IG--ASRDEDELP----VKGISNLN------ NMAMFSVSGP-GMKGMVGMAARVFAAMS-------RARISVVLITQSSSEYSISFCVPQS DCVRAERAMLEEFY-----LELKEGLLEPLAVAERLAIISV-VGDGLRTLRGISAKF--- ---FAALARANINIVAIA >AKH_HAEIN 114-431 -----------------VEDAVKATIDCRGEKLSIAMMKAWFEARGY-S--VHIVDPVKQ LLAKG-GYLESSVEIEESTKRVDAANIA--K-DKVVLMAGF---TAGNEKGELVLLGRNG SDYSAAC-----------------LAACLGASVCEIWTDVDGVYTCDP--RLVPDARLLP TLSYREAMELSYFGAKVIHPRTIGPLLPQNIPCVIKNTGNPSAPGSI-ID--GNVKSESL Q----VKGITNLDNLAMFNVSGPGMQGM---VGMASRVFSAMSGAGISVILITQSSSEYS ---ISFCVPVKSAEVAKTVLETEFA-----NELNEHQLEPIEVIKDLSIISV-VGDGMKQ AKGIAARF------FSALAQANISIVAIA >AKH1_MAIZE/117-440 -----------------ATESFSDFVVGHGELWSAQMLSYAIQKSGT-P--CSWMDTREV LVVNPSGANQVDPDYLESEKRLEKWFSRC-P-AETIIATGF---IASTPENIPTTLKRDG SDFSAAI-----------------IGSLVKARQVTIWTDVDGVFSADP--RKVSEAVILS TLSYQEAWEMSYFGANVLHPRTIIPVMKYNIPIVIRNIFNTSAPGTM-IC--QQPANENG DLEACVKAFATIDKLALVNVEGTGMAGV---PGTANAIFGAVKDVGANVIMISQASSEHS ---VCFAVPEKEVALVSAALHARFR-----EALAAGRLSKVEVIHNCSILAT-VGLRMAS TPGVSATL------FDALAKANINVRAIA >AK2H_ECOLI/112-431 -----------------INDAVYAEVVGHGEVWSARLMSAVLNQQG-----LPAAWLDAR EFLRAERAAQPQVDEGLSYPLLQQLLVQH-P-GKRLVVTGF---ISRNNAGETVLLGRNG SDYSATQ-----------------IGALAGVSRVTIWSDVAGVYSADP--RKVKDACLLP LLRLDEASELARLAAPVLHARTLQPVSGSEIDLQLRCSYTPDQGSTRIERVLASGTGARI VTSHDDVCLI-EFQVPASQDFKLAHKEI--DQILKRAQVRPLAVGVHNDRQLLQFCYTSE VADSALKILDEAG---------LPGELRLRQGLALVAMVGAGVTRNPLHCHRFWQQLKGQ PVEFTWQSDDGISLVAVL >AK1_BACSU/66-374 -----------------ISPREQDLLLSCGETISSVVFTSMLLDNGVKA--AALTGAQAG FLTNDQHTNAKIIEMKPER--LFSVLAN----HDAVVVAGF---QGATEKGDTTTIGRGG SDTSAAA-----------------LGAAVDAEYIDIFTDVEGVMTADP--RVVENAKPLP VVTYTEICNLAYQGAKVISPRAVEIAMQAKVPIRVRSTYS-NDKGTLVTSHHSSKVGSDV FERLITGIAH-VKDVTQFKVPAKIGQYN-----VQTEVFKAMANAGISVDFFNITPSEIV YTVAGNKTETAQR------------ILMDMGYDPMVTRNCAKVSAVGAGIMGVPGVTSKI ------VSALSEKEIPILQSA >AK2_BACST/63-370 -----------------KRE--MDMLLSTGEQVSIALLAMSLHEKGYKA--VSLTGWQAG ITTEEMHGNARIMNIDTT--RIRRCLDE----GAIVIVAGF---QGVTETGEITTLGRGG SDTTAVA-----------------LAAALKAEKCDIYTDVTGVFTTDP--RYVKTARKIK EISYDEMLELANLGAGVLHPRAVEFAKNYEVPLEVRSSME-NERGTMVK--EEVSMEQHL IVRGIAFEDQ-VTRVTVVGIEKYLQSVA--------TIFTALANRGINVDIIIQNA---- ----------------TNSETAS--VSFSIRTEDLPETLQVLQ-------------ALEG ADVHYESGLAKVSI-VGSGMISNPGVAARV------FEVLADQGIEIKMVS >AK2_BACSU/63-373 -----------------KRE--MDMLLATGEQVTISLLSMALQEKGYDA--VSYTGWQAG IRTEAIHGNARITDIDTS--VLADQLEK----GKIVIVAGF---QGMTEDCEITTLGRGG SDTTAVA-----------------LAAALKVDKCDIYTDVPGVFTTDP--RYVKSARKLE GISYDEMLELANLGAGVLHPRAVEFAKNYQVPLEVRSSTE-TEAGTLIE--EESSMEQNL IVRGIAFEDQ-ITRVTIYGLTSGLTTLS--------TIFTTLAKRNINVDIIIQTQ---- ----------------AEDKTG---ISFSVKTEDADQTVAVLEEYK---------DALEF EKIETESKLAKVSI-VGSGMVSNPGVAAEM------FAVLAQKNILIKMVS >AKAB_CORFL/63-379 -----------------ARE--MDMLLTAGERISNALVAMAIESLGAEA--QSFTGSQAG VLTTERHGNARIVDVTPG--RVREALDE----GKICIVAGF--QGVNKETRDVTTLGRGG SDTTAVA-----------------LAAALNADVCEIYSDVDGVYTADP--RIVPNAQKLE KLSFEEMLELAAVGSKILVLRSVEYARAFNVPLRVRSSYS-NDPGTLIAGSMEDIPVEEA VLTGVATDKS-EAKVTVLGISDKPGEAA--------KVFRALADAEINIDMVLQNV---- ----------------SSVEDGTTDITFTCPRADGRRAMEILKKLQ---------VQGNW TNVLYDDQVDKVSL-VGAGMKSHPGVTAEF------MEALRDVNVNIELIS >AKAB_MYCSM/63-379 -----------------PRE--MDMLLTAGERISNALVAMAIESLGAQA--RSFTGSQAG VITTGTHGNAKIIDVTPG--RLRDALDE----GQIVLVAGF--QGVSQDSKDVTTLGRGG SDTTAVA-----------------VAAALDADVCEIYTDVDGIFTADP--RIVPNARHLD TVSFEEMLEMAACGAKVLMLRCVEYARRYNVPIHVRSSYS-DKPGTIVKGSIEDIPMEDA ILTGVAHDRS-EAKVTVVGLPDVPGYAA--------KVFRAVAEADVNIDMVLQNI---- ----------------SKIEDGKTDITFTCARDNGPRAVEKLSALK---------SEIGF SQVLYDDHIGKVSL-IGAGMRSHPGVTATF------CEALAEAGINIDLIS >AK3_ECOLI/106-407 -----------------TSPALTDELVSHGELMSTLLFVEILRERD--V--QAQWFDVRK VMRTNDRFGRAEPDIAALAELAALQLLPR-LNEGLVITQGF---IGSENKGRTTTLGRGG SDYTAAL-----------------LAEALHASRVDIWTDVPGIYTTDP--RVVSAAKRID EIAFAEAAEMATFGAKVLHPATLLPAVRSDIPVFVGSSKDPRAGGTLVCNKTENPPLFRA LAL--RRNQT-LLTLHSLNMLHSRGFLA--------EVFGILARHNISVDLITTSEVSVA LTLDTTGSTSTG----------DTLLTQSLLMELSALCRVEVEEGLALVALIG------- ---NDLSKACGVGKEVF >AK_YEAST/134-472 A COMMENT FOR YEAST -----------------VSSRTVDLVMSCGEKLSCLFMTALCNDRGCKAKYVDLSHIVPS DFSASALDNSFYTFLVQALKEKLAPFVSA-KERIVPVFTGF---FGLVPTGLLNGVGRGY TDLCAAL-----------------IAVAVNADELQVWKEVDGIFTADP--RKVPEARLLD SVTPEEASELTYYGSEVIHPFTMEQVIRAKIPIRIKNVQNPLGNGTIIYPDNVAKKGEST PPHPPENLSS----SFYEKRKRGATAITTKN----DIFVINIHSNKKTLSHGFLAQIFTI LDKYKLVVDLISTSEVHVSMALPIPDADS-LKSLRQAEEKLRILGSVDITKKLSIVSLVG KHMKQYIGIAG---TMFTTLAEEGINIEMIS ` expectNfa = []string{ "AK1H_ECOLI/114-431 DESCRIPTION HERE", "AKH_HAEIN 114-431", "AKH1_MAIZE/117-440", "AK2H_ECOLI/112-431", "AK1_BACSU/66-374", "AK2_BACST/63-370", "AK2_BACSU/63-373", "AKAB_CORFL/63-379", "AKAB_MYCSM/63-379", "AK3_ECOLI/106-407", "AK_YEAST/134-472 A COMMENT FOR YEAST", } expectSfa = [][]alphabet.Letter{ []alphabet.Letter("CPDSINAALICRGEKMSIAIMAGVLEARGH-N--VTVIDPVEKLLAVG-HYLESTVDIAESTRRIAASRIP------A-DHMVLMAGFTAGN-EKGELVVLGRNGSDYSAAVLAACLRADCCEIWTDVNGVYTCDP-------------RQVPDARLLKSMSYQEAMELSY--FGAKVLHPRTITPIAQFQIPCLIKNTGNPQAPGTL-IG--ASRDEDELP----VKGISNLN------NMAMFSVSGP-GMKGMVGMAARVFAAMS-------RARISVVLITQSSSEYSISFCVPQSDCVRAERAMLEEFY-----LELKEGLLEPLAVAERLAIISV-VGDGLRTLRGISAKF------FAALARANINIVAIA"), []alphabet.Letter("-----------------VEDAVKATIDCRGEKLSIAMMKAWFEARGY-S--VHIVDPVKQLLAKG-GYLESSVEIEESTKRVDAANIA--K-DKVVLMAGF---TAGNEKGELVLLGRNGSDYSAAC-----------------LAACLGASVCEIWTDVDGVYTCDP--RLVPDARLLPTLSYREAMELSYFGAKVIHPRTIGPLLPQNIPCVIKNTGNPSAPGSI-ID--GNVKSESLQ----VKGITNLDNLAMFNVSGPGMQGM---VGMASRVFSAMSGAGISVILITQSSSEYS---ISFCVPVKSAEVAKTVLETEFA-----NELNEHQLEPIEVIKDLSIISV-VGDGMKQAKGIAARF------FSALAQANISIVAIA"), []alphabet.Letter("-----------------ATESFSDFVVGHGELWSAQMLSYAIQKSGT-P--CSWMDTREVLVVNPSGANQVDPDYLESEKRLEKWFSRC-P-AETIIATGF---IASTPENIPTTLKRDGSDFSAAI-----------------IGSLVKARQVTIWTDVDGVFSADP--RKVSEAVILSTLSYQEAWEMSYFGANVLHPRTIIPVMKYNIPIVIRNIFNTSAPGTM-IC--QQPANENGDLEACVKAFATIDKLALVNVEGTGMAGV---PGTANAIFGAVKDVGANVIMISQASSEHS---VCFAVPEKEVALVSAALHARFR-----EALAAGRLSKVEVIHNCSILAT-VGLRMASTPGVSATL------FDALAKANINVRAIA"), []alphabet.Letter("-----------------INDAVYAEVVGHGEVWSARLMSAVLNQQG-----LPAAWLDAREFLRAERAAQPQVDEGLSYPLLQQLLVQH-P-GKRLVVTGF---ISRNNAGETVLLGRNGSDYSATQ-----------------IGALAGVSRVTIWSDVAGVYSADP--RKVKDACLLPLLRLDEASELARLAAPVLHARTLQPVSGSEIDLQLRCSYTPDQGSTRIERVLASGTGARIVTSHDDVCLI-EFQVPASQDFKLAHKEI--DQILKRAQVRPLAVGVHNDRQLLQFCYTSEVADSALKILDEAG---------LPGELRLRQGLALVAMVGAGVTRNPLHCHRFWQQLKGQPVEFTWQSDDGISLVAVL"), []alphabet.Letter("-----------------ISPREQDLLLSCGETISSVVFTSMLLDNGVKA--AALTGAQAGFLTNDQHTNAKIIEMKPER--LFSVLAN----HDAVVVAGF---QGATEKGDTTTIGRGGSDTSAAA-----------------LGAAVDAEYIDIFTDVEGVMTADP--RVVENAKPLPVVTYTEICNLAYQGAKVISPRAVEIAMQAKVPIRVRSTYS-NDKGTLVTSHHSSKVGSDVFERLITGIAH-VKDVTQFKVPAKIGQYN-----VQTEVFKAMANAGISVDFFNITPSEIVYTVAGNKTETAQR------------ILMDMGYDPMVTRNCAKVSAVGAGIMGVPGVTSKI------VSALSEKEIPILQSA"), []alphabet.Letter("-----------------KRE--MDMLLSTGEQVSIALLAMSLHEKGYKA--VSLTGWQAGITTEEMHGNARIMNIDTT--RIRRCLDE----GAIVIVAGF---QGVTETGEITTLGRGGSDTTAVA-----------------LAAALKAEKCDIYTDVTGVFTTDP--RYVKTARKIKEISYDEMLELANLGAGVLHPRAVEFAKNYEVPLEVRSSME-NERGTMVK--EEVSMEQHLIVRGIAFEDQ-VTRVTVVGIEKYLQSVA--------TIFTALANRGINVDIIIQNA--------------------TNSETAS--VSFSIRTEDLPETLQVLQ-------------ALEGADVHYESGLAKVSI-VGSGMISNPGVAARV------FEVLADQGIEIKMVS"), []alphabet.Letter("-----------------KRE--MDMLLATGEQVTISLLSMALQEKGYDA--VSYTGWQAGIRTEAIHGNARITDIDTS--VLADQLEK----GKIVIVAGF---QGMTEDCEITTLGRGGSDTTAVA-----------------LAAALKVDKCDIYTDVPGVFTTDP--RYVKSARKLEGISYDEMLELANLGAGVLHPRAVEFAKNYQVPLEVRSSTE-TEAGTLIE--EESSMEQNLIVRGIAFEDQ-ITRVTIYGLTSGLTTLS--------TIFTTLAKRNINVDIIIQTQ--------------------AEDKTG---ISFSVKTEDADQTVAVLEEYK---------DALEFEKIETESKLAKVSI-VGSGMVSNPGVAAEM------FAVLAQKNILIKMVS"), []alphabet.Letter("-----------------ARE--MDMLLTAGERISNALVAMAIESLGAEA--QSFTGSQAGVLTTERHGNARIVDVTPG--RVREALDE----GKICIVAGF--QGVNKETRDVTTLGRGGSDTTAVA-----------------LAAALNADVCEIYSDVDGVYTADP--RIVPNAQKLEKLSFEEMLELAAVGSKILVLRSVEYARAFNVPLRVRSSYS-NDPGTLIAGSMEDIPVEEAVLTGVATDKS-EAKVTVLGISDKPGEAA--------KVFRALADAEINIDMVLQNV--------------------SSVEDGTTDITFTCPRADGRRAMEILKKLQ---------VQGNWTNVLYDDQVDKVSL-VGAGMKSHPGVTAEF------MEALRDVNVNIELIS"), []alphabet.Letter("-----------------PRE--MDMLLTAGERISNALVAMAIESLGAQA--RSFTGSQAGVITTGTHGNAKIIDVTPG--RLRDALDE----GQIVLVAGF--QGVSQDSKDVTTLGRGGSDTTAVA-----------------VAAALDADVCEIYTDVDGIFTADP--RIVPNARHLDTVSFEEMLEMAACGAKVLMLRCVEYARRYNVPIHVRSSYS-DKPGTIVKGSIEDIPMEDAILTGVAHDRS-EAKVTVVGLPDVPGYAA--------KVFRAVAEADVNIDMVLQNI--------------------SKIEDGKTDITFTCARDNGPRAVEKLSALK---------SEIGFSQVLYDDHIGKVSL-IGAGMRSHPGVTATF------CEALAEAGINIDLIS"), []alphabet.Letter("-----------------TSPALTDELVSHGELMSTLLFVEILRERD--V--QAQWFDVRKVMRTNDRFGRAEPDIAALAELAALQLLPR-LNEGLVITQGF---IGSENKGRTTTLGRGGSDYTAAL-----------------LAEALHASRVDIWTDVPGIYTTDP--RVVSAAKRIDEIAFAEAAEMATFGAKVLHPATLLPAVRSDIPVFVGSSKDPRAGGTLVCNKTENPPLFRALAL--RRNQT-LLTLHSLNMLHSRGFLA--------EVFGILARHNISVDLITTSEVSVALTLDTTGSTSTG----------DTLLTQSLLMELSALCRVEVEEGLALVALIG----------NDLSKACGVGKEVF"), []alphabet.Letter("-----------------VSSRTVDLVMSCGEKLSCLFMTALCNDRGCKAKYVDLSHIVPSDFSASALDNSFYTFLVQALKEKLAPFVSA-KERIVPVFTGF---FGLVPTGLLNGVGRGYTDLCAAL-----------------IAVAVNADELQVWKEVDGIFTADP--RKVPEARLLDSVTPEEASELTYYGSEVIHPFTMEQVIRAKIPIRIKNVQNPLGNGTIIYPDNVAKKGESTPPHPPENLSS----SFYEKRKRGATAITTKN----DIFVINIHSNKKTLSHGFLAQIFTILDKYKLVVDLISTSEVHVSMALPIPDADS-LKSLRQAEEKLRILGSVDITKKLSIVSLVGKHMKQYIGIAG---TMFTTLAEEGINIEMIS"), } ) func (s *S) TestReadFasta(c *check.C) { var ( obtainNfa []string obtainSfa [][]alphabet.Letter ) sc := seqio.NewScanner( fasta.NewReader( bytes.NewBufferString(testaln0), linear.NewSeq("", nil, alphabet.Protein), ), ) for sc.Next() { t := sc.Seq().(*linear.Seq) header := t.Name() if desc := t.Description(); len(desc) > 0 { header += " " + desc } obtainNfa = append(obtainNfa, header) obtainSfa = append(obtainSfa, t.Slice().(alphabet.Letters)) } c.Check(sc.Error(), check.Equals, nil) c.Check(obtainNfa, check.DeepEquals, expectNfa) for i := range obtainSfa { c.Check(len(obtainSfa[i]), check.Equals, len(expectSfa[i])) c.Check(obtainSfa[i], check.DeepEquals, expectSfa[i]) } } func (s *S) TestReadFromFunc(c *check.C) { var ( obtainNfa []string obtainSfa [][]alphabet.Letter ) sc := seqio.NewScannerFromFunc( fasta.NewReader( bytes.NewBufferString(testaln0), linear.NewSeq("", nil, alphabet.Protein), ).Read, ) for sc.Next() { t := sc.Seq().(*linear.Seq) header := t.Name() if desc := t.Description(); len(desc) > 0 { header += " " + desc } obtainNfa = append(obtainNfa, header) obtainSfa = append(obtainSfa, t.Slice().(alphabet.Letters)) } c.Check(sc.Error(), check.Equals, nil) c.Check(obtainNfa, check.DeepEquals, expectNfa) for i := range obtainSfa { c.Check(len(obtainSfa[i]), check.Equals, len(expectSfa[i])) c.Check(obtainSfa[i], check.DeepEquals, expectSfa[i]) } } // Helper func constructQL(l [][]alphabet.Letter, q [][]alphabet.Qphred) (ql [][]alphabet.QLetter) { if len(l) != len(q) { panic("test data length mismatch") } ql = make([][]alphabet.QLetter, len(l)) for i := range ql { if len(l[i]) != len(q[i]) { panic("test data length mismatch") } ql[i] = make([]alphabet.QLetter, len(l[i])) for j := range ql[i] { ql[i][j] = alphabet.QLetter{L: l[i][j], Q: q[i][j]} } } return } var ( fq0 = `@FC12044_91407_8_200_406_24 GTTAGCTCCCACCTTAAGATGTTTA +FC12044_91407_8_200_406_24 SXXTXXXXXXXXXTTSUXSSXKTMQ @FC12044_91407_8_200_720_610 CTCTGTGGCACCCCATCCCTCACTT +FC12044_91407_8_200_720_610 OXXXXXXXXXXXXXXXXXTSXQTXU @FC12044_91407_8_200_345_133 GATTTTTTAACAATAAACGTACATA +FC12044_91407_8_200_345_133 OQTOOSFORTFFFIIOFFFFFFFFF @FC12044_91407_8_200_106_131 GTTGCCCAGGCTCGTCTTGAACTCC +FC12044_91407_8_200_106_131 XXXXXXXXXXXXXXSXXXXISTXQS @FC12044_91407_8_200_916_471 TGATTGAAGGTAGGGTAGCATACTG +FC12044_91407_8_200_916_471 XXXXXXXXXXXXXXXUXXUSXXTXW @FC12044_91407_8_200_57_85 GCTCCAATAGCGCAGAGGAAACCTG +FC12044_91407_8_200_57_85 XFXMXSXXSXXXOSQROOSROFQIQ @FC12044_91407_8_200_10_437 GCTGCTTGGGAGGCTGAGGCAGGAG +FC12044_91407_8_200_10_437 USXSXXXXXXUXXXSXQXXUQXXKS @FC12044_91407_8_200_154_436 AGACCTTTGGATACAATGAACGACT +FC12044_91407_8_200_154_436 MKKMQTSRXMSQTOMRFOOIFFFFF @FC12044_91407_8_200_336_64 AGGGAATTTTAGAGGAGGGCTGCCG +FC12044_91407_8_200_336_64 STQMOSXSXSQXQXXKXXXKFXFFK @FC12044_91407_8_200_620_233 TCTCCATGTTGGTCAGGCTGGTCTC +FC12044_91407_8_200_620_233 XXXXXXXXXXXXXXXXXXXXXSXSW @FC12044_91407_8_200_902_349 TGAACGTCGAGACGCAAGGCCCGCC +FC12044_91407_8_200_902_349 XMXSSXMXXSXQSXTSQXFKSKTOF @FC12044_91407_8_200_40_618 CTGTCCCCACGGCGGGGGGGCCTGG +FC12044_91407_8_200_40_618 TXXXXSXXXXXXXXXXXXXRKFOXS @FC12044_91407_8_200_83_511 GATGTACTCTTACACCCAGACTTTG +FC12044_91407_8_200_83_511 SOXXXXXUXXXXXXQKQKKROOQSU @FC12044_91407_8_200_76_246 TCAAGGGTGGATCTTGGCTCCCAGT +FC12044_91407_8_200_76_246 XTXTUXXXXXRXXXTXXSUXSRFXQ @FC12044_91407_8_200_303_427 TTGCGACAGAGTTTTGCTCTTGTCC +FC12044_91407_8_200_303_427 XXQROXXXXIXFQXXXOIQSSXUFF @FC12044_91407_8_200_31_299 TCTGCTCCAGCTCCAAGACGCCGCC +FC12044_91407_8_200_31_299 XRXTSXXXRXXSXQQOXQTSQSXKQ @FC12044_91407_8_200_553_135 TACGGAGCCGCGGGCGGGAAAGGCG +FC12044_91407_8_200_553_135 XSQQXXXXXXXXXXSXXMFFQXTKU @FC12044_91407_8_200_139_74 CCTCCCAGGTTCAAGCGATTATCCT +FC12044_91407_8_200_139_74 RMXUSXTXXQXXQUXXXSQISISSO @FC12044_91407_8_200_108_33 GTCATGGCGGCCCGCGCGGGGAGCG +FC12044_91407_8_200_108_33 OOOSSXXSXXOMKMOFMKFOKFFFF @FC12044_91407_8_200_980_965 ACAGTGGGTTCTTAAAGAAGAGTCG +FC12044_91407_8_200_980_965 TOSSRXXXSSMSXMOMXIRXOXFFS @FC12044_91407_8_200_981_857 AACGAGGGGCGCGACTTGACCTTGG +FC12044_91407_8_200_981_857 RXMSSXXXXSXQXQXFSXQFQKMXS @FC12044_91407_8_200_8_865 TTTCCCACCCCAGGAAGCCTTGGAC +FC12044_91407_8_200_8_865 XXXFKOROMKOORMIMRIIKKORFF @FC12044_91407_8_200_292_484 TCAGCCTCCGTGCCCAGCCCACTCC +FC12044_91407_8_200_292_484 XQXOSXXXXXUXXXXIXXXXQTOXF @FC12044_91407_8_200_675_16 CTCGGGAGGCTGAGGCAGGGGGGTT +FC12044_91407_8_200_675_16 OXTXXXSXXQXXOXXKMXXMXOKQF @FC12044_91407_8_200_285_136 CCAAATCTTGAATTGTAGCTCCCCT +FC12044_91407_8_200_285_136 OSXOQXXXXXSXXUXXTXXXXTRMS ` expectNfq = []string{ "FC12044_91407_8_200_406_24", "FC12044_91407_8_200_720_610", "FC12044_91407_8_200_345_133", "FC12044_91407_8_200_106_131", "FC12044_91407_8_200_916_471", "FC12044_91407_8_200_57_85", "FC12044_91407_8_200_10_437", "FC12044_91407_8_200_154_436", "FC12044_91407_8_200_336_64", "FC12044_91407_8_200_620_233", "FC12044_91407_8_200_902_349", "FC12044_91407_8_200_40_618", "FC12044_91407_8_200_83_511", "FC12044_91407_8_200_76_246", "FC12044_91407_8_200_303_427", "FC12044_91407_8_200_31_299", "FC12044_91407_8_200_553_135", "FC12044_91407_8_200_139_74", "FC12044_91407_8_200_108_33", "FC12044_91407_8_200_980_965", "FC12044_91407_8_200_981_857", "FC12044_91407_8_200_8_865", "FC12044_91407_8_200_292_484", "FC12044_91407_8_200_675_16", "FC12044_91407_8_200_285_136", } expectSfq = [][]alphabet.Letter{ []alphabet.Letter("GTTAGCTCCCACCTTAAGATGTTTA"), []alphabet.Letter("CTCTGTGGCACCCCATCCCTCACTT"), []alphabet.Letter("GATTTTTTAACAATAAACGTACATA"), []alphabet.Letter("GTTGCCCAGGCTCGTCTTGAACTCC"), []alphabet.Letter("TGATTGAAGGTAGGGTAGCATACTG"), []alphabet.Letter("GCTCCAATAGCGCAGAGGAAACCTG"), []alphabet.Letter("GCTGCTTGGGAGGCTGAGGCAGGAG"), []alphabet.Letter("AGACCTTTGGATACAATGAACGACT"), []alphabet.Letter("AGGGAATTTTAGAGGAGGGCTGCCG"), []alphabet.Letter("TCTCCATGTTGGTCAGGCTGGTCTC"), []alphabet.Letter("TGAACGTCGAGACGCAAGGCCCGCC"), []alphabet.Letter("CTGTCCCCACGGCGGGGGGGCCTGG"), []alphabet.Letter("GATGTACTCTTACACCCAGACTTTG"), []alphabet.Letter("TCAAGGGTGGATCTTGGCTCCCAGT"), []alphabet.Letter("TTGCGACAGAGTTTTGCTCTTGTCC"), []alphabet.Letter("TCTGCTCCAGCTCCAAGACGCCGCC"), []alphabet.Letter("TACGGAGCCGCGGGCGGGAAAGGCG"), []alphabet.Letter("CCTCCCAGGTTCAAGCGATTATCCT"), []alphabet.Letter("GTCATGGCGGCCCGCGCGGGGAGCG"), []alphabet.Letter("ACAGTGGGTTCTTAAAGAAGAGTCG"), []alphabet.Letter("AACGAGGGGCGCGACTTGACCTTGG"), []alphabet.Letter("TTTCCCACCCCAGGAAGCCTTGGAC"), []alphabet.Letter("TCAGCCTCCGTGCCCAGCCCACTCC"), []alphabet.Letter("CTCGGGAGGCTGAGGCAGGGGGGTT"), []alphabet.Letter("CCAAATCTTGAATTGTAGCTCCCCT"), } expectQ = [][]alphabet.Qphred{ {50, 55, 55, 51, 55, 55, 55, 55, 55, 55, 55, 55, 55, 51, 51, 50, 52, 55, 50, 50, 55, 42, 51, 44, 48}, {46, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 51, 50, 55, 48, 51, 55, 52}, {46, 48, 51, 46, 46, 50, 37, 46, 49, 51, 37, 37, 37, 40, 40, 46, 37, 37, 37, 37, 37, 37, 37, 37, 37}, {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 50, 55, 55, 55, 55, 40, 50, 51, 55, 48, 50}, {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 52, 55, 55, 52, 50, 55, 55, 51, 55, 54}, {55, 37, 55, 44, 55, 50, 55, 55, 50, 55, 55, 55, 46, 50, 48, 49, 46, 46, 50, 49, 46, 37, 48, 40, 48}, {52, 50, 55, 50, 55, 55, 55, 55, 55, 55, 52, 55, 55, 55, 50, 55, 48, 55, 55, 52, 48, 55, 55, 42, 50}, {44, 42, 42, 44, 48, 51, 50, 49, 55, 44, 50, 48, 51, 46, 44, 49, 37, 46, 46, 40, 37, 37, 37, 37, 37}, {50, 51, 48, 44, 46, 50, 55, 50, 55, 50, 48, 55, 48, 55, 55, 42, 55, 55, 55, 42, 37, 55, 37, 37, 42}, {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 50, 55, 50, 54}, {55, 44, 55, 50, 50, 55, 44, 55, 55, 50, 55, 48, 50, 55, 51, 50, 48, 55, 37, 42, 50, 42, 51, 46, 37}, {51, 55, 55, 55, 55, 50, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 49, 42, 37, 46, 55, 50}, {50, 46, 55, 55, 55, 55, 55, 52, 55, 55, 55, 55, 55, 55, 48, 42, 48, 42, 42, 49, 46, 46, 48, 50, 52}, {55, 51, 55, 51, 52, 55, 55, 55, 55, 55, 49, 55, 55, 55, 51, 55, 55, 50, 52, 55, 50, 49, 37, 55, 48}, {55, 55, 48, 49, 46, 55, 55, 55, 55, 40, 55, 37, 48, 55, 55, 55, 46, 40, 48, 50, 50, 55, 52, 37, 37}, {55, 49, 55, 51, 50, 55, 55, 55, 49, 55, 55, 50, 55, 48, 48, 46, 55, 48, 51, 50, 48, 50, 55, 42, 48}, {55, 50, 48, 48, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 50, 55, 55, 44, 37, 37, 48, 55, 51, 42, 52}, {49, 44, 55, 52, 50, 55, 51, 55, 55, 48, 55, 55, 48, 52, 55, 55, 55, 50, 48, 40, 50, 40, 50, 50, 46}, {46, 46, 46, 50, 50, 55, 55, 50, 55, 55, 46, 44, 42, 44, 46, 37, 44, 42, 37, 46, 42, 37, 37, 37, 37}, {51, 46, 50, 50, 49, 55, 55, 55, 50, 50, 44, 50, 55, 44, 46, 44, 55, 40, 49, 55, 46, 55, 37, 37, 50}, {49, 55, 44, 50, 50, 55, 55, 55, 55, 50, 55, 48, 55, 48, 55, 37, 50, 55, 48, 37, 48, 42, 44, 55, 50}, {55, 55, 55, 37, 42, 46, 49, 46, 44, 42, 46, 46, 49, 44, 40, 44, 49, 40, 40, 42, 42, 46, 49, 37, 37}, {55, 48, 55, 46, 50, 55, 55, 55, 55, 55, 52, 55, 55, 55, 55, 40, 55, 55, 55, 55, 48, 51, 46, 55, 37}, {46, 55, 51, 55, 55, 55, 50, 55, 55, 48, 55, 55, 46, 55, 55, 42, 44, 55, 55, 44, 55, 46, 42, 48, 37}, {46, 50, 55, 46, 48, 55, 55, 55, 55, 55, 50, 55, 55, 52, 55, 55, 51, 55, 55, 55, 55, 51, 49, 44, 50}, } expectQL = constructQL(expectSfq, expectQ) ) func (s *S) TestReadFastq(c *check.C) { var ( obtainNfq []string obtainQL [][]alphabet.QLetter ) sc := seqio.NewScanner( fastq.NewReader( bytes.NewBufferString(fq0), linear.NewQSeq("", nil, alphabet.DNA, alphabet.Sanger), ), ) for sc.Next() { t := sc.Seq().(*linear.QSeq) header := t.Name() if desc := t.Description(); len(desc) > 0 { header += " " + desc } obtainNfq = append(obtainNfq, header) obtainQL = append(obtainQL, (t.Slice().(alphabet.QLetters))) } c.Check(sc.Error(), check.Equals, nil) c.Check(obtainNfq, check.DeepEquals, expectNfq) c.Check(obtainQL, check.DeepEquals, expectQL) } biogo-1.0.4/io/seqio/fastq/0000755000175000017500000000000014136731467015022 5ustar nileshnileshbiogo-1.0.4/io/seqio/fastq/fastq_test.go0000644000175000017500000002435214136731467017534 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package fastq import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq/linear" "bytes" "io" "testing" "gopkg.in/check.v1" ) // Helpers func constructQL(l [][]alphabet.Letter, q [][]alphabet.Qphred) (ql []alphabet.QLetters) { if len(l) != len(q) { panic("test data length mismatch") } ql = make([]alphabet.QLetters, len(l)) for i := range ql { if len(l[i]) != len(q[i]) { panic("test data length mismatch") } if len(l[i]) == 0 { continue } ql[i] = make(alphabet.QLetters, len(l[i])) for j := range ql[i] { ql[i][j] = alphabet.QLetter{L: l[i][j], Q: q[i][j]} } } return } // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) var ( expectedIds = []string{ "FC12044_91407_8_200_981_857", "FC12044_91407_8_200_8_865", "FC12044_91407_8_200_292_484", "FC12044_91407_8_200_675_16", "FC12044_91407_8_200_285_136", } expectedQLetters = constructQL( [][]alphabet.Letter{ []alphabet.Letter("AACGAGGGGCGCGACTTGACCTTGG"), []alphabet.Letter("TTTCCCACCCCAGGAAGCCTTGGAC"), []alphabet.Letter("TCAGCCTCCGTGCCCAGCCCACTCC"), []alphabet.Letter("CTCGGGAGGCTGAGGCAGGGGGGTT"), []alphabet.Letter("CCAAATCTTGAATTGTAGCTCCCCT"), }, [][]alphabet.Qphred{ {49, 55, 44, 50, 50, 55, 55, 55, 55, 50, 55, 48, 55, 48, 55, 37, 50, 55, 48, 37, 48, 42, 44, 55, 50}, {55, 55, 55, 37, 42, 46, 49, 46, 44, 42, 46, 46, 49, 44, 40, 44, 49, 40, 40, 42, 42, 46, 49, 37, 37}, {55, 48, 55, 46, 50, 55, 55, 55, 55, 55, 52, 55, 55, 55, 55, 40, 55, 55, 55, 55, 48, 51, 46, 55, 37}, {46, 55, 51, 55, 55, 55, 50, 55, 55, 48, 55, 55, 46, 55, 55, 42, 44, 55, 55, 44, 55, 46, 42, 48, 37}, {46, 50, 55, 46, 48, 55, 55, 55, 55, 55, 50, 55, 55, 52, 55, 55, 51, 55, 55, 55, 55, 51, 49, 44, 50}, }, ) plusStart = constructQL( [][]alphabet.Letter{ []alphabet.Letter("AACGAGGGGCGCGACTTGACCTTGG"), }, [][]alphabet.Qphred{ {10, 55, 44, 50, 50, 55, 55, 55, 55, 50, 55, 48, 55, 48, 55, 37, 50, 55, 48, 37, 48, 42, 44, 55, 50}, }, ) atStart = constructQL( [][]alphabet.Letter{ []alphabet.Letter("AACGAGGGGCGCGACTTGACCTTGG"), }, [][]alphabet.Qphred{ {31, 55, 44, 50, 50, 55, 55, 55, 55, 50, 55, 48, 55, 48, 55, 37, 50, 55, 48, 37, 48, 42, 44, 55, 50}, }, ) ) var ( fqTests = []struct { fq string verbatim bool ids []string seqs []alphabet.QLetters }{ { fq: `@FC12044_91407_8_200_981_857 AACGAGGGGCGCGACTTGACCTTGG +FC12044_91407_8_200_981_857 RXMSSXXXXSXQXQXFSXQFQKMXS @FC12044_91407_8_200_8_865 TTTCCCACCCCAGGAAGCCTTGGAC +FC12044_91407_8_200_8_865 XXXFKOROMKOORMIMRIIKKORFF @FC12044_91407_8_200_292_484 TCAGCCTCCGTGCCCAGCCCACTCC +FC12044_91407_8_200_292_484 XQXOSXXXXXUXXXXIXXXXQTOXF @FC12044_91407_8_200_675_16 CTCGGGAGGCTGAGGCAGGGGGGTT +FC12044_91407_8_200_675_16 OXTXXXSXXQXXOXXKMXXMXOKQF @FC12044_91407_8_200_285_136 CCAAATCTTGAATTGTAGCTCCCCT +FC12044_91407_8_200_285_136 OSXOQXXXXXSXXUXXTXXXXTRMS `, verbatim: true, ids: expectedIds, seqs: []alphabet.QLetters{ expectedQLetters[0], expectedQLetters[1], expectedQLetters[2], expectedQLetters[3], expectedQLetters[4], }, }, { fq: `@FC12044_91407_8_200_981_857 AACGAGGGGCGCGACTTGACCTTGG +FC12044_91407_8_200_981_857 @XMSSXXXXSXQXQXFSXQFQKMXS @FC12044_91407_8_200_8_865 TTTCCCACCCCAGGAAGCCTTGGAC +FC12044_91407_8_200_8_865 XXXFKOROMKOORMIMRIIKKORFF @FC12044_91407_8_200_292_484 TCAGCCTCCGTGCCCAGCCCACTCC +FC12044_91407_8_200_292_484 XQXOSXXXXXUXXXXIXXXXQTOXF @FC12044_91407_8_200_675_16 CTCGGGAGGCTGAGGCAGGGGGGTT +FC12044_91407_8_200_675_16 OXTXXXSXXQXXOXXKMXXMXOKQF @FC12044_91407_8_200_285_136 CCAAATCTTGAATTGTAGCTCCCCT +FC12044_91407_8_200_285_136 OSXOQXXXXXSXXUXXTXXXXTRMS `, verbatim: true, ids: expectedIds, seqs: []alphabet.QLetters{ atStart[0], expectedQLetters[1], expectedQLetters[2], expectedQLetters[3], expectedQLetters[4], }, }, { fq: `@FC12044_91407_8_200_981_857 AACGAGGGGCGCGACTTGACCTTGG +FC12044_91407_8_200_981_857 +XMSSXXXXSXQXQXFSXQFQKMXS @FC12044_91407_8_200_8_865 TTTCCCACCCCAGGAAGCCTTGGAC +FC12044_91407_8_200_8_865 XXXFKOROMKOORMIMRIIKKORFF @FC12044_91407_8_200_292_484 TCAGCCTCCGTGCCCAGCCCACTCC +FC12044_91407_8_200_292_484 XQXOSXXXXXUXXXXIXXXXQTOXF @FC12044_91407_8_200_675_16 CTCGGGAGGCTGAGGCAGGGGGGTT +FC12044_91407_8_200_675_16 OXTXXXSXXQXXOXXKMXXMXOKQF @FC12044_91407_8_200_285_136 CCAAATCTTGAATTGTAGCTCCCCT +FC12044_91407_8_200_285_136 OSXOQXXXXXSXXUXXTXXXXTRMS `, verbatim: true, ids: expectedIds, seqs: []alphabet.QLetters{ plusStart[0], expectedQLetters[1], expectedQLetters[2], expectedQLetters[3], expectedQLetters[4], }, }, { fq: `@FC12044_91407_8_200_981_857 AACGAGGGGCGCGACTTGACCTTGG +FC12044_91407_8_200_981_857 RXMSSXXXXSXQXQXFSXQFQKMXS @FC12044_91407_8_200_8_865 TTTCCCACCCCAGGAAGCCTTGGAC +FC12044_91407_8_200_8_865 XXXFKOROMKOORMIMRIIKKORFF @FC12044_91407_8_200_292_484 TCAGCCTCCGTGCCCAGCCCACTCC +FC12044_91407_8_200_292_484 XQXOSXXXXXUXXXXIXXXXQTOXF @FC12044_91407_8_200_675_16 CTCGGGAGGCTGAGGCAGGGGGGTT +FC12044_91407_8_200_675_16 OXTXXXSXXQXXOXXKMXXMXOKQF @FC12044_91407_8_200_285_136 +FC12044_91407_8_200_285_136 `, verbatim: true, ids: expectedIds, seqs: []alphabet.QLetters{ expectedQLetters[0], expectedQLetters[1], expectedQLetters[2], expectedQLetters[3], nil, }, }, { fq: `@FC12044_91407_8_200_981_857 +FC12044_91407_8_200_981_857 @FC12044_91407_8_200_8_865 TTTCCCACCCCAGGAAGCCTTGGAC +FC12044_91407_8_200_8_865 XXXFKOROMKOORMIMRIIKKORFF @FC12044_91407_8_200_292_484 TCAGCCTCCGTGCCCAGCCCACTCC +FC12044_91407_8_200_292_484 XQXOSXXXXXUXXXXIXXXXQTOXF @FC12044_91407_8_200_675_16 CTCGGGAGGCTGAGGCAGGGGGGTT +FC12044_91407_8_200_675_16 OXTXXXSXXQXXOXXKMXXMXOKQF @FC12044_91407_8_200_285_136 CCAAATCTTGAATTGTAGCTCCCCT +FC12044_91407_8_200_285_136 OSXOQXXXXXSXXUXXTXXXXTRMS `, verbatim: true, ids: expectedIds, seqs: []alphabet.QLetters{ nil, expectedQLetters[1], expectedQLetters[2], expectedQLetters[3], expectedQLetters[4], }, }, { fq: `@FC12044_91407_8_200_981_857 AACGAGGGGCGCGACTTGACCTTGG +FC12044_91407_8_200_981_857 RXMSSXXXXSXQXQXFSXQFQKMXS @FC12044_91407_8_200_8_865 +FC12044_91407_8_200_8_865 @FC12044_91407_8_200_292_484 TCAGCCTCCGTGCCCAGCCCACTCC +FC12044_91407_8_200_292_484 XQXOSXXXXXUXXXXIXXXXQTOXF @FC12044_91407_8_200_675_16 CTCGGGAGGCTGAGGCAGGGGGGTT +FC12044_91407_8_200_675_16 OXTXXXSXXQXXOXXKMXXMXOKQF @FC12044_91407_8_200_285_136 CCAAATCTTGAATTGTAGCTCCCCT +FC12044_91407_8_200_285_136 OSXOQXXXXXSXXUXXTXXXXTRMS `, verbatim: true, ids: expectedIds, seqs: []alphabet.QLetters{ expectedQLetters[0], nil, expectedQLetters[2], expectedQLetters[3], expectedQLetters[4], }, }, { fq: `@FC12044_91407_8_200_981_857 AACGAGGGGCGCGACTTGACCTTGG +FC12044_91407_8_200_981_857 RXMSSXXXXSXQXQXFSXQFQKMXS @FC12044_91407_8_200_8_865 TTTCCCACCCCAGGAAGCCTTGGAC +FC12044_91407_8_200_8_865 XXXFKOROMKOORMIMRIIKKORFF @FC12044_91407_8_200_292_484 TCAGCCTCCGTGCCCAGCCCACTCC +FC12044_91407_8_200_292_484 XQXOSXXXXXUXXXXIXXXXQTOXF @FC12044_91407_8_200_675_16 CTCGGGAGGCTGAGGCAGGGGGGTT +FC12044_91407_8_200_675_16 OXTXXXSXXQXXOXXKMXXMXOKQF @FC12044_91407_8_200_285_136 CCAAATCTTGAATTGTAGCTCCCCT +FC12044_91407_8_200_285_136 OSXOQXXXXXSXXUXXTXXXXTRMS`, verbatim: false, ids: expectedIds, seqs: []alphabet.QLetters{ expectedQLetters[0], expectedQLetters[1], expectedQLetters[2], expectedQLetters[3], expectedQLetters[4], }, }, { fq: `@FC12044_91407_8_200_981_857 AACGAGGGGCGCGACTTGACCTTGG +FC12044_91407_8_200_981_857 RXMSSXXXXSXQXQXFSXQFQKMXS @FC12044_91407_8_200_8_865 TTTCCCACCCCAGGAAGCCTTGGAC +FC12044_91407_8_200_8_865 XXXFKOROMKOORMIMRIIKKORFF @FC12044_91407_8_200_292_484 TCAGCCTCCGTGCCCAGCCCACTCC +FC12044_91407_8_200_292_484 XQXOSXXXXXUXXXXIXXXXQTOXF @FC12044_91407_8_200_675_16 CTCGGGAGGCTGAGGCAGGGGGGTT +FC12044_91407_8_200_675_16 OXTXXXSXXQXXOXXKMXXMXOKQF @FC12044_91407_8_200_285_136 +FC12044_91407_8_200_285_136 `, verbatim: false, ids: expectedIds, seqs: []alphabet.QLetters{ expectedQLetters[0], expectedQLetters[1], expectedQLetters[2], expectedQLetters[3], nil, }, }, { fq: `@FC12044_91407_8_200_981_857 AACGAGGGGCGCGACTTGACCTTGG +FC12044_91407_8_200_981_857 RXMSSXXXXSXQXQXFSXQFQKMXS @FC12044_91407_8_200_8_865 TTTCCCACCCCAGGAAGCCTTGGAC +FC12044_91407_8_200_8_865 XXXFKOROMKOORMIMRIIKKORFF @FC12044_91407_8_200_292_484 TCAGCCTCCGTGCCCAGCCCACTCC +FC12044_91407_8_200_292_484 XQXOSXXXXXUXXXXIXXXXQTOXF @FC12044_91407_8_200_675_16 CTCGGGAGGCTGAGGCAGGGGGGTT +FC12044_91407_8_200_675_16 OXTXXXSXXQXXOXXKMXXMXOKQF @FC12044_91407_8_200_285_136 +FC12044_91407_8_200_285_136`, verbatim: false, ids: expectedIds, seqs: []alphabet.QLetters{ expectedQLetters[0], expectedQLetters[1], expectedQLetters[2], expectedQLetters[3], nil, }, }, } ) func (s *S) TestReadFastq(c *check.C) { for _, t := range fqTests { r := NewReader(bytes.NewBufferString(t.fq), linear.NewQSeq("", nil, alphabet.DNA, alphabet.Sanger)) var n int for n = 0; ; n++ { if s, err := r.Read(); err != nil { if err == io.EOF { break } else { c.Fatalf("Failed to read %s in %q: %s", expectedIds[n], t.fq, err) } } else { l := s.(*linear.QSeq) header := l.Name() if desc := l.Description(); len(desc) > 0 { header += " " + desc } c.Check(header, check.Equals, t.ids[n]) c.Check(l.Slice(), check.DeepEquals, t.seqs[n]) } } c.Check(n, check.Equals, len(t.ids)) } } func (s *S) TestWriteFastq(c *check.C) { for i, t := range fqTests { if !t.verbatim { continue } for j := 0; j < 2; j++ { var n int b := &bytes.Buffer{} w := NewWriter(b) w.QID = j == 0 seq := linear.NewQSeq("", nil, alphabet.DNA, alphabet.Sanger) for i := range expectedIds { seq.ID = t.ids[i] seq.Seq = t.seqs[i] _n, err := w.Write(seq) c.Assert(err, check.Equals, nil, check.Commentf("Failed to write to buffer: %s", err)) n += _n } c.Check(n, check.Equals, b.Len()) if w.QID { c.Check(string(b.Bytes()), check.Equals, t.fq, check.Commentf("Write test %d", i)) } } } } biogo-1.0.4/io/seqio/fastq/fastq.go0000644000175000017500000001364714136731467016502 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package fastq provides types to read and write FASTQ format files. package fastq import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/io/seqio" "github.com/biogo/biogo/seq" "bufio" "bytes" "errors" "fmt" "io" ) var ( _ seqio.Reader = (*Reader)(nil) _ seqio.Writer = (*Writer)(nil) ) type Encoder interface { Encoding() alphabet.Encoding } // Fastq sequence format reader type. type Reader struct { r *bufio.Reader t seqio.SequenceAppender enc alphabet.Encoding } // Returns a new fastq format reader using r. Sequences returned by the Reader are copied // from the provided template. func NewReader(r io.Reader, template seqio.SequenceAppender) *Reader { var enc alphabet.Encoding if e, ok := template.(Encoder); ok { enc = e.Encoding() } else { enc = alphabet.None } return &Reader{ r: bufio.NewReader(r), t: template, enc: enc, } } // Read a single sequence and return it and potentially an error. Note that // a non-nil returned error may be associated with a valid sequence, so it is // the responsibility of the caller to examine the error to determine whether // the read was successful. // Note that if the Reader's template type returns different non-nil error // values from calls to SetName and SetDescription, a new error string will be // returned on each call to Read. So to allow direct error comparison these // methods should return the same error. // TODO: Does not read multi-line fastq. func (r *Reader) Read() (seq.Sequence, error) { const ( id1 = iota letters id2 quality ) var ( buff, line, label []byte isPrefix bool seqBuff []alphabet.QLetter t seqio.SequenceAppender state int err error ) loop: for { buff, isPrefix, err = r.r.ReadLine() if err != nil { if t != nil && state == quality && err == io.EOF { err = nil break } return nil, err } line = append(line, buff...) if isPrefix { continue } line = bytes.TrimSpace(line) switch { case state == id1 && maybeID1(line): state = letters var _err error t, _err = r.readHeader(line) if err == nil && _err != nil { err = _err } label = append([]byte(nil), line...) case state == id2 && maybeID2(line): state = quality if len(label) == 0 { return nil, errors.New("fastq: no header line parsed before +line in fastq format") } if len(line) != 1 && bytes.Compare(label[1:], line[1:]) != 0 { return nil, errors.New("fastq: quality header does not match sequence header") } case state == letters && len(line) > 0: if maybeID2(line) && (len(line) == 1 || bytes.Compare(label[1:], line[1:]) == 0) { state = quality break } state = id2 seqBuff = make([]alphabet.QLetter, len(line)) var i int for _, l := range line { if isSpace(l) { continue } seqBuff[i].L = alphabet.Letter(l) i++ } seqBuff = seqBuff[:i] case state == quality: if len(line) == 0 && len(seqBuff) != 0 { continue } break loop } line = line[:0] } line = bytes.Join(bytes.Fields(line), nil) if len(line) != len(seqBuff) { return nil, errors.New("fastq: sequence/quality length mismatch") } for i := range line { seqBuff[i].Q = r.enc.DecodeToQphred(line[i]) } t.AppendQLetters(seqBuff...) return t, err } func maybeID1(l []byte) bool { return len(l) > 0 && l[0] == '@' } func maybeID2(l []byte) bool { return len(l) > 0 && l[0] == '+' } func isSpace(b byte) bool { switch b { case '\t', '\n', '\v', '\f', '\r', ' ', 0x85, 0xA0: return true } return false } func (r *Reader) readHeader(line []byte) (seqio.SequenceAppender, error) { s := r.t.Clone().(seqio.SequenceAppender) fieldMark := bytes.IndexAny(line, " \t") var err error if fieldMark < 0 { err = s.SetName(string(line[1:])) return s, err } else { err = s.SetName(string(line[1:fieldMark])) _err := s.SetDescription(string(line[fieldMark+1:])) if err != nil || _err != nil { switch { case err == _err: return s, err case err != nil && _err != nil: return s, fmt.Errorf("fastq: multiple errors: name: %s, desc:%s", err, _err) case err != nil: return s, err case _err != nil: return s, _err } } } return s, nil } // Fastq sequence format writer type. type Writer struct { w io.Writer QID bool // Include ID on +lines } // Returns a new fastq format writer using w. func NewWriter(w io.Writer) *Writer { return &Writer{ w: w, } } // Write a single sequence and return the number of bytes written and any error. func (w *Writer) Write(s seq.Sequence) (n int, err error) { var ( _n int enc alphabet.Encoding ) if e, ok := s.(Encoder); ok { enc = e.Encoding() } else { enc = alphabet.Sanger } n, err = w.writeHeader('@', s) if err != nil { return } for i := 0; i < s.Len(); i++ { _n, err = w.w.Write([]byte{byte(s.At(i).L)}) if n += _n; err != nil { return } } _n, err = w.w.Write([]byte{'\n'}) if n += _n; err != nil { return } if w.QID { _n, err = w.writeHeader('+', s) if n += _n; err != nil { return } } else { _n, err = w.w.Write([]byte("+\n")) if n += _n; err != nil { return } } for i := 0; i < s.Len(); i++ { _n, err = w.w.Write([]byte{s.At(i).Q.Encode(enc)}) if n += _n; err != nil { return } } _n, err = w.w.Write([]byte{'\n'}) if n += _n; err != nil { return } return } func (w *Writer) writeHeader(prefix byte, s seq.Sequence) (n int, err error) { var _n int n, err = w.w.Write([]byte{prefix}) if err != nil { return } _n, err = io.WriteString(w.w, s.Name()) if n += _n; err != nil { return } if desc := s.Description(); len(desc) != 0 { _n, err = w.w.Write([]byte{' '}) if n += _n; err != nil { return } _n, err = io.WriteString(w.w, desc) if n += _n; err != nil { return } } _n, err = w.w.Write([]byte("\n")) n += _n return } biogo-1.0.4/io/seqio/fasta/0000755000175000017500000000000014136731467015002 5ustar nileshnileshbiogo-1.0.4/io/seqio/fasta/fasta_example_test.go0000644000175000017500000000271614136731467021207 0ustar nileshnilesh// Copyright ©2020 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package fasta_test import ( "fmt" "log" "strings" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/io/seqio" "github.com/biogo/biogo/io/seqio/fasta" "github.com/biogo/biogo/seq/linear" ) func ExampleReader() { const multiFasta = ` >SequenceA dam methylation site GATC >SequenceB ori motif CTAG >SequenceC CTCF binding motif CCGCGNGGNGGCAG` data := strings.NewReader(multiFasta) // fasta.Reader requires a known type template to fill // with FASTA data. Here we use *linear.Seq. template := linear.NewSeq("", nil, alphabet.DNAredundant) r := fasta.NewReader(data, template) // Make a seqio.Scanner to simplify iterating over a // stream of data. sc := seqio.NewScanner(r) // Iterate through each sequence in a multifasta and examine the // ID, description and sequence data. for sc.Next() { // Get the current sequence and type assert to *linear.Seq. // While this is unnecessary here, it can be useful to have // the concrete type. s := sc.Seq().(*linear.Seq) // Print the sequence ID, description and sequence data. fmt.Printf("%q %q %s\n", s.ID, s.Desc, s.Seq) } if err := sc.Error(); err != nil { log.Fatal(err) } // Output: // "SequenceA" "dam methylation site" GATC // "SequenceB" "ori motif" CTAG // "SequenceC" "CTCF binding motif" CCGCGNGGNGGCAG } biogo-1.0.4/io/seqio/fasta/fasta_test.go0000644000175000017500000001503714136731467017474 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package fasta import ( "bytes" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq/linear" "io" "testing" "gopkg.in/check.v1" ) var ( fas = []string{testaln0, testaln1} ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) var ( expectN = []string{ "AK1H_ECOLI/114-431 DESCRIPTION HERE", "AKH_HAEIN 114-431", "AKH1_MAIZE/117-440", "AK2H_ECOLI/112-431", "AK1_BACSU/66-374", "AK2_BACST/63-370", "AK2_BACSU/63-373", "AKAB_CORFL/63-379", "AKAB_MYCSM/63-379", "AK3_ECOLI/106-407", "AK_YEAST/134-472 A COMMENT FOR YEAST", } expectS = [][]alphabet.Letter{ []alphabet.Letter("CPDSINAALICRGEKMSIAIMAGVLEARGH-N--VTVIDPVEKLLAVG-HYLESTVDIAESTRRIAASRIP------A-DHMVLMAGFTAGN-EKGELVVLGRNGSDYSAAVLAACLRADCCEIWTDVNGVYTCDP-------------RQVPDARLLKSMSYQEAMELSY--FGAKVLHPRTITPIAQFQIPCLIKNTGNPQAPGTL-IG--ASRDEDELP----VKGISNLN------NMAMFSVSGP-GMKGMVGMAARVFAAMS-------RARISVVLITQSSSEYSISFCVPQSDCVRAERAMLEEFY-----LELKEGLLEPLAVAERLAIISV-VGDGLRTLRGISAKF------FAALARANINIVAIA"), []alphabet.Letter("-----------------VEDAVKATIDCRGEKLSIAMMKAWFEARGY-S--VHIVDPVKQLLAKG-GYLESSVEIEESTKRVDAANIA--K-DKVVLMAGF---TAGNEKGELVLLGRNGSDYSAAC-----------------LAACLGASVCEIWTDVDGVYTCDP--RLVPDARLLPTLSYREAMELSYFGAKVIHPRTIGPLLPQNIPCVIKNTGNPSAPGSI-ID--GNVKSESLQ----VKGITNLDNLAMFNVSGPGMQGM---VGMASRVFSAMSGAGISVILITQSSSEYS---ISFCVPVKSAEVAKTVLETEFA-----NELNEHQLEPIEVIKDLSIISV-VGDGMKQAKGIAARF------FSALAQANISIVAIA"), []alphabet.Letter("-----------------ATESFSDFVVGHGELWSAQMLSYAIQKSGT-P--CSWMDTREVLVVNPSGANQVDPDYLESEKRLEKWFSRC-P-AETIIATGF---IASTPENIPTTLKRDGSDFSAAI-----------------IGSLVKARQVTIWTDVDGVFSADP--RKVSEAVILSTLSYQEAWEMSYFGANVLHPRTIIPVMKYNIPIVIRNIFNTSAPGTM-IC--QQPANENGDLEACVKAFATIDKLALVNVEGTGMAGV---PGTANAIFGAVKDVGANVIMISQASSEHS---VCFAVPEKEVALVSAALHARFR-----EALAAGRLSKVEVIHNCSILAT-VGLRMASTPGVSATL------FDALAKANINVRAIA"), []alphabet.Letter("-----------------INDAVYAEVVGHGEVWSARLMSAVLNQQG-----LPAAWLDAREFLRAERAAQPQVDEGLSYPLLQQLLVQH-P-GKRLVVTGF---ISRNNAGETVLLGRNGSDYSATQ-----------------IGALAGVSRVTIWSDVAGVYSADP--RKVKDACLLPLLRLDEASELARLAAPVLHARTLQPVSGSEIDLQLRCSYTPDQGSTRIERVLASGTGARIVTSHDDVCLI-EFQVPASQDFKLAHKEI--DQILKRAQVRPLAVGVHNDRQLLQFCYTSEVADSALKILDEAG---------LPGELRLRQGLALVAMVGAGVTRNPLHCHRFWQQLKGQPVEFTWQSDDGISLVAVL"), []alphabet.Letter("-----------------ISPREQDLLLSCGETISSVVFTSMLLDNGVKA--AALTGAQAGFLTNDQHTNAKIIEMKPER--LFSVLAN----HDAVVVAGF---QGATEKGDTTTIGRGGSDTSAAA-----------------LGAAVDAEYIDIFTDVEGVMTADP--RVVENAKPLPVVTYTEICNLAYQGAKVISPRAVEIAMQAKVPIRVRSTYS-NDKGTLVTSHHSSKVGSDVFERLITGIAH-VKDVTQFKVPAKIGQYN-----VQTEVFKAMANAGISVDFFNITPSEIVYTVAGNKTETAQR------------ILMDMGYDPMVTRNCAKVSAVGAGIMGVPGVTSKI------VSALSEKEIPILQSA"), []alphabet.Letter("-----------------KRE--MDMLLSTGEQVSIALLAMSLHEKGYKA--VSLTGWQAGITTEEMHGNARIMNIDTT--RIRRCLDE----GAIVIVAGF---QGVTETGEITTLGRGGSDTTAVA-----------------LAAALKAEKCDIYTDVTGVFTTDP--RYVKTARKIKEISYDEMLELANLGAGVLHPRAVEFAKNYEVPLEVRSSME-NERGTMVK--EEVSMEQHLIVRGIAFEDQ-VTRVTVVGIEKYLQSVA--------TIFTALANRGINVDIIIQNA--------------------TNSETAS--VSFSIRTEDLPETLQVLQ-------------ALEGADVHYESGLAKVSI-VGSGMISNPGVAARV------FEVLADQGIEIKMVS"), []alphabet.Letter("-----------------KRE--MDMLLATGEQVTISLLSMALQEKGYDA--VSYTGWQAGIRTEAIHGNARITDIDTS--VLADQLEK----GKIVIVAGF---QGMTEDCEITTLGRGGSDTTAVA-----------------LAAALKVDKCDIYTDVPGVFTTDP--RYVKSARKLEGISYDEMLELANLGAGVLHPRAVEFAKNYQVPLEVRSSTE-TEAGTLIE--EESSMEQNLIVRGIAFEDQ-ITRVTIYGLTSGLTTLS--------TIFTTLAKRNINVDIIIQTQ--------------------AEDKTG---ISFSVKTEDADQTVAVLEEYK---------DALEFEKIETESKLAKVSI-VGSGMVSNPGVAAEM------FAVLAQKNILIKMVS"), []alphabet.Letter("-----------------ARE--MDMLLTAGERISNALVAMAIESLGAEA--QSFTGSQAGVLTTERHGNARIVDVTPG--RVREALDE----GKICIVAGF--QGVNKETRDVTTLGRGGSDTTAVA-----------------LAAALNADVCEIYSDVDGVYTADP--RIVPNAQKLEKLSFEEMLELAAVGSKILVLRSVEYARAFNVPLRVRSSYS-NDPGTLIAGSMEDIPVEEAVLTGVATDKS-EAKVTVLGISDKPGEAA--------KVFRALADAEINIDMVLQNV--------------------SSVEDGTTDITFTCPRADGRRAMEILKKLQ---------VQGNWTNVLYDDQVDKVSL-VGAGMKSHPGVTAEF------MEALRDVNVNIELIS"), []alphabet.Letter("-----------------PRE--MDMLLTAGERISNALVAMAIESLGAQA--RSFTGSQAGVITTGTHGNAKIIDVTPG--RLRDALDE----GQIVLVAGF--QGVSQDSKDVTTLGRGGSDTTAVA-----------------VAAALDADVCEIYTDVDGIFTADP--RIVPNARHLDTVSFEEMLEMAACGAKVLMLRCVEYARRYNVPIHVRSSYS-DKPGTIVKGSIEDIPMEDAILTGVAHDRS-EAKVTVVGLPDVPGYAA--------KVFRAVAEADVNIDMVLQNI--------------------SKIEDGKTDITFTCARDNGPRAVEKLSALK---------SEIGFSQVLYDDHIGKVSL-IGAGMRSHPGVTATF------CEALAEAGINIDLIS"), []alphabet.Letter("-----------------TSPALTDELVSHGELMSTLLFVEILRERD--V--QAQWFDVRKVMRTNDRFGRAEPDIAALAELAALQLLPR-LNEGLVITQGF---IGSENKGRTTTLGRGGSDYTAAL-----------------LAEALHASRVDIWTDVPGIYTTDP--RVVSAAKRIDEIAFAEAAEMATFGAKVLHPATLLPAVRSDIPVFVGSSKDPRAGGTLVCNKTENPPLFRALAL--RRNQT-LLTLHSLNMLHSRGFLA--------EVFGILARHNISVDLITTSEVSVALTLDTTGSTSTG----------DTLLTQSLLMELSALCRVEVEEGLALVALIG----------NDLSKACGVGKEVF"), []alphabet.Letter("-----------------VSSRTVDLVMSCGEKLSCLFMTALCNDRGCKAKYVDLSHIVPSDFSASALDNSFYTFLVQALKEKLAPFVSA-KERIVPVFTGF---FGLVPTGLLNGVGRGYTDLCAAL-----------------IAVAVNADELQVWKEVDGIFTADP--RKVPEARLLDSVTPEEASELTYYGSEVIHPFTMEQVIRAKIPIRIKNVQNPLGNGTIIYPDNVAKKGESTPPHPPENLSS----SFYEKRKRGATAITTKN----DIFVINIHSNKKTLSHGFLAQIFTILDKYKLVVDLISTSEVHVSMALPIPDADS-LKSLRQAEEKLRILGSVDITKKLSIVSLVGKHMKQYIGIAG---TMFTTLAEEGINIEMIS"), } ) func (s *S) TestReadFasta(c *check.C) { var ( obtainN []string obtainS [][]alphabet.Letter ) for _, fa := range fas { r := NewReader(bytes.NewBufferString(fa), linear.NewSeq("", nil, alphabet.Protein)) for { if s, err := r.Read(); err != nil { if err == io.EOF { break } else { c.Fatalf("Failed to read %q: %s", fa, err) } } else { t := s.(*linear.Seq) header := t.Name() if desc := t.Description(); len(desc) > 0 { header += " " + desc } obtainN = append(obtainN, header) obtainS = append(obtainS, t.Slice().(alphabet.Letters)) } } c.Check(obtainN, check.DeepEquals, expectN) obtainN = nil for i := range obtainS { c.Check(len(obtainS[i]), check.Equals, len(expectS[i])) c.Check(obtainS[i], check.DeepEquals, expectS[i]) } obtainS = nil } } func (s *S) TestWriteFasta(c *check.C) { fa := fas[0] b := &bytes.Buffer{} w := NewWriter(b, 60) seq := linear.NewSeq("", nil, alphabet.Protein) var n int for i := range expectN { seq.ID = expectN[i] seq.Seq = expectS[i] _n, err := w.Write(seq) if err != nil { c.Fatalf("Failed to write to buffer: %s", err) } n += _n } c.Check(n, check.Equals, b.Len()) c.Check(string(b.Bytes()), check.Equals, fa) } biogo-1.0.4/io/seqio/fasta/testaln1_test.go0000644000175000017500000001113314136731467020122 0ustar nileshnileshpackage fasta var testaln1 = `>AK1H_ECOLI/114-431 DESCRIPTION HERE CPDSINAALICRGEKMSIAIMAGVLEARGH-N--VTVIDPVEKLLAVG-HYLESTVDIAE STRRIAASRIP------A-DHMVLMAGFTAGN-EKGELVVLGRNGSDYSAAVLAACLRAD CCEIWTDVNGVYTCDP-------------RQVPDARLLKSMSYQEAMELSY--FGAKVLH PRTITPIAQFQIPCLIKNTGNPQAPGTL-IG--ASRDEDELP----VKGISNLN------ NMAMFSVSGP-GMKGMVGMAARVFAAMS-------RARISVVLITQSSSEYSISFCVPQS DCVRAERAMLEEFY-----LELKEGLLEPLAVAERLAIISV-VGDGLRTLRGISAKF--- ---FAALARANINIVAIA >AKH_HAEIN 114-431 -----------------VEDAVKATIDCRGEKLSIAMMKAWFEARGY-S--VHIVDPVKQ LLAKG-GYLESSVEIEESTKRVDAANIA--K-DKVVLMAGF---TAGNEKGELVLLGRNG SDYSAAC-----------------LAACLGASVCEIWTDVDGVYTCDP--RLVPDARLLP TLSYREAMELSYFGAKVIHPRTIGPLLPQNIPCVIKNTGNPSAPGSI-ID--GNVKSESL Q----VKGITNLDNLAMFNVSGPGMQGM---VGMASRVFSAMSGAGISVILITQSSSEYS ---ISFCVPVKSAEVAKTVLETEFA-----NELNEHQLEPIEVIKDLSIISV-VGDGMKQ AKGIAARF------FSALAQANISIVAIA >AKH1_MAIZE/117-440 -----------------ATESFSDFVVGHGELWSAQMLSYAIQKSGT-P--CSWMDTREV LVVNPSGANQVDPDYLESEKRLEKWFSRC-P-AETIIATGF---IASTPENIPTTLKRDG SDFSAAI-----------------IGSLVKARQVTIWTDVDGVFSADP--RKVSEAVILS TLSYQEAWEMSYFGANVLHPRTIIPVMKYNIPIVIRNIFNTSAPGTM-IC--QQPANENG DLEACVKAFATIDKLALVNVEGTGMAGV---PGTANAIFGAVKDVGANVIMISQASSEHS ---VCFAVPEKEVALVSAALHARFR-----EALAAGRLSKVEVIHNCSILAT-VGLRMAS TPGVSATL------FDALAKANINVRAIA >AK2H_ECOLI/112-431 -----------------INDAVYAEVVGHGEVWSARLMSAVLNQQG-----LPAAWLDAR EFLRAERAAQPQVDEGLSYPLLQQLLVQH-P-GKRLVVTGF---ISRNNAGETVLLGRNG SDYSATQ-----------------IGALAGVSRVTIWSDVAGVYSADP--RKVKDACLLP LLRLDEASELARLAAPVLHARTLQPVSGSEIDLQLRCSYTPDQGSTRIERVLASGTGARI VTSHDDVCLI-EFQVPASQDFKLAHKEI--DQILKRAQVRPLAVGVHNDRQLLQFCYTSE VADSALKILDEAG---------LPGELRLRQGLALVAMVGAGVTRNPLHCHRFWQQLKGQ PVEFTWQSDDGISLVAVL >AK1_BACSU/66-374 -----------------ISPREQDLLLSCGETISSVVFTSMLLDNGVKA--AALTGAQAG FLTNDQHTNAKIIEMKPER--LFSVLAN----HDAVVVAGF---QGATEKGDTTTIGRGG SDTSAAA-----------------LGAAVDAEYIDIFTDVEGVMTADP--RVVENAKPLP VVTYTEICNLAYQGAKVISPRAVEIAMQAKVPIRVRSTYS-NDKGTLVTSHHSSKVGSDV FERLITGIAH-VKDVTQFKVPAKIGQYN-----VQTEVFKAMANAGISVDFFNITPSEIV YTVAGNKTETAQR------------ILMDMGYDPMVTRNCAKVSAVGAGIMGVPGVTSKI ------VSALSEKEIPILQSA >AK2_BACST/63-370 -----------------KRE--MDMLLSTGEQVSIALLAMSLHEKGYKA--VSLTGWQAG ITTEEMHGNARIMNIDTT--RIRRCLDE----GAIVIVAGF---QGVTETGEITTLGRGG SDTTAVA-----------------LAAALKAEKCDIYTDVTGVFTTDP--RYVKTARKIK EISYDEMLELANLGAGVLHPRAVEFAKNYEVPLEVRSSME-NERGTMVK--EEVSMEQHL IVRGIAFEDQ-VTRVTVVGIEKYLQSVA--------TIFTALANRGINVDIIIQNA---- ----------------TNSETAS--VSFSIRTEDLPETLQVLQ-------------ALEG ADVHYESGLAKVSI-VGSGMISNPGVAARV------FEVLADQGIEIKMVS >AK2_BACSU/63-373 -----------------KRE--MDMLLATGEQVTISLLSMALQEKGYDA--VSYTGWQAG IRTEAIHGNARITDIDTS--VLADQLEK----GKIVIVAGF---QGMTEDCEITTLGRGGSDTTAVA-----------------LAAALKVDKCDIYTDVPGVFTTDP--RYVKSARKLE GISYDEMLELANLGAGVLHPRAVEFAKNYQVPLEVRSSTE-TEAGTLIE--EESSMEQNL IVRGIAFEDQ-ITRVTIYGLTSGLTTLS--------TIFTTLAKRNINVDIIIQTQ---- ----------------AEDKTG---ISFSVKTEDADQTVAVLEEYK---------DALEF EKIETESKLAKVSI-VGSGMVSNPGVAAEM------FAVLAQKNILIKMVS >AKAB_CORFL/63-379 -----------------ARE--MDMLLTAGERISNALVAMAIESLGAEA--QSFTGSQAG VLTTERHGNARIVDVTPG--RVREALDE----GKICIVAGF--QGVNKETRDVTTLGRGG SDTTAVA-----------------LAAALNADVCEIYSDVDGVYTADP--RIVPNAQKLE KLSFEEMLELAAVGSKILVLRSVEYARAFNVPLRVRSSYS-NDPGTLIAGSMEDIPVEEA VLTGVATDKS-EAKVTVLGISDKPGEAA--------KVFRALADAEINIDMVLQNV---- ----------------SSVEDGTTDITFTCPRADGRRAMEILKKLQ---------VQGNW TNVLYDDQVDKVSL-VGAGMKSHPGVTAEF------MEALRDVNVNIELIS >AKAB_MYCSM/63-379 -----------------PRE--MDMLLTAGERISNALVAMAIESLGAQA--RSFTGSQAG VITTGTHGNAKIIDVTPG--RLRDALDE----GQIVLVAGF--QGVSQDSKDVTTLGRGG SDTTAVA-----------------VAAALDADVCEIYTDVDGIFTADP--RIVPNARHLD TVSFEEMLEMAACGAKVLMLRCVEYARRYNVPIHVRSSYS-DKPGTIVKGSIEDIPMEDA ILTGVAHDRS-EAKVTVVGLPDVPGYAA--------KVFRAVAEADVNIDMVLQNI---- ----------------SKIEDGKTDITFTCARDNGPRAVEKLSALK---------SEIGF SQVLYDDHIGKVSL-IGAGMRSHPGVTATF------CEALAEAGINIDLIS >AK3_ECOLI/106-407 -----------------TSPALTDELVSHGELMSTLLFVEILRERD--V--QAQWFDVRK VMRTNDRFGRAEPDIAALAELAALQLLPR-LNEGLVITQGF---IGSENKGRTTTLGRGG SDYTAAL-----------------LAEALHASRVDIWTDVPGIYTTDP--RVVSAAKRID EIAFAEAAEMATFGAKVLHPATLLPAVRSDIPVFVGSSKDPRAGGTLVCNKTENPPLFRA LAL--RRNQT-LLTLHSLNMLHSRGFLA--------EVFGILARHNISVDLITTSEVSVA LTLDTTGSTSTG----------DTLLTQSLLMELSALCRVEVEEGLALVALIG------- ---NDLSKACGVGKEVF >AK_YEAST/134-472 A COMMENT FOR YEAST -----------------VSSRTVDLVMSCGEKLSCLFMTALCNDRGCKAKYVDLSHIVPS DFSASALDNSFYTFLVQALKEKLAPFVSA-KERIVPVFTGF---FGLVPTGLLNGVGRGY TDLCAAL-----------------IAVAVNADELQVWKEVDGIFTADP--RKVPEARLLD SVTPEEASELTYYGSEVIHPFTMEQVIRAKIPIRIKNVQNPLGNGTIIYPDNVAKKGEST PPHPPENLSS----SFYEKRKRGATAITTKN----DIFVINIHSNKKTLSHGFLAQIFTI LDKYKLVVDLISTSEVHVSMALPIPDADS-LKSLRQAEEKLRILGSVDITKKLSIVSLVG KHMKQYIGIAG---TMFTTLAEEGINIEMIS` biogo-1.0.4/io/seqio/fasta/testaln0_test.go0000644000175000017500000001111214136731467020116 0ustar nileshnileshpackage fasta var testaln0 = `>AK1H_ECOLI/114-431 DESCRIPTION HERE CPDSINAALICRGEKMSIAIMAGVLEARGH-N--VTVIDPVEKLLAVG-HYLESTVDIAE STRRIAASRIP------A-DHMVLMAGFTAGN-EKGELVVLGRNGSDYSAAVLAACLRAD CCEIWTDVNGVYTCDP-------------RQVPDARLLKSMSYQEAMELSY--FGAKVLH PRTITPIAQFQIPCLIKNTGNPQAPGTL-IG--ASRDEDELP----VKGISNLN------ NMAMFSVSGP-GMKGMVGMAARVFAAMS-------RARISVVLITQSSSEYSISFCVPQS DCVRAERAMLEEFY-----LELKEGLLEPLAVAERLAIISV-VGDGLRTLRGISAKF--- ---FAALARANINIVAIA >AKH_HAEIN 114-431 -----------------VEDAVKATIDCRGEKLSIAMMKAWFEARGY-S--VHIVDPVKQ LLAKG-GYLESSVEIEESTKRVDAANIA--K-DKVVLMAGF---TAGNEKGELVLLGRNG SDYSAAC-----------------LAACLGASVCEIWTDVDGVYTCDP--RLVPDARLLP TLSYREAMELSYFGAKVIHPRTIGPLLPQNIPCVIKNTGNPSAPGSI-ID--GNVKSESL Q----VKGITNLDNLAMFNVSGPGMQGM---VGMASRVFSAMSGAGISVILITQSSSEYS ---ISFCVPVKSAEVAKTVLETEFA-----NELNEHQLEPIEVIKDLSIISV-VGDGMKQ AKGIAARF------FSALAQANISIVAIA >AKH1_MAIZE/117-440 -----------------ATESFSDFVVGHGELWSAQMLSYAIQKSGT-P--CSWMDTREV LVVNPSGANQVDPDYLESEKRLEKWFSRC-P-AETIIATGF---IASTPENIPTTLKRDG SDFSAAI-----------------IGSLVKARQVTIWTDVDGVFSADP--RKVSEAVILS TLSYQEAWEMSYFGANVLHPRTIIPVMKYNIPIVIRNIFNTSAPGTM-IC--QQPANENG DLEACVKAFATIDKLALVNVEGTGMAGV---PGTANAIFGAVKDVGANVIMISQASSEHS ---VCFAVPEKEVALVSAALHARFR-----EALAAGRLSKVEVIHNCSILAT-VGLRMAS TPGVSATL------FDALAKANINVRAIA >AK2H_ECOLI/112-431 -----------------INDAVYAEVVGHGEVWSARLMSAVLNQQG-----LPAAWLDAR EFLRAERAAQPQVDEGLSYPLLQQLLVQH-P-GKRLVVTGF---ISRNNAGETVLLGRNG SDYSATQ-----------------IGALAGVSRVTIWSDVAGVYSADP--RKVKDACLLP LLRLDEASELARLAAPVLHARTLQPVSGSEIDLQLRCSYTPDQGSTRIERVLASGTGARI VTSHDDVCLI-EFQVPASQDFKLAHKEI--DQILKRAQVRPLAVGVHNDRQLLQFCYTSE VADSALKILDEAG---------LPGELRLRQGLALVAMVGAGVTRNPLHCHRFWQQLKGQ PVEFTWQSDDGISLVAVL >AK1_BACSU/66-374 -----------------ISPREQDLLLSCGETISSVVFTSMLLDNGVKA--AALTGAQAG FLTNDQHTNAKIIEMKPER--LFSVLAN----HDAVVVAGF---QGATEKGDTTTIGRGG SDTSAAA-----------------LGAAVDAEYIDIFTDVEGVMTADP--RVVENAKPLP VVTYTEICNLAYQGAKVISPRAVEIAMQAKVPIRVRSTYS-NDKGTLVTSHHSSKVGSDV FERLITGIAH-VKDVTQFKVPAKIGQYN-----VQTEVFKAMANAGISVDFFNITPSEIV YTVAGNKTETAQR------------ILMDMGYDPMVTRNCAKVSAVGAGIMGVPGVTSKI ------VSALSEKEIPILQSA >AK2_BACST/63-370 -----------------KRE--MDMLLSTGEQVSIALLAMSLHEKGYKA--VSLTGWQAG ITTEEMHGNARIMNIDTT--RIRRCLDE----GAIVIVAGF---QGVTETGEITTLGRGG SDTTAVA-----------------LAAALKAEKCDIYTDVTGVFTTDP--RYVKTARKIK EISYDEMLELANLGAGVLHPRAVEFAKNYEVPLEVRSSME-NERGTMVK--EEVSMEQHL IVRGIAFEDQ-VTRVTVVGIEKYLQSVA--------TIFTALANRGINVDIIIQNA---- ----------------TNSETAS--VSFSIRTEDLPETLQVLQ-------------ALEG ADVHYESGLAKVSI-VGSGMISNPGVAARV------FEVLADQGIEIKMVS >AK2_BACSU/63-373 -----------------KRE--MDMLLATGEQVTISLLSMALQEKGYDA--VSYTGWQAG IRTEAIHGNARITDIDTS--VLADQLEK----GKIVIVAGF---QGMTEDCEITTLGRGG SDTTAVA-----------------LAAALKVDKCDIYTDVPGVFTTDP--RYVKSARKLE GISYDEMLELANLGAGVLHPRAVEFAKNYQVPLEVRSSTE-TEAGTLIE--EESSMEQNL IVRGIAFEDQ-ITRVTIYGLTSGLTTLS--------TIFTTLAKRNINVDIIIQTQ---- ----------------AEDKTG---ISFSVKTEDADQTVAVLEEYK---------DALEF EKIETESKLAKVSI-VGSGMVSNPGVAAEM------FAVLAQKNILIKMVS >AKAB_CORFL/63-379 -----------------ARE--MDMLLTAGERISNALVAMAIESLGAEA--QSFTGSQAG VLTTERHGNARIVDVTPG--RVREALDE----GKICIVAGF--QGVNKETRDVTTLGRGG SDTTAVA-----------------LAAALNADVCEIYSDVDGVYTADP--RIVPNAQKLE KLSFEEMLELAAVGSKILVLRSVEYARAFNVPLRVRSSYS-NDPGTLIAGSMEDIPVEEA VLTGVATDKS-EAKVTVLGISDKPGEAA--------KVFRALADAEINIDMVLQNV---- ----------------SSVEDGTTDITFTCPRADGRRAMEILKKLQ---------VQGNW TNVLYDDQVDKVSL-VGAGMKSHPGVTAEF------MEALRDVNVNIELIS >AKAB_MYCSM/63-379 -----------------PRE--MDMLLTAGERISNALVAMAIESLGAQA--RSFTGSQAG VITTGTHGNAKIIDVTPG--RLRDALDE----GQIVLVAGF--QGVSQDSKDVTTLGRGG SDTTAVA-----------------VAAALDADVCEIYTDVDGIFTADP--RIVPNARHLD TVSFEEMLEMAACGAKVLMLRCVEYARRYNVPIHVRSSYS-DKPGTIVKGSIEDIPMEDA ILTGVAHDRS-EAKVTVVGLPDVPGYAA--------KVFRAVAEADVNIDMVLQNI---- ----------------SKIEDGKTDITFTCARDNGPRAVEKLSALK---------SEIGF SQVLYDDHIGKVSL-IGAGMRSHPGVTATF------CEALAEAGINIDLIS >AK3_ECOLI/106-407 -----------------TSPALTDELVSHGELMSTLLFVEILRERD--V--QAQWFDVRK VMRTNDRFGRAEPDIAALAELAALQLLPR-LNEGLVITQGF---IGSENKGRTTTLGRGG SDYTAAL-----------------LAEALHASRVDIWTDVPGIYTTDP--RVVSAAKRID EIAFAEAAEMATFGAKVLHPATLLPAVRSDIPVFVGSSKDPRAGGTLVCNKTENPPLFRA LAL--RRNQT-LLTLHSLNMLHSRGFLA--------EVFGILARHNISVDLITTSEVSVA LTLDTTGSTSTG----------DTLLTQSLLMELSALCRVEVEEGLALVALIG------- ---NDLSKACGVGKEVF >AK_YEAST/134-472 A COMMENT FOR YEAST -----------------VSSRTVDLVMSCGEKLSCLFMTALCNDRGCKAKYVDLSHIVPS DFSASALDNSFYTFLVQALKEKLAPFVSA-KERIVPVFTGF---FGLVPTGLLNGVGRGY TDLCAAL-----------------IAVAVNADELQVWKEVDGIFTADP--RKVPEARLLD SVTPEEASELTYYGSEVIHPFTMEQVIRAKIPIRIKNVQNPLGNGTIIYPDNVAKKGEST PPHPPENLSS----SFYEKRKRGATAITTKN----DIFVINIHSNKKTLSHGFLAQIFTI LDKYKLVVDLISTSEVHVSMALPIPDADS-LKSLRQAEEKLRILGSVDITKKLSIVSLVG KHMKQYIGIAG---TMFTTLAEEGINIEMIS ` biogo-1.0.4/io/seqio/fasta/fasta.go0000644000175000017500000001113314136731467016426 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package fasta provides types to read and write FASTA format files. package fasta import ( "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/io/seqio" "github.com/biogo/biogo/seq" "bufio" "bytes" "fmt" "io" ) var ( _ seqio.Reader = (*Reader)(nil) _ seqio.Writer = (*Writer)(nil) ) // Default delimiters. const ( DefaultIDPrefix = ">" DefaultSeqPrefix = "" ) // Fasta sequence format reader type. type Reader struct { r *bufio.Reader t seqio.SequenceAppender IDPrefix []byte SeqPrefix []byte working seqio.SequenceAppender err error } // Returns a new fasta format reader using f. Sequences returned by the Reader are copied // from the provided template. func NewReader(f io.Reader, template seqio.SequenceAppender) *Reader { return &Reader{ r: bufio.NewReader(f), t: template, IDPrefix: []byte(DefaultIDPrefix), SeqPrefix: []byte(DefaultSeqPrefix), } } // Read a single sequence and return it and potentially an error. Note that // a non-nil returned error may be associated with a valid sequence, so it is // the responsibility of the caller to examine the error to determine whether // the read was successful. // Note that if the Reader's template type returns different non-nil error // values from calls to SetName and SetDescription, a new error string will be // returned on each call to Read. So to allow direct error comparison these // methods should return the same error. func (r *Reader) Read() (seq.Sequence, error) { var ( buff, line []byte isPrefix bool s seq.Sequence ) defer func() { if r.working == nil { r.err = nil } }() for { var err error if buff, isPrefix, err = r.r.ReadLine(); err != nil { if err != io.EOF || r.working == nil { return nil, err } s, err = r.working, r.err r.working = nil return s, err } line = append(line, buff...) if isPrefix { continue } line = bytes.TrimSpace(line) if len(line) == 0 { continue } if bytes.HasPrefix(line, r.IDPrefix) { if r.working == nil { r.working, r.err = r.header(line) line = nil } else { s, err = r.working, r.err r.working, r.err = r.header(line) return s, err } } else if bytes.HasPrefix(line, r.SeqPrefix) { if r.working == nil { return nil, fmt.Errorf("fasta: badly formed line %q", line) } line = bytes.Join(bytes.Fields(line[len(r.SeqPrefix):]), nil) r.working.AppendLetters(alphabet.BytesToLetters(line)...) line = nil } else { return nil, fmt.Errorf("fasta: badly formed line %q", line) } } } func (r *Reader) header(line []byte) (seqio.SequenceAppender, error) { s := r.t.Clone().(seqio.SequenceAppender) fieldMark := bytes.IndexAny(line, " \t") var err error if fieldMark < 0 { err = s.SetName(string(line[len(r.IDPrefix):])) return s, err } else { err = s.SetName(string(line[len(r.IDPrefix):fieldMark])) _err := s.SetDescription(string(line[fieldMark+1:])) if err != nil || _err != nil { switch { case err == _err: return s, err case err != nil && _err != nil: return s, fmt.Errorf("fasta: multiple errors: name: %s, desc:%s", err, _err) case err != nil: return s, err case _err != nil: return s, _err } } } return s, nil } // Fasta sequence format writer type. type Writer struct { w io.Writer IDPrefix []byte SeqPrefix []byte Width int } // Returns a new fasta format writer using f. func NewWriter(w io.Writer, width int) *Writer { return &Writer{ w: w, IDPrefix: []byte(DefaultIDPrefix), SeqPrefix: []byte(DefaultSeqPrefix), Width: width, } } // Write a single sequence and return the number of bytes written and any error. func (w *Writer) Write(s seq.Sequence) (n int, err error) { var ( _n int prefix = append([]byte{'\n'}, w.SeqPrefix...) ) id, desc := s.Name(), s.Description() header := make([]byte, 0, len(w.IDPrefix)+len(id)+len(desc)+1) header = append(header, w.IDPrefix...) header = append(header, id...) if len(desc) > 0 { header = append(header, ' ') header = append(header, desc...) } n, err = w.w.Write(header) if err != nil { return n, err } for i := 0; i < s.Len(); i++ { if i%w.Width == 0 { _n, err = w.w.Write(prefix) if n += _n; err != nil { return n, err } } _n, err = w.w.Write([]byte{byte(s.At(i).L)}) if n += _n; err != nil { return n, err } } _n, err = w.w.Write([]byte{'\n'}) if n += _n; err != nil { return n, err } return n, nil } biogo-1.0.4/io/seqio/fai/0000755000175000017500000000000014136731467014443 5ustar nileshnileshbiogo-1.0.4/io/seqio/fai/fai.go0000644000175000017500000000147214136731467015535 0ustar nileshnilesh// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package fai implements FAI fasta sequence file index handling. // // This package is deprecated. Please use the API-compatible version at github.com/biogo/hts/fai. package fai import ( "io" "github.com/biogo/hts/fai" ) var ErrNonUnique = fai.ErrNonUnique // Index is an FAI index. type Index = fai.Index // Record is a single FAI index record. type Record = fai.Record // ReadFrom returns an Index from the stream provided by an io.Reader or an error. If the input // contains non-unique records the error is a csv.ParseError identifying the second non-unique // record. func ReadFrom(r io.Reader) (idx Index, err error) { return fai.ReadFrom(r) } biogo-1.0.4/io/seqio/seqio.go0000644000175000017500000000506114136731467015355 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package seqio provides interfaces for sequence I/O functions. package seqio import ( "github.com/biogo/biogo/seq" "io" ) // A SequenceAppender is a generic sequence type that can append elements. type SequenceAppender interface { SetName(string) error SetDescription(string) error seq.Appender seq.Sequence } // Reader is the common seq.Sequence reader interface. type Reader interface { // Read reads a seq.Sequence, returning the sequence and any error that // occurred during the read. Read() (seq.Sequence, error) } // Writer is the common seq.Sequence writer interface. type Writer interface { // Write write a seq.Sequence, returning the number of bytes written and any // error that occurs during the write. Write(seq.Sequence) (int, error) } // Scanner wraps a Reader to provide a convenient loop interface for reading sequence data. // Successive calls to the Scan method will step through the sequences of the provided // Reader. Scanning stops unrecoverably at EOF or the first error. // // Note that it is possible for a Reader to return a valid sequence and a non-nil error. So // programs that need more control over error handling should use a Reader directly instead. type Scanner struct { r Reader seq seq.Sequence err error } // NewScanner returns a Scanner to read from r. func NewScanner(r Reader) *Scanner { return &Scanner{r: r} } type funcReader func() (seq.Sequence, error) func (f funcReader) Read() (seq.Sequence, error) { return f() } // NewScannerFromFunc returns a Scanner to read sequences returned by calls to f. func NewScannerFromFunc(f func() (seq.Sequence, error)) *Scanner { return &Scanner{r: funcReader(f)} } // Next advances the Scanner past the next sequence, which will then be available through // the Seq method. It returns false when the scan stops, either by reaching the end of the // input or an error. After Next returns false, the Error method will return any error that // occurred during scanning, except that if it was io.EOF, Error will return nil. func (s *Scanner) Next() bool { if s.err != nil { return false } s.seq, s.err = s.r.Read() return s.err == nil } // Error returns the first non-EOF error that was encountered by the Scanner. func (s *Scanner) Error() error { if s.err == io.EOF { return nil } return s.err } // Seq returns the most recent sequence read by a call to Next. func (s *Scanner) Seq() seq.Sequence { return s.seq } biogo-1.0.4/LICENSE0000644000175000017500000000277514136731467013175 0ustar nileshnileshCopyright ©2012 The bíogo Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the bíogo project nor the names of its authors and contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. biogo-1.0.4/alphabet/0000755000175000017500000000000014136731467013735 5ustar nileshnileshbiogo-1.0.4/alphabet/alphabet.go0000644000175000017500000002332114136731467016045 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package alphabet describes biological sequence letters, including quality scores. package alphabet import ( "github.com/biogo/biogo/feat" "errors" "fmt" "strings" "unicode" ) const ( CaseSensitive = true ) // Package alphabet provides default Alphabets for DNA, RNA and Protein. These // alphabets are case insensitive and for the non-redundant nucleic acid alphabets // satisfy the condition that the index of a letter is equal to the bitwise-complement // of the index of the base-complement, modulo 4. var ( DNA = MustComplement(NewComplementor( "acgt", feat.DNA, MustPair(NewPairing("acgtnxACGTNX-", "tgcanxTGCANX-")), '-', 'n', !CaseSensitive, )) DNAgapped = MustComplement(NewComplementor( "-acgt", feat.DNA, MustPair(NewPairing("acgtnxACGTNX-", "tgcanxTGCANX-")), '-', 'n', !CaseSensitive, )) DNAredundant = MustComplement(NewComplementor( "-acmgrsvtwyhkdbn", feat.DNA, MustPair(NewPairing("acmgrsvtwyhkdbnxACMGRSVTWYHKDBNX-", "tgkcysbawrdmhvnxTGKCYSBAWRDMHVNX-")), '-', 'n', !CaseSensitive, )) RNA = MustComplement(NewComplementor( "acgu", feat.RNA, MustPair(NewPairing("acgunxACGUNX-", "ugcanxUGCANX-")), '-', 'n', !CaseSensitive, )) RNAgapped = MustComplement(NewComplementor( "-acgu", feat.RNA, MustPair(NewPairing("acgunxACGUNX-", "ugcanxUGCANX-")), '-', 'n', !CaseSensitive, )) RNAredundant = MustComplement(NewComplementor( "-acmgrsvuwyhkdbn", feat.RNA, MustPair(NewPairing("acmgrsvuwyhkdbnxACMGRSVUWYHKDBNX-", "ugkcysbawrdmhvnxUGKCYSBAWRDMHVNX-")), '-', 'n', !CaseSensitive, )) Protein = Must(NewAlphabet( "-abcdefghijklmnpqrstvwxyz*", feat.Protein, '-', 'x', !CaseSensitive, )) ) // Must is a helper that wraps a call to a function returning (Alphabet, error) // and panics if the error is non-nil. It is intended for use in variable // initializations. func Must(a Alphabet, err error) Alphabet { if err != nil { panic(err) } return a } // MustComplement is a helper that wraps a call to a function returning (Complementor, error) // and panics if the error is non-nil. It is intended for use in variable // initializations. func MustComplement(c Complementor, err error) Complementor { if err != nil { panic(err) } return c } // MustPair is a helper that wraps a call to a function returning (*Pairing, error) // and panics if the error is non-nil. It is intended for use in variable // initializations. func MustPair(p *Pairing, err error) *Pairing { if err != nil { panic(err) } return p } // Type Index is a pointer to an index table. type Index *[256]int // An Alphabet describes valid single character letters within a sequence. type Alphabet interface { // IsValid reports whether a letter conforms to the alphabet. IsValid(Letter) bool // AllValid reports whether a slice of bytes conforms to the alphabet. // It returns the index of the first invalid byte, // or a negative int if all bytes are valid. AllValid([]Letter) (ok bool, pos int) // AllValidQLetter reports whether a slice of bytes conforms to the alphabet. // It returns the index of the first invalid byte, // or a negative int if all bytes are valid. AllValidQLetter([]QLetter) (ok bool, pos int) // Len returns the number of distinct valid letters in the alphabet. Len() int // IndexOf returns the index of a given letter. IndexOf(Letter) int // Letter returns the letter corresponding to the given index. Letter(int) Letter // LetterIndex returns a pointer to the internal array specifying // letter to index conversion. The returned index should not be altered. LetterIndex() Index // Letters returns a string of letters conforming to the alphabet in index // order. In case insensitive alphabets, both cases are presented. Letters() string // ValidLetters returns a slice of the internal []bool indicating valid // letters. The returned slice should not be altered. ValidLetters() []bool // Gap returns the gap character used by the alphabet. Gap() Letter // Ambiguous returns the character representing an ambiguous letter. Ambiguous() Letter // Moltype returns the molecule type of the alphabet. Moltype() feat.Moltype // IsCased returns whether the alphabet is case sensitive. IsCased() bool } // A Complementor is an Alphabet that describes the complementation relationships // between letters. type Complementor interface { Alphabet Complement(Letter) (Letter, bool) ComplementTable() []Letter } // Single letter alphabet type. type alpha struct { letters string length int valid [256]bool index [256]int gap, ambiguous Letter caseSensitive bool molType feat.Moltype } func newAlphabet(letters string, molType feat.Moltype, gap, ambiguous Letter, caseSensitive bool) (*alpha, error) { if strings.IndexFunc(letters, func(r rune) bool { return r < 0 || r > unicode.MaxASCII }) > -1 { return nil, errors.New("alphabet: letters contains non-ASCII rune") } a := &alpha{ length: len(letters), gap: gap, ambiguous: ambiguous, caseSensitive: caseSensitive, molType: molType, } for i := range a.index { a.index[i] = -1 } if caseSensitive { a.letters = letters for i, l := range a.letters { a.valid[l] = true a.index[l] = i } return a, nil } a.letters = strings.ToLower(letters) + strings.ToUpper(letters) for i, l := range a.letters[:len(letters)] { a.valid[l] = true a.index[l] = i } for i, l := range a.letters[len(letters):] { a.valid[l] = true a.index[l] = a.index[a.letters[i]] } return a, nil } func (a *alpha) Moltype() feat.Moltype { return a.molType } func (a *alpha) Len() int { return a.length } func (a *alpha) IsCased() bool { return a.caseSensitive } func (a *alpha) Gap() Letter { return a.gap } func (a *alpha) Ambiguous() Letter { return a.ambiguous } func (a *alpha) AllValidQLetter(n []QLetter) (bool, int) { for i, v := range n { if !a.valid[v.L] { return false, i } } return true, -1 } func (a *alpha) AllValid(n []Letter) (bool, int) { for i, v := range n { if !a.valid[v] { return false, i } } return true, -1 } func (a *alpha) IsValid(n Letter) bool { return a.valid[n] } func (a *alpha) Letter(i int) Letter { return Letter(a.letters[:a.length][i]) } func (a *alpha) IndexOf(n Letter) int { return a.index[n] } func (a *alpha) ValidLetters() []bool { return a.valid[:] } func (a *alpha) LetterIndex() Index { return Index(&a.index) } func (a *alpha) Letters() string { return a.letters } // A Pairing provides a lookup table between a letter and its complement. type Pairing struct { pair []Letter ok []bool complements [256]Letter } // NewPairing create a new Pairing from a pair of strings. Pairing definitions must be // a bijection and must contain only ASCII characters. func NewPairing(s, c string) (*Pairing, error) { if len(s) != len(c) { return nil, errors.New("alphabet: length of pairing definitions do not match") } p := &Pairing{ pair: make([]Letter, 256), ok: make([]bool, 256), } for i := range p.pair { p.pair[i] = Letter(i) } cr := []rune(c) for i, v := range s { if v < 0 || cr[i] < 0 || v > unicode.MaxASCII || cr[i] > unicode.MaxASCII { return nil, errors.New("alphabet: pairing definition contains non-ASCII rune") } p.pair[v] = Letter(cr[i]) p.ok[v] = true } for i, l := range s { if Letter(l) != p.pair[p.pair[l]] { return nil, errors.New("alphabet: pairing definition is not a bijection") } if Letter(c[i]) != p.pair[p.pair[c[i]]] { return nil, errors.New("alphabet: pairing definition is not a bijection") } } copy(p.complements[:], p.pair) for i, ok := range p.ok { if !ok { p.complements[i] |= unicode.MaxASCII + 1 } } return p, nil } // Returns the complement of a letter and true if the complement is a valid letter otherwise unchanged and false. func (p *Pairing) Complement(l Letter) (c Letter, ok bool) { return p.pair[l], p.ok[l] } // Returns a complementation table based on the internal representation. Invalid pairs hold a value outside the ASCII range. // The caller must not modify the returned table. func (p *Pairing) ComplementTable() []Letter { return p.complements[:] } type nucleic struct { *alpha *Pairing } // NewComplementor returns a complementing alphabet. The Complement table is checked for // validity and an error is returned if an invalid complement pair is found. Pairings // that result in no change but would otherwise be invalid are allowed. Letter parameter // handling is the same as for NewAlphabet. func NewComplementor(letters string, molType feat.Moltype, pairs *Pairing, gap, ambiguous Letter, caseSensitive bool) (Complementor, error) { a, err := newAlphabet(letters, molType, gap, ambiguous, caseSensitive) if err != nil { return nil, err } if pairs != nil { for i, v := range pairs.pair { if !(pairs.ok[i] || Letter(i&unicode.MaxASCII) == v&unicode.MaxASCII) && !(a.valid[i] && a.valid[v]) { return nil, fmt.Errorf("alphabet: invalid pairing: %c (%d) -> %c (%d)", i, i, v, v) } } } return &nucleic{ alpha: a, Pairing: pairs, }, nil } // NewAlphabet returns a new Alphabet based on the provided definitions. Index values // for letters reflect order of the letters parameter. Letters must be within the // ASCII range. No check is performed to determine whether letters appear more than once, // the index of a letter will be the position of the last occurrence of that letter in the // letters parameter. func NewAlphabet(letters string, molType feat.Moltype, gap, ambiguous Letter, caseSensitive bool) (Alphabet, error) { return newAlphabet(letters, molType, gap, ambiguous, caseSensitive) } biogo-1.0.4/alphabet/letters_test.go0000644000175000017500000000503214136731467017005 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package alphabet import ( "fmt" "math" "gopkg.in/check.v1" ) type approxChecker struct { *check.CheckerInfo } var approx check.Checker = &approxChecker{ &check.CheckerInfo{Name: "Approx", Params: []string{"obtained", "expected", "epsilon"}}, } func (checker *approxChecker) Check(params []interface{}, names []string) (result bool, error string) { defer func() { if v := recover(); v != nil { result = false error = fmt.Sprint(v) } }() return math.Abs(params[0].(float64)-params[1].(float64)) <= params[2].(float64)*params[1].(float64), "" } // Tests func (s *S) TestPhred(c *check.C) { // Confirm landmarks. for _, t := range []struct { E float64 Q Qphred }{ {E: 1e-1, Q: 10}, {E: 1e-2, Q: 20}, {E: 1e-3, Q: 30}, {E: 1e-4, Q: 40}, {E: 1e-5, Q: 50}, } { c.Check(Ephred(t.E), check.Equals, t.Q) c.Check(t.Q.ProbE(), check.Equals, t.E) } for q := Qphred(0); q < 254; q++ { c.Check(q.ProbE(), check.Equals, math.Pow(10, -(float64(q)/10))) c.Check(Ephred(q.ProbE()), check.Equals, q) } c.Check(Qphred(254).ProbE(), check.Equals, 0.) c.Check(math.IsNaN(Qphred(255).ProbE()), check.Equals, true) } func (s *S) TestSolexa(c *check.C) { // Confirm landmarks. for _, t := range []struct { E float64 Q Qsolexa }{ {E: 1e-1 / (1 + 1e-1), Q: 10}, {E: 1e-2 / (1 + 1e-2), Q: 20}, {E: 1e-3 / (1 + 1e-3), Q: 30}, {E: 1e-4 / (1 + 1e-4), Q: 40}, {E: 1e-5 / (1 + 1e-5), Q: 50}, } { c.Check(Esolexa(t.E), check.Equals, t.Q) c.Check(t.Q.ProbE(), approx, t.E, 1e-15) } c.Check(math.IsNaN(Qsolexa(-128).ProbE()), check.Equals, true) for q := -127; q < 127; q++ { pq := math.Pow(10, -(float64(q) / 10)) pq /= (1 + pq) c.Check(Qsolexa(q).ProbE(), check.Equals, pq) c.Check(Esolexa(Qsolexa(q).ProbE()), check.Equals, Qsolexa(q)) } c.Check(Qsolexa(127).ProbE(), check.Equals, 0.) } func (s *S) TestInterconversion(c *check.C) { for q := 0; q < 127; q++ { if 10 <= q && q < 127 { c.Check(Qphred(q).Qsolexa().Qphred(), check.Equals, Qphred(q)) c.Check(Qsolexa(q).Qphred().Qsolexa(), check.Equals, Qsolexa(q)) } c.Check(Qphred(q).Qsolexa().ProbE(), approx, Qphred(q).ProbE(), math.Pow(10, 1e-4-float64(q)/10), check.Commentf("Test %d at E = %e", q, Qphred(q).ProbE())) c.Check(Qsolexa(q).Qphred().ProbE(), approx, Qsolexa(q).ProbE(), math.Pow(10, 1e-4-float64(q)/10), check.Commentf("Test %d at E = %e", q, Qsolexa(q).ProbE())) } } biogo-1.0.4/alphabet/example_test.go0000644000175000017500000000125414136731467016760 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package alphabet import ( "fmt" ) func Example_allValid() { fmt.Println(DNA.AllValid([]Letter("acgatcgatatagctatnagcatgc"))) // Output: // false 17 } func Example_complement() { var ( c Letter ok bool ) c, ok = DNA.Complement('a') fmt.Printf("%c %v\n", c, ok) c, ok = DNA.Complement('n') fmt.Printf("%c %v\n", c, ok) c, ok = RNA.Complement('a') fmt.Printf("%c %v\n", c, ok) c, ok = RNA.Complement('t') fmt.Printf("%c %v\n", c, ok) // Output: // t true // n true // u true // t false } biogo-1.0.4/alphabet/alphabet_test.go0000644000175000017500000001020114136731467017075 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package alphabet import ( "strings" "testing" "unicode" "gopkg.in/check.v1" ) // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) func (s *S) TestInterfaces(c *check.C) { var ( alpha Alphabet comp Complementor ) for _, a := range []interface{}{DNA, RNA, Protein} { c.Check(a, check.Implements, &alpha) } for _, a := range []interface{}{DNA, DNAredundant, RNA, RNAredundant} { c.Check(a, check.Implements, &comp) } c.Check(Protein, check.Not(check.Implements), &comp) } type testAlphabets struct { alphabet Alphabet letters string } func (s *S) TestIsValid(c *check.C) { for _, t := range []testAlphabets{ {DNA, "acgt"}, {DNAgapped, "-acgt"}, {RNA, "acgu"}, {RNAgapped, "-acgu"}, {Protein, "-abcdefghijklmnpqrstvwxyz*"}, } { for i := 0; i < 256; i++ { c.Check(t.alphabet.IsValid(Letter(i)), check.Equals, strings.ContainsRune(t.letters, unicode.ToUpper(rune(i))) || strings.ContainsRune(t.letters, unicode.ToLower(rune(i)))) } } } func uc(l Letter) Letter { return Letter(unicode.ToUpper(rune(l))) } func (s *S) TestLetter(c *check.C) { for _, t := range []Alphabet{ DNA, RNA, Protein, } { for i := 0; i < t.Len(); i++ { c.Check(t.IndexOf(t.Letter(i)), check.Equals, i, check.Commentf("Index %d: %c == %d", i, t.Letter(i), t.IndexOf(t.Letter(i)))) c.Check(t.IndexOf(uc(t.Letter(i))), check.Equals, i, check.Commentf("Index %d: %c == %d", i, uc(t.Letter(i)), t.IndexOf(uc(t.Letter(i))))) } } } func (s *S) TestComplement(c *check.C) { for _, t := range []Complementor{ DNA, RNA, } { for i := 0; i < 256; i++ { if sc, ok := t.Complement(Letter(i)); ok { dc, ok := t.Complement(sc) c.Check(ok, check.Equals, true) c.Check(dc, check.Equals, Letter(i)) } } } } func (s *S) TestComplementDirect(c *check.C) { for _, t := range []Complementor{ DNA, RNA, } { complement := t.ComplementTable() for i := 0; i < 256; i++ { if sc := complement[i]; sc <= unicode.MaxASCII { dc := complement[sc] c.Check(dc <= unicode.MaxASCII, check.Equals, true) c.Check(dc, check.Equals, Letter(i)) } else { c.Check(sc&unicode.MaxASCII, check.Equals, Letter(i&unicode.MaxASCII)) } } } } func (s *S) TestLetters(c *check.C) { for _, t := range []testAlphabets{ {DNA, "acgtACGT"}, {DNA, "acgtACGT"}, {RNAgapped, "-acgu-ACGU"}, {RNAgapped, "-acgu-ACGU"}, {Protein, "-abcdefghijklmnpqrstvwxyz*-ABCDEFGHIJKLMNPQRSTVWXYZ*"}, } { c.Check(t.alphabet.Letters(), check.Equals, t.letters) } } func (s *S) TestRangeCheck(c *check.C) { var err error _, err = newAlphabet(string([]rune{256}), 0, 0, 0, !CaseSensitive) c.Check(err, check.Not(check.IsNil)) _, err = newAlphabet(string([]rune{0}), 0, 0, 0, !CaseSensitive) c.Check(err, check.IsNil) _, err = newAlphabet(string([]rune{127}), 0, 0, 0, !CaseSensitive) c.Check(err, check.IsNil) _, err = newAlphabet(string([]rune{-1}), 0, 0, 0, !CaseSensitive) c.Check(err, check.Not(check.IsNil)) } func BenchmarkIsValid(b *testing.B) { g, _ := newAlphabet("-abcdefghijklmnpqrstvwxyz*", 0, 0, 0, !CaseSensitive) b.ResetTimer() for i := 0; i < b.N; i++ { g.IsValid(Letter(i)) } } func BenchmarkIsValidProtein(b *testing.B) { for i := 0; i < b.N; i++ { Protein.IsValid(Letter(i)) } } func BenchmarkIsValidDNA(b *testing.B) { for i := 0; i < b.N; i++ { DNA.IsValid(Letter(i)) } } func BenchmarkIsValidDNADirect(b *testing.B) { valid := DNA.ValidLetters() for i := 0; i < b.N; i++ { _ = valid[byte(i)] } } func BenchmarkIndexDNA(b *testing.B) { for i := 0; i < b.N; i++ { DNA.IndexOf(Letter(i)) } } func BenchmarkIndexDNADirect(b *testing.B) { index := DNA.LetterIndex() for i := 0; i < b.N; i++ { _ = index[byte(i)] } } func BenchmarkComplementDNA(b *testing.B) { for i := 0; i < b.N; i++ { DNA.Complement(Letter(i)) } } func BenchmarkComplementDNADirect(b *testing.B) { comp := DNA.ComplementTable() var c Letter for i := 0; i < b.N; i++ { if c = comp[Letter(i)]; c != 0x80 { } } } biogo-1.0.4/alphabet/letters.go0000644000175000017500000003122614136731467015752 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package alphabet import ( "math" "unsafe" ) // The Slice interface reflects the built-in slice type behavior. type Slice interface { // Make makes a Slice with the same concrete type as the receiver. Make will // panic if len or cap are less than zero or cap is less than len. Make(len, cap int) Slice // Len returns the length of the Slice. Len() int // Cap returns the capacity of the Slice. Cap() int // Slice returns a slice of the Slice. The returned slice may be backed by // the same array as the receiver. Slice(start, end int) Slice // Append appends src... to the receiver and returns the resulting slice. If the append // results in a grow slice the receiver will not reflect the appended slice, so the // returned Slice should always be stored. Append should panic if src and the receiver // are not the same concrete type. Append(src Slice) Slice // Copy copies elements from src into the receiver, returning the number of elements // copied. Copy should panic if src and the receiver are not the same concrete type. Copy(src Slice) int } // An Encoding represents a quality score encoding scheme. // Q-range // // Sanger !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI··· 0 - 40 // Solexa ··;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh··· -5 - 40 // Illumina 1.3+ @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh··· 0 - 40 // Illumina 1.5+ xxḆCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh··· 3 - 40 // Illumina 1.8+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ··· 0 - 40 // // !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh··· ···{|}~ // | | | | | | // 33 59 64 73 104 126 // // Q-range for typical raw reads type Encoding int8 const ( None Encoding = iota - 1 // All letters are decoded as scores with p(Error) = NaN. Sanger // Phred+33 Solexa // Solexa+64 Illumina1_3 // Phred+64 Illumina1_5 // Phred+64 0,1=unused, 2=Read Segment Quality Control Indicator (Ḇ) Illumina1_8 // Phred+33 Illumina1_9 // Phred+33 ) // DecodeToPhred interprets the byte q as an e encoded quality and returns the corresponding Phred score. func (e Encoding) DecodeToQphred(q byte) Qphred { switch e { case Sanger, Illumina1_8, Illumina1_9: return Qphred(q) - 33 case Illumina1_3, Illumina1_5: return Qphred(q) - 64 case Solexa: return (Qsolexa(q) - 64).Qphred() case None: return 0xff default: panic("alphabet: illegal encoding") } } // DecodeToPhred interprets the byte q as an e encoded quality and returns the corresponding Solexa score. func (e Encoding) DecodeToQsolexa(q byte) Qsolexa { switch e { case Sanger, Illumina1_8, Illumina1_9: return (Qphred(q) - 33).Qsolexa() case Illumina1_3, Illumina1_5: return (Qphred(q) - 64).Qsolexa() case Solexa: return Qsolexa(q) - 64 case None: return -128 default: panic("alphabet: illegal encoding") } } // A Letter represents a sequence letter. type Letter byte const logThreshL = 2e2 // Approximate count where range loop becomes slower than copy // Repeat a Letter count times. func (l Letter) Repeat(count int) []Letter { r := make([]Letter, count) switch { case count == 0: case count < logThreshL: for i := range r { r[i] = l } default: r[0] = l for i := 1; i < len(r); { i += copy(r[i:], r[:i]) } } return r } // BytesToLetters converts a []byte to a []Letter. func BytesToLetters(b []byte) []Letter { return *(*[]Letter)(unsafe.Pointer(&b)) } // LettersToBytes converts a []Letter to a []byte. func LettersToBytes(l []Letter) []byte { return *(*[]byte)(unsafe.Pointer(&l)) } // A Letters is a slice of Letter that satisfies the Slice interface. type Letters []Letter func (l Letters) Make(len, cap int) Slice { return make(Letters, len, cap) } func (l Letters) Len() int { return len(l) } func (l Letters) Cap() int { return cap(l) } func (l Letters) Slice(start, end int) Slice { return l[start:end] } func (l Letters) Append(src Slice) Slice { return append(l, src.(Letters)...) } func (l Letters) Copy(src Slice) int { return copy(l, src.(Letters)) } func (l Letters) String() string { return string(LettersToBytes(l)) } // A Columns is a slice of []Letter that satisfies the alphabet.Slice interface. type Columns [][]Letter // Make makes a QColumns with the cap and len for each column set to the number of rows of the // receiver. func (lc Columns) Make(len, cap int) Slice { r := lc.Rows() return make(Columns, len, cap).MakeRows(r, r) } // MakeRows makes a column with len and cap for each column of the receiver and returns the receiver. func (lc Columns) MakeRows(len, cap int) Slice { for i := range lc { lc[i] = make([]Letter, len, cap) } return lc } // Rows returns the number of positions in each column. func (lc Columns) Rows() int { return len(lc[0]) } func (lc Columns) Len() int { return len(lc) } func (lc Columns) Cap() int { return cap(lc) } func (lc Columns) Slice(start, end int) Slice { return lc[start:end] } func (lc Columns) Append(a Slice) Slice { // TODO deep copy the columns. return append(lc, a.(Columns)...) } func min(a, b int) int { if a < b { return a } return b } func (lc Columns) Copy(a Slice) int { ac := a.(Columns) var n int for i, src := range ac[:min(len(lc), len(ac))] { n += copy(lc[i], src) } return n } // A QLetter represents a sequence letter with an associated quality score. type QLetter struct { L Letter Q Qphred } const logThreshQL = 1e2 // Approximate count where range loop becomes slower than copy // Repeat a QLetter count times. func (ql QLetter) Repeat(count int) []QLetter { r := make([]QLetter, count) switch { case count == 0: case count < logThreshQL: for i := range r { r[i] = ql } default: r[0] = ql for i := 1; i < len(r); { i += copy(r[i:], r[:i]) } } return r } func (ql QLetter) String() string { return string(ql.L) } // A QLetters is a slice of QLetter that satisfies the Slice interface. type QLetters []QLetter func (ql QLetters) Make(len, cap int) Slice { return make(QLetters, len, cap) } func (ql QLetters) Len() int { return len(ql) } func (ql QLetters) Cap() int { return cap(ql) } func (ql QLetters) Slice(start, end int) Slice { return ql[start:end] } func (ql QLetters) Append(src Slice) Slice { return append(ql, src.(QLetters)...) } func (ql QLetters) Copy(src Slice) int { return copy(ql, src.(QLetters)) } // A QColumns is a slice of []QLetter that satisfies the Slice interface. type QColumns [][]QLetter // Make makes a QColumns with the cap and len for each column set to the number of rows of the // receiver. func (qc QColumns) Make(len, cap int) Slice { r := qc.Rows() return make(QColumns, len, cap).MakeRows(r, r) } // MakeRows makes a column with len and cap for each column of the receiver and returns the receiver. func (qc QColumns) MakeRows(len, cap int) Slice { for i := range qc { qc[i] = make([]QLetter, len, cap) } return qc } // Rows returns the number of positions in each column. func (qc QColumns) Rows() int { return len(qc[0]) } func (qc QColumns) Len() int { return len(qc) } func (qc QColumns) Cap() int { return cap(qc) } func (qc QColumns) Slice(start, end int) Slice { return qc[start:end] } func (qc QColumns) Append(a Slice) Slice { // TODO deep copy the columns. return append(qc, a.(QColumns)...) } func (qc QColumns) Copy(a Slice) int { ac := a.(QColumns) var n int for i, src := range ac[:min(len(qc), len(ac))] { n += copy(qc[i], src) } return n } // A Qscore represents a quality score. type Qscore interface { ProbE() float64 Encode(Encoding) byte String() string } var nan = math.NaN() // A Qphred represents a Phred quality score. type Qphred byte // Ephred returns the Qphred for a error probability p. func Ephred(p float64) Qphred { if p == 0 { return 254 } if math.IsNaN(p) { return 255 } Q := -10 * math.Log10(p) Q += 0.5 if Q > 254 { Q = 254 } return Qphred(Q) } // ProbE returns the error probability for the receiver's Phred value. func (qp Qphred) ProbE() float64 { return phredETable[qp] } // phredETable holds a lookup for phred E values. var phredETable = func() [256]float64 { t := [256]float64{254: 0, 255: nan} for q := range t[:254] { t[q] = math.Pow(10, -(float64(q) / 10)) } return t }() // Qsolexa converts the quality value from Phred to Solexa. This conversion is lossy and // should be avoided; the epsilon on the E value associated with a converted Qsolexa is // bounded approximately by math.Pow(10, 1e-4-float64(qp)/10) over the range 0 < qp < 127. func (qp Qphred) Qsolexa() Qsolexa { return phredSolexaTable[qp] } // phredSolexaTable holds a lookup for the near equivalent solexa score of a phred score. var phredSolexaTable = func() [256]Qsolexa { t := [256]Qsolexa{254: 127, 255: -128} for q := range t[:254] { Q := 10 * math.Log10(math.Pow(10, float64(q)/10)-1) if Q > 0 { Q += 0.5 } else { Q -= 0.5 } if Q > 127 { Q = 127 } t[q] = Qsolexa(Q) } return t }() // Encode encodes the receiver's Phred score to a byte based on the specified encoding. func (qp Qphred) Encode(e Encoding) (q byte) { if qp == 254 { return '~' } if qp == 255 { return ' ' } switch e { case Sanger, Illumina1_8, Illumina1_9: q = byte(qp) if q <= 93 { q += 33 } case Illumina1_3: q = byte(qp) if q <= 62 { q += 64 } case Illumina1_5: q = byte(qp) if q <= 62 { q += 64 } if q < 'B' { q = 'B' } return q case Solexa: q = byte(qp.Qsolexa()) if q <= 62 { q += 64 } case None: return ' ' } return } func (qp Qphred) String() string { if qp < 254 { return string([]byte{byte(qp)}) } else if qp == 255 { return " " } return "\u221e" } // A Qsolexa represents a Solexa quality score. type Qsolexa int8 // Esolexa returns the Qsolexa for a error probability p. func Esolexa(p float64) Qsolexa { if p == 0 { return 127 } if math.IsNaN(p) { return -128 } Q := -10 * math.Log10(p/(1-p)) if Q > 0 { Q += 0.5 } else { Q -= 0.5 } return Qsolexa(Q) } // ProbE returns the error probability for the receiver's Phred value. func (qs Qsolexa) ProbE() float64 { return solexaETable[int(qs)+128] } // solexaETable holds a translated lookup table for solexa E values. Since solexa // scores can extend into negative territory, the table is shifted 128 into the // positive. var solexaETable = func() [256]float64 { t := [256]float64{0: nan, 255: 0} for q := range t[1:255] { pq := math.Pow(10, -(float64(q-127) / 10)) t[q+1] = pq / (1 + pq) } return t }() // Qphred converts the quality value from Solexa to Phred. This conversion is lossy and // should be avoided; the epsilon on the E value associated with a converted Qphred is // bounded approximately by math.Pow(10, 1e-4-float64(qs)/10) over the range 0 < qs < 127. func (qs Qsolexa) Qphred() Qphred { return solexaPhredTable[int(qs)+128] } // solexaPhredTable holds a lookup for the near equivalent phred score of a solexa // score. Since solexa scores can extend into negative territory, the table is // shifted 128 into the positive. var solexaPhredTable = func() [256]Qphred { t := [256]Qphred{0: 255, 255: 0} for q := range t[1:255] { qs := q - 127 Q := Qphred(10*math.Log10(math.Pow(10, float64(qs)/10)) + 0.5) if Q > 254 { Q = 254 } t[q+1] = Q } return t }() // Encode encodes the receiver's Solexa score to a byte based on the specified encoding. func (qs Qsolexa) Encode(e Encoding) (q byte) { if qs == 127 { return '~' } if qs == -128 { return ' ' } switch e { case Sanger, Illumina1_8: q = byte(qs.Qphred()) if q <= 93 { q += 33 } case Illumina1_3: q = byte(qs.Qphred()) if q <= 62 { q += 64 } case Illumina1_5: q = byte(qs.Qphred()) if q <= 62 { q += 64 } if q < 'B' { q = 'B' } case Solexa: q = byte(qs) if q <= 62 { q += 64 } case None: return ' ' } return } func (qs Qsolexa) String() string { if qs < 127 && qs != -128 { return string([]byte{byte(qs)}) } else if qs == -128 { return " " } return "\u221e" } biogo-1.0.4/complexity/0000755000175000017500000000000014136731467014352 5ustar nileshnileshbiogo-1.0.4/complexity/complexity_test.go0000644000175000017500000001160014136731467020133 0ustar nileshnilesh// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package complexity import ( "testing" "github.com/biogo/biogo/alphabet" "github.com/biogo/biogo/seq/linear" "gopkg.in/check.v1" ) func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) // Helper func stringToSeq(s string) *linear.Seq { return linear.NewSeq("", alphabet.BytesToLetters([]byte(s)), alphabet.DNA) } // Tests func (s *S) TestEntropic(c *check.C) { for i, t := range []struct { s string c float64 }{ {"", 0}, {"aaaaaaaaaaaaaaaaaaaa", 0}, {"acacacacacacacacacac", 0.5}, {"acgtacgtacgtacgtacgt", 1}, {"acgacagacagacaagatacgctcacatgctacagcagcactgatgcggactcttagctatgcagctagcatcgacatgcagcgatcagcgagc", 0.9799077484954553}, {"cctccctaactcattttatgaggccagcatcattctgataccaaagccgggcagagacacaaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctcaataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaagtgggcttcatccctgggatgcaaggctggttcaatatacgcaaatcaataaatgtaatccagcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaaccctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatgggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactgaatgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctctcaccgctcctattcaacatag", 0.9610297459211902}, {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 0}, {"cctccctaactcattttatgaggccagcatcattctgataccaaagcc---cagagacacaaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctcaataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaagtgggcttcatccctgggatgcaaggctggttcaatatacgcaaatcaataaatgtaatccagcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaaccctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatgggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactgaatgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctctcaccgctcctattcaacatag", 0.958612004852684}, } { ec, err := Entropic(stringToSeq(t.s), 0, len(t.s)) c.Check(err, check.Equals, nil, check.Commentf("Test: %d", i)) c.Check(ec, check.Equals, t.c, check.Commentf("Test: %d", i)) } } func (s *S) TestWF(c *check.C) { for i, t := range []struct { s string c float64 }{ {"", 0}, {"aaaaaaaaaaaaaaaaaaaa", 0}, {"acacacacacacacacacac", 0.4373815422868077}, {"acgtacgtacgtacgtacgt", 0.8362455384618038}, {"acgacagacagacaagatacgctcacatgctacagcagcactgatgcggactcttagctatgcagctagcatcgacatgcagcgatcagcgagc", 0.9280876953247041}, {"cctccctaactcattttatgaggccagcatcattctgataccaaagccgggcagagacacaaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctcaataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaagtgggcttcatccctgggatgcaaggctggttcaatatacgcaaatcaataaatgtaatccagcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaaccctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatgggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactgaatgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctctcaccgctcctattcaacatag", 0.9477548340774316}, {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 0}, {"cctccctaactcattttatgaggccagcatcattctgataccaaagcc---cagagacacaaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctcaataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaagtgggcttcatccctgggatgcaaggctggttcaatatacgcaaatcaataaatgtaatccagcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaaccctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatgggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactgaatgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctctcaccgctcctattcaacatag", 0.9452813728370209}, } { wfc, err := WF(stringToSeq(t.s), 0, len(t.s)) c.Check(err, check.Equals, nil, check.Commentf("Test: %d", i)) c.Check(wfc, check.Equals, t.c, check.Commentf("Test: %d", i)) } } func (s *S) TestLnFac(c *check.C) { const tolerance = 1e-9 table := genLnFac(tableLength * 100) for x, exact := range table { if exact == 0 { c.Check(lnFac(x), check.Equals, exact) } else { c.Check(exact/lnFac(x)-1 < tolerance, check.Equals, true) } } } biogo-1.0.4/complexity/complexity.go0000644000175000017500000000623314136731467017102 0ustar nileshnilesh// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package complexity provides routines for evaluating sequence complexity. package complexity import ( "github.com/biogo/biogo/seq" "compress/zlib" "fmt" "math" ) const tableLength = 10000 var lnFacTable = genLnFac(tableLength) func genLnFac(l int) (table []float64) { table = make([]float64, l) lnfac := 0. for i := 1; i < l; i++ { lnfac += math.Log(float64(i)) table[i] = lnfac } return } const ln2pi = 1.8378770664093454835606594728112352797227949472755668 func lnFac(x int) float64 { if x < len(lnFacTable) { return lnFacTable[x] } // use Sterling's approximation for queries outside the table: return (float64(x)+0.5)*math.Log(float64(x)) - float64(x) + ln2pi/2 } func logBaseK(logk, x float64) float64 { return math.Log(x) / logk } // Entropic returns the entropic complexity of a segment of s defined by // start and end. func Entropic(s seq.Sequence, start, end int) (ce float64, err error) { if start < s.Start() || end > s.End() { err = fmt.Errorf("complex: index out of range") return } if start == end { return 0, nil } var N float64 k := s.Alphabet().Len() logk := math.Log(float64(k)) n := make([]float64, k) // tally classes it := s.Alphabet().LetterIndex() for i := start; i < end; i++ { if ind := it[s.At(i).L]; ind >= 0 { N++ n[ind]++ } } // -∑i=1..k((n_i/N)*log_k(n_i/N)) for i := 0; i < k; i++ { if n[i] != 0 { // ignore zero counts ce += n[i] * logBaseK(logk, n[i]/N) } } ce = -ce / N return } // WF returns the Wootton and Federhen complexity of a segment of s defined by // start and end. func WF(s seq.Sequence, start, end int) (cwf float64, err error) { if start < s.Start() || end > s.End() { err = fmt.Errorf("complex: index out of range") return } if start == end { return 0, nil } var N int k := s.Alphabet().Len() logk := math.Log(float64(k)) n := make([]int, k) // tally classes it := s.Alphabet().LetterIndex() for i := start; i < end; i++ { if ind := it[s.At(i).L]; ind >= 0 { N++ n[ind]++ } } // 1/N*log_k(N!/∏i=1..k(n_i!)) cwf = lnFac(N) for i := 0; i < k; i++ { cwf -= lnFac(n[i]) } cwf /= float64(N) * logk return } type byteCounter int func (b *byteCounter) Write(p []byte) (n int, err error) { *b += byteCounter(len(p)) return len(p), nil } var overhead = calcOverhead() func calcOverhead() byteCounter { b := new(byteCounter) z := zlib.NewWriter(b) z.Write([]byte{0}) z.Close() return *b - 1 } // Z returns the zlib compression estimate of complexity of a segment of s defined by // start and end. func Z(s seq.Sequence, start, end int) (cz float64, err error) { if start < s.Start() || end > s.End() { err = fmt.Errorf("complex: index out of range") return } if start == end { return 0, nil } bc := new(byteCounter) z := zlib.NewWriter(bc) defer z.Close() it := s.Alphabet().LetterIndex() var N float64 for i := start; i < end; i++ { if b := byte(s.At(i).L); it[b] >= 0 { N++ z.Write([]byte{b}) } } z.Close() cz = (float64(*bc - overhead)) / N return } biogo-1.0.4/complexity/complexity_pre1_7_test.go0000644000175000017500000000440214136731467021312 0ustar nileshnilesh// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build !go1.7 // +build !go1.7 package complexity import check "gopkg.in/check.v1" func (s *S) TestZ(c *check.C) { for i, t := range []struct { s string c float64 }{ {"", 0}, {"aaaaaaaaaaaaaaaaaaaa", 0.15}, {"acacacacacacacacacac", 0.2}, {"acgtacgtacgtacgtacgt", 0.3}, {"acgacagacagacaagatacgctcacatgctacagcagcactgatgcggactcttagctatgcagctagcatcgacatgcagcgatcagcgagc", 0.5}, {"cctccctaactcattttatgaggccagcatcattctgataccaaagccgggcagagacacaaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctcaataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaagtgggcttcatccctgggatgcaaggctggttcaatatacgcaaatcaataaatgtaatccagcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaaccctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatgggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactgaatgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctctcaccgctcctattcaacatag", 0.358}, {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 0.01}, {"cctccctaactcattttatgaggccagcatcattctgataccaaagcc---cagagacacaaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctcaataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaagtgggcttcatccctgggatgcaaggctggttcaatatacgcaaatcaataaatgtaatccagcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaaccctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatgggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactgaatgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctctcaccgctcctattcaacatag", 0.35412474849094566}, } { zc, err := Z(stringToSeq(t.s), 0, len(t.s)) c.Check(err, check.Equals, nil, check.Commentf("Test: %d", i)) c.Check(zc, check.Equals, t.c, check.Commentf("Test: %d", i)) } } biogo-1.0.4/complexity/complexity_1_7_test.go0000644000175000017500000000442014136731467020603 0ustar nileshnilesh// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.7 // +build go1.7 package complexity import check "gopkg.in/check.v1" func (s *S) TestZ(c *check.C) { for i, t := range []struct { s string c float64 }{ {"", 0}, {"aaaaaaaaaaaaaaaaaaaa", 0.15}, {"acacacacacacacacacac", 0.2}, {"acgtacgtacgtacgtacgt", 0.3}, {"acgacagacagacaagatacgctcacatgctacagcagcactgatgcggactcttagctatgcagctagcatcgacatgcagcgatcagcgagc", 0.48936170212765956}, {"cctccctaactcattttatgaggccagcatcattctgataccaaagccgggcagagacacaaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctcaataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaagtgggcttcatccctgggatgcaaggctggttcaatatacgcaaatcaataaatgtaatccagcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaaccctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatgggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactgaatgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctctcaccgctcctattcaacatag", 0.342}, {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 0.01}, {"cctccctaactcattttatgaggccagcatcattctgataccaaagcc---cagagacacaaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctcaataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaagtgggcttcatccctgggatgcaaggctggttcaatatacgcaaatcaataaatgtaatccagcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaaccctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatgggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactgaatgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctctcaccgctcctattcaacatag", 0.34004024144869216}, } { zc, err := Z(stringToSeq(t.s), 0, len(t.s)) c.Check(err, check.Equals, nil, check.Commentf("Test: %d", i)) c.Check(zc, check.Equals, t.c, check.Commentf("Test: %d", i)) } } biogo-1.0.4/util/0000755000175000017500000000000014136731467013132 5ustar nileshnileshbiogo-1.0.4/util/files_test.go0000644000175000017500000000201114136731467015614 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package util import ( "bytes" "crypto/md5" "fmt" "io/ioutil" "os" "os/exec" "gopkg.in/check.v1" ) // Tests func (s *S) TestHash(c *check.C) { // FIXME: This will not work with MacOS. _, err := exec.LookPath("md5sum") if err != nil { c.Skip(err.Error()) } md5sum := exec.Command("md5sum", "./files_test.go") b := &bytes.Buffer{} md5sum.Stdout = b err = md5sum.Run() if err != nil { c.Fatal(err) } f, err := os.Open("./files_test.go") if err != nil { c.Fatalf("%v %s", md5sum, err) } x, err := ioutil.ReadAll(f) if err != nil { c.Fatal(err) } f.Seek(0, 0) md5hash, err := Hash(md5.New(), f) if err != nil { c.Fatal(err) } md5string := fmt.Sprintf("%x .*\n", md5hash) c.Check(string(b.Bytes()), check.Matches, md5string) y, err := ioutil.ReadAll(f) if err != nil { c.Fatal(err) } c.Check(x, check.DeepEquals, y) } biogo-1.0.4/util/calls_test.go0000644000175000017500000000217414136731467015622 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package util import ( "gopkg.in/check.v1" ) // Helpers func f1(c *check.C) { c.Check(GetCaller(0).Package, check.Equals, "github.com/biogo/biogo/util") c.Check(GetCaller(0).Function, check.Equals, "f1") c.Check(GetCaller(1).Package, check.Equals, "github.com/biogo/biogo/util.(*S)") c.Check(GetCaller(1).Function, check.Equals, "TestCaller") f2(c) } func f2(c *check.C) { c.Check(GetCaller(0).Package, check.Equals, "github.com/biogo/biogo/util") c.Check(GetCaller(0).Function, check.Equals, "f2") c.Check(GetCaller(1).Package, check.Equals, "github.com/biogo/biogo/util") c.Check(GetCaller(1).Function, check.Equals, "f1") c.Check(GetCaller(2).Package, check.Equals, "github.com/biogo/biogo/util.(*S)") c.Check(GetCaller(2).Function, check.Equals, "TestCaller") } // Tests func (s *S) TestCaller(c *check.C) { c.Check(GetCaller(0).Package, check.Equals, "github.com/biogo/biogo/util.(*S)") c.Check(GetCaller(0).Function, check.Equals, "TestCaller") f1(c) } biogo-1.0.4/util/calls.go0000644000175000017500000000125614136731467014563 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package util import ( "runtime" "strings" ) type Caller struct { Package string Function string File string Line int } func GetCaller(skip int) *Caller { if pc, _, _, ok := runtime.Caller(skip + 1); ok { function := runtime.FuncForPC(pc) caller := strings.Split(function.Name(), ".") file, line := function.FileLine(pc) return &Caller{ Package: strings.Join(caller[0:len(caller)-1], "."), Function: caller[len(caller)-1], File: file, Line: line, } } return nil } biogo-1.0.4/util/files.go0000644000175000017500000000153114136731467014563 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package util import ( "errors" "hash" "io" "os" ) const ( bufferLen = 1 << 15 ) var buffer = make([]byte, bufferLen) // Hash returns the h hash sum of file f and any error. The hash is not reset on return, // so if individual files are to be hashed with the same h, it should be reset. func Hash(h hash.Hash, f *os.File) (sum []byte, err error) { fi, err := f.Stat() if err != nil || fi.IsDir() { return nil, errors.New("util: file is a directory") } s := io.NewSectionReader(f, 0, fi.Size()) for n, buffer := 0, make([]byte, bufferLen); err == nil; { n, err = s.Read(buffer) h.Write(buffer[:n]) } if err == io.EOF { err = nil } sum = h.Sum(nil) return } biogo-1.0.4/util/debug.go0000644000175000017500000000120714136731467014547 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package util import ( "fmt" "os" ) type Debug bool func (d Debug) Println(args ...interface{}) { if d { caller := GetCaller(1) fmt.Fprintf(os.Stderr, "%s %s#%d:", caller.Package, caller.File, caller.Line) fmt.Fprintln(os.Stderr, args...) } } func (d Debug) Printf(format string, args ...interface{}) { if d { caller := GetCaller(1) fmt.Fprintf(os.Stderr, "%s %s#%d:", caller.Package, caller.File, caller.Line) fmt.Fprintf(os.Stderr, format, args...) } } biogo-1.0.4/util/wrapper.go0000644000175000017500000000264514136731467015150 0ustar nileshnilesh// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package util import ( "io" ) // A Wrapper provides hard line wrapping and output limits to an io.Writer. type Wrapper struct { w io.Writer n int width int limit int } // NewWrapper returns a Wrapper that causes wraps lines at width bytes and // limits the number of bytes written to the provided limit. func NewWrapper(w io.Writer, width, limit int) *Wrapper { return &Wrapper{ w: w, width: width, limit: limit, } } func min(a, b int) int { if a < b { return a } return b } // Write writes the lesser of len(p) or the Writer's limit bytes from p to // the underlying data stream. It returns the number of bytes written from // p (0 <= n <= len(p)) and any error encountered that caused the write to // stop early, except the Writer's own limit. func (w *Wrapper) Write(p []byte) (n int, err error) { if w.limit >= 0 { if w.n >= w.limit { return 0, nil } p = p[:min(w.limit-w.n, len(p))] } if w.width <= 0 { return w.w.Write(p) } var _n int for len(p) > 0 { if w.n != 0 && w.n%w.width == 0 { _n, err = w.w.Write([]byte{'\n'}) n += _n if err != nil { return } } _n, err = w.w.Write(p[:min(w.width-w.n%w.width, len(p))]) n += _n w.n += _n if err != nil { return } p = p[_n:] } return n, err } biogo-1.0.4/util/debruijn.go0000644000175000017500000000131214136731467015260 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package util // Return a deBruijn sequence for a n-words with k letters. func DeBruijn(k, n byte) (s []byte) { switch k { case 0: return []byte{} case 1: return make([]byte, n) } a := make([]byte, k*n) s = make([]byte, 0, Pow(int(k), n)) var db func(byte, byte) db = func(t, p byte) { if t > n { if n%p == 0 { for j := byte(1); j <= p; j++ { s = append(s, a[j]) } } } else { a[t] = a[t-p] db(t+1, p) for j := a[t-p] + 1; j < k; j++ { a[t] = j db(t+1, t) } } } db(1, 1) return } biogo-1.0.4/util/maths.go0000644000175000017500000000317514136731467014603 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package util import ( "math" ) const ( MaxUint = ^uint(0) // The maximum uint value. MinUint = uint(0) // The minimum uint value. MaxInt = int(^uint(0) >> 1) // The maximum int value. MinInt = -MaxInt - 1 // The minimum int value. Ln4 = 1.3862943611198906188344642429163531361510002687205105082413 // The natural log of 4. ) // Returns the minimum int of a... func Min(a ...int) (min int) { min = MaxInt for _, i := range a { if i < min { min = i } } return } // Returns the minimum uint of a... func UMin(a ...uint) (min uint) { min = MaxUint for _, i := range a { if i < min { min = i } } return } // Returns the maximum int of a... func Max(a ...int) (max int) { max = MinInt for _, i := range a { if i > max { max = i } } return } // Returns the maximum uint of a... func UMax(a ...uint) (max uint) { max = MinUint for _, i := range a { if i > max { max = i } } return } // Return the exp'th power of base. func Pow(base int, exp byte) (r int) { r = 1 for exp > 0 { if exp&1 != 0 { r *= base } exp >>= 1 base *= base } return } // Returns the nth power of 4. func Pow4(n int) uint { return uint(1) << (2 * uint(n)) } // Returns the log base 4 of x. func Log4(x float64) float64 { return math.Log(x) / Ln4 } biogo-1.0.4/util/util_test.go0000644000175000017500000000050014136731467015470 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package util import ( "testing" "gopkg.in/check.v1" ) func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) biogo-1.0.4/util/util.go0000644000175000017500000000035714136731467014443 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package util provides some commonly used functions. package util biogo-1.0.4/util/wrapper_test.go0000644000175000017500000001166114136731467016205 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package util import ( "bytes" "gopkg.in/check.v1" ) const lorem = `Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.` // Tests func (s *S) TestWrapper(c *check.C) { for i, t := range []struct { w *Wrapper in string out string err error }{ { w: &Wrapper{limit: 0, width: 0}, in: lorem, out: ``, err: nil, }, { w: &Wrapper{limit: -1, width: 0}, in: lorem, out: lorem, err: nil, }, { w: &Wrapper{limit: -1, width: 20}, in: lorem, out: "" + "Lorem ipsum dolor si\n" + "t amet, consectetur \n" + "adipisicing elit, se\n" + "d do eiusmod tempor \n" + "incididunt ut labore\n" + " et dolore magna ali\n" + "qua.", err: nil, }, { w: &Wrapper{limit: 33, width: 20}, in: lorem, out: "" + "Lorem ipsum dolor si\n" + "t amet, conse", err: nil, }, { w: &Wrapper{n: 2, limit: 33, width: 20}, in: lorem, out: "" + "Lorem ipsum dolor \n" + "sit amet, con", err: nil, }, } { b := &bytes.Buffer{} t.w.w = b n, err := t.w.Write([]byte(t.in)) s := b.String() c.Check(err, check.Equals, t.err, check.Commentf("Test %d", i)) c.Check(s, check.Equals, t.out, check.Commentf("Test %d", i)) if t.w.limit >= 0 { c.Check(t.w.n, check.Equals, min(len(t.in), t.w.limit), check.Commentf("Test %d", i)) } c.Check(n, check.Equals, len(s), check.Commentf("Test %d", i)) } } func (s *S) TestWrapperSingleBytes(c *check.C) { for i, t := range []struct { w *Wrapper in string out string err error }{ { w: &Wrapper{limit: 0, width: 0}, in: lorem, out: ``, err: nil, }, { w: &Wrapper{limit: -1, width: 0}, in: lorem, out: lorem, err: nil, }, { w: &Wrapper{limit: -1, width: 20}, in: lorem, out: "" + "Lorem ipsum dolor si\n" + "t amet, consectetur \n" + "adipisicing elit, se\n" + "d do eiusmod tempor \n" + "incididunt ut labore\n" + " et dolore magna ali\n" + "qua.", err: nil, }, { w: &Wrapper{limit: 33, width: 20}, in: lorem, out: "" + "Lorem ipsum dolor si\n" + "t amet, conse", err: nil, }, { w: &Wrapper{n: 2, limit: 33, width: 20}, in: lorem, out: "" + "Lorem ipsum dolor \n" + "sit amet, con", err: nil, }, } { b := &bytes.Buffer{} t.w.w = b var n int for _, l := range t.in { _n, err := t.w.Write([]byte{byte(l)}) c.Check(err, check.Equals, t.err, check.Commentf("Test %d", i)) n += _n } s := b.String() c.Check(s, check.Equals, t.out, check.Commentf("Test %d", i)) if t.w.limit >= 0 { c.Check(t.w.n, check.Equals, min(len(t.in), t.w.limit), check.Commentf("Test %d", i)) } c.Check(n, check.Equals, len(s), check.Commentf("Test %d", i)) } } func (s *S) TestWrapperSegments(c *check.C) { for i, t := range []struct { w *Wrapper in []string out string err error }{ { w: &Wrapper{limit: 0, width: 0}, in: []string{`Lorem ipsum`, ` dolor sit a`, `met, consectetur adi`, `pisicing elit, sed do eiu`, `s`, `mod tempor in`, `cididunt ut labore et dolor`, `e magna aliqua.`}, out: ``, err: nil, }, { w: &Wrapper{limit: -1, width: 0}, in: []string{`Lorem ipsum`, ` dolor sit a`, `met, consectetur adi`, `pisicing elit, sed do eiu`, `s`, `mod tempor in`, `cididunt ut labore et dolor`, `e magna aliqua.`}, out: lorem, err: nil, }, { w: &Wrapper{limit: -1, width: 20}, in: []string{`Lorem ipsum`, ` dolor sit a`, `met, consectetur adi`, `pisicing elit, sed do eiu`, `s`, `mod tempor in`, `cididunt ut labore et dolor`, `e magna aliqua.`}, out: "" + "Lorem ipsum dolor si\n" + "t amet, consectetur \n" + "adipisicing elit, se\n" + "d do eiusmod tempor \n" + "incididunt ut labore\n" + " et dolore magna ali\n" + "qua.", err: nil, }, { w: &Wrapper{limit: 33, width: 20}, in: []string{`Lorem ipsum`, ` dolor sit a`, `met, consectetur adi`, `pisicing elit, sed do eiu`, `s`, `mod tempor in`, `cididunt ut labore et dolor`, `e magna aliqua.`}, out: "" + "Lorem ipsum dolor si\n" + "t amet, conse", err: nil, }, { w: &Wrapper{n: 2, limit: 33, width: 20}, in: []string{`Lorem ipsum dolor si`, `t a`, `met, consectetur adi`, `pisicing elit, sed do eiu`, `s`, `mod tempor in`, `cididunt ut labore et dolor`, `e magna aliqua.`}, out: "" + "Lorem ipsum dolor \n" + "sit amet, con", err: nil, }, } { b := &bytes.Buffer{} t.w.w = b var n int for _, l := range t.in { _n, err := t.w.Write([]byte(l)) c.Check(err, check.Equals, t.err, check.Commentf("Test %d", i)) n += _n } s := b.String() c.Check(s, check.Equals, t.out, check.Commentf("Test %d", i)) c.Check(n, check.Equals, len(s), check.Commentf("Test %d", i)) } } biogo-1.0.4/util/maths_test.go0000644000175000017500000000231714136731467015637 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package util import ( "math" "gopkg.in/check.v1" ) // Tests func (s *S) TestMin(c *check.C) { c.Check(Min(MaxInt, MinInt), check.Equals, MinInt) c.Check(Min(0, MinInt), check.Equals, MinInt) c.Check(Min(0, MaxInt), check.Equals, 0) } func (s *S) TestUMin(c *check.C) { c.Check(UMin(MaxUint, MinUint), check.Equals, MinUint) c.Check(UMin(0, MinUint), check.Equals, MinUint) c.Check(UMin(0, MaxUint), check.Equals, uint(0)) } func (s *S) TestMax(c *check.C) { c.Check(Max(MaxInt, MinInt), check.Equals, MaxInt) c.Check(Max(0, MinInt), check.Equals, 0) c.Check(Max(0, MaxInt), check.Equals, MaxInt) } func (s *S) TestUMax(c *check.C) { c.Check(UMax(MaxUint, MinUint), check.Equals, MaxUint) c.Check(UMax(0, MinUint), check.Equals, uint(0)) c.Check(UMax(0, MaxUint), check.Equals, MaxUint) } func (s *S) TestPowLog(c *check.C) { for i := 0; i < 15; i++ { c.Check(Pow(4, byte(i)), check.Equals, int(Pow4(i))) c.Check(Pow(4, byte(i)), check.Equals, int(math.Pow(4, float64(i)))) c.Check(int(Log4(float64(Pow4(i)))), check.Equals, i) } } biogo-1.0.4/util/timing.go0000644000175000017500000000257414136731467014760 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // // Derived from testing/benchmark.go Copyright 2009 The Go Authors // under the BSD license. package util import "time" type Timer struct { nanoseconds time.Duration start time.Time interval time.Time } func NewTimer() (t *Timer) { t = &Timer{} t.Start() return } // Start starts timing. This function is called automatically when a timer is created, // but it can also used to resume timing after a call to StopTimer. func (t *Timer) Start() { t.start = time.Now(); t.interval = t.start } // Stop stops timing. This can be used to pause the timer while performing complex // initialization that you don't want to measure. func (t *Timer) Stop() time.Duration { if t.start.After(time.Time{}) { t.nanoseconds += time.Now().Sub(t.start) } t.start = time.Time{} return t.nanoseconds } // Reset stops the timer and sets the elapsed time to zero. func (t *Timer) Reset() { t.start = time.Time{} t.nanoseconds = 0 } // Time returns the measured time. func (t *Timer) Time() time.Duration { return t.nanoseconds } // Start and return a time interval. func (t *Timer) Interval() (l time.Duration) { if t.start.After(time.Time{}) { l = time.Now().Sub(t.interval) t.interval = time.Now() } return } biogo-1.0.4/util/debruijn_test.go0000644000175000017500000000246014136731467016324 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package util import ( "gopkg.in/check.v1" ) // Tests type tdb struct { k, n byte obtain []byte } var T []tdb = []tdb{ {k: 2, n: 2, obtain: []byte{0, 0, 1, 1}}, {k: 2, n: 3, obtain: []byte{0, 0, 0, 1, 0, 1, 1, 1}}, {k: 2, n: 4, obtain: []byte{0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1}}, {k: 3, n: 4, obtain: []byte{0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 1, 1, 0, 0, 1, 2, 0, 0, 2, 1, 0, 0, 2, 2, 0, 1, 0, 1, 0, 2, 0, 1, 1, 1, 0, 1, 1, 2, 0, 1, 2, 1, 0, 1, 2, 2, 0, 2, 0, 2, 1, 1, 0, 2, 1, 2, 0, 2, 2, 1, 0, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 2, 2, 2}}, {k: 4, n: 2, obtain: []byte{0, 0, 1, 0, 2, 0, 3, 1, 1, 2, 1, 3, 2, 2, 3, 3}}, {k: 4, n: 3, obtain: []byte{0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 1, 1, 0, 1, 2, 0, 1, 3, 0, 2, 1, 0, 2, 2, 0, 2, 3, 0, 3, 1, 0, 3, 2, 0, 3, 3, 1, 1, 1, 2, 1, 1, 3, 1, 2, 2, 1, 2, 3, 1, 3, 2, 1, 3, 3, 2, 2, 2, 3, 2, 3, 3, 3}}, } func (s *S) TestDeBruijn(c *check.C) { for i := 0; i < 256; i++ { e := make([]byte, i) for j := range e { e[j] = byte(j) } c.Check(DeBruijn(byte(i), 1), check.DeepEquals, e) } for _, t := range T { c.Check(DeBruijn(t.k, t.n), check.DeepEquals, t.obtain) } } biogo-1.0.4/.github/0000755000175000017500000000000014136731467013515 5ustar nileshnileshbiogo-1.0.4/.github/FUNDING.yml0000644000175000017500000000132314136731467015331 0ustar nileshnilesh# These are supported funding model platforms github: [kortschak] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: # Replace with a single Patreon username open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] biogo-1.0.4/.github/ISSUE_TEMPLATE/0000755000175000017500000000000014136731467015700 5ustar nileshnileshbiogo-1.0.4/.github/ISSUE_TEMPLATE/feature_request.md0000644000175000017500000000152714136731467021432 0ustar nileshnilesh--- name: Feature request about: Request an addition to an existing package --- ### What are you trying to do? ### What did you try? ### How does bíogo not allow you to achieve your goal? ### What version of Go and bíogo are you using? ### Is this feature absent from the current master? ### Are you able to help contribute the feature? biogo-1.0.4/.github/ISSUE_TEMPLATE/bug_report.md0000644000175000017500000000157414136731467020401 0ustar nileshnilesh--- name: Bug Report about: Report a problem with bíogo --- ### What are you trying to do? ### What did you do? ### What did you expect to happen? ### What actually happened? ### What version of Go and bíogo are you using? ### Does this issue reproduce with the current master? biogo-1.0.4/.github/ISSUE_TEMPLATE/proposal.md0000644000175000017500000000105114136731467020056 0ustar nileshnilesh--- name: Proposal about: Propose a new package or significant addition of functionality --- ### Background ### Proposal ### Potential impact of proposal biogo-1.0.4/.github/ISSUE_TEMPLATE/question.md0000644000175000017500000000052114136731467020067 0ustar nileshnilesh--- name: Question about: Ask at the bíogo user discussion list https://groups.google.com/forum/#!forum/biogo-user --- # :no_entry_sign: INVALID :no_entry_sign: biogo-1.0.4/.github/PULL_REQUEST_TEMPLATE0000644000175000017500000000073514136731467016724 0ustar nileshnileshPlease take a look. biogo-1.0.4/version.go0000644000175000017500000000032314136731467014167 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package biogo const Version = "v1.0.1" biogo-1.0.4/feat/0000755000175000017500000000000014136731467013074 5ustar nileshnileshbiogo-1.0.4/feat/feature.go0000644000175000017500000001243514136731467015063 0ustar nileshnilesh// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package feat provides the base for storage and manipulation of biological interval information. package feat type Conformationer interface { Conformation() Conformation SetConformation(Conformation) error } type Conformation int8 func (c Conformation) String() string { switch c { case UndefinedConformation: return "undefined" case Linear: return "linear" case Circular: return "circular" } panic("feat: illegal conformation") } const ( UndefinedConformation Conformation = iota - 1 Linear Circular ) // Orienter wraps the Orientation method. // // Orientation returns the orientation of the feature relative to its location. type Orienter interface { Orientation() Orientation } type OrientSetter interface { SetOrientation(Orientation) error } type Orientation int8 func (o Orientation) String() string { switch o { case Reverse: return "reverse" case NotOriented: return "not oriented" case Forward: return "forward" } panic("feat: illegal orientation") } const ( Reverse Orientation = iota - 1 NotOriented Forward ) type Range interface { Start() int End() int Len() int } // Feature is a Range whose coordinates are defined relative to a feature // location. Start and End return the coordinates of the feature relative to // its location which can be nil. In the latter case callers should make no // assumptions whether coordinates of such features are comparable. type Feature interface { Range // Name returns the name of the feature. Name() string // Description returns the description of the feature. Description() string // Location returns the reference feature on which the feature is located. Location() Feature } type Offsetter interface { SetOffset(int) error } type Mutable interface { SetStart(int) error SetEnd(int) error } type LocationSetter interface { SetLocation(Feature) error } type Pair interface { Features() [2]Feature } type Set interface { Features() []Feature } type Adder interface { Set Add(...Feature) } type Collection interface { Set Location() Feature } // BasePositionOf returns the position in f coordinates converted to // coordinates relative to the first nil feature location, and a reference // which is the feature location preceding the nil. The returned reference // feature should be used by callers of BasePositionOf to verify that // coordinates are comparable. // BasePositionOf will panic if the feature chain is deeper than 1000 links. func BasePositionOf(f Feature, position int) (int, Feature) { for n := 0; n < 1000; n++ { position += f.Start() if f.Location() != nil { f = f.Location() continue } return position, f } panic("feat: feature chain too long") } // PositionWithin returns the position in f coordinates converted to // coordinates relative to the given reference feature and a boolean // indicating whether f can be located relative to ref. // PositionWithin will panic if the feature chain is deeper than 1000 links. func PositionWithin(f, ref Feature, position int) (pos int, ok bool) { for n := 0; n < 1000; n++ { if f == ref { return position, f != nil } position += f.Start() if f.Location() != nil { f = f.Location() continue } return 0, false } panic("feat: feature chain too long") } // BaseOrientationOf returns the orientation of f relative to a reference // which is the first non-nil, non-orientable feature location, and that // reference feature. The returned reference feature should be used by callers // of BaseOrientationOf to verify that orientations are comparable. If f is // not orientable, the returned orientation will be NotOriented and the // reference will be the first orientable or last non-nil feature. // BaseOrientationOf will panic if the feature chain is deeper than 1000 links. func BaseOrientationOf(f Feature) (ori Orientation, ref Feature) { o, ok := f.(Orienter) if !ok || o.Orientation() == NotOriented { for n := 0; n < 1000; n++ { if o, ok = f.Location().(Orienter); ok && o.Orientation() != NotOriented { return NotOriented, f.Location() } if f.Location() == nil { return NotOriented, f } f = f.Location() } panic("feat: feature chain too long") } ori = Forward for n := 0; n < 1000; n++ { ori *= o.Orientation() if o, ok = f.Location().(Orienter); ok && o.Orientation() != NotOriented { f = f.Location() continue } if f.Location() != nil { return ori, f.Location() } return ori, f } panic("feat: feature chain too long") } // OrientationWithin returns the orientation of f relative to the given // reference feature. The returned orientation will be NotOriented if f is not // located within the reference or if f is not orientable. // OrientationWithin will panic if the feature chain is deeper than 1000 links. func OrientationWithin(f, ref Feature) Orientation { if ref == nil { return NotOriented } ori := Forward for n := 0; n < 1000; n++ { o, ok := f.(Orienter) if !ok { return NotOriented } if o := o.Orientation(); o != NotOriented { if f == ref { return ori } ori *= o f = f.Location() if f == ref { return ori } continue } return NotOriented } panic("feat: feature chain too long") } biogo-1.0.4/feat/position.go0000644000175000017500000000072514136731467015273 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package feat // Convert from 1-based to 0-based indexing func OneToZero(pos int) int { if pos == 0 { panic("feat: 1-based index == 0") } if pos > 0 { pos-- } return pos } // Convert from 0-based to 1-based indexing func ZeroToOne(pos int) int { if pos >= 0 { pos++ } return pos } biogo-1.0.4/feat/feature_test.go0000644000175000017500000002162614136731467016124 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package feat_test import ( "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq/alignment" "github.com/biogo/biogo/seq/linear" "github.com/biogo/biogo/seq/multi" "gopkg.in/check.v1" ) var ( _ feat.Feature = (*linear.Seq)(nil) _ feat.Feature = (*linear.QSeq)(nil) _ feat.Feature = (*alignment.Seq)(nil) _ feat.Feature = (*alignment.QSeq)(nil) _ feat.Feature = (*multi.Multi)(nil) _ feat.Offsetter = (*linear.Seq)(nil) _ feat.Offsetter = (*linear.QSeq)(nil) _ feat.Offsetter = (*alignment.Seq)(nil) _ feat.Offsetter = (*alignment.QSeq)(nil) _ feat.Offsetter = (*multi.Multi)(nil) _ feat.LocationSetter = (*linear.Seq)(nil) _ feat.LocationSetter = (*linear.QSeq)(nil) _ feat.LocationSetter = (*alignment.Seq)(nil) _ feat.LocationSetter = (*alignment.QSeq)(nil) _ feat.LocationSetter = (*multi.Multi)(nil) ) type S struct{} var _ = check.Suite(&S{}) type chrom int func (c chrom) Name() string { return "test" } func (c chrom) Description() string { return "chromosome" } func (c chrom) Start() int { return 0 } func (c chrom) End() int { return int(c) } func (c chrom) Len() int { return int(c) } func (c chrom) Location() feat.Feature { return nil } type nonOri struct { start, end int name string desc string loc feat.Feature } func (o nonOri) Name() string { return o.name } func (o nonOri) Description() string { return o.desc } func (o nonOri) Start() int { return o.start } func (o nonOri) End() int { return o.end } func (o nonOri) Len() int { return o.end - o.start } func (o nonOri) Location() feat.Feature { return o.loc } type ori struct { nonOri orient feat.Orientation } func (o ori) Orientation() feat.Orientation { return o.orient } var ( chrom1 = chrom(1000) chrom2 = chrom(500) geneA = ori{ nonOri: nonOri{ start: 10, end: 50, name: "genA", desc: "gene", loc: chrom1, }, orient: feat.Forward, } proA = ori{ nonOri: nonOri{ start: 10, end: 20, name: "genA", desc: "promoter", loc: geneA, }, orient: feat.Forward, } pribA = ori{ nonOri: nonOri{ start: 15, end: 20, name: "pribA", desc: "promoter box", loc: proA, }, orient: feat.Forward, } opA = nonOri{ start: 12, end: 16, name: "genb", desc: "operator", loc: proA, } orfA = ori{ nonOri: nonOri{ start: 15, end: 30, name: "genA", desc: "orf", loc: geneA, }, orient: feat.Forward, } antiA = ori{ nonOri: nonOri{ start: 45, end: 50, name: "genA", desc: "antisense", loc: geneA, }, orient: feat.Reverse, } geneB = ori{ nonOri: nonOri{ start: 60, end: 100, name: "genB", desc: "gene", loc: chrom1, }, orient: feat.Reverse, } proB = ori{ nonOri: nonOri{ start: 90, end: 100, name: "genB", desc: "promoter", loc: geneB, }, orient: feat.Forward, } opB = nonOri{ start: 94, end: 98, name: "genB", desc: "operator", loc: proB, } orfB = ori{ nonOri: nonOri{ start: 15, end: 30, name: "genb", desc: "orf", loc: geneB, }, orient: feat.Forward, } pal = nonOri{ start: 300, end: 320, name: "palA", desc: "palindrome", loc: chrom1, } freeOri1 = ori{ nonOri: nonOri{ start: 10, end: 100, name: "frag1", desc: "fragment", }, orient: feat.Reverse, } freeOri2 = ori{ nonOri: nonOri{ start: 100, end: 200, name: "frag2", desc: "fragment", }, orient: feat.Forward, } freeOriNotOriented = ori{ nonOri: nonOri{ start: 10, end: 100, name: "frag", desc: "fragment", }, orient: feat.NotOriented, } orientationTests = []struct { f feat.Feature baseOri feat.Orientation oriWithin feat.Orientation ref feat.Feature }{ { f: chrom1, baseOri: feat.NotOriented, oriWithin: feat.NotOriented, ref: chrom1, }, { f: geneA, baseOri: feat.Forward, oriWithin: feat.Forward, ref: chrom1, }, { f: orfA, baseOri: feat.Forward, oriWithin: feat.Forward, ref: chrom1, }, { f: antiA, baseOri: feat.Reverse, oriWithin: feat.Reverse, ref: chrom1, }, { f: proA, baseOri: feat.Forward, oriWithin: feat.Forward, ref: chrom1, }, { f: opA, baseOri: feat.NotOriented, oriWithin: feat.NotOriented, ref: proA, }, { f: geneB, baseOri: feat.Reverse, oriWithin: feat.Reverse, ref: chrom1, }, { f: orfB, baseOri: feat.Reverse, oriWithin: feat.Reverse, ref: chrom1, }, { f: proB, baseOri: feat.Reverse, oriWithin: feat.Reverse, ref: chrom1, }, { f: opB, baseOri: feat.NotOriented, oriWithin: feat.NotOriented, ref: proB, }, { f: pal, baseOri: feat.NotOriented, oriWithin: feat.NotOriented, ref: chrom1, }, { f: freeOri1, baseOri: feat.Reverse, oriWithin: feat.Forward, ref: freeOri1, }, { f: freeOriNotOriented, baseOri: feat.NotOriented, oriWithin: feat.NotOriented, ref: freeOriNotOriented, }, } ) func (s *S) TestBaseOrientationOf(c *check.C) { for _, t := range orientationTests { ori, ref := feat.BaseOrientationOf(t.f) c.Check(ori, check.Equals, t.baseOri) c.Check(ref, check.Equals, t.ref) } // Check that we find the same reference where possible. _, ref1 := feat.BaseOrientationOf(orfA) _, ref2 := feat.BaseOrientationOf(antiA) c.Check(ref1, check.Equals, ref2) _, ref1 = feat.BaseOrientationOf(orfA) _, ref2 = feat.BaseOrientationOf(orfB) c.Check(ref1, check.Equals, ref2) _, ref1 = feat.BaseOrientationOf(freeOri1) _, ref2 = feat.BaseOrientationOf(freeOri2) c.Check(ref1, check.Not(check.Equals), ref2) // Check we detect cycles. var cycle ori cycle.orient = feat.Forward cycle.loc = &cycle c.Check(func() { feat.BaseOrientationOf(cycle) }, check.Panics, "feat: feature chain too long") } func (s *S) TestOrientationWithin(c *check.C) { for _, t := range orientationTests { c.Check(feat.OrientationWithin(t.f, t.ref), check.Equals, t.oriWithin) } // Check that a nil reference, an unorientable f or an f not located on // reference return NotOriented. c.Check(feat.OrientationWithin(freeOri1, nil), check.Equals, feat.NotOriented) c.Check(feat.OrientationWithin(pribA, nil), check.Equals, feat.NotOriented) c.Check(feat.OrientationWithin(opA, chrom2), check.Equals, feat.NotOriented) c.Check(feat.OrientationWithin(opA, geneB), check.Equals, feat.NotOriented) c.Check(feat.OrientationWithin(geneA, chrom2), check.Equals, feat.NotOriented) // Check we detect cycles. var cycle ori cycle.orient = feat.Forward cycle.loc = &cycle c.Check(func() { feat.OrientationWithin(cycle, chrom1) }, check.Panics, "feat: feature chain too long") } // Tests for BasePositionOf and PositionWithin. var baseCoordsTests = []struct { f, ref feat.Feature pos, basePos, posWithin int }{ { f: chrom1, pos: 20, basePos: 20, posWithin: 20, ref: chrom1, }, { f: geneA, pos: 30, basePos: 40, posWithin: 40, ref: chrom1, }, { f: proA, pos: 40, basePos: 60, posWithin: 60, ref: chrom1, }, { f: opA, pos: 20, basePos: 52, posWithin: 52, ref: chrom1, }, { f: antiA, pos: 20, basePos: 75, posWithin: 75, ref: chrom1, }, { f: freeOri1, pos: 0, basePos: 10, posWithin: 0, ref: freeOri1, }, } func (s *S) TestBasePositionOf(c *check.C) { for _, t := range baseCoordsTests { pos, ref := feat.BasePositionOf(t.f, t.pos) c.Check(pos, check.Equals, t.basePos) c.Check(ref, check.Equals, t.ref) } // Check that we find the same reference where possible. _, refGeneA := feat.BasePositionOf(geneA, 0) _, refGeneB := feat.BasePositionOf(geneB, 0) c.Check(refGeneA, check.Equals, refGeneB) // Check we detect cycles. var cycle ori cycle.loc = &cycle c.Check(func() { feat.BasePositionOf(cycle, 10) }, check.Panics, "feat: feature chain too long") } func (s *S) TestPositionWithin(c *check.C) { for _, t := range baseCoordsTests { pos, ok := feat.PositionWithin(t.f, t.ref, t.pos) c.Check(pos, check.Equals, t.posWithin) c.Check(ok, check.Equals, true) } // Check unorthodox tree structures. _, ok := feat.PositionWithin(opA, chrom2, 10) c.Check(ok, check.Equals, false) _, ok = feat.PositionWithin(opA, nil, 10) c.Check(ok, check.Equals, false) _, ok = feat.PositionWithin(nil, nil, 10) c.Check(ok, check.Equals, false) // Check we detect cycles. var cycle ori cycle.loc = &cycle c.Check(func() { feat.PositionWithin(cycle, chrom1, 10) }, check.Panics, "feat: feature chain too long") } biogo-1.0.4/feat/gene/0000755000175000017500000000000014136731467014012 5ustar nileshnileshbiogo-1.0.4/feat/gene/gene_test.go0000644000175000017500000003051114136731467016316 0ustar nileshnilesh// Copyright ©2015 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package gene import ( "github.com/biogo/biogo/feat" "testing" "gopkg.in/check.v1" ) // Assert that interfaces are satisfied var ( _ feat.Feature = (*Gene)(nil) _ feat.Feature = (*NonCodingTranscript)(nil) _ feat.Feature = (*CodingTranscript)(nil) _ feat.Feature = (*Exon)(nil) _ feat.Feature = (*Intron)(nil) _ feat.Feature = (*TranscriptFeature)(nil) _ featureOrienter = (*Gene)(nil) _ featureOrienter = (*NonCodingTranscript)(nil) _ featureOrienter = (*CodingTranscript)(nil) _ featureOrienter = (*Exon)(nil) _ featureOrienter = (*Intron)(nil) _ featureOrienter = (*TranscriptFeature)(nil) _ Transcript = (*NonCodingTranscript)(nil) _ Transcript = (*CodingTranscript)(nil) _ Interface = (*Gene)(nil) ) // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { check.TestingT(t) } // Create the test suite type S struct{} var _ = check.Suite(&S{}) // Chr implements feat.Feature and is used as location for the test objects. type Chr string func (c Chr) Start() int { return 0 } func (c Chr) End() int { return 0 } func (c Chr) Len() int { return 0 } func (c Chr) Name() string { return string(c) } func (c Chr) Description() string { return "chrom" } func (c Chr) Location() feat.Feature { return nil } // ori implements feat.Feature and is used as location for test objects. type ori struct { start, end int name string desc string loc feat.Feature orient feat.Orientation } func (o ori) Name() string { return o.name } func (o ori) Description() string { return o.desc } func (o ori) Start() int { return o.start } func (o ori) End() int { return o.end } func (o ori) Len() int { return o.end - o.start } func (o ori) Location() feat.Feature { return o.loc } func (o ori) Orientation() feat.Orientation { return o.orient } // Define some test objects that will be used in the actual tests var ( geneA = Gene{ ID: "geneA", Chrom: Chr("Y"), Offset: 100, Orient: feat.Forward, Desc: "forward gene", } geneB = Gene{ ID: "geneB", Chrom: Chr("X"), Offset: 100, Orient: feat.Reverse, Desc: "reverse gene", } geneC = Gene{ ID: "geneC", Chrom: ori{ start: 0, end: 800, orient: feat.Reverse, loc: ori{ start: 0, end: 900, orient: feat.Forward, loc: ori{ start: 0, end: 1000, orient: feat.Reverse, }}}, Offset: 100, Orient: feat.Reverse, Desc: "reverse gene on a contig on a supercontig on an ultra contig.", } codingTranscriptA = CodingTranscript{ ID: "codingTranscriptA", Loc: Chr("Y"), Offset: 100, CDSstart: 100, CDSend: 600, Orient: feat.Forward, Desc: "forward transcript with cds", } codingTranscriptB = CodingTranscript{ ID: "codingTranscriptB", Loc: Chr("X"), Offset: 500, CDSstart: 300, CDSend: 1300, Orient: feat.Reverse, Desc: "reverse transcript with cds", } codingTranscriptC = CodingTranscript{ ID: "codingTranscriptC", Loc: &geneC, Offset: 20, CDSstart: 100, CDSend: 500, Orient: feat.Forward, Desc: "forward transcript with cds on reverse gene", } nonCodingTranscriptA = NonCodingTranscript{ ID: "nonCodingTranscriptA", Loc: Chr("Y"), Offset: 100, Orient: feat.Forward, Desc: "forward non coding transcript", } nonCodingTranscriptB = NonCodingTranscript{ ID: "nonCodingTranscriptB", Loc: Chr("X"), Offset: 500, Orient: feat.Reverse, Desc: "reverse non coding transcript", } ) // Tests for Gene var geneTests = []struct { Test string Gene Interface Name string Chrom string Start, End int Len int Orientation feat.Orientation Feats []feat.Feature SetErr string TransCount int }{ { Test: "forward gene with valid feats", Gene: &geneA, Name: "geneA", Chrom: "Y", Start: 100, End: 120, Len: 20, Orientation: feat.Forward, Feats: []feat.Feature{ &NonCodingTranscript{Loc: &geneA, exons: []Exon{{Length: 20}}}, &NonCodingTranscript{Loc: &geneA}, }, TransCount: 2, }, { Test: "reverse gene with valid feats", Gene: &geneB, Name: "geneB", Chrom: "X", Start: 100, End: 110, Len: 10, Orientation: feat.Reverse, Feats: []feat.Feature{ &NonCodingTranscript{Loc: &geneB, exons: []Exon{{Length: 10}}}, &NonCodingTranscript{Loc: &geneB}, }, TransCount: 2, }, { Test: "forward gene with feat on wrong location", Gene: &geneA, Feats: []feat.Feature{&NonCodingTranscript{Loc: &geneB}}, SetErr: "transcript location does not match the gene", }, { Test: "reverse gene with no feat from 0", Gene: &geneB, Feats: []feat.Feature{&NonCodingTranscript{Loc: &geneB, Offset: 5}}, SetErr: "no transcript with 0 start on gene", }, } func (s *S) TestGene(c *check.C) { for _, d := range geneTests { g := d.Gene // Test SetFeatures if err := g.SetFeatures(d.Feats...); err != nil { c.Assert(err, check.ErrorMatches, d.SetErr) } else { c.Check(g.Name(), check.Equals, d.Name) c.Check(g.Start(), check.Equals, d.Start) c.Check(g.End(), check.Equals, d.End) c.Check(g.Len(), check.Equals, d.Len) c.Check(g.Location().Name(), check.Equals, d.Chrom) c.Check(g.Orientation(), check.Equals, d.Orientation) c.Check(len(TranscriptsOf(g)), check.Equals, d.TransCount) } } } // Tests for Transcript var transcriptTests = []struct { Test string Transcript Transcript Name string Loc feat.Feature Start, End int UTR5start, UTR5end int CDSstart, CDSend int UTR3start, UTR3end int Len int Orientation feat.Orientation Exons []Exon AddErr string ExonicLen int }{ { Test: "forward transcript with cds and valid exons", Transcript: &codingTranscriptA, Name: "codingTranscriptA", Loc: Chr("Y"), Orientation: feat.Forward, Exons: []Exon{ {Transcript: &codingTranscriptA, Offset: 0, Length: 300}, {Transcript: &codingTranscriptA, Offset: 600, Length: 200}}, Start: 100, End: 900, UTR5start: 0, UTR5end: 100, CDSstart: 100, CDSend: 600, UTR3start: 600, UTR3end: 800, Len: 800, ExonicLen: 500, }, { Test: "reverse transcript with cds and valid exons", Transcript: &codingTranscriptB, Name: "codingTranscriptB", Loc: Chr("X"), Orientation: feat.Reverse, Exons: []Exon{ {Transcript: &codingTranscriptB, Offset: 0, Length: 600}, {Transcript: &codingTranscriptB, Offset: 900, Length: 600}}, Start: 500, End: 2000, UTR3start: 0, UTR3end: 300, CDSstart: 300, CDSend: 1300, UTR5start: 1300, UTR5end: 1500, Len: 1500, ExonicLen: 1200, }, { Test: "forward transcript with cds and valid exons on reverse gene on a contig on a supercontig on an ultra contig.", Transcript: &codingTranscriptC, Name: "codingTranscriptC", Loc: &geneC, Orientation: feat.Forward, Exons: []Exon{ {Transcript: &codingTranscriptC, Offset: 0, Length: 500}, {Transcript: &codingTranscriptC, Offset: 600, Length: 100}}, Start: 20, End: 720, UTR3start: 0, UTR3end: 100, CDSstart: 100, CDSend: 500, UTR5start: 500, UTR5end: 700, Len: 700, ExonicLen: 600, }, { Test: "forward non-coding transcript with valid exons", Transcript: &nonCodingTranscriptA, Name: "nonCodingTranscriptA", Loc: Chr("Y"), Orientation: feat.Forward, Exons: []Exon{ {Transcript: &nonCodingTranscriptA, Offset: 0, Length: 300}, {Transcript: &nonCodingTranscriptA, Offset: 600, Length: 200}}, Start: 100, End: 900, Len: 800, ExonicLen: 500, }, { Test: "reverse non-coding transcript without exon at 0", Transcript: &nonCodingTranscriptB, Orientation: feat.Reverse, Exons: []Exon{{Transcript: &nonCodingTranscriptB, Offset: 10}}, AddErr: "no exon with a zero start", }, { Test: "reverse non-coding transcript with wrong exon location", Transcript: &nonCodingTranscriptB, Orientation: feat.Reverse, Exons: []Exon{{Offset: 0, Length: 10000}}, AddErr: "exon location is not the transcript", }, } func (s *S) TestTranscript(c *check.C) { for _, d := range transcriptTests { t := d.Transcript // Test SetExons if err := t.SetExons(d.Exons...); err != nil { c.Assert(err, check.ErrorMatches, d.AddErr) } else { t.Exons()[0].Offset = 1000000 // should have no effect on t c.Check(t.Name(), check.Equals, d.Name) c.Check(t.Start(), check.Equals, d.Start) c.Check(t.End(), check.Equals, d.End) c.Check(t.Len(), check.Equals, d.Len) c.Check(t.Location(), check.Equals, d.Loc) c.Check(t.Orientation(), check.Equals, d.Orientation) c.Check(t.Exons().SplicedLen(), check.Equals, d.ExonicLen) // Test CodingTranscript specifics if t, ok := t.(*CodingTranscript); ok { utr5, cds, utr3 := t.UTR5(), t.CDS(), t.UTR3() c.Check(utr5.Start(), check.Equals, d.UTR5start) c.Check(utr5.End(), check.Equals, d.UTR5end) c.Check(utr5.Location(), check.Equals, t) c.Check(cds.Start(), check.Equals, d.CDSstart) c.Check(cds.End(), check.Equals, d.CDSend) c.Check(cds.Location(), check.Equals, t) c.Check(utr3.Start(), check.Equals, d.UTR3start) c.Check(utr3.End(), check.Equals, d.UTR3end) c.Check(utr3.Location(), check.Equals, t) c.Check(t.CDSstart, check.Equals, d.CDSstart) c.Check(t.CDSend, check.Equals, d.CDSend) c.Check(t.UTR5start(), check.Equals, d.UTR5start) c.Check(t.UTR5end(), check.Equals, d.UTR5end) c.Check(t.UTR3start(), check.Equals, d.UTR3start) c.Check(t.UTR3end(), check.Equals, d.UTR3end) } } } } // Tests for Exon and Intron type featureOrienter interface { feat.Orienter feat.Feature } var exonIntronTests = []struct { Test string Feat featureOrienter Start, End int Len int Transcript feat.Feature Orientation feat.Orientation }{ { Test: "Exon on transcript", Feat: Exon{Offset: 200, Length: 200}, Start: 200, End: 400, Len: 200, Orientation: feat.Forward, }, { Test: "Intron on transcript", Feat: Intron{Offset: 300, Length: 500}, Start: 300, End: 800, Len: 500, Orientation: feat.Forward, }, } func (s *S) TestExonIntron(c *check.C) { for _, d := range exonIntronTests { e := d.Feat c.Check(e.Start(), check.Equals, d.Start) c.Check(e.End(), check.Equals, d.End) c.Check(e.Len(), check.Equals, d.Len) c.Check(e.Location(), check.DeepEquals, d.Transcript) c.Check(e.Orientation(), check.Equals, d.Orientation) } } // Tests for Exons var exonsTests = []struct { Test string InputExons []Exon Location feat.Feature Start, End, Len, SplicedLen int AddErr string MadeIntrons Introns }{ { Test: "Exons not in order", InputExons: []Exon{ {Offset: 300, Length: 100}, {Offset: 0, Length: 100}, }, Start: 0, End: 400, Len: 2, SplicedLen: 200, MadeIntrons: Introns{ Intron{Offset: 100, Length: 200}, }, }, { Test: "Exons overlap", InputExons: []Exon{ {Offset: 0, Length: 100}, {Offset: 50, Length: 100}, }, AddErr: "exons overlap", }, { Test: "Exons on different transcripts", InputExons: []Exon{ {Transcript: &codingTranscriptA}, {Transcript: &codingTranscriptB}, }, AddErr: "exons location differ", }, } func (s *S) TestExons(c *check.C) { for _, d := range exonsTests { var e Exons ie := d.InputExons // Test SetExons if e, err := e.Add(ie...); err != nil { c.Assert(err, check.ErrorMatches, d.AddErr) } else { c.Check(e.Location(), check.DeepEquals, d.Location) c.Check(e.Start(), check.Equals, d.Start) c.Check(e.End(), check.Equals, d.End) c.Check(e.Len(), check.Equals, d.Len) c.Check(e.SplicedLen(), check.Equals, d.SplicedLen) c.Check(e.Introns(), check.DeepEquals, d.MadeIntrons) } } } biogo-1.0.4/feat/gene/gene.go0000644000175000017500000004120014136731467015254 0ustar nileshnilesh// Copyright ©2015 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package gene contains the types and methods to handle the definition of a // gene. A gene is a union of genomic sequences encoding a coherent set of // potentially overlapping functional products. Since the package is located // under the feat namespace, we define gene to correspond to a specific // genomic region (has genomic coordinates). // // The package also contain types to describe gene transcripts. Transcripts // can be coding and non-coding. Coding transcripts have functional regions // (5'UTR, CDS and 3'UTR) and consist of exons. package gene import ( "github.com/biogo/biogo/feat" "errors" "sort" ) const maxInt = int(^uint(0) >> 1) // The maximum int value. // Interface defines the gene interface. type Interface interface { feat.Feature feat.Orienter feat.Set SetFeatures(...feat.Feature) error } // Transcript is the interface for a gene transcript. type Transcript interface { feat.Feature feat.Orienter Exons() Exons Introns() Introns SetExons(...Exon) error } // TranscriptsOf scans a feat.Set and returns any Transcripts that it finds. func TranscriptsOf(s feat.Set) []Transcript { var ts []Transcript for _, f := range s.Features() { if t, ok := f.(Transcript); ok { ts = append(ts, t) } } return ts } // A Gene occupies a specific region on the genome and may have 0 or more // features, including transcripts, associated with it. The gene is tightly // coupled with its features in the sense that the gene boundaries are defined // by the features. By definition one of the features must always start at // position 0 relative to the gene and this or another one has to end at the // end of the gene. The former is asserted when features are set and the // latter is guaranteed by setting the gene end at the largest end of the // features. type Gene struct { ID string Chrom feat.Feature Offset int Orient feat.Orientation Desc string length int feats []feat.Feature } // Start returns the gene start on the chromosome. func (g *Gene) Start() int { return g.Offset } // End returns the gene end on the chromosome. func (g *Gene) End() int { return g.Offset + g.Len() } // Len returns the length of the gene. func (g *Gene) Len() int { return g.length } // Name returns the gene name. Currently the same as the id. func (g *Gene) Name() string { return g.ID } // Description returns a description for the gene. func (g *Gene) Description() string { return g.Desc } // Location returns the location of the gene. Namely the chromosome. func (g *Gene) Location() feat.Feature { return g.Chrom } // Orientation returns the orientation of the gene relative to the chromosome. func (g *Gene) Orientation() feat.Orientation { return g.Orient } // Features returns all features added to the gene. func (g *Gene) Features() []feat.Feature { return g.feats } // SetFeatures sets the gene features. Internally, it verifies that their // Location is the gene and that one of them has zero Start. If an error // occurs it is returned and the features are not set. func (g *Gene) SetFeatures(feats ...feat.Feature) error { pos := maxInt end := 0 for _, f := range feats { if f.Location() != g { return errors.New("transcript location does not match the gene") } if f.Start() < pos { pos = f.Start() } if f.End() > end { end = f.End() } } if pos != 0 { return errors.New("no transcript with 0 start on gene") } g.length = end - pos g.feats = feats return nil } // A NonCodingTranscript is a gene transcript that has no coding potential. It // can be located on any feat.Feature such as a gene or a chromosome. The // concept of exons is tightly coupled with the NonCodingTranscript in the // sense that the transcript borders are basically defined by the contained // exons. By definition one of the exons must always start at position 0 // relative to the transcript and this or another one must end at the end of // transcript. The former is asserted when exons are set and the latter is // guaranteed by setting the transcript end at the end of the last exon. type NonCodingTranscript struct { ID string Loc feat.Feature Offset int Orient feat.Orientation Desc string exons Exons } // Start returns the transcript start relative to Location. func (t *NonCodingTranscript) Start() int { return t.Offset } // End returns the transcript end relative to Location. func (t *NonCodingTranscript) End() int { return t.Offset + t.exons.End() } // Len returns the length of the transcript. func (t *NonCodingTranscript) Len() int { return t.End() - t.Start() } // Name returns the transcript name. Currently the same as the id. func (t *NonCodingTranscript) Name() string { return t.ID } // Description returns a description for the transcript. func (t *NonCodingTranscript) Description() string { return t.Desc } // Location returns the location of the transcript. Can be any feat.Feature // such as a gene or a chromosome. func (t *NonCodingTranscript) Location() feat.Feature { return t.Loc } // Orientation returns the orientation of the transcript relative to Location. func (t *NonCodingTranscript) Orientation() feat.Orientation { return t.Orient } // Exons returns a typed slice with the transcript exons. func (t *NonCodingTranscript) Exons() Exons { return t.exons } // Introns returns a typed slice with the transcript introns. func (t *NonCodingTranscript) Introns() Introns { return t.exons.Introns() } // SetExons sets the transcript exons. Internally, it sorts exons by Start, // verifies that their Location is the transcript, that they are not // overlapping and that one has zero Start. If an error occurs it is returned // and the exons are not set. func (t *NonCodingTranscript) SetExons(exons ...Exon) error { exons, err := buildExonsFor(t, exons...) if err != nil { return err } t.exons = exons return nil } // A CodingTranscript is a gene transcript that has coding potential. It can // be located on any feat.Feature such as a gene or a chromosome. The concept // of exons is tightly coupled with the CodingTranscript in the sense that // the transcript borders are basically defined by the contained exons. By // definition one of the exons must always start at position 0 relative to the // transcript and this or another one must end at the transcript end. The // former is asserted when exons are set and the latter is guaranteed by // setting the transcript end at the end of the last exon. type CodingTranscript struct { ID string Loc feat.Feature Offset int Orient feat.Orientation Desc string CDSstart int CDSend int exons Exons } // Start returns the transcript start relative to Location. func (t *CodingTranscript) Start() int { return t.Offset } // End returns the transcript end relative to Location. func (t *CodingTranscript) End() int { return t.Offset + t.exons.End() } // Len returns the length of the transcript. func (t *CodingTranscript) Len() int { return t.End() - t.Start() } // Name returns the transcript name. Currently the same as the id. func (t *CodingTranscript) Name() string { return t.ID } // Description returns a description for the transcript. func (t *CodingTranscript) Description() string { return t.Desc } // Location returns the location of the transcript. Can be any feat.Feature // such as a gene or a chromosome. func (t *CodingTranscript) Location() feat.Feature { return t.Loc } // Orientation returns the orientation of the transcript relative to Location. func (t *CodingTranscript) Orientation() feat.Orientation { return t.Orient } // UTR5 returns a feat.Feature that corresponds to the 5'UTR of the // transcript. func (t *CodingTranscript) UTR5() feat.Feature { tf := &TranscriptFeature{Transcript: t, Orient: feat.Forward} ori, _ := feat.BaseOrientationOf(t) switch ori { case feat.Forward: tf.Offset = 0 tf.Length = t.CDSstart case feat.Reverse: tf.Offset = t.CDSend tf.Length = t.Len() - t.CDSend default: panic("gene: invalid base orientation for transcript") } return tf } // CDS returns a feat.Feature that corresponds to the coding region of the // transcript. func (t *CodingTranscript) CDS() feat.Feature { return &TranscriptFeature{ Transcript: t, Offset: t.CDSstart, Length: t.CDSend - t.CDSstart, Orient: feat.Forward, } } // UTR3 returns a feat.Feature that corresponds to the 3'UTR of the // transcript. func (t *CodingTranscript) UTR3() feat.Feature { tf := &TranscriptFeature{Transcript: t, Orient: feat.Forward} ori, _ := feat.BaseOrientationOf(t) switch ori { case feat.Forward: tf.Offset = t.CDSend tf.Length = t.Len() - t.CDSend case feat.Reverse: tf.Offset = 0 tf.Length = t.CDSstart default: panic("gene: invalid base orientation for transcript") } return tf } // UTR5start returns the start of the 5'UTR relative to the transcript. // UTR5start is shorthand for t.UTR5().Start(). func (t *CodingTranscript) UTR5start() int { return t.UTR5().Start() } // UTR5end returns the end of the 5'UTR relative to the transcript. // UTR5end is shorthand for t.UTR5().End(). func (t *CodingTranscript) UTR5end() int { return t.UTR5().End() } // UTR3start returns the start of the 3'UTR relative to the transcript. // UTR3start is shorthand for t.UTR3().Start(). func (t *CodingTranscript) UTR3start() int { return t.UTR3().Start() } // UTR3end returns the end of the 3'UTR relative to the transcript. // UTR3end is shorthand for t.UTR3().End(). func (t *CodingTranscript) UTR3end() int { return t.UTR3().End() } // Exons returns a typed slice with the transcript exons. func (t *CodingTranscript) Exons() Exons { return t.exons } // Introns returns a typed slice with the transcript introns. func (t *CodingTranscript) Introns() Introns { return t.exons.Introns() } // SetExons sets the transcript exons. Internally, it sorts exons by Start, // verifies that their Location is the transcript, that they are not // overlapping and that one has zero Start. If an error occurs it is returned // and the exons are not set. func (t *CodingTranscript) SetExons(exons ...Exon) error { newExons, err := buildExonsFor(t, exons...) if err != nil { return err } t.exons = newExons return nil } // TranscriptFeature defines a feature on a transcript. type TranscriptFeature struct { Transcript Transcript // Transcript is the transcript that the feature is located. Offset int // Offset is the position of the feature relative to Transcript. Length int // Length is the feature length. Orient feat.Orientation // Orientation is the feature orientation relative to Transcript. FeatName string // FeatName is the name of the feature. Desc string // Desc is the description of the feature. } // Start returns the feature start relative to Transcript. func (t *TranscriptFeature) Start() int { return t.Offset } // End returns the feature end relative to TranscriptLocation. func (t *TranscriptFeature) End() int { return t.Offset + t.Length } // Len returns the length of the feature. func (t *TranscriptFeature) Len() int { return t.Length } // Name returns an empty string. func (t *TranscriptFeature) Name() string { return t.FeatName } // Description returns the feature description. func (t *TranscriptFeature) Description() string { return t.Desc } // Location returns the Transcript. func (t *TranscriptFeature) Location() feat.Feature { return t.Transcript } // Orientation returns the orientation of the feature relative to Transcript. func (t *TranscriptFeature) Orientation() feat.Orientation { return t.Orient } // Exons is a typed slice of Exon. It guarantees that exons are always sorted // by Start, are all located on the same feature and are non overlapping. type Exons []Exon // SplicedLen returns the total length of the exons. func (s Exons) SplicedLen() int { length := 0 for _, e := range s { length += e.Len() } return length } // Add adds exons to the slice and safeguards the types contracts. It returns // a new slice with the added exons. It checks for sorting, overlap, and // location match. If and error occurs it returns the old slice (without the // new exons) and the error. func (s Exons) Add(exons ...Exon) (Exons, error) { newSlice := append(s, exons...) sort.Sort(newSlice) for i, e := range newSlice { if i != 0 && e.Start() < newSlice[i-1].End() { return s, errors.New("exons overlap") } if i != 0 && e.Location() != newSlice[i-1].Location() { return s, errors.New("exons location differ") } } if s.Location() != nil && s.Location() != newSlice.Location() { return s, errors.New("new exons locations differ from old ones") } return newSlice, nil } // Location returns the common location of all the exons. func (s Exons) Location() feat.Feature { if len(s) == 0 { return nil } return s[0].Location() } // Len returns the number of exons in the slice. func (s Exons) Len() int { return len(s) } // Less returns whether the exon with index i should sort before // the exon with index j. func (s Exons) Less(i, j int) bool { return s[i].Start() < s[j].Start() } // Swap swaps the exons with indexes i and j. func (s Exons) Swap(i, j int) { s[i], s[j] = s[j], s[i] } // End returns the maximum End of all exons. Since exons are sorted and non // overlapping this matches the End of the last exon in the slice. func (s Exons) End() int { if len(s) == 0 { return 0 } return s[len(s)-1].End() } // Start returns the minimum Start of all exons. Since exons are sorted and // non overlapping this matches the Start of the first exon in the slice. func (s Exons) Start() int { if len(s) == 0 { return 0 } return s[0].Start() } // Introns returns a typed slice of Introns. Introns are built dynamically. func (s Exons) Introns() Introns { var introns Introns if s.Len() < 2 { return introns } for i := 1; i < s.Len(); i++ { intron := Intron{ Transcript: s[i].Transcript, Offset: s[i-1].End(), Length: s[i].Start() - s[i-1].End(), } introns = append(introns, intron) } return introns } // An Exon is the part of a transcript that remains present in the final // mature RNA product after splicing. type Exon struct { Transcript Transcript Offset int Length int Desc string } // Start returns the start position of the exon relative to Transcript. func (e Exon) Start() int { return e.Offset } // End returns the end position of the exon relative to Transcript. func (e Exon) End() int { return e.Offset + e.Length } // Len returns the length of the exon. func (e Exon) Len() int { return e.Length } // Location returns the location of the exon - the transcript. func (e Exon) Location() feat.Feature { return e.Transcript } // Name returns an empty string. func (e Exon) Name() string { return "" } // Description returns a description for the exon. func (e Exon) Description() string { return e.Desc } // Orientation always returns Forward. func (e Exon) Orientation() feat.Orientation { return feat.Forward } // Introns corresponds to a collection of introns. type Introns []Intron // An Intron is the part of a transcript that is removed during splicing // and is not part of the final mature RNA product. type Intron struct { Transcript Transcript Offset int Length int Desc string } // Start returns the start position of the intron relative to Transcript. func (i Intron) Start() int { return i.Offset } // End returns the end position of the intron relative to Transcript. func (i Intron) End() int { return i.Offset + i.Length } // Len returns the length of the intron. func (i Intron) Len() int { return i.Length } // Location returns the location of the intron - the transcript. func (i Intron) Location() feat.Feature { return i.Transcript } // Name returns an empty string. func (i Intron) Name() string { return "" } // Description returns a description for the intron. func (i Intron) Description() string { return i.Desc } // Orientation always returns Forward. func (i Intron) Orientation() feat.Orientation { return feat.Forward } // buildExonsFor is a helper function that will check if exons are compatible // with a transcript and return a typed slice of exons. If it encounters an // error or the exons are not compatible with the transcript it will return // the error and a possibly partially filled slice. It is not safe to use the // slice if the error is not nil. func buildExonsFor(t Transcript, exons ...Exon) (Exons, error) { var newExons Exons newExons, err := newExons.Add(exons...) if err != nil { return newExons, err } if newExons.Location() != t { return newExons, errors.New("exon location is not the transcript") } if newExons.Start() != 0 { return newExons, errors.New("no exon with a zero start") } return newExons, nil } biogo-1.0.4/feat/moltype.go0000644000175000017500000000170014136731467015112 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package feat import ( "strings" ) const ( Undefined Moltype = iota - 1 DNA RNA Protein ) var ( moltypeToString = [...]string{ "DNA", "RNA", "Protein", } stringToMoltype map[string]Moltype = map[string]Moltype{} ) func init() { for m, s := range moltypeToString { stringToMoltype[strings.ToLower(s)] = Moltype(m) stringToMoltype[s] = Moltype(m) } } // Moltype represents the molecule type of a source of sequence data. type Moltype int8 // Return a string representation of a Moltype. func (m Moltype) String() string { if m == Undefined { return "Undefined" } return moltypeToString[m] } // ParseMoltype allows conversion from a string to a Moltype. func ParseMoltype(s string) Moltype { if m, ok := stringToMoltype[s]; ok { return m } return Undefined } biogo-1.0.4/feat/position_test.go0000644000175000017500000000127714136731467016335 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package feat import ( "testing" "gopkg.in/check.v1" ) func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) type testPos []struct { zb, ob int } var T = testPos{ {0, 1}, {1, 0}, {-1, -1}, {1, 2}, } // Tests func (s *S) TestPosition(c *check.C) { for _, t := range T { if t.ob == 0 { c.Check(func() { OneToZero(t.ob) }, check.Panics, "feat: 1-based index == 0") } else { c.Check(OneToZero(t.ob), check.Equals, t.zb) c.Check(ZeroToOne(t.zb), check.Equals, t.ob) } } } biogo-1.0.4/feat/genome/0000755000175000017500000000000014136731467014346 5ustar nileshnileshbiogo-1.0.4/feat/genome/parse.assembly0000755000175000017500000000711714136731467017232 0ustar nileshnilesh#!/bin/bash # This file parses UCSC Chromosome Band table into a Go source code file. # # This script will only work on the Assembly table. # # The prefix, e.g. chr, will be used to label the chromosomes (e.g. chr1, chr2 ... ) # By default, "chr" is used. The package will be used to name the generated package. # # To download data tables, see http://genome.ucsc.edu/cgi-bin/hgTables # # USE OF THIS SCRIPT WITHOUT A FILTER OR WITH NOFRAG UNSET # SHOULD IN MOST CASES BE SEEN AS COMPILER ABUSE. file=$1 prefix=$2 species=$3 package=$4 filter=$5 nofrags=$6 if [ -z "$file" ]; then echo "Please specify the UCSC assembly table file" exit fi if [ -z "$prefix" ]; then prefix="chr" fi if [ -z "$filter" ]; then filter="^$" fi label="$(tr '[:lower:]' '[:upper:]' <<< ${prefix:0:1})${prefix:1}" ( echo -e "// DO NOT EDIT. This file was autogenerated by parse.assembly\n" echo "// Package $package defines chromosome and assembly fragment intervals for the $package genome assembly for $species." echo -e "package $package\n" echo "import (" if [ -z "$nofrags" ]; then echo -e "\t\"github.com/biogo/biogo/feat\"" fi echo -e "\t\"github.com/biogo/biogo/feat/genome\"\n)\n" # chromosomes echo 'var (' < $file zcat \ | grep -v '^#' \ | grep -v $filter \ | sed -e 's/\t/ /g' -e 's/chr//' | tr -s ' ' \ | awk '{print $2,$0}' \ | sed -e 's/^[XZ]/1.1e10/' -e 's/^[YW]/1.2e10/' -e 's/^M/1.3e10/' -e's/^Un[^ ]\+/2e10/' \ | sed -e 's/^\([1-9][0-9]*\)[lL]/\1/' -e 's/^\([1-9][0-9]*\)[rR]/\1.5/' \ | sort -k1,1g -k5rn,5 \ | sort -k1,1g -k3,3 -u \ | awk -v prefix=$prefix -v label=$label '{print "\t"label$3" = genome.Chromosome{Chr: \""prefix$3"\", Desc: \"Chromosome\", Length:",$5"}"}' echo -e ')\n' echo 'var Chromosomes = []*genome.Chromosome{' < $file zcat \ | grep -v '^#' \ | grep -v $filter \ | sed -e 's/\t/ /g' -e 's/chr//' | tr -s ' ' \ | awk '{print $2,$0}' \ | sed -e 's/^[XZ]/1.1e10/' -e 's/^[YW]/1.2e10/' -e 's/^M/1.3e10/' -e's/^Un[^ ]\+/2e10/' \ | sed -e 's/^\([1-9][0-9]*\)[lL]/\1/' -e 's/^\([1-9][0-9]*\)[rR]/\1.5/' \ | sort -k1,1g -k5rn,5 \ | sort -k1,1g -k3,3 -u \ | awk -v label=$label '{print "\t&"label$3","}' echo -e '}\n' # fragments if [ -z "$nofrags" ]; then echo 'var (' < $file zcat \ | grep -v '^#' \ | grep -v $filter \ | sed -e 's/\t/ /g' -e 's/chr//' | tr -s ' ' \ | awk '{print $2,$0}' \ | sed -e 's/^[XZ]/1.1e10/' -e 's/^[YW]/1.2e10/' -e 's/^M/1.3e10/' -e's/^Un[^ ]\+/2e10/' \ | sed -e 's/^\([1-9][0-9]*\)[lL]/\1/' -e 's/^\([1-9][0-9]*\)[rR]/\1.5/' \ | sort -k1,1g -k3,3 \ | awk -v prefix=$prefix -v label=$label '{print "\t"label$3"_"$8"_"$4" = genome.Fragment{Frag: \""$8"\", Desc: \"Fragment\", Chr: &"label$3", ChrStart:",$4", ChrEnd: "$5", FragStart:",$9", FragEnd: "$10", Type: \x27"$7"\x27, Strand:",$11"1}"}' \ | sed 's/\.\(.*=\)/_\1/' echo -e ')\n' echo 'var Fragments = []*genome.Fragment{' < $file zcat \ | grep -v '^#' \ | grep -v $filter \ | sed -e 's/\t/ /g' -e 's/chr//' | tr -s ' ' \ | awk '{print $2,$0}' \ | sed -e 's/^[XZ]/1.1e10/' -e 's/^[YW]/1.2e10/' -e 's/^M/1.3e10/' -e's/^Un[^ ]\+/2e10/' \ | sed -e 's/^\([1-9][0-9]*\)[lL]/\1/' -e 's/^\([1-9][0-9]*\)[rR]/\1.5/' \ | sort -k1,1g -k3,3 \ | awk -v prefix=$prefix -v label=$label '{print "\t&"label$3"_"$8"_"$46","}' \ | sed 's/\./_/' echo -e '}\n' # init cat << 'END' //line parse.assembly:99 func init() { for _, b := range Fragments { b.Chr.(*genome.Chromosome).Features = append(b.Chr.(*genome.Chromosome).Features, b) } for _, c := range Chromosomes { fc := make([]feat.Feature, len(c.Features)) copy(fc, c.Features) c.Features = fc } } END fi ) | gofmt biogo-1.0.4/feat/genome/cow/0000755000175000017500000000000014136731467015136 5ustar nileshnileshbiogo-1.0.4/feat/genome/cow/bt7/0000755000175000017500000000000014136731467015632 5ustar nileshnileshbiogo-1.0.4/feat/genome/cow/bt7/bosTau7gold.txt.gz0000644000175000017500001156136014136731467021221 0ustar nileshnilesh.aOgold.txtdI-1d _mȌ=0 ʤB-&5J W#,mK)O_ ~Kߧz࿭eWo4Dˣ=W۔]gQvGHm.>*Q_h}{zΕ 7H/ZR[w{2j[Sv0jjk؟tJygXynQ*7d ZoE _Kͻ-O~@d L-QVZ_\A W@6Iƭ>~g+&0{JZ-H4l:1m9ݽ>g3c66GXJl,نm\lvײ0vٶ QR[}zm0wmp+9hY7k)uj@}e'???mwG|P-}a6@?%]-?sڗf Ӿ!c,Ji}0}pTu6n7 cK7m)fvݝnd)ڜ8YLh7L!vi U};V?}YmLvlߪ(A8i8{T?COiptd[)C`MDKz Ěe72՟#od . |`d(δ0,Q.I7V!kkllirekb a;`{%_{wv͸~Τ[$]kh@y͌0n( EaR,?{ȹA]&7/cźK(nқE:qo]0Q #O#l;[gbcy+!]0mcH7D6&9ƞSlf.ϣ C˖dl4%\1qgcSgqe9  c;Ƌda׳ lǶ 31\ww[|N*U;iziVQ_?1W5 0E5 S ZǀdJ%vLk X* QY͎7 ~n >xoS٣QfQ,2{? dbjKf~CU ?}4mPɼp}[]WwfyK~_ݥ-ΗM߷Y&{|p{ L0Pe/9 Q\RxT/c4eIw}+HBMg[ B`Aߛx_#)3ڞ7apk 3N3qcHK\P?e2Sd8SnCʴ9X=ԭ}$055/o*~ py_~mWGT :Vse.b煹LAWg[y& BNJfYCLAía1'9ޒWzqi FA}WgU7.ئݎ9R$i$߳k<F4l47n<lܓi^fe$()*=>]3}:mLm2.fdv9YPe =~jro|n`bPu7OO}7lfSqvd)VV:_1PzYlzO,G`>t۽Gc} so~`d5L?&<(+?LS,1>byt5]8RP5+nÊbڱ6E a֝+ m0av6d} ܏f=Lٮj|q_ꍳ+.=nu;֐3>a7ݫmo刮~~0jw{~tɭ~`ybـ5]{&3zW'dOT{ ssvSƙObnX{ 68hW\:f _3/,S4x=E JP<S;Z?}[Yh_]vwe^frhckZ4Jz~z/igb9x(yw9歛UqDs?Qg؂nr -)v3d{0ϫjKݹ9\[^Z3S{e`ׅZwMcl/vc+@@~n!5&>[:,.Up}ak]p{_ªQ}~:SmFm1p<"=z̶QM}$mlj;DnaZt3w~0 Yr>'8=A5&|Q|e|nB{Z?^8L7{}[zy"Nir,kN7Gʌփui&ur{`wzBl#h?o=1MٮTRM嶺6`fLf{F6 Ӆ=y<(]6 Yw :˸{_7i*"( 9c<ڤi,:Rmڹ餧٤BZj|^m~ʆ?o%]Y2A;9vF4jx#d$MX[RۖL䠏m3b ]l3= ]UAIvۤ2^~ni8[#:Ą  S$7PngWV̌@JS8]]:xüG{4o\㺵UhW>P4Np-S1+;L,h0~i VԻ̺kZōg> stnf6~nЙW0tfy=0y+#5M{++xlsrޣ禜a"kR6~^6cLĬ1+VݲZuu#ɵs,ퟷ0 |wFvH3ČrB}6Xl=bTv&!,[&_;Dh_u&?ҍߛȁQYo Sqq'MAnp鈠0;,rF/[e}` xOW([߃#kY'v59OfTLs"fwo&uF)8 ;}̰Us"hAFaUC [mu'i=Gq5F[stwg?'̄DJqiwo6{@D7lIiδ[B9-SnX.i[݅5DGk#B,x@7 'Dձ"=.Ⱥ`ʖ׎%DEzܮ:$ERHTڞQ9?cސnt{GՔ-5w"C!?L?7m7 IIw8bg.FmL 1=(:]+a8E$"bt1uL1*#bL|CpҢ&YHp(9KmOٿ0*vɊLJj:"I9plp{>Pؐp pMiy`ihrcP1LlOCMk9sY.zUO|$J'zn12RT)A2f}˥WZX~uYq#V-S#|RFBQIa3e[S`0d~;mdgAI$v~Z d3CQlĭ@_|,D`;=n'st}ը%SpI_V{IG!"F0{χ/&4 [X[;'4a֨a;7uVc6hQ?gcn oJoaS7,Y7.KƵ{b% ֫#W ӹ={lߛꮟ?B&ݓG!f麠A׷o!Pmoґ=vt%3`3R1);lcڐ4X{mX[~;MN1=Pχ-_6\Kl(焽.~ϵ_-yI}WUw9k kt]]M퐇uL&>$zw;|j5?(&x./ EƑtDn$h~Sr|mʬrڵ@7dN^dIwRYX;$ N}ϻ`doqD=^Hc'ۮ+z;J\J{z58)8Pث. 䩡qb?>1JϜ!05@.r~\%dz.{0 VUxW.,F5g|HLozb}P#C 3pYԍ?WDZ^EDORvL9kR^X3C]ww*߃KL-q;d4Eȅ[ăCp\]VuN*;:*2mR(F> IFPch Q▶m({^|&zpQURa6~PLIWv?18^ݿv|"]QSfAK8(3Ep]`>/jwΓ?0r{oq/~@ˆqxᔛFDn]3}vwg0w%,ٻ'T\m:4_p%۔Xc4z+AK&aV S&\Y }RUYYNK8m^Aw*̦I $)pܖd0=bF5E_L1̴߸}"u?۸ەTl-edY~r)v^wV{≘G s;g< A&AH7N6ɄdE?9ð޴֖rO"%8~oK˄%Z@-bA`z v;&  RlDPgioݧRMW=tŽŘXIƥcp+ы#eD8%dfh!yZL&ko[4EٕР Z&ūxQ;1ru `֚]z|#w0#_i7oRov!鱟+i>|g[ 9y#h ٵb,I "ANlJhk|R\>%j‰+J_/0٠ƌ&%)>B+Vrq58-lsՍ \ ql {Lș>+79O:>#,<(LH])x!4&,& T\&nݩCrB;c"Vʟ xG)j[B fL*Cia@d&e9VwcAdrg#уG+i/`p HȮLR"{DZrh nWS]W! 4aX dq Me'bCA^ }{3}\H4NPv[ysk gppKNe^"w4Af.ׂTF$3+yjRg?3Ro\%}(NAQz5LL0-</2a-5 `3僧.ʖ iA9-a+^#h46nO>g5Hح쟒4ace3JbA t&OU!bפKΖ4P=7I5/ӢHϻߵ,y&`$ŠZeLh)Z EHaAC\-F׶TلU/uyy %XE/'!.&N8o1 OaٽOZ;(5qJBIjl?= /܀t XYzt]w ,bCգ3/&H7tgr!j]K ~OlyzThv: jtf_ }M2l1_*{ѲblQyDP3k:[Q6tG,]TA{}=vE n3nC}'%~L vJHHæ8Q ũg*n7X~T%[_zl! &rˍ+8? 5(mهz(33A}ľ]f5C@+ȧ5Nӽ'K{7xґX'o۞3aRňe1A6a=T/N\;F1f 'O1^r$"GJ(8a.__]_d_4˺[(ZJ,7tu:ts:կO N;tOaHzS{/ŃG? $`ETAmz֤=d) @_oĞJXallw&koϧGpx@Lt|Ox1&Xxɞ gvG+T<5 1Lƽd|9v.%r=!˕&y7w<:RQ[+"ˡ1NT =/6P:[}t O :l()I+PL϶/ct途 ¯<=BN%!2 Ɛ`3 =Չ#93rcۨdu+zL5PW#QHHTQ3>>' 5ڄ#Cfݚޯ+ҧ"hMvo#S-g$'@H=0pOr|/Ra YI|1վkXwCVB̺&R!'uQ?ąfB$C '^nhڷvݑ%=|zWuw C9$h'{gƻA G\ S e4+9mP?Ϣc:yun-_ʫ;<;LjF;;Ԏ  ׭d_v#;T n8Bרyn=Ug>'8jm*[Ю7qEh&T9N7"NK<ψo TNV;$Z\yk4D^R5;rߐ0O<.ƥZlP;w'"LBZ"k\Jivַ&^!ڛRI"^NlAL.#XiEel`{X6)EޭflXL(xR@]VaK49U#yBR,{l_Ӓ:_⺉~H8#* OVMr%&UZ;m%SUghH " oǍ<<̢R'qP_")]3?}!~Dxz}T2^h^ck텛z~RWHH-98cUY Žٳ~ L} (ߞwe`ʪJFC'b':h?!4(r7j`1jBA6b1 {̻_WP/pTEgFf'd_QK'USXN[ri]60G}wB쿩򞎘I;n4^#6%s8g/qGK&4p$}OƋ4RT92_=:Avl0=r;g~q&vdȑFKRn5-' ^2냴k }2Te˞ kj79m>pIծh#z#Fc&G"  JW\̥.ˍ]݅rqtЂNo=Iˏo,y詤KqSS"kd ( _>+N%B3rWh{e3^==}q0Ԗh#2mޚ-{T̮%ŋNX#7j+pC5=:bUJ%$hBTsڶAl3w7@mNc{"J #y")z;K& #F2Kşd[C3>(Ll64.o') ~XVZͶ'0p["mԠn|uHh?%8K_mzRΫ*F9F}MdžފǩɯDo5C"G"uF`Cz6YB "oCt8[,n3ڻ wע HQXQOΰ\O1R@)M^~cL!)}JʵJ5k\#`aq#ϘJ"14ؑrT]Ԙ/΋$~ U(Ʋ00U^RD@WKP911^u x?5R/]POк;>۽8%E@n80v/j`h#aO$m5Uu?kit~-=]sgU(W/v-X3>X$8p86cs־=O0?7P'qb K,=k %fLSе+dދ!))uvԖ 6"7ir֮N[/~o ;Ȓ4(X$Dy9Z[g' $l$`IKF?'c#3r>Oz"ΉB.wi;v[7DIWLmٳ}{\z­>ӡƢz>蓸'a]1NVHknD2UVaOXO]ӯ3Y䲓n|#"U3iӫZ+e4m"wJ ڷbEZAlhVZ6 l<& _;l+ls |crjv CPeZD; KRWL2G0>A;;;Z9C-{hAD:.TLZVw\Yf BUc؎zj"x- xM-3r L+  FA27cTPɈ&WArF}v!)v$~F5E\ ;cX%TVb0Bխ?(%`&9GvSrsvOLħ6N=,ق5g] . ARiNOW׬nȪ 1^N≊Ȯ=0:agbzLS $k4ME GLc6Q{S@G s`lM"w l'j@Sm7FӜ>I >+$*"7^'MlƘj "$jo4 G)>xh(0GjE>|Yn<-Җh;@Hg6O>UP3W:$PPMmgp_q?FLe=0EMڗ F޳3\qF. )}Q Fp7TA$9<57 ҩ 죶@adz}s}0˴[7ӓQ>^2]50n [vANx^OW1҈G؁sQv @5M P#vCLbJQ_:;p6@)8"JOQ{"y@nFSrCM>(7E_yiG@߮- k}pk?Ew9X*j:=L^RG3D)vɺ|#ؤRz7('$Not{xxshл&#`RmSL6Nj4!3.LAַGq*9bpnq~lH:Su)*tA2tgXoPdD{fA L4)E%5. A4)܅4_lQ|h BTSTIgY:G+!;}"8ST#R-ǂz,YS,Noʧꈬ6HR)!nAAL--RT x>Ȇ $:K]=ލUIQw C 1pu;`ySaKӳ5jh ~ =rاQ9pFҧS`.4Hrݝ<)ө!W9,]@:83>:F5 JS<?#@#fGV}o=tIӰS#g~O8w}ľH4F_>YDojzk.d!낆=G22u.JP{):ĖJBar6f?s$PyeIZۜ Pg$tQA[[rPѠ$qC6ܳ_?dQљ]xxiZ ]A醞 "*0ˎ"*P=Ωx}(oڒҌqב=4Q|Yl}him%E_VăC>kQ^7E7 TW1f[3lN5!2 boQ' _s$A,]7 [=hZ!3Zv%_;J&\5>z=uwR-<]B F+vTvwD@:36 >tEZY6]Q7og?jdxHM I9{'}"P y2|<5= ![>}OMu9䉱t?4rҩ˟Q^]ps*7 ;r-E D26:\9U;5@z]9 N$,_0={",w$곲[:{D b* M@ k,P/j6yiؽ' tۘR`= MW-e-0yWAhmj0ÂmEkOBN~A7")J0?$LRʼ:=vos迗z:eQC| -YJ!]v*O,1UN;6mC v<] N'smG2N }10ƽ_$7Px wȷ>~HXٛ_\W=5㪳AS}g琀wͧWs M ܚ7t.*9yC;zPCWӸ_(z{wH$kg]P+vhs&zh@8cԝ[=\]4ԘQ]$i^@~O-՗}J6#+V7چ8Ԇ= )g7DXcVr3=U{j: 3nE^K#  ; Լ!"V* _ni_SZJC#Nv>ވĬPJ&/' g@,=+[/ 7OGq<>{JN_ܝFSj@y"`*)ҋ?ئw=}&M2;7B-}Rj!bgewї3D##7i-1y o0ߛbIBӼ'w%7Q@=r3נ!ފ9s]>qN9r٣wj4y? 61(Hc| bVMzkD5xaD玽tU }fkqNSGpz\hO匕o]$}WyspGp@&#2&,uw[ksP-B`v]r}~5"S3}})rа,hYf%[/DqʕrҖ2"s1US`VN \,*C:zpq:2Jm7T/G SEJ"h?E 3Jp)aoTFP{vn樮ASmL W v6L:~P/hWٔo Wm#725 H.vVJ뤆I:]m;%\E5T T-Z_Qǫ]Jϛ}:,@ X)94tK"rrx<'*NlUkSU}M%0K^,')jBԺ}QtSu*sCO+]+9kt(Rq 1KJn ?~u_ZʗCz~wФPy4/Z٠Ttt5Gr}&6UNhP;09UT[.T׳Wh@ҧb@Z6"+dhE]{ ;CGd_}Cxo(Uv/Lj;"( }O lsjW h#17?H7PGOО)>ˉ PTQ%7Djϧ թZm 2b^&YQ!i}ȿibMtؕ ɘyP,J쬗cL=Uwd%!Z´?(Щ1A;F{:/w0L.E)`Y| ԰`juzQj5j4A4&֐TCM-YxF p@"ϻkYDnpGqbzwMlt#h% ZcQ!g1.pT;ɱF.Wׄ92tUbG#%뇴!nNQ#17k u2SY*5֌!-{ #ޗƆrhvdz֠vIףĿlyxh0K^2;4!"B]("/7rse;` XM̂{uk"BLLИ+]N^ȤY!ǻR T, ldD6OhYY4ڹn/*7ժZ7'Mx43]{u@SE )> l0c{Eco?fTm|Qf緯6ˊj$4|nS]qaLRK7tNj*{ΐ@4!d͞}~!Pt%Ԩe_~LíbCRNA]wأm?XAh,\"Z+Δ(&kov~Ѝ1t A1lb:% tg7H(PbS1I#WvSW4n RzӚҚ B}) Qt` /7v u){ʫgagc_Δ#jF7]jP gt5u%ݼMh iGS!SQuˣ8&Gۓ BRQ=G)%bDS, M-Ƃ1v)=T *~bI-znqDl9PC >Ih@9#e4FY=uОJFBk=W˅ c䑢=e;% q i%&v_i;Ejvbb<6c r6mè3ENxEY^#2ĪY{?fW\W&Լ%¶[!qZ%UH=OjֽA4ٿe7<_`E6U 3r=Q<# @c/%^+#*A)޹{Ehv#+RɹnP5(>?ӻm=ө#ܢN5ý qT7R.pp% TQur-jvf$vPfQ#b"yp@: ø0T.:ݪxZ@;(S^|-ێأ㦀輡{/?TUhG##eKy|iLq̵V,9-A{JpP| q7(Y!JVZt[Y} x|5Klj!8S[/[>|SbJ AS<#<bIs7FWZ} ]6_&H^'VRS)rҕg ȐdI4:{[SQV窛r #c@~ЍTl2xQg$g9[[nz[0tG0x~~PG\YFr.kpGaP@{[f~фQI5lXF~3KzJ(g72uyTXFڞswWHlcIm tT?,o禀;f{B o^*)AUΥrɠ=EPK$k-\x[jkf2EuԗweSVKQ|7.4WpJ%Y*ueb{{}&@IbX`U aq~cX%UyduCv:EBc|Fʟui U3,dFxX$\(UHҝ=ϴ??!dtHI jKRQλ_1*F])…Rc#/B n PGU$EakFzpahoPfViF6"|E<7DϽ~PGGWjx Nԍ0n 0^jqׅ;px#;.ނJ@FNU(σ hF~faC߾zk(] C, (KFsպ#:uhU,+ ꈌ@2hotfݫcyIE znA$M$9^vXX>eA9 _t/|w!S rz?FYl}?@؍v53T~f@D goVjz|5޶G/tguD5upI>@:U-tgg׎k\uޣjwa:#y~2!C7tG=~P1ء(@"pA}zt(o&]a֝NXc$U#8)L󅸋'ch@ڵWR$"v/^Н ;@ ޝJ+Q ,DSH*Vj=^= =WH6FG҅J~Q- a n<A4hFI6mk,ZB78.L.q]'68HXzxUҍ$YCi4>PGИCҕzF X{$}n侐=7"%hȣ HѫdL D|[BIEpN!" 9C:ܿxbR$wY:Vh iFW1?E\]"u &AMl]M݅INLFШc`6oFR¶,>;49R=ݭ_#>Z?L4VWXE (w1IDi-5){-z,'T j IFnuK>O%~Uhcifo.~Ӱx)'6 p|W1f`aay@<ДhS ^s)݋F,%5{=k^ ц7I>o[`04T+E.ZT}BvSx( 'v4'y{脇0+Cʘ`aA!)9 (trj)oNb^kUERUF"<{c~ph+):~yjhnjtVҸrzqOoFe9tWRZCþQr9i( C =]uamW ߘ"ZB2/~{YE5br~(e=y6q;u,=wm\/Ap' c")ufXD2PrB(x~Vih,,>TѶBߤ yAgʧ~:,ÑT \T̫ۃR.A'cp>u3NU7zN 7> !27(;z˖ ~2~@cMM^U !#6\?PGd]>KTCƞX [yNF HʒP{ݒTєF;eq5WWu}irOFn>.HOVɇ[[w'E"7?rVzƊ/G. 2c3z7RUT8͋N)ۗE'-3^Ш*:/g|}⽐]֮A<r)weZ%W $m o3"tʥCPP5קJa5`a&b糮~7\t).I(I3SDdf@I=D.`mB5A:}w,v)yqXS]2A`Xjdvu}+}(3(ؤw{u{~!yN/\JtVݜ>QE^*؞~yQD5Ro3N2/:t"Q뺇] U6E|k{ejS"8k*mrۈ,yic)5;w##jMbN| ZL<2YCU\ PGXCwQm?EETo3 ERHSav g<^rPI?rJ]|LS͚ݟC—^}Cㅯ~yk">Y=h@j>y&^}ֵ/@ /{{ 1o&guf):;*>mٖ(o!nv#UA?`1 ]@]_F;8vs̙ΣJ&I|ʨc͝zr+;h*s{}&_Xk*n=K4H2F&݁i9$SNR_(:_܆dJy+_[ұ !a]?C1;0a'[Mtۃ|)l&bvf,Ꭓ+6,y۩#kRa_kM_j^;bBcЌ{o^ReNOݗ\.J6ze}&o>π![ԉ|BGBAcyxp.T&HnYBjYbnͶuנ ENB]`d$CDp?VSQv8GCMB^M jFg |#QI;fm7KSbg@;65П#Z_0jtFZ=BUA sV(:™XRdlymjZye^7L=gP>ޘ"W8Yt^\w6V6+ݧuZ*@I 2gs}.=rKD@f J6!kgWS{gж2WTpM؏B#r@NyM\p>=r;͸ td^cozz#tSciV4{E#A7ə'2Ufr%Q" ڋi"ob(N)$ qp@=/bWYUoZydG Ve٪ᖗoyheJDb]X?$1 )#:/;-n:i*V ޢ7ËG3B'IW~J+M:PQR=0>Hۚ EA|?~._8I(jb\;ntFjI6bu^iRi.(N v*"Ƕ_;;!bL;j̡H]W:? Yn S$ q c"#]~E,׍Z'i+Fڐi9T+coڶ]D @"ל2~OX~+V{U?>3esADV΍\&^< B["]_Y}xVD[|6b9zoj4z;Ϻ8.%(9cY/ 0NjpƳ 9pSöCn}nF49AЀxN{6YUX\4ݞw*jLs~qE6BI tVg9"4wDx6@v** 6K1'-"M.6u~Is]ڨ %yvD;J([xN"Kv6b[. //MI[{gz,G45?U>w )@:\z{F'ÇĮmJƬzgmiZ_DA^E9IihW`hS*H"j]giۭ4܍F}FQ!Ǎ<6EZU #RZMy朮B 宊uE%E!8 갭Yឪ$<'tWbD]1y\ Pj>JR.(x8=Ksl9Ev2+:bvZ1`sF( R#0xwTQ)9.*դ24A<MA?Pt~8$ufe`#|_t&N{qד~>PGTy*<=";9L8\깒 3[ 9p { 'q<4]TI-z|165 ʒE21{]A:KQ'tSǖ^d%W"ԇ;o䶮ޭ^hZTsW!J% <3~~wxTUP㕕0FU3"lO2BOL~( ^|w2$!Ār>d_*0DHiN{A7[UyC&Jȓf942yOT=X#u?Q-dnM0E9a+xYhnշz2 rǙA e2h 'nqM? >(*Vu@JĞPO\`7*n)w~7\5&lDv<_#ht ys-aRq@ P <)'sєQ<[7 Ӆ E C.aEr98GiX>'n18@4a=pE8OzUwR$`x4d qwՕA }HwXu:F#w죆q}X>O*P0ؗ14#+;i~УۈN@38'^ /+=0h *xq{[O=,B!XjfjU+B϶gE#(C|ƽ<еR5 F+xQtOD9lwvC.{vOU~MEh{8:m{=$π"4G3UE-AD{a[WL&څ EhL)p^uty&۪*{$n$H]Ӯm1 jF+2FgSajQ :FP4 R&kݯJMҾkxgq9uD| d zw}8ٚؑ"t(_(A%Q$ ԿpJ=ɑŻ~;<|(P*ya6ϰ7FݯSZF{uv .5 #G uKz;BeHU|.Qw/w^Β^0U.ʋC+<iͨcO*hV=H2BI[4j1XX~5K!'G2eP>)9@ؘ9zEADJŵ >ڄQ M񗨼*II)h\:{σ`6?݀@J{,5qS ųhRk,wSTldW{8F@.ջ,g(݉\; *#?ݙMOQJ}Y j$\\n6=Ӛ[/`c=@'#tb{(- FD_;)W'PlRK{J1\5~n, L/9Trlu;mkOeHMnM*@_|>9BY %3茦,x0S# g:yGFh+q{Kw)AAj׎V-0dzCfF[PZX{%Za^x>A|P$$E]o2сnT_j̩E ZBQ&ntՆnot@CV RL"'M@M ;qݯhפzS7&䕑=k8.؎wGT 樖7+Wg %T)9ƗF񾮱􅶌ͶdM3I1#!@øerLt-y&t3zmTEMruj8p#wi9Om{DN IP9rn2Nq_2fs m5..~jŲ#/5, ֦,MrZ:{_zd(T;\ڽi&\/Ce:ՏA; ,/Z xI]szIiY#m5D,b-r'/!CT(xY[WxzH;F3]u@=_04}2M\WHhL{iO#Rvhv`t B@sxsD `& >Sx+kڨJwơl;3@1ժaL"GZu WR uiOa1w,^@F/TD6 Q%{MfRN7Z^ ˖Z'#24= a2Sn̿/Yc pr*T;BU+/) & n{ {[F^4B)԰Cu-eEC)Px(O Ac|(7t3K?C\h}Hrw|"+^!@RfPIPYB+ԣ9FӫH0r5>vTFw -G нkz@~EIE;)0()+G?uq5ϔNBJWYs-0:^(EnJ"?з>wQu-GJux܇ͅ\q.F!^v~E1grQҏ$ :B,rc0؟}?:TƔGv[%KݤCRc{|e4d9ǰ^z?dC.cl)O/NٞZi>8EnR͓\P6u9**t9#14S;GDd{v 'O[:yTt5skRuSREPf*" ԃ-Z`HDbvzr\1;r$bǠA7u<_ cnܣz`:b=/0$YGs7*`Y|k+ޮSfz7 ǜBGٮPJ V^t#hDWrCd|_~]D쉧'HLX(I`1NQ5ΜX*{<@=?;5"1>oPm|~t=*c2ӫ7REpss oU[X!r}@ ɚ˙'ZyncL;H‡4o)ho5v[ KS¾sb!sV*(Z$ z9G3DזOLA|}159Z;ש )~fc0DؿRU؇ fdh@ΰ^BJWW`;7=*6#*=:_ަѳ7I:A=fbAȢQu ْrY=_U yLӽ/j۞Ri5SH`\il*b ZA[a@42T}gA1E܇Tuks|)Q T$({ A"Uloܜճ K }Y/W/4=ЁkVR{[= "` o!FŔN7QrDڕJ影9.jpq"•^gPDtMsqx|WI}޽L2AD(F*\IP.p dhCMV(}<)@ !Yʐz)ޱg~5sSF~ءPQsɟa{a0쁑Dl^#h,i..^B P Q!)g8qBJ٬7wbQ1O]T5^h}!OQkrȊ6b 9 {I.0^$nNͥ~S@+V3GRmZܱ*:RLC\BE/p\j3Q5Z{) ;d3Ü %r}N+ո:*@Oa{C[G -E 5D#S$G^O. =rC!h}S ./K2d#`'~F_[jᏉ9{.K  sCR~ HH⽐ݾXAHDT) {h&L[;\,V34s$s#=ɟSqg|GY%(u1ݢor+AxͭSݧ+fASݱ?V pqW٩ n"WSX5/* ځ6Dm@݂DfX.cȶ}=E(%Y-GlqSȰE}/&%*9xv%L=F-W6H陶k@"]Y.o2Ϧp!@f?u/;V$7y%\D0֩Qаt贰8՗nLM (e`hgS$|4U IQ#}_kz]*oI1` nu b J AIG'fq{|[B5S5uD>xNGN@Sgq,@r^O| Cc*peN*aQ89wW #ZBZ!'hKK.@0=uxyg F\!T1njY7yCu-.Z<<5;C³eqH/46: oX7NڦZhZRP1c:oz=mv I7AxBOrMXaT1ʫHZ250`Qz8P=AFސJVrp-//Iy9^a_ٓEKH^{g#RB5a^]d #]w)c EG1t~0^SGOsWA4l,O$nZ)I=A9ҝ.tiO )a4&;k.OM뽀5\c-qXt@a 6c牔n۫hd4+R:1 vAx8+~4 Q0D\둽V82ĪRI>MCu89sLCj9IIWhigGe<ؑ7E}O X"h{>G#L˅Nпݫ]t\c5E(Tų^W\>HS7䉨}˭߹Oc` DLTބ5[YJE@:RjC\;J;XV̑vs$S!&^SH}/`g tSeCZԖcPI# 5tx4N?ep]Pޜ_2z 7ojMX R_@` *tk̲%w @FC-.b7dU @bGm2d2 $,ʄGr Tp5?wU m*5_ `̳u+hrzE-S;W k/htΓ!g;wQZU^*KAҎXW$ 0N%c:Vq|Q0ŭ_k"-(+X(󱘻hIRy T$Hݔ9,"81M[fl횧WA{'4hDQ8nQ&v^To" {QZT;ž5 ɓSHZT>ǎuJ7hq IG]6U-]yhl;("(4ɯt<һA4v"6Q5Sqw5R5s ٿ ME;9sD?9xBqXW (kp#Y&zr3kEC!N"o0%0 /4upIp"Юz -alIőآ^ Tʪ2t0Z!3SNIX)5Zk4qo%-~?g8n(Mv7 =E22 sY : {t.Ҷ J*k4Ŧ4 IR4\N_otu9K>tjHf݅Uv*jqnQYg8 U7Pe=#HāKhCPܻgl5I$@p1y ĸZwLJk7yM/K{ z;=*2PKv[[%x :&gnTsU2YxT2A"QFj. jS7;bFHd@VR|ЍY}J?$fR&I%\*>j:]"g U{-&9f !Hܱ+ؐMWF{T%4mVHUSuJfn'hޣ*R2+i5}:'uXKnBA> ngm ⱵolC@:BtmallTbx z;O2;T*sH)r%R`K6%:EXD/O勾>6ɡ]7PKo]dx,61H{HW"2?7X4PJJxv#*}UЯ^ه9uw݈ʵܷ'lƋSbR[AMI ^N qV@SAzwh<F+[CԺk]bRDL>`hZ\`;=bT:^z~^;7F֘Y3@m*ID C.vjF+Zt/"{чuOS\) %/g`\ [a]ުffʟ}]ƄVibG\/6FbQUum8$EV&UrDU  ?ƵuDf)2D#s.b!L!`=*@O̵ -.Qݣ %ZI?,ls~y4Dx3.ېSJ; &f\)0qx{®=/Q-..+ >U {yHШk3Vx醼ƢtR?TC sI42UHvRj@a=%k$Gtxc*ᙐG*wOdV6hQNq_rp)3XֲSLҥC;,m|Lv`uI2{U>N[|i~D{רK *$'gYgI;uM.3U;CUVbI- ~C ܯpl{H_(ER1{!+2?0hͽ{ȇlkm:]ulsA>&W|m2.tgG4p1YWd;Za!J9EȁW«aᡡɵ>fqBhG%y&@7FWqngAWI<4)Hvw?C:R< }s9B}]SXEu>13Uod>SkJF?h$X(~5<~[C罧@OA aY#?.ƾ֍(=^pOybgaaPN㹉@E+$(s)m(A8PQ>6/*t7)v Rn|P;*CMqƹ*E#*Nyom*HhpCIf/!(i4{kV)P~a/EHbE,^0B iP LT@f5{Sm%_݈:9H~D*4qʼdJeNo,TTNtj]l݈t5{Gv9iӱ*=8ZO!εc&M=SQ*'%o< H ۸ ?룂dEA-Ty#h;E0GDΖuHصh_,S bF ;4@eK"nVTHSHVEv;6jjYTkF4!W׋EzDޠ;*m^:XJ>6hQn jk+'aiC:)5 xezNp)\zQb@kȣc)? 1@șg(&Fw6uCyR|a^1O;oXRMŚzjע(tcR@FtZm! 5Viߺ*$B` &жnr Q7B A& Ur#*%O6*`5bBYÞG+i/paRLS}1Q!d_Cb&]{3ON+ MxXeh2^FL" R4(u= '3K;Ia2u\T>*YR̿MU_*ܞ"Q+LX$w6d!XwUNF`GdனmqOCY:TPҋaŖoĬe H_Þ?hSSǻcIoHQ6c;J0]q=NMjKGRySc:JAl 40 <uDDJӈ=꩔iQH;n Oӳ#p~'1$x*jB.Bl%9;\Z7u{8-/¹=ETZm5^(pq^D,SoA кw:R܈ ُ0dM\za`{ )5(g_d{E.95Ch$qy]!-'y|1}RldxdQE]@E?3=0*%)Cޟ .9J&zpyz(P,ڻc* )76| iߐXͥxB F_$SvbZPݝd zS|r/L2,b1/~tD{Y%?³L/8/o!: *fj}NFU'8LֱlYvL՝Y{|HTU"f)\f*\dVr;[%4`8_*3{zT+0 * O ~zV|ݟ\c>U?Hs9мr̭ӭzitF0=pe#ӭcT̟T h\☨",C3 mM3o׶`И"U^ޭؔ;$OS1>'w~X\1DP>A4"gWAIUJw%@1np9Z'kk4~0շ*SA݈J>=3B$ϲ"g  O%՚:-&!1=C i%Y>š? rcݲ~f13 !:.g/hru"@qJf.+D`ۖ?q^4W.ضSWH0c(DN_N/Q&5f E47d ⫸u~m0%yUNeuJ{ᎪSPC~= _h BԃjycIc a-UmzF$U}k^Z0eDߧW܁LkdI~Mto;UGM{4E;F#:bp~vk$Esu{'{}ŠaC f}O<t\^XEqKBMD PM|F'o~i0;*ӭHH*1 tBpBҧcG go(65ne(… h^>iw]U7t#*)= Eoq*P65&l57x`]9{2`.}M  ;sa܌l. *[ev5f-r|w@,Jb 1T-(a."UZC )A]ǘ>Bmw>A޳|ݗ{9 a3JQI)5LR'uFkqdMR5䍢ac-^o;"Twkh)֦u cwUIyC c PzkEUgS@GB~aGгv@Gڙ% 25zi( WL7yARN)O؃Z]h{׾0~PGTXq0NL&]sOz~Ȟ QqDUyF"!ݯCԺ==)FeNoZI27 \.y]\V\1 x+Ť ʷfԩToP>v@ hB(рyE<'()X~@Tוƀ;n^+Bmc$%ZkYi.:+ :|tn왕GCŸWJe?ѮJ"r(͢wGg>HИSof?cSB*EGNw@a JӻFE{뼧w#&.9ucRlV] ;kΠ %>{UrwQ*ӭX(*кu]R[783bh41\BqTLg3FsJ{Ŕ?4:Mۨo04O@(BzLvTe/NeBc(`Jo!BH;Dy`tI À!vemƋ>T vl ^k;"r9 Kuy8"* D9*2O U5>t}b_(ƫT[vqtsU^j ]g %V&zN\|VGŠÜ ':'&Ul2+jnUT(8&C^QU\ 2:A_Y =߻/wVm?E_DEڨ?K{Еh4g'@aHVhvSͅCN6Vt9eeٝg'YOA2]L3S绻-@!IB{b]qpňtEycQ:'*@a [~{NCnXBok_%W|!ȁr-$7PS(Z󨊘wTf [zwOFR=ܷRbhD&A ܕ6v*k@UOZU֗&#b@~.ua*f"RJYU[~R6QJX7=F[}/qrdž #IPd>N'|̉[/$4~C lĭ{N9f9k;qDS/LQ>w=Q*u ʓfh]>=;RAdkh_ 7 .')GfE12gpY\#>p埩7QD~#ξDŰ>agcRNxKt]eCLcn2Qa:y(,>bqz6Ƅ!s/9m,2Q@?[SHUchx'*vn:nƳX v1`β&թJ'5up5UxN.!JE{}t)XbNUöWTԾ"̸키n:A(!|fT1AC~D*[zo-G*tҏ$l#WK;%@ FD2./hQ~bgW@#ҕs@b)]bc?}o+muưuJa;YaRV_Tvoԉ%ϼ. nĤ:Y !ntKJydkyLn71E4I_G@h}4]zf8il?]_!ݓYGЬʖ _^pN{$G, )½=EZ^lykќ~!րO s{݀:M\nf[Td,dKJ{!.S FM;IAr@:fB"lqO#~Dx|45( V(EŮ"/)hXѲ{  Kse6HQk .S/4>#(&0iB ւ涤qoXr|7x2}aw Jw'Y"FHC#t#!cuD%T"#ұ%/ m"e9ϑ]=XJ E qN95_5YS:9J Nz嚐HC:ݲW \FVxX.\yk=Y~)@D?w'Y&9~JZQ-3,X`y'R쳉FXBIc}9teWiTb^7zgH2Q1/4^ևu744_1oǑekc G~fYʝ(S) Jx}5?4q$I3ӌplp m*MV\ҥɯg. P MqMQo\qhwےB,zB {y#קO"N'{v8Sڰ>QbExBMDQj'K!Rۋ@CT DaLVp-P$GWyut O6.rhkzbvRI" >x 'a+$(4T%tq 1`V2z8|/TI/)%&xHPpmH*[A!*ӤL@/R>!7@yw;*"7 go~yxJ+(ʏM-/Rϒ=awnTijٗ>;~)@2 "88W7 c~W0ba7hvUcLנBkۇSv~:*@UE%sLi!Y291#Mä^EDKЅMEK?t;[ ʫR kNZNAn@\>+j;FofA rme7KhcC\+S"+Hf7߆,k$H'بJ,LKXD(sFVf); j\nr=ӹ_^ύ! oճ%d*v $j*) Zad {xnr B8ƠxFrY < 2̡s3Iߡ>$S7|"pG5dc$ Oxd>x#َͮNvzvvvAYVՐl U@?hY r乃ՠVgQ#r_Esg[Dyyvh]HhxW\n! ,.^ys;(/~ҁX |# ?0SKhGJ}dFN 'sv MAM?y/֧^ 5O+U(qoo$NJ8#Xkt\􀃦:W[*! k"Cd,d&7Ϋ|Q4NYZ\:q{: |h<^1PTjcY TjVdU/%CN(wImUE6Q8Oe2 ޝ)c&c UKr sJ*O&^5 z,oE2M;a4休;z%#D_$cϘAa ɱx.I pGYC/_(DžϝLZm}MԭA7y[iOuۚT>"x$*YP13nzAPVK LY}( g꘯ı1ꔲ巤r qh}Q64RrqñfGDv)u60_p1& sB`زA6'CR 1}fwMPCyBκ{['PkI;-*5͔0/X02 ǣ q1]\oy&x]dW=uD#v}>pGQ ?,zN^z}Lüљ|$ܝEJ`M(x &ᢁ ww`Rb 4*C}j8 ʔc{)GչX )x*ϡn!Z3Itrҿ)MHF{:FKi!M*uuAHdHwn`+ nwߒU~;W9TMi}Ѣ2q\s|YtA "wc7kJ@k)=mQ_]r&ZK*K=(M})Oϧ{weB# W.Z}qݿIZM22/7HvE<ɕ>Ĉr]_J2 3Ytԇp<2`7.Jz[6-zc7I5.!PkdW_nn0>h2 Rn2rx.;(/o# |S}拰-hǼr*@kEKNۛc5*(Nl\1$9L{8prʯc Cҭ,a,PtA = ^L"E\i;HԽRz=xШL{mghX1޲`SFd' _HV1Xe)*ol)Kt~cJʭ(Qqd+ӠrwKcyf~Ba I(^@~.ZSqD|̩:~淚!qEݾ*F oa mG:~"&T :¶3H.5Ƣ3'\>6wVn'ޛrB1D#aw[Xwqu5zUrB &==8k #h薦(}ុ;/eM}hM}㡬6{0%읺UEPzNZ[/5A^E6_=ƽ|:Ƀ Rgvw:jD -RcɥɬE a_i'P"hcW쀦:5tL:ƂHt߆7YF6 MLGSJ%i<.Kd#U컥M \w[19O*4tygUHXlk)w;+?Jr܍wR;IQeuS[? f| f97k(x:vjYǛ5xxq{XNJojE0*i|̷M!-P,! x2D)1zkz +H`ohCۃoԟרvC~vް^Y (qRԁlH8γ?!|{.*xas`=jr?n@S ЩFVҋG]h3S )+ *\Cz<3pa4LT%O6ZNhChF{mET)pd evw%4Dv]D#JpwT2F> OMq|u|* =i]XXcvi PwԎj0Vţ]DlDit|54p6vV D"Ư]TjDoT~X*rb ZKK}}=&wS#=P|O8Ϸ[Kb|Ӊ(qAEIÎS?u6OWT1[~N`'gDs6C;:2oJ))4Xp(VDK"o; ߃%AUeЋܩe'[ayۭ,SyZ's兏5WG#ߴp͕ǥJ7'CQ?tr8گ 27N6Ĩj_r%{# 5~8vXHv(ZgIz瘠 m ZT&/{cwXEˈݳbboᓒnyAmm:rntk!|a)";67SR߈-U9)wyan?u5T_BY^]ٖYK , w ]X5$wږ۴L*)̩ nTI˰cQL:MGÁ6iS [ 888`:9"a#u5Lv '*MBgaրqDgcnՓNg&R?^c25@W(rד>U)XH6g]V{g 캭fT3܀FLPcvyC{9;T,39@h F*s`9|yT_cicԐ{uz52;c 8&meP!TCne |zv5ӽKQrodnj],tOCQ"!c<ǀC+UaU}0^Q LL͹y2EHS=($\T3u Fon=ǧ`$a(_m ng{( ^7Auj5q,ʖqh݌i{5vC>}!$qs_xM歝_S{4PGhRzt\" 籺 2V%;>_*hpM>Ŷe(,ς""q0YU1УS;d +C' 8]>/?|R:,sNw1^7~l!{}> =Fq-lN5`A^IX +J lF?=uGs2UL)dᇒ_dZm8p #peIb2pn[R  KjhNMƽu׷cSQW] @ = "3/yK _lTLds"^F4mX}CMIDTLk}2KMn ל ᔃ=z6ܱ>n5]Kn@yncDc}n~4-_2xzT(y\FuaqѥGVvp8aBc%a~&\ 2Rڵ=5waKF2}Y׍>qx j!۟^ZeE\j/F ݙ.eo3Ql'C"Gcq2K%Zg[:FN4Vxף* BZaE"Q%W Z絭XcV.B=}&Ϡe HH9 W0)1_du5Չѯxa@GAb1Q^7V@5~a5 +R6G\:!|TGޕ: (X\krie!mڴmv]TU$~PHT ;5gac+=;f&젰,<Zޢ|iag&<|J5t,fcȹ5l &y6X`gwź w/LL= `Sd5+ElmQeD/ +9Q2uP4$Uz)̺\H1CԊh etP[0}v]u5(Rֶh J x>>]*`3i;2ظi&n4 PW-|zϟnA໘T"gtw{Ĉ5KDTITɈ =(s3%5L. `d%{t+ XS̟TN}3yxcdViZT?oMݳmQ|$:b4y]/]eQFt,E"b7MreMw^Ē3ϿX82-rNUPzZ@mu{J%!hNk`4717TB F) 4ioV|֔]t dv,H~DˡKgeD4ƚ~ﵰUh$̝ZEugD4;Y ѕ`#e0ME*y,Yw(ʩOBHaTVgzù,)Du2xPMp\D.RJ3\w^wt{k堬Al V=[^ , |aRt(NFiHiԠ/ MbɎP@Syj&Y3G*jܪ; 11v((a &M {Ij?4bЏt5v{*T3;FS⅕.CQh5q>^c-"kjn'XĹ]7v a2D[1xƼү8κC4ҙ!jHPgBC@4 }qVe]P/a<-5R q^GMO*T)Ǖ> };}&Рv3{'O;)1UM`˙HmAly=#TK2fzKv DPJa:f=8k8'M:۳6?^LM#Ϊ/Q C|,fQ.&<̶M aKR"mO||Elz K垿3.B| =i"p.GRuye?>סּGWzs:r 1Y #QC)NaT_衄c:;Q2 Z 輪 zJ'yh n=9rkХGfZ υn}-7֋)zLed6Q/ul5i 5 7ƾ^Adi/+͌d (;Ael[B\|r@Cc{ʌŔL2-\cC Ԡ7{ǙQ{C֠ځ:BӾ7/!uՂ?P;cs@D<ح{%@3?;vȃRu^#ڲK腧K1 '^ lȒEܸyMMR;8?&Q{f:`b+KGV4vtM;ԗ֋QP,oTw@ݵHa !oză51yR~]"tq<=$o`;akW$ C8[aN}ADcüa>q x zCѰ)C:nخhWg ;k,yv A:E8#q@ZO~ְӃ1c<<.B@9gxud3Qϋm'5d2aW >)D8~z ܭ2$:$/^޴xoPJaDs嚐 w_J2?ާg".U-s4yK[ XJ@,b#}kEbY=chP(꺰UO@ˬTnt{]woĕ*'1|'`#_,æF=ž[ ֚9ih}!֠*Cv[I~Я[4ch:}Un\%^^ *OyK+u}f 'jaKT4yC7fk bjя>vsnNj( t~U$nl1ݹ3AInbySOFvvg]Op֥u& rD6Q}Bty4pU+(޺YloTο# jc{@ (Nʶ ku`Ǚ'΄rnn] oBK]\7CLʅ3SlNiG!ڥMΦďk;HU:2̊ffkѱ]( 2_ A4L&ԅ}z*R1^ZVt=J1Uo=ԞOZ2L%LqtܲݐNb0 )(kTݙe=oUwA@ݭ+UC;<%֡5 @=UM8p|im{gl@޲RG}(SqɰWNcQV$HӢl6Bқnd$`y%X嶳4@H;_Ee,D`MDMխ0k7x&o}TXNiG(Eogn-Tl|k,{sЎ%-͋˻nc%C\6׉)PUFFuf! H Ԏ\(L$<^7VۼְVTC↟k?ìa3Eb*!m.b L!İ<ՉȤdЀ`\fʝaŗrzn7#٭КnԘ5˪UTgSb!]熟cNQzR@-U SDatzw:a$ծ Nok4Uv%MAnהCE@dYg]ǟMK!^d+_uQV*Z~P֠K,7 |qE%/1:%O6Gɕ{sc9NqA~D ᾭm6X`@< Ą][vol:T~!Ļuh4#Г2ny"T=aoT'6Q$aă5^AIPƞiWSrDu{ Oc˔3ib6  J5O/>Ce;ORJOkV"2( IA:~zgy3FYä%U!PTFzXFHy? }DpyaHsX:!:o߭h!ԅݶ-C:O#Hѣvx} @L܀,w;xw Sի>R$oEI˥v#SФ"4t˟uj $k>t_\:g*<) W"v ǻ׭?[I JN5Ljn .PR@{'\,I>OgmzBpQm̀M%>16W=T(^}J>A(CgUDv;/+_4 Jìȭ9ԧgXܨv+Lѣ*e{+Slxs R #;Wp#z(U{>+,iVz~SAJP0R>m^z%gepcD j+n=^Y'ƆD&^zg2t= y }TEkף=כF~!WW! k@hqL}nv#*qʦe`7E` A[!h1tE]W*V V}Jw;UiD&/em0hN;u/>CM($5Gh 5l=a;>BCQbGJ/t@ l UMqN)n?Wm US~V?JL eFx~T+b4ǒ 6<&귺')4FY >>J$ԧ5;OleǷ)w+ |d֨]딮kuߔv_(Ss6XcOVD `v147H1leElmJ|S Pq:$[q~X*'^Ȝ*G]imRR4~!=tMcA=E }M9kB Ɩ]8ryCbfmg֪Z,sܔpeF؋PFϬ G |+O7Aq`=^|K+|ij@1mOt\bJaHX'o[E-nb [3Fkpudg\%{φ4ut(KGur!@^8fR.'kϋsZ#eEP~.3&S eQW5kS`:Jr`D\.<"0-uEA"0Ʀ{P_.cJ7ʳ#͹x*.U, sSh(-t9Ӷ]+>N` F~vT1a~ـJKS<ķSY75ɯ[uo$ 0SoJ%EkXY{h;-/4GGgV1Nq8NyH3~GcV3M< 85|Hʐ2D|m@l bZtqr1.ڬv 5(j{~G/ef3@x؞B;myŠ񤪑sZ+&-%brzLj5>L|مhkCG }h羅)*$gs&__JxDρ>ͫ! tDu>}A80hMj%s|=ma]N!5~B/|QR_ 72~M:5nXABJ[Dݔ3&zb|qÛh\Yk3UX-fطVsodhzymB;KmBP[!r藇 z}/T­BX ['ZhAmBc(HGRރ<@nž;]GK /E:jS,eٟܱ敫녥/NM̪i4Nܳk@3'Vo6d 2_R_,W ȷRtL[;NTȯ߫5›4EFA䌺lGRz5=٤]#^_?wD}̗L)*Mb5dnV2(>*_|,a!K(.i v}?CιwuQRwZX1h(]"\q؍4ZBvͪ{KB!M[nb6P4iVj`7֫WD/w)*\i(&xb(^aZ:VDEAA3{_dua0q;u0!4eNYOy_AC#YZ6b0,wO'fˁvGu仨::rAB?aOe ırӋpA@tHPrG/҂*qHoխPUg$׻ay~ (^##FAO͗˧i69{ؼuzޟxX}$27tj|N]=sa#k62GFw̝;y&cd⾃[qnk~FKV>ߑdUEWt= ,I>#M)+Vkl7Š Ƈ}?hCÔzBy`*xv;&SJU_b`h_kЙIڜ렿Z$:2nnA!Go^Է@EPNj<|Lkź3mgTd'9~4MAjzXM`;%3|Sʫ|!yZRO+@FFYJ:U3L# z[sdτ!e&ԍg72dު"m_֒FJ3-v5hgI{&qkPsxLVt5M{p>ҷшܬTglIJ  >("tn ʒw߈vSWR˾@ XrfUFBDK//ae% 12'u~PTJ8@z)EZئAS(߱b5w6ŀ:R;Fg(b:쵐a^lީC;`ºjDZ:PzM_/m,7> Qm1{# x>}P+-3ekH ~u&]bҬS6 ؿˬ^׬ud<)8,rtq01HkHF#HX"%ǔehyD/}GQjFȷ\=lJTzzӪ(O[9H=*iC BɒOِ`?oِ{0hY6 x}Q@vRO]'Js\Dmᖉ!Rb?,ȸ5ry}XrԵZ?YjADv@=z65v#kt) 8/v'}F|S R^٬7фfb B͹)T1}֧#2?e@J;CdbUvޯtkrC:;K˥DhúN0ؕ=%./ZŃvPc~xi,~Cͯ}Z >dpCޚ ,$*KߥA=wP(곸q]`wuЙzRʸ+FXCx;gR!rt.9>W˨.d9eOYʊ}~\qN$cI7֭Z';s(|SUպ뽓#* |="%rU Xke\vsF{j@.eǂʨf<*琦jNrS6$xhXTk ߋo'F19HZK],#_{vSyzvN)i: Ȋ^{AW=nx>J+v8Kż8*bp?!xJb򕢓je5ߣ+u)ئ?Yj0$"oSL:-<%|)7&~E'IthsQ+}QepKqD[L]}'19?8n!C.:R=wK[Wi5}ٍ0 6FnFFNktO/7VqMJqNP@o>NQ\8T[Pxs烪4@% A^޹ywJwE@M[rHsr aY}X>#vJe-KtA$@JnV56mj/ R75l>XOCelV75@Rs^]ٍ0y\Hy]VEEtJSuJBg u!8~E[ Oě7qLvOx}_v.1xuJm(*DojGR'ZՋf=2#7JwF>fɺhvYǝϤx>f`g`iDzyUP3J(8z(!u*ˮ7 i|S>X Ij t^ՙtn6k ϶nɖ WFT l2~X/5@_Z{}Ҩsޅ݋Ggc:g8J/" |G7˭LJg VNv#y1>)w~mM)$#s=֦&eNf^Eba;=O<i9xuo߈7蓈 M*!{Mn͖Jd{'IVC[bYQ]12zP>~Y֢Q . ɴ L_ S e) u-j~VaS{ F~^#;=}5hxm'Uᦞ:C؍tLsj3c1QN>K YI7R.A;G=%еeQ_7!qJO\h>QWo΢B؝@)i۞JiKbZB6Hnd 2{n n9ZT7[wDP -ŋ=}B"r[sfkj=,6Ѩj[?zFEx;͙Յ8&sjRZ2S(Vc Vf1N_sm9>$xf5[hQ:_˗DP OVn/y7ף$?CTe|J9s`L;F:6ii9f|Z[a #Sjǥ+fsok _&|S}$wZWTZu3+j xْsۿqa,yͼsZӁ ݫ[9RfWgXG T9nHgKۼ(+Jč.zPyvbv7çnX-kuN::ҋZtkF!!B[Yٚ3 BŇL{*w^֣&O2J G=r_6%zPy}G3ɺFvVPiljzԭX (h.T$8q#(`u];rmǼ;ճ2kܴ#n^K^t,Esڢ9;*'q}ĽLL=0y,=+gKJ6Ba'j_!6^Tӏ^0p<'zMwUĪG~O0jvپ.hM3~ F Rȿ:2;1:Gi ƳJAnJBޭRIWZGCgggeB}m//x\WǸ7S-+g//eP؟.(yJٹk(n{1^>N c_BE4Msum"X뜷CGic{B<֏]{=`ۤ~Xdo Hΰ~JVY؍07(?!^<(6ǴpB`7xZ{s_,42n_wM[aǴne Y{m\Q|WNj@'c'DWwYbj{arLdg>kئ5X/#F^\@ݏi] T%DXfGZةAg4tS(ȅcڈiš灻m=;/Rzn'UyYp9MkVLQ !r()2sxB lW_dѮc6AU6T)VpHG;Y' NG NN5?정K.NFoD7K)=)#}#IԂC[<';JxFKM|*+.[d5ƀ"\s2.Qk7+ZLꇭr1;s?]wܱgKC+/<" ~7}|% 1 хzu;۽Jmto3g: "eR$3E+N^Y揩!3יzg4R81vM>ܣ݇<{eAjFGK^pXKH[di &`?yx詐ؔLݣjQJGh!-j OVF>R;~ck%BXkjbboϣKȭb@ B E Jždw!xi }-qXvޑ7DZ'4b 9@f]fCӂ6/Zix/u*!U-d,kKDEt~$ ޣ1~? S{j@]>F %xY<J9/ 22b\Ir971fnOP8o4ܺ[M|D GgڦI nn= co r+h!^4 *bdHSX,tɲ;i}uKQ#Y9ҩob}ĝwk}KUfBhzE4m2hSPui4?AD6cm"ǬFb0X)Z7r90U,\*-y+o2 ɵL5K(\^{IV6 (Qdn+kr=/;) ֨Gtk#.:-(w3K3/ %ڨNSjmZ:Ѷ'l4l T9J: th2wV ؞</c+NܶM AHxD~o `)ֺhRiQ@oŨ 8Qa9Ԧ~QR+tu'SjrWr:TI"KʅsȒo#s>}MNg<Zj7x<~ )7G8sqo*r2pVUG困#k Kl|w5si*m^gjh׮Ei8;ox·y ǘ y 7F:~{N'as@v( WR]ڛR>BbC_ rtT=:5˘w^ɒy;[uF*??:=H+hͦ'ف {u%YU ش?X6%+Oh8ˇ5d ,#T@'{K:eƨpZ3MOL}yflMtv5Gvo0sg3"Zt mz2cXw;)oUA֪wMt6u*1~luZ7 ĥ^}䇢]xyak8÷svwd䟓pGܴ::-ߩ7?5;nvTA T5Q2+ܼL4$Udڇ=&*6{~{ Da͐teoe_ x@7i{5ffW-ck׊Ѕ %6q]17x,>@Q]jҾ˺:mv+?M-m'OދB~-4BYbf[gfbdK EǽDƚfS(yoEyXGhF| t~ɃLMf+T[mN?M>rD܇ Dd}zƃ}nKGtǂP~G5ZڶL)QP72ؙ ϪX S[ٗܰn~Fl|XM:_li^ni w}UkĚY0lԄ`*rAۋR?\R+;9~a/z=rn|XmH*ϝ|76]ۓ *Nw|r|+L5ǂpbUIfuq?yE4k`i͑5 Яd6k^ ,ݺQmXkҍTS˾Qh Rkm~NAknʚzGZU?7}ϻAyݻEJ,dU'H-슊XIٮR%G,^\B[KHB[tr]a >y9hJmgt:$aeGh+$1J"X/47E 0F^7>)Ck ˌZA б6G: tSdIŬ FǵǀE3INJ~3u ?7 |CLeeX/Xe i +(-.3A@urmד>ڃP#++_]ީIN1x2/Waa4U ;GjS\L3SS-8gj?Yy&JbZȆ^j<omrD-X'+m>wUm\J$Q˕I.{?vKTt> ruX넘u+;j׷ "a7B{.cu4:{c]F\.2.%=JE?wX| Uzۻqr]rb)GK`1åϓiTƒ\ O'MR?k/6B % C j|ADcBd%gEDUU l>v,sրWrS꼓}Hh6Y%lz߿ShQzG;.|"F?"?Q@yw'a0F~W:< Gb0Mi/u4-oԴeBL|mnL<^ҭ?h1ld#Lh:YZ~_x";Zvէr/upܬThCRNۖ?]iw±$a&y/ÆӤJ|/DH5X,=dX bdʗx_sPʢ\ѷ kdA'nۺщLٝ4Ç%jch! W{~.=_dpAHD AvNh|BN϶Lp<䤀̇桃 -ǽBJ6O4tO޽d"_GJ>Kq z$s&}|R>ͼzF٪aR),>__,,8ylD 6%brd$S.~wlT ҟSnjt`m '%|LubZm~('6mnA{:sN^8(4`G2 ==oṼIiIFv?f;UƨmȻ(9n=_^e"4zܷC_Z ޻fl@J),ݥ%z? yV8oQ]!]Z4QNUO4 \Yld(jҲ5|Wfs :f6HəI(;=Z0֋yS.$saRb7'%KÍQm,KlI=Xe(zX>Wuy8VώpH `f kb U@=vvpEfa0}w0cz}AÀ3,ͅ ?4l b/w⾬"&}LI")ըegF˩/\ȪOڪvt=( ݀hbTI~miAv1hf(|V֢sd9>ʘS39AMZ;rh]>SyzzVXV'ā/ؤB%VxѴ=?M]P :NJחvbSf*6){ y8ӸP'bBs+`It1$ءxt&wpex۩L: 7eTvrsqWMi)6pѹ8l|x{T={C^_[~Mj09Iqv@jCn%)$'"R"@} wp2 HDX(Æ:SQN2y-X}}2 dEhO#m?Yv.G55L{>%:Ocz'?,x@d%w(Pk{MLo]lN\H0qe^Een N 35tAe]63@>Lyĝ~eL H %MW$O~:w t^p9*Ksa转qrd+[fHvGC0r)>W2Il6I9[_7\FH_9lq>M0ҁa\: w0&ytδ`a!Rnpy,*q{ص?k?aY9Bt:=Γ yWRU4A"Z;NMb u}ݳ߹OX4%)U/&7|5|]/OUsO9? o^Z$XmV/?3;4-y/-w?),+=Qg7dRwG<,Z_sv˟tKb?B?QZ39bB7l~Cڑ|gw_Ɲg5B6ɜX"Kw7Ggj :(]ַiEMC(Qw^xG/~^`{!CJu^+6@P/2 xKim-4ܿaָ}G~>[mY^S}7!/J@L-s0Dw(FK@\bS;##JC`Zdgn@RL rwsboz'%}w%4 ŞYKc)jéL#Hq}?Qpw;}@z G~w>y"Nw5aA:vSс'} *7};_<(Ѕ3gDjd7d xD.Nݐ*)!׽HWʴAӎn;sG\-?@>[ﳟ 걊XgV* ^Mv|fx(Bԭ UIfmzJor"/J+Qz##z\kVz1gz$G.ߑƒXE8 ubYͿJI@PP t~%[ EEeRQZ#hw.pv;Ye9k)p@V<2F{XY(0 M`c(1P8z quLT׌gqoMblZrm~)O>(ٴjpFe"ϣSG.}ce 2]WyL&S0>.ơ//::_8q 1Jيb4.՞G)!SqXsb+k@`ss|nbΛ D~u#n2ٮ*F`в J_oAEDzh?A:yXfptg0r~}}ܯ'W}I:- SNIXuk3=`S>-hP+Q]GTolE}Ɲn+fԉ9gͲ ҝTNp珎]M)x4s)J˧sН+%?|R^x!vA@'g#@?HJ;dPobDLGaf,G? =m㪙{jk@wW+~YY"# v1%VW\zz6)BZ𜗨}w>g'봼ၚ0kΟQ%w@Ot;RP#&z|I|Rv|.342yBUqJئ:mM9񎶍8'D(yL^r̀!x;mk=n9ny3}@AˇUjƋn[<{N'[݈RoX-yi]-5jp/<|_l9?|qwݼv0x~8Iy^p}l+ֆ73HLSڙv LslL][W47ɬ# p梧EGt=|ӳIлқ m5(nѿ-<{5f=>W9l睶[nԤy{Eg<06|Q! :r,gE^du@W?mjJ۲̺^SbJ^dwJzn%qۓ"ϫz^mݹn+k[V:r]Q7Y9i.b \hn}"r>k}lBnr/9o}^(S}3}]uGz zBqa6aq>}RupzѦ$ܵN$Z;G"4R_'jlk3hg}W9!fmb 6f ъIDr=pxe'̝tqsCUD(`{?q" |b,sQ]BrKmmBiש$؍Mn7dA D1Q>U`陓Q*(zo?:2e^kA[\~9Yæi᭧:.مo>kCYc.^qaGs!wSs2rIA#~4tpH޿j]qXGmd{}<^8kta~|\GIR;}qYoX[8e)M~Ej?SgABO;"YYڨրf\Ѐ~G"`PƢ ރHIs;6eμ^t1X)bz̶; 'ݸ+G|Y{,1ob!0k+9Z̀a>F|{)?\ _8RgҐU[(nPz >xVkPYTܹkm 945GP܌sAVY˰`痙s#\V0!,-IQ>V/R^̃JAIl I}vFvʆ}k];$Q2 Rrzؐ;e<P>B2ul{Lݽo24Pɰ HAOBӢllV!I?!dTx2ӳ/[ޔW73q%_vx )u2Gƛ@+Q@+3LO32FE@ߡkdXx2EZmf8G۫,)lI츎EDZo/M ox. 8(WCETA=6D;5!X W9^s OA"*wDN+} ^n(*fT½k0H|nz~Q%1X5}|sd{f^amRJGԩwxXG֠^C/DE/z`Y5!*ճg{{NiZs.:SZgw }t|x|z͚@$C^2yx~t?jV:ÖF;i%V/#Z qbT^ug+v5^,w-hGb ЂsUfkpцOm2iH0DĠF% O) E>՗mmn2w=VK\߬}YG&[.:I,cjZv("1=mk5'l (Y*-~]5Tn1c6t\;y*<9:Ϭ `ESPfQzHwSl}6r,Br[*N `'֦cuK_g!qh#'e +?fa׌2=$ydM|$TAA56ai-r͵ʯLt9՚Z&vK6WA{OI:lFrLĚ3?$o!no.j PYT)_;<K:;)]we!?&x(`_֑~Iӭ3^z-oH&U(x^8kD(>{0vU䞖JUrv\;/J MDv|jwUfM8\NLBI77~U/>"].xFUl{;zָk[΄o(؇xT$נ ΰkg/vfTlt:;*BRZYCeV8kGհ*8xmhӞqYrwtXw<`,WmgV?_vLڃv*jO %jfNMtGTەSkczKBGL7-Yg޸qIzP#B,s6GQ{g7fx(&q=Uc+\Puw9bxX5Pb# ]Ǖ wAӮM]t, CaSڸj2 D̘r>s4rXC4<3_l ;ԕLV]̶r}y 3Gn"yo)uUK1 k1'` E'{b ~Rk? dn{/#_(EqV%6gC-E̛S\ۥ}Í`V}bOA)E+TDҌ"`pJZ hvb~'xyau`yAn^ps]١N+-{AQvoGf+@'T~\ze0Cuk6Lo{) ]wLH(\7-T~[JzfR?S;` zz=T<̓>gH%*Cܨ]~^6n~4ܡ͎N5!ҩVs>]BYAT5C7:{P?S>A[;-dk_k:#bp-P=tzCF۲ڲGOVB@?ӓs C;v5G;"JmkIt-ް-F){Mڒ ?ctv[-ӗ?wYո M}rjUxIOzl_[& jh:ۯ~y@:>wj,a9jُ sw7)klvj79-Giv`.:va ERZv 1(yȨIk˱}P?CQSoG uiVrDm:< A%WײteŽJfnm#E1Y7khk^}ya֑G'd6(zF!2|}[D'u6?*${ӦvS&O3(^9K OȨ5(C X{B^q!Aa0hwNHl;Fqwegi4NI! Iw*ܔІ kFsylKժKw ZS5KHlSîI+(=dέ܆c*.g^}V|f*RHg =>mXx뺣LfѳT$ݾg4n CsSsLYȁ]Pop= !V!zNkJ3[&`Xژ9x}C@Hؤ^5z/):*>MJEIvO_-[^g+o?(ZpjCEZ.4EhNLz2yTq* լ?uw$ް5IYρ#θ:aTTo/ ΍E8P`kYB%C;:뎆ܾ;zr4@t2`aMV:w4b~ыIlduIƅL,UH^ fQyF}w4]~vG"֊gh)Âp<_OvJzn)(SǬDgPf9F8^֜/y/$aU֙Ms?oJL bPu}^:y[CްOrL֕o@tW}M}%)Ӄ )2ISz$9֑5( fyuSˤk~pG_ot]'.Env z+":,AOdA TH1h7/C\`SWV C({1a-sdSͮ jtժAWh(C;B \A ! cV޼P-mHyx{n |oc%ql!!{ pz4v˷aG:Kڞ  [K=rjrz-HLB4wpt\m?d W@ >vHl vmdիʋ,slIWqIA}rU"(eQ0츱ቲ8o}0XO@;xN5~eM$U/d D[fcbqZLл/ci[=[C`\T *pCO:ַTԾ Bm|1U$Gx0+4aHع9 :Gpǁ"3}69O1Q 4m/v@T-{c:0mP!L| Dr?R]B ox ?`>D峾(evv#X$=^JTjh-@"ڽ>jQm30fMTT;>^fHZD aL QWqDư:Avu+G@k?0%w 3W#]>x4Ԭe2E \(fNISy@p ~c],ܬv D:tcX/RyB^{b$tXoXwu_y{ܱ}Cdyr "9Ն? {N2P ggUt_dC#b.^"2ij]KMy0.B b0n۫Aއf3D lK8;RVeu.?JQ9(dFCQ$+a=r!J4X]F֑X5y7/v\EXnϯm}HtgyŮ~w5 rعvtj|ocRIZh23>=7% bбx4k*Na_:FPDIՉ I=rhl8Kv- "u)S1-[,]7! jkd,ZM M):v[CjaV¾jg?,l ?"0Hrs׋h5[58_ٶʶK*ɾ.%{+f}Ji֬g%)tby7 FHuϳbD, Do-KmF1w#.FWp`:~'Ў$Y.qLf`ALc5-Baʧrm ѹzl|엾lmhSpwxQI>p]Y&bK6GZG vQ$+w~ ! ](Easjk`WBE瑃C; _vY>"7K{^Yf 3Z#"}KjCF N%hn '$/۠w6C_o0K=" "1H*Z؎t?`Z7K~'x%qhL&iMw}na'K%]>=}(ii]_wwkqAHB;wUCCk0u>]* 1rpI/x,>X4[û(H-?:ħ욫Z6R p9'9v(>`H$Z0L Bwy,AY{ z*Xynӏi}I#'iTANVq%usv<`&ʧ?“4 '":/eڷR|Ð .G\h@d(e:k7kd 0HrTXC!:qRUZhK?aԂ_{7t+>N.qJmpWVRSu)}wpC!ѓm?s9nO0VM=!zapoDv$ȡ@}m'>,mQv⃻wl~gh$ʴ@"QIbqR>Ck(]FQ4_pOÄNf[_pw >!-q-םrp5'1'tK5oeCn_#E5Y} 3B[+>H[ ``8^{;U2T/AyN~Nu ݱʝ8E $F絛m)ֹV)ɾ#<(ŵl$x3tI>3ODaG"(\mKl(~[d,.>I a˵OA-ݡ``wAg#? q$бu7ѭu\-#GN %Ef~8nCp/i!MKu`8$'阀(Oɥo <` vJ=6uG Ĺtl>MKu捈v$>yJcX$<ϡ97gT*5B!YƓ{k~& K{F]ŴwD_m]G_ m&,%/ NKG","B`&(hW."IIЃ>Xz?4w 8tV&n/at]wt+4>TXb)lGoa5@YP`8LOHb`:!Y~Έr4lS̶ocuyDBW9:(d^^;zutZ d}D}rO?av=1>cO)s95Į)*yDG4BK8[: Nϼ$ZzgEa$A-f͠WXNx$-;v1sN LqIQK-`; -3eѿS ˺g䎼ի oz>A8$(Gmz]6o } mUi.4uT 'I״iFn8:ݙ.(ezC$Y?0ߛv.ٽ[땭D舵]۹d+eXy/پ9pZ2g:^Y-|qҐ>g /#6!ѭlIm$^d*A M.{x@C:$]]KW'_` #i¥]t@Bm^+{‚|G_NK3'p4M2;#{xT;IFZ@6FAB#E`},"懾J^;*|Nh@'t+Ť29PLef3Qw$$eY &a CZ WiY^?O0Ҥ0'cywuJ h,Akv@lh`L{ij|4Zr,_)1kcx#Qcn1/".s%c:J;SVe'^nY X&Z0We/M'Mɋ60b*.j7N;ÿn0I(h>%h?c;`x0o% |k.Kkt $i* Ҭc9: _2/~<^ƴ|iW(IbW  ݞR5"X%-:jW뎠zZy@˲ 6hvtA.)-n'>ֿ2H[Q]c0H]77XGHNJ@7x8pեRˑ?09AnI~Ŭb.+[9t3 2|AtG, H"|$<,uLQ*4i#\- ҍN(:iRddBwr-Qz B†acC  {^8i:L 2s ݋06a@CU†Ӊ!OgBy"KWZG i=KYu^3塣- $̇10dlM4CaH{G ͖ߌA23VWAZAsj^߼z12\'Zj{iQ9<і~84 I4}GGK]!~v c!T(v5Dy%iQ?=W\kgx%I>wUĵE4=, 49xߺ "i(.۲ˀ[ DgCZ*~|=E7~XMQd‘?WORm #!'8i);zc$ ܔ 832@HIaepj;h:JgE؍*к[wsTV9/M`Y7lBG & {@?& ߄YVZU\z{%OS $?O@̻ & 4DJ4̘AdrjR;nUɿ7$uk%dŚnKb'u \%ZV2~$gjs \֜#}°TR ]9}n-"$8k~m=0 &_}|y9t/5ݸtJ*ܠeU*+AM*mDҼ}W 4:iڭ v7:>7zb2q2ȥSRt\I~n!94@jܺ5D4lEyFaVZGM.$o#?:~U6@ L%(1ܾMvKujBxȮB=.]V o G!ap0ǐ=3S>gX zDtE%{~h pti'`.6` K%\v2)dCH=𚪙 q)J_h( 㣪R^6W 7!&`,v:.p 4xmY^koŸqJxCfL?,=c̢h OzG[@s1Nb1Z]o4K'3J C|dd\9嬡9fo$h[C4KT5yTcRru;fӮ*+PDo+TʭĂn27j)tЊ֢{Mvդkq݉ս)'9t?NSɻSչ(Jt }~W Yx4)7x_buHgU_k".@qQ,tH9xGޑzy9FnF27ي_hS[QXז!ӏx7hޜ  RjZ 0LE)z?qHl*LoC~Bx%fkSegernN y_מM7u]Cq_8x޻w}9$ 3t Og^Vܹ̘0_мЎsQ:A.n,[6p$ϑJkZ sV8={aC7G$AԙA9d;o#:$1 'Y$5Hn5pg?ɇ_PH~] Vy>5\~[N3FkWFQvxm$zls mX89p!)zMl:D@D۹[vYr]?a?Պew)jrfp!!`n#0K=.Τ#x eUӉrK%) es8]O,m!M2x@!FLi 'zv`s%y@ 3V~\kFq }&Id3s׺go1[UMXxCݐ,s _+Œ\jh!iIa:' H55b9ho0HW1zYLRw.$A4~ -; m3 Sc{X0>wmds-rj`~ZۂM 'eqv1̾N26w32>h}i eyNܷcy~!d,`/ \p@ 7{ݦtv~3eWGDj)ky/;fVQШƯ>m/|kG1;Cwځ-iB:_4±x-p ߺ*F;_\_ )۠ô¤T/dEo=Q ԺR[ǯ߹Z^FwZ`C(yn1AجGfqp`bw܏$%l#sqdnIj>I?O].+jx Wbk+CO]ojC τGlO:szRR~7`+GK%]ɝJ?ltaHXMż{~)Ȫ7ϳ) 3D4qL{bٹLА]C(n;JxC!+ϵҷ l!Ps9UΥ}H6ԵĩAE=~eޟ7B .͈^fJkGymT}ЎA%k:D!XP@MƉ Ϻ(J[,W/F۰[P̜,OL\q^`0Is@X>0۽3[,N$!Q'D`QSז^21l#v-iJl=fwz[6BbK0&F4@Լn IU6p?9 4B| 7rdmOePnSM17]>hpIE2'_~uwV|BMqQ?ɉO-/c .Ҝ*[Ch~|MߒscCE)NV|m(CUw~ ,[1HҹڿC{=E]w~_0 Sk֭n8N$YWwPj?R -Nq vN .8F2^) ϯ9`qV)rsupCɎl=̏ohU}_g oqFo'׼/I|uL;G@ӨDzfVzc/ԭ%QN˿da@V0ylS7TSJWLUf/MK#lDגKcׅtz&OO] o֨w2|lwRU?EGYڴ QScpyi/'CaWG [4.2sswV#x͆^M9ЎbY? =D%5 $̣F hR719FJ'! 3IX!c!}H\qvJ)Ҩ¨Op Xhcjwu h4y}hɂV3/Diɕ:?񆒤6 ? C F1+&"0mp8r-T+ݑAB)?=%n?%A&x.Rzaz ˈ ohgngܔo5N$xyn FMc5貭rІA̅/&)ڿwZNu%FnZ0M;S  Oοy<G0!o{o9 /P9| #i&xh*[Ҽ+ۿ:WGTp݈XhĪÍ{knRW_k3m>d`R% %ٶ{Z?Cta-t;m C23AuGcAD=9g]?zA˥!ժ"؄kU6\ /_ M\6 u#ȍ{+0{5(Һo;‰цA"H={i?A9'uj#3 F)tH&8ߏ5wᐦqWvǾF#zR kRWMi&Oqw:p}_MՏҫI^mDSX \~zB$Z YZ5&?" Hr>*z7D>j.u-slŷ#Z^Zxuhٶ:y ~{Z,Bw$ iw Ȓωv RQ)|靻3/h:O0RM}р=O4&d5vߜJ `#oRghv"ze`ܺT>cw ͽhèie_oY5z'%imiM[ 7&SM8`Ϙu@BRȝ\莦QM#KYݎZx 4$Q_V36eh W[W_nVsyKo3Ǫfد_%F8ސH:躃מZцAe?x.LtdXdAy *~gY|>"c*C#{T:g,':: xM[w6ȇLe~6têEyiS@](`HacЭ݂*gnU>HTwn4r҆4_ uK5$iQ "/(c'<8'6,y("Fí"fR%br~\ڌ5Kӕ,#0a ǡnxyGmNykx;?1$lt|}{wI9c/s*jZ)TE'm͚'@D!ܿW}cm<9>.^*ޟJ 1hB޲D#0v:G7ōBeKy8K(1x0ҡJ\ӟ'3;BDu vNͦOJ.)=/ذsC唊qi0݅E?a"5^}+]mnIZAVQ- [?OMino?ڗ)쨝# 7mٯ]HVQHM~μ)j՛?t7ZlMsaLYQڿ&:྄Q㜷oc888nmO;o;Q{Bjޯh3smPXr ܀9oXzj>.8OӳOI2L3xDQxyIR;9Тⶭ[=B!M䒩rb"'Di땩SD{tS?zbv^iVL BWMGtd,=5^~"&қ/ں}@W7# i&C˪1c/ꖥ*@+w~Fo R2ag2P=ʣ#'N)PS;Pl+һb8S+03Vxm Opj(Ҡ=FZ9 Cdva/n,{Ѥ8лG擳Ўt"N/wkG F(,l3Yd׮Z +d?\0YRC.-Q~n :'ƽ FNIVT:S0lۗ ;Ozw{{ 4 N];{G>Э΢ݕ?$It/aSP~xC!Aٝ?ʗ%:G'_GwiQGPuaT9c_ڲkR=(PkN fG/A]x`Og]:gK[C TsԓF͙8`УP^]n+jwB;)'j}''G&={\v{6}cRK_a$Q IvvuC/|'eHmׂyѡlID:~ǴuNkR"J5sFwv,G8_YOG2 O떞|H>I?UfRGGEI-/PI>|I8o(9k׵<7bzZ~w F/x VIsn`(M2|rُ*,js"zmpzM̃Ju}%D/N8T,䂡\@ O+w$3aAHK;Ϛv=qH밽=$z_x3²9 NdΔh2XP nD_k&aY*MJ(fqe 3&Q~8x `-`I6牮;gtgZ/*PdW/pQ$5K; TM]RuK!u)!~ 5ug 7|m:RE7#FJ 'ڃۦƣ?0 c5k oOٰI4DIkJ'>JU](?4$xAsh_g#ۣPS/Płڢ9':bKB8 ] E7$2.4e_)@JbaDQ#~|9'="8'N]||ƒqY#HN|+ IRzoh UʾAx&Ms=Q@J/jB5%+vZ}blr/3CZN:^[v >yB?Zt1F.vf])6:.{313&e"`,DNRkr?8PKk9 imc룳 hpm\}9&87開#ݻ]6ni)c4f[uğ6*}{glg6.rn A~wNQ[Ꟙǎ~)F"3SCtF;0QЛIlI]{sՄ1iO;r ;Jû*J)fj+U{= 4ܹ[Ն&ќ=Yg/I͹:8^kY_R($:iq;q?aRRa> u{Slhnz`hr2=hЇ}Gv5K' Op&a  X3;Ml}%L'e}We|sc?om&P| zmhz! d|sx^smB_z,ټzr?xۉvA"s]BMC[At}h!@^sʖ0 !M-bpr?hR+_\#)U^ignuV+ʳ]#vAHSfm7q~w'?48,p7ZvKr>0ʆ#:s&>u`Hw7ts;܍{Id5I5:Gvo`A$ ehLԮ'\ r<2agXcDVI%)I/PA8uV3|xo$j׏,n%t𴡧h-{׹`o>2,P1ByÐ&ykc2*9pX\D@F#jxۻ/8)%,QX0: CJkKS4MP|`0$YX'owؒ.'R%g_cL[}wMǙӶC;i;#gĕD7+ZP?_խCaLJՕlmDjl7/Ħ(.^ɞrxHkdY=[t.&w UML! 'm64ϼ #iPIi9iVH{>3#ЭK]DO6G}D$M.pFsvY|Τqiɂ{V~),=|Г`**9hhqZL\h ~|SiL"öh\S{ ~ঢ়-](4j&sw9B2$3yxqLX~9QvtKn0IYb#S|F7^ջs Vfy,6u\nW4gdHRA[/XuZxN|ퟹBɺ#3e>(l5KvVy1*]`%0'6eG++X!LAb)Xmm_˕pS BQM=jSjy[Ӊ i+z׼Z/xA8#4Qy 8t0J˪3-,,#dآb,4{o4JԔL:5չ{]a̸BAJ?Ͳ֌z@,Kݚ9sJ8혛 V S"0ا`n:g1k>w 腙&TǁL8طp@Cdd3y=跒C%%d0UUMHU'U3J Բo~Џq &ߎIC1X]d6yCe։4[~}_l\^)9):\( n(IKI1}iv_/7z rk[|HTRRtvY HXc<Iۚji{#p9|m)6^'눫@FRƿ\ݞ=XV)M3{=.)7!4V{?aH0˲j1=.;y$ wD?= #i^IH}H]jKs#$K ԙ7RN-zfvi?4K.?ڰ)Ǵ=t{aHiOl_zvbrCn5ơr'7aC6*.=sݝ˼,ї8xz=h.&Mh5tM=H=yE$ʦ+o.T|' Wn?cR‚~ uT~-RqUM*׻tnwF1T[2@(ܩhQ*oxC!QO)\R;x5>g=. dvˁvI̤ %OJ{ks~H3pRtsݓz&:s5 "lENKWՉެ֗]Ey얤fD{w{n96e#mр:0<#ISj9{$iB#kvgGOh0ä֮ȉvMvoF[Uz bп1H%h< І!M%vV]AA {fN>(h#<}>wm`@oX dT y'^($v|U+SAy$M>Gg[r(Zgoo1>` VZ׆5O' Hk@T}\rɶt]нgt,j-h\]08R%2^ᾉ af'Bp#K6no(aXeҹ~wT|-ьͪ5U[{@&bl:ebxޕh~v  `ۦ,!<\9;%s/nM{|Ȝ"P[T(mCDBho?KXZ)R PrSGഠOKkx$ ,h$1J; qsxLھOmAoЇe6R~цRިlglWC&RvcYnV_ bϴqZ+?,ZSIub9ǎ"d,58~`AdjIw2 Bu=9bn.S(H=qHp_co0ET Bʥ&t}kH! B-g_jv#\ DaQNsoƻGwc,a4,Ů97*Ϳ=0Uq< â^h߮t8mvmf[˃n;h5g=Ig\6{,JdxHѠۉ+rn֤*7x$۫鎱7]@EvMp@zY6=R%HidV/xbR/kŶ;ݲ0*|Swx^m_n L6^KxIk)yӱutO<ۥj( 8du MY/0R3fם+V/Hp D5_ZG_4N i]B+ߝsC~?azB0pK:B&p]%4S3ph1WA,xuxu[RY^aR_ֿ^ k͏,4 0w}MVTcWTUN0@AXz'gSTDO8${ω-c8~D bE1{{= pK\T/.3GmSiMƉM=*RKQmjЛvxD/Lצ>̔O7 xLe9Uwz<>bDoaq$nzh-RSNnb?a3`b"gm!vyr|ȱJ< 3 'Gaƀ\yvcY {4 \ /ꤹyq v$LEܟ byՁVyBHb^|.~<~` F|,f֞Sp@/LL\G.i,1w#iw͛m>s;G89sn}Q7LR"#V/Ur>Y:dF]b֋RV =H`0IJ,=oQ=xBZg//i}mwB.~AϘHB/zy1Ge$YJM`zaH4cK9ώ<Tai7K,$[|⥝S{8:ԱQJRy"k2sGQMDV*y+}>FpeeNC*Ta#\-[>Аe鮫 `h3A$ q7~0KxS7ylC0ѝ47G,)*^y`evN90q0• ?] P >^ߨ8 H8yc ORȞ6ITDC{6?fy(cBs[ ñΖ` SԵ`1͟bMB?^|`Йm$1N\տ n0/3Wj>18Mm|%nFT|zߜ!Qst G0$k#ݝI4~,I:Rz@jB,WevOІn}\WfnwoI(cT"jmRbIgu; cgd8-$m>ys|닆$|gC^,Ȓ;w>WL">獁.լ|7tꅕ=X"-zQnQ_wtH* 8jﻑ2ڬZҺQh8h;Ge-4MvAwZ+4 *.v>4/;dIjMֽ6/ k<-G_OzLy$Q^ O$r@DdzL/u(CЍRL}i˺_ZˎmG>< 9Gi i\Ƃt}S "8:|XӐ~!C=KhM rQqApk<\ ,>6$?*a>M׊q]XZZ؊vAcZ<7dIL`v PE W^pr6|¾V-{ =NB^jҺQFZo~:>^;{@\e#آyAj H&jG}-xp?tIfX5wpGK6 \ﻷEІY #` 45#{X&k@4 `Ax8g-.%߻x4dX٭H=Z%/f}DJ{лy[@;FRA[CzK5q,K3qdtOG!U}wMMFOPrӝ$`p,cFf YeʓG̹W\-m&%Zx\_46totrWKR ! 'a'(z>. v^;Q7qnZwf^cm>-^/A N}} %)Ovkpӥnlr 㮝OsYܪF(MښRpL߯u#/;K#vG< };}ΰ(GB-p-]@"qF2<_9+)O[‘ o׼D?1H-Ϙܛ4^%Uj|)Gk |gDa0!Ƞ+x /_BtXl96_%!d>pF/tzPy$KsF9op/<H&u1Σ1\p)T8v{DEO#MvKx6 EnRsjFD?(/~>Vg)8?`^rڽځ HP/ YE+#8Y+IR=6TxNjt9sCLA&eN>ӹu؛,,4TfΣ}mM\6̿!ʚz0 raE:?3AXe I_̍ʖ 7c컭kdC=l/7UϘh97+c g=?wJ} BǕT064Twoc$5ifHLO߉fO` Ißoݛ>}AzmkǩvkvH 3K6[h@}.`CBf2*YAPE>0S~љ[iIƷ;]hHEJᗎ*R'w6n{: V|aH<=LO8ine}-?mus`:$ŮXkXs}b"@7{K];22C0nxRSL6 -t5&JhHCQџ]F yY"U+sdٷponԺ'mKF}ЎAR?hrK7&uhz>;mFpϽC.pQ  \{:A dZJ ~zsŹ>5 UY;b= ,lo|):.py|>B .by֟=p %]Q;~xC!ܔ|K~n5#Y@wə cU6cg|{(s`7^P娜<]"omRMa  ,P ݍeaWW w&~: 3 מQ'C<_/ ieK~(]:W xG!,q]Um$pgO0"3\l N% > ls_lQQH6>7wJ o6+ThwN⧗C{<@C q]F.'d&s~nv2Ͱro8]-1t;~Du/! tdyXvjvͽzaI1mUIs}{ G*YO+ɝ;LX,$\i`"im "Mc-Xj,~[-uWOjH?6#?~܋˥9juզ 72$pq(7,Zs`$O.?ݷCg Fj\r~aQ9s!cQ{x44׍w~D;ovʋ<,wuc\:~zLVo{ ZI'X |fc|G7rÚO9U;u HƤGo]vO [tpMUtQ0-%3*b>; : V|4ΊB~j<*:Ƣ~93z40r&au?+ 0f۵md5-#PHWt0&s~FT@SW-T:/ԍULJ>wuow ݗ oOŊi\Z 7ϡ,xx բOh|4_M'g>SUaٙTӵ =Sq"-̍R?OSM[Ci1Q$Yr.z-"4z iwv?p/Ҿu?p\t`Yҩ&v2&;jIժ EOf#g|-+PH2sVn [G;=zMD m%T5Iy.fͽ$?hGO-GK&Rh8K%pGC`K1y{$5JNj9F76TuUL :x,~hz?зz#F:]ٙ~%W"-PAvS۶{ Ɛ*3s@yxFW8_tPʭN p,'iR9UJs &Ie|`67xǛg&6' +Q 9t'0KwQ}Gu|=}/ mON.V1&>iыs:]\=vdMNtW F';V!YA }#OxH /qYQe0u6K&)RkѣR#=v[ B޲D\Ρ}]`>zaL; -C?4[ p\$ąoO1$֭B_~IOw鮝6Z}9*`dOItɺۻ}~뵯$iR@[c|]w DYb\pSg>u[KiBRt8w)0T&MqJiGY߸O¹ɸrJnQf)Rw]h0ӤBFЧ.P^:|ѪsR`Kvv>VwIBd ÒŊ"4ÓG&ոMߝͻ\\Nim\郆6D<;fOږLkѝ%U4vߢ]0.no'z68!Ip es$tcm;j{)@bةC 6\3؝pjÏ.'ZM&1(L( i-$YJ~"޳Goϔ`+S=zy2L"Gv/3iv-F^/-^/ݛK &i~aڍS$>@0$׋۴e)des}zofzWׇA*%HJ{o/!gm.y΍ 7BӎXS|0~/ضya0h -i ޯ_U.;$L9t4 %iE?n U[1pn8B/`7)2< tRw)iqTP@l0k~n.^VFXD!`F?^淶㇞]%0ufeXjfo{lܼ-xKΦЎA"}tnѰۓ#0GSPV4s?B!nBaݐ8r b4s+96z6ICɑl6ȺBkh S ]FK|a! Jz|j^c`AL" v#U-qPu~*+ҨtL: 3l1r58|dg_=dmO ̐v[%b6@zM<41BzC-?tQ&%8GѻT Ie-.|Ҿ#%u `y<́t>w= VQ&{{`bG]|_IQC -;j(֘f~ІA#pP/}Β3'ˑms F/#W֣P ]籖Lchl ~MH;k[.M_qhd:<zm'B,(ɦE NW0t?l2a#eVZ])wt \N3#)XhH-X:΢^? $,Mwd V|Dib%~4v_4tI11tۑYH(( G~MzOzGލ 9w9o`HRRȱGؔM&ST,v@YNWĊ#&٫&HDh:٭2u%-@?W%&)s'yF_4ꉈEY^ *H] Q+g|ێn~fƅ E.O>&[n;}귳)7. 5ڹb)E[Wtτ]3d]!;(lF+bu{f-pf(:W+{s ݪH0.p2" ᦪ'DTT7zaF!ڮP~ o Iʮ99wՋ^҄W|wIK~ߜ@"k\Lnlj H4%"Gwd$v@/@t֡ JY)F02*/]<Ȼv_/gl A*hºa]?ݙύD&aDU 6m$eֱR.}i=v us+'N~랟 &2"eߝu_* mYCӟgx^h$|Kv_2:*T@:AY$L1%`t ݓe,)+0ϘX-GYx7WMJ~?,!әK/Jl~46'+Ѓْ|-w=$]X\roM}V_P>wk Tn p=9]0UIy p9fPX: o8$xLz S`YݔK'.S>b2Dj>]U^blnOrk%QZT8֑b_/jgD-V L/*I{[K.hR=/譟b{YJɁ6Ž6zHɨ# J;K=] "Q\&/X$ϟ pvNݕ p|_9YϏ&&^v}"wÚ,iNՉ%+6 ]JYWWx֛K=Ð_-ZyΝ5x.s*(J+5q~~2ћBs ԔpIMdmbN\ᩑ"ܴU;n6 q&ZwJ~mT*ժ&U|'w1TCڰcȊ腱!U_y=s''~i~A_Cyc!:>t N.u.u\Aßi%f mï^aR }k4s?& As>~^v_1iYh569rDhFڪ5>B^45vky D}Nפ~Fnm#y8T,K.){'u[ Lw2t9^UܥOd# mGdkԵLus<膨Cם1y!jz0j:?nf'i+iS^ʂ mI 7Ԩ=nRI$9.?lc`sg*sY( Җ:.l9lV7CYS j4A;6 RKJ1TިJ ^u Eߒ+"n'1Q' ^;c!{Ѫ(3iAnOZ,NU`C[_{$ 9!HEIYyKa$dso'9"leZ)<h*wy-ҽ}-[|/@lc=/1s:5,(5fCQסmG ,~ ugݥdg :.* y^w:P ~4v:{ІA8#7zalPc߆jA5((գԛC/S2̀Y1O4u]mp$p˻hHJ-^?I&{yJ;Y߄@aNpl@2";u)a1kC?0ݤ~[lhvͥRkkP|ᠷ[Z']m}33~k2)jMx~87yYY-HDzѭHҭb !3Clo.Z )']`6hCVX,O;LbO_A"~`m* 6 A^oˢ 0r\c:۶0T~);M1q3g鄛0Xӌ'>qHT4p6 CMN3Eǫ ')o@* pALŹp?zr 0RWz;99{n`!xC/}ԱIΗzB`[)QZ'_dyV=Rg-nAOSߔg0!7ZC7Ui>סwj*AtG|mOͼcӣ4/-Sg69wkUr- e>%{vN5>V=ڑb/G MZقs7E?anդNXAY&SX\St෇5D/LzӓKDaD0U鍇Y5k #Il =αPSgkG)0؍>_omٻ BkU˺qZNs/?%/D{@6N1 OԏWk3֝Cj"TD`Ѯ[9|Z`!.p/4dtq֧Q6E#:iҲ-t]ULt.aj45DR^NŸn I]zxebgx1wWT=?+thܰ7+0>GBʷ̣ؔl^6 RABstvR}xBT"9G4yoz՜цiW#Rف֝MWH$u&xAkgbe  G6:,]n>KlhxsMMfΈ%BRSI}>̯nJח͚r{F4)pAG{[*>0Ԍjصߥߦ_y ,N}oWA{~b9,`DymluiCôtc⛰$̀c7k}2n׃̜N'ے$DZ#Ӱ>mLK Ȟe BҼ`(-ntF'Xu1؂s`dDu3`8c7ݿfT%_eea&̦a{xG)5ܣts)&aoNiyo,m($\~O;shH :ͼ= Ua6lRx GxaH.aD{"?JiiNRc~ZouF(0CZ`!ﻼ>g"+j5x9ȣ85j{Lb0,- vYI㼞99Llj]JȨTor<`H@1RK˓n͢n%{; <ݪq:#n{b0; ?q_;O}>4b7hO3fO詑z!hmxh6 NGG}Op{j,޾隿Ҁ% +ug˫A#xX;f`Ȼ[C/I&Tu]Qoy<7=֠2gnX T|*3[I Θ>.z}:#\\VR&?Ze;:3/O5~RNƟy~IIē FJ'C!h o$c[ ߯JI4y0'eتud<ФUfID?_v|k<>9N FZ:fO,4u|l @U;׸mU!ƹAO6Gu4Q!1sT9ІAtmS 뺛9\DM]0^Е =gog͜$'z"U(tjHRS-V1>+V>j:p?]7`46 R$YڢP80:h~Ӕ:\ $xyz#U+nV: n %) ciԡ&)1f}}}Ih ";8v;l^CD{y_'؃ٵ^:KIr)UQ@/=ƾlXEЋg'ڳ&'FpsCQa^Ky=nNqG׊9Q`c$'l癢Cx^]>NbHFuv9ԡ$h~3yw[l}Ĥ*=1Ts=2gl>ѯ6꥞bDX10zf 4h3 ]>:˳z^jňtܒn5w=?j~$ֆh{CЉ(ez #:R;fZ#iy"֗%w9W?4SMRO!|͘w-`^$Yy.O$O` і{u&wAZ:%#q%sl妘v^g ]eunc7 )M>\gD]y8]o `֓{i}O`8\t-cG`IDHH[c޻TqܦO߭voߥD_yE3ЛIkjZ5|UU皋x{ !7J`窛_E9[o^OvM &<Ɉ &ռB$W;F1װi&+.}>0Hڮ%hcMWc 5ǖqJik=~le)6iUwS'pXZcy|L?ڜlI6_ =j>V*M3U_+>r>q60>Jg4^MEXSVG 9"F"f7٪=NsB"热G-ͪƦC˺?bKjCT;b M e$ďl^/'#^)5mv.zۮ?`:N(W{=t.kI75eWR`n+ ށ A.Ú"O-yT2R_ȭR‚Ū 6#+~㱐.r,|$ ~8l[43Dk4?pL7Os!n RvDP2 YNM>Ƅ=y y'iͱk+0.=2D+ŻF!%u)eZZg)pP!ݜvD ' ?N%&qh±z`BWa~>6zv,,\ϡ!Ocq/"zº FG RL;)9p҆IR+~s;nOk@1M`L8*1OإSD2h,~S#; IN\5k A' eٯ䗝hO~EA^gѢ^BzT aҲ8hԃR{s MU*X5O-"%6F`{! z[Z/?vG*ŵ׈6 v^}4{q({)'fΘ?#6au{'&>W)&R9 " v]b7!H%L2r Z͚a#Ժʣ_}*'!5-ʀ{zY kfgT 8Rq_-t=^9٥ѵn15jŠyX 7gzVő"0H]\GI1\BW>?qxB;Nj^ܹY,kC?/0IAb7;𬷁-}pJء~мcO[(D&]S84{kj3xnso RU9JHDF&~']w鼸 W)rܝ8 #?Za< 5NPh*v@@ﻓ*oz3$5c(?혻w^&=3hH6?F%zjPi"cimU! 1䅷+6L4ww;ro]2$x'4W{N` Y j1~`ZWч!nՔnUes 􃦏JsIZԟfC<fgyǒk **?BI [9n~硻l [k;طZ'caTQϮ;>68X?7{~f "m(iGs<,YˌQ0֓M|~-1Թl ߟ 6IwdˁNJ˖iɩ8ެpn)@|aHYhl3iaLvG;hHR9Ean'[NJ6u.ۉBkg"Td)%k'PHA-Ս Ahb~el* ߕ3)6j݈zF)1Fp$Mjm*v_E)-)):sto*Vu).΁wP~> !)=N}Vy;9Fխ$ޙ⥦0*)Ug>Ѻo $x ~+] b8*BN,XH80Q{PivSxkDU|'xtdKbwm./H9;YՏT{K&cz#XxLnHyᐚgyd?ZH%%z 5 C~ p=T9ILo.P~"Qo]-$GW~J 4<ش)3FtHN)e/\!tt2Vx+%s*&ͿlIPQM/޽hӣ oWB*^\%Yp)+vװz |hz L1k)  #nc}^5m\:m EﵖsѯDV'ke<5zT'`tR&y4vLS4v+2#tDVV&RfcsU^] =r)+tmWPR ;f/! Y4kJ1ץS\vCD8Yq80ɌM|yIO-+cbCh]I/+,~Q{%e:`گ͚O2zs6 tC5Y5vݓ%6x.)se:x]IΉhg|36HiNhÿR-yIVI!LN^SCg9XpNmH/ǜ`mݤ`'-3V}$9Ci'hAϓ{eڇvrg>ݕAJ`MwIw4Y?L =؁D8nC~-٦$?'LwtUrB5Eޔ^ypLNT 3י{ȂX;3GØyC³J$D%'xJ@ 2VTayh`$G``& |]]Y{médz?Q>چ'@ѼWZx[]zH^} 3UAD6h  "'/. o8N#DfjIG^n$۱TgjgdeٓMda*}Ta@˪6x~f>OB/4a G|F=ީ8H ؋Y҆n?4%F$n?wK`2#\ѽd\"Nc1LFV \jKkm뜚V,Lłe[?^unDpC2Js~}F6:utʕLN殽~V|c(ѳ7za<{C$9;0[d> v_׏]T1?Gw2ݠ}4aR_j~8m4+i LqܮǸ,$!bˏ. o%ⅺw >{73G#2h3usMX)N\ 3s"ǺJ!͚>5/ekͷ[~l\~gu,g+8s-v-eyZsCD_5 g,b<`+֏hrs#JcdLmuŅ4sM4hI, H!DS_G0*,WLdyEk !ivCԌ7^Y xH%c~Hܠ"_,Һ؝ .Vx #rӖ7z'uD#{%z)hՒ$5jQHA0eI(ӲMs0ֳU};{%g.x?C|Tdchcǎ8-x5Mvj:)f"-Fcp7БLt9k69Tַ7CPY_N}'aUmXͯg2}jC0(K zaÁ6F;K,ͺ>CurB"yUࣲr +^`Ҽ)$hY}{wƙ0HMm(U|,jj'PL2KɇȤ4wp/^|Q,Pp޳Ҕ&OWSl=xhmo?a f WIʜ%FyχwM::&xoV|6cv:P~Lܭ(/#i9g["ݎ'x`hݤSq2>`5 TOE{]k>B,Sp!O5.2{ #AF6@x0jkEx?%hPԏ7A l6uM0uCYU7(@PkP] 0HPG-@B#3j(˅vK,05XF 52އβ"-A23c^t͆A_:i _p/D|+ߪ"te-\uXEȡѝ$1'J<~aŧ*j&dwt CO~ôuny1խEUBI-T\_Vٿ;!H@Jړ^ 0K"+S&^D?kML̈_F+>X0=ZY^7r%@wWW_ptuӊC:&{Q  mhMſBqTSt9&xlI qD{hVV$Hٱ &ԣ@mXtSp~hvMhvz}j0\`jwJ%pgh//<%>hi*x7*qRf\UqjLyH˜Ψ)<|\~\lT_BVn:zEBN]tr[R YlLvtxKZ'tR;܃q^SXfu&aN tnBj|Hſ/X?)]%9eЍJAPιvS*?TC?! *+ZGܯ ROMQJjK\,? zw =Ǧ*2)V< gĻC8PX4G,id$-Ro;Q)vj3< ogN"g[= DOթO6Z܆'ߡ[9ݪ0f\<2u>@ttu oj>> FAf&`Y{ok9o^Um۬o9kk{KUy;ZqlB&Xmy)tc'L7#xA+ EuPw}_YcxZ*5˻<~ c9Ƿ]\*j!G?YUV0东=u]B!ShgpG0Zu)Q.m{oR}`I驋Bs['0:f`9foEg$bzIa⤯zv>Pcgϒy(G4MΧIࡺSIpDGvEX$v-y/W6 z4GvU\~TyIINH13Z6zaҊEE{ *MVNkBv(8\5yV-ZNZǠ0z^b}dӣDQ #^e|+e]yK[g6:]ygw$*V'nJ2]xqJ?kw${UxyMGx%QWۧ=YPD$׽ϒۧX=+!峗oq-tBCiEbrt۾ϤT[9) SO =`8$*׺Xrzv,߽;CPV[N( x0|6'.qޛT9W!uoq#˦]&q;{%цQ1 HfkцQf3,Y}^|R}tÝ,]%C9֑L_0E#r1{6-T/$<%%6ʭ|g6 i6{  -_oe'=F@`vJ*~骢PiOK]5czzHjGb2690]0^5T^m{y{w$ FQ/ Ku)*w0Hd Y{DڐL|i>Ʀ&5f2OJKm9"ѺVg% H/RLyf0$ \Z%* sBPs2s6G*v֌~ޗ:kUg,mNm xaWp 0zy.K00 o@W=Sչ+gdt3G_;]g[^ lujZ:-Cmʶ0O ˀ@KKjstN@X@ZZa,[!c 6Bp T#A6C'_Ad[r! Ju5Ez^=I4Qܓ=hgX-/E/ ޔU&Lh㟰in %|A@Uo[VWDh9]ei.\ӪJa \< WEZϪ=9*x7_{V#dw|8Fn!NB/^zc6Eq .XqPKrG42ϕHyT)̕q~ pgR!go8PeRelnC8atbס V˝O:l0{w[՟^zдx@NA ).KQuZ M:D7<4U##Kۧ,׾A՞:L?MfU3fNi jhg3wYϸ "D'8O?%۾C1K` P<( Sud>? a:TyPtt8aļ"f3v{K-ߴ1kb#NpǦFJ>#3 6G<=5uf0RժnDVJdK D4c25@eǦ,=K/tZ모J&Z#InG?rdO7xS XH.DUSTL9nxQ.IO1\^s2Mvw{˒4S| GmwmCI&-B-MP\V=AM:W7yRZ5쵾4Ϥkn d][ _lM75<:5QV| {% M?'%fR?0(ch'WjdRэBQ*.6^DxC`_Ra,{ml,qi99nG=(t *L{pҴ,J~v@q4= t"[^hBsmCi1WYƖSvg Ÿ_ٺ KZN`!m,ƈ{zQ?-J߮%<NBI .!MN D WY&C-gw}h]Ə0rsTYJ:}4wd] 4b@K&N-!Emaf#6\߹ #G,(cT;0VTvIwگ;@Qjמ8~=,(w5'i~Djrj>u1DCK XN<\ tEB};U7tS%h2@ u3(A+@,Єh9xKC4CY{SdQ ClnxX`ih!|̙ud.(?ճ5,!wݠgZz{hI>MmZ&=Ը[96hgbt&Qy+OiF5M@*=7@#8d g#/&Ql)Ax (U r70(7\m^pX?yظ"^xdxXx~Pcl; D%mlX,`CY▎ZWp@db1ZM+mY;=;1u Z8~i[s3o9q]yf~95$/U[܁acxB9 H]MU31DC ӡ;dkj)WЉE.]F6Ք>y l}|_:q6(aр2>DRZAY(}Ѿlƚ,;ϯ7W8*I0[kTY!~ehc>~b♏nF33f< xAG˯[ֳ2LA.YAv]S!h/꓀NB2،-mZa.An`tyx #l]K ;l_lHٱ "G'8QNx=VvS\s0H.džL|P@ᷜrud cEq Vǖ4lv4j  ^fc*&!ڈp><+loI%-h>[B}mX8H+umwKq&uN)N5=±A(RUAbJ wĆT\…mJtC^!H:q:Ɵ܁C9CGfUsM~q 搂:(R */ Dkؼ:{HxPu|"$ߏ.5vz2ƃp7Bf#l7 V lCNn`jz;?۶y߭ #:i-ж_7>Ub7h(Hl[,+1"C;V|N_6~5{_\&~)nF@ǜaDu`U1sËKb͜wQ[hWz*$3Ov_ 7),=(zIk5$:۸Yz X@KmGG[q1s9='bM2 ?Ujs<2ALB/Ѳ-h,s~of-oN_㹞xGY7EC//~KF^;&v\r)]oӚKRbM z-Mr6.=98YvJ|=3틜1r?h(h&8 v\z(vŽ0y쉌 *gv1T- G&u.7R]#{|Yߟ7Q)a~_0ه*o 9أ(+£J;=F/r؋^$a+7'=׉D;8|({#= MfЗC8=v*)GŚ(E8]I(| a)qΦx1_VxM#3x-%%nL?&U|&/7O RY&VzIH l8AOxw:pNE"<_5h1Eah\mrFCso@ B: mUJO`O@:?"ACv' 'htèC{w?q; Dxv~>uA)YEWuK_NNu:qj3AxSW|7~@{G-)mo]+ he++k>=0M1Q'Y2>M9o! x4b5^<3m?wC$a?A-< R%]8ޝtJ2ZUE>#mCYZ'¨Ś|*/',{)a+,SQ)( \H=~@&_olH!}lb? fbn'mnC]%P/#3-1*bBlt{( 4sop@]WrJTu}~솤0I~YB8pTj[/6aAYF35ytܟPGR;)-Q_6ru]f2/FjB|U*kE^AO]Pǟ٧5{gmٞemC g+żM UgR_C=a6'O" v@pOC<8? FO/zO?-j)SbYL+|E>jJCE/\\Wj F9SU㼴4h34`BUaK%`J=M/m H,|P{TUs[zN_\jFt30}߻cw?x[ = b,| F|hs"P{4E>oIq<`m'%GW@1hI>}v>6&dDtrOyG/Zw_64z)+k=zcZ }+[ B@7:Xu?zJFUygWwށAʽ0j&3hA8-LNw,~{dVdzfsjq#zcNϲ+g޿*/wZ/(5U*B/ ο$U'p?carcݹ~2w .D;ksjT&rǢ$0aui2%-V{_;U{AKJ@o)Vc;, P9i˻Vq@kɃϊSH=FtUaIl R1K| 2~E:maqQCmyvT:P|2y*"Ҭā#pfɜ |:0dS )b1iRU") v?6x5$H~(*niwZWrdاcUvkZ+f2>eZϱ8~77A&Զ4vr~#yGGfEYک|.u10gRs//E/u|ÒD^끴u  Egv0]XutNҐ?X݃t(sTQSJ{kHZTΟG}-Qe V&/oZ͜eLKS\CQlf'䥇CQ}R0n^XZexCUQ0{A l}ߝj棰5%o H Ё_BRX8evI W1 6sZ9c OBIhuyL^PfMy w^>W]f f{rȩQzL\ۋ$*/uݠwt=LY145 D'U1ˬ_n,xa(ԕ/٫urwO}kgW*/>&;owRPkh]hۋ@]HC)tfOBTm{ݿbĎ X="QռsϡSF} FpEٱ#GyBRb@4V6iSǹ[wsrj%4|sOwlʚ}'ѕ8{Cq7;ӕu䙽f#_'nw炵?u4ä́=n2VWl:RRY/XyJjLi2ȋ"p L!&Hjx| 㥞t3Z>FsY܀>OYf] w^Vu9o|fPZi)hMqmNf?U9( %=2 ekPiJX.erbAcڌ?W*\Yw%SS TjC]Y-MJ$uX*5<~ۊym#͸׿K=LaJkkjG|=p7tX i ZV7`i*'D+y~f5|eH$@˾?˪P?TAT:RDf4+~t"?SSU=s>ASuN.s- 8BEgBL.=[g~K3+ ʗ-=~p4uWmø|1N8+jXēAb gqBkrKhE"oOcӱQ?nP5oA+8? jjz S e41&l70JPaw[ӋNކiPQŒ]/J+T49 BA9}+CqK?"sϕ$M2_ŌWؗh| 6 䎚oQ 8#8>܉B0iH#^5L?R>SUmWpa`S^ԌmBz31Vh*e[Y$5"|+wpP;gnmlV|a] QJﻃk3Xa;@ӾClhv ʮС=N/_u3+t d2CaD!ٜZ=p؟{KKIKE\=5 G5о# FbgYn{W|N m߄>DWɜQ}0x}%.L3B5N|6/"Rv9GI7)q󹢷HQჵ!z}+Wڇ;|;r2͜`kivynyq@nl)b<ڳc0&[H+DwM8Z`Bo+洽' ^C5O>/Fp W%R(7!!FF5Nx^mș/_J$!Nj=ˀ[Vr~jAc\SqXPJ MrzW:k9('K"#AI:w6oz[_孝D"qʓV3pnh4ezec1Q)ܸyY1QǙ"YKlՙ{:"AE-ϸ0 qHTſ"lPX=mwʶx?Y&7yŕWj*<I(&D>Kss6ÎpRB\/Sy}F91,*/ª=2IOÑ/[2¿KI[UEΫ<׆_Vasn!@uH`(./!a٨"`* B<<ɟneq2́@51fI-Ǚu#Msfף'>@ZC*- / E 7x!(O*&KkH EBg9q{~8x3*6#tTm7b|}.ɥKx-0EߺרNlӄ"CnҒԨQDM/ㅗ?(eBYƂ2&j_h[U|+®6զs|*{Z,ɶzk Ǫ e%܌XPV,ͥ|4+DCad*g? (L)5J᦯7@Y|+\gbBDN}P+H\\H׭Ǟ <x̊/e+cDf eI艧T>@ xo41!o/Tʕ ;-iG}6/O8ڞ#=9acfZy>Sbk=M{INu<)dz %9 /X^kwE&Y6Ű:RY5(,E:LyGsPɢ=%:E}MgΘ.}nHj- YM;`PI^@]()zhߛ4@{\hϣg祲,O-ީD`$E5 \:*>j)JLS|O@{\ flfIo zpZ6 FHG&{{x9jtX\jЍSk=\>OqRnxM ;:Ϭ&*7j>6ozυhz՚\BheZuiMW +gq}Cڡ@FRo>ەMXYi/#CiY#.9!b-k^CrNyP蚰?ȑ3k[aRă)VTl4>]]>f ^F CzY6IŜ}kV^aPO'$[}5'߆|+/m+<2YT~GGLEz@ lvb> qwf=F|ZJf]w$%=0!3UhmlQ[aX_IiuXAf >/RY-0aCC{K!`|RFQ7JEb>Kn|qt&#rWpۮl{͇uO흀6nA;5 -Yu~G>s/8eg@ljKoW&,iu~OV |gk#^z}bPz̽ɚMOz|P4Sa^ilYE0Q(ú|:`߀B#xvߕ'ͥCŘۼ|!Ԍֺ z9hʴ7`Y۩ԼG P=t9 lZpos_<$[r TRm u*c),eG 0"B!LQ~n0)}==t˝TNվk\(O2iRw,Cy,۵~`MX=8ht,L]̤/ אj` ,$Z*h/,"nt8]Yp>q}ow8˺0;\/gL~qW)=_v^s9zHQ$c:_E0DqRuQX#5,hs{8#P-[(n'M9"THz)1Z-? !\)dw^Lj_6 uy-{Q>w.[W@VHr,3c;#;8Z$Өqt>wP7J\+pok$'^UZԙ~0fSCV?s:#{7%ZGzO 8R tq(_2'bͼ~]I"ȔD$&7Nߣum\%oOv843gvzEjw|Dp09a/%{D0Cs}Xτ{O|+V}XpGh|Y:㶙Ŀzԙq(F{oaj! NpwJƅ̝KIM4Kxި.zÿ;sciJiP;or& (-t+  6JRӂD;ˢ_<멉4e;hTv " M;xqMtކ0_Tfbw0>xHx /VX{Upf[`e،\p {],xD2 +.B};wY Ixߢ¢ 32` ("ri}θKLS”תV֮$ mm:QdLg/|)c>O>@Fv 'lodlIUr@|P9'jD)fFp4 DIm. ]G:)Ѡ,C }*.XnB6hF2Z//hoq:[DT0"V&h1ywq@dϒޮ'oEϟS9H-Lwk&(x2ҔcB1"}r1]$(POMgJ)1'/6FWhIkL?~$J" V@_F1޳K895Wىfм_aQX9|==uk1H"3䡥ʔQOC+/tt;uUԉܢmOV]{h I~:?o+Yu9Az39ҽt ~~¤@-UN8BO)bOexr__` y{0zBMVM3k)u56jS]{`Ӣ߽}[r8]kE=;׬1}Ϫ @D=iLbth0T"ލFS5\/=i`oW;H|IU!69Jt~.>.1x>Ajq>uǎ ` J&N*jI`smn(ڑ{H[+_#k=ۘNfƙ+P~$BVY)8k}~u WUK=Dm+9,/Uėd(=^kQN'+dCgޭzy! B;薈s*_l|m{5aqyj77# >8 :$r{or;M䕓E7Z<Z4=R'"/=r4'- 8\"ފ~5Ҡ,ɽR?нގ  Q]5D"@QdJp}/PT ǭDL(o. M@Zc&#U-kv[ !]rx}y3s̜mpP _Skzd[Y7B:ښ' uQݭPfPYސ]oXΕC6n{bupC k9xk>:3D/#ob Dl3x;;<{)h﩯QPC1<* oDeM`T=~Y(0vu~oZFIc[u/Fh2X'PqpTỜղ0;ߜƋb ;Bv**%*bv*Fy|K5`R:͈|%'T܋ndNUj"^❞#/tmXAt< 2rbDMOX'=Ϥbц/mLj:TǥN}ҷ*O *MRUV\E,& ^(|rXQ핥xzFydLgpxo I" @pM%M}PC$1WSK:|WJ[x֚'>g!y{ާ EF( P9aP ғ^jH$9z^rW9%FBHy gz AëmdcZ ʣ ,TƉ˜ M: ENj||Kwa]Bvt5g9,ѽ Fl9Id `^4~Qێq-Y @6"mg{8FFuβHN?H05hD=FM+ݩGD1iF7U:iҌoyZM𓤼ı'ƙ 푴U ;eFvNT`EJ硅FE9f8@!Z_2:*vвj/"pX)-"5k|aە|gI;5>ΊFT)`2T#k7?v)cJb f@/?V$ex͠:KO'( (hR G3B_ġ^h_%YRiY|n9}@{= !lɳּϐy }tUFB$ y { =3ɶw5P꓍ hd/Fjx b02IVIO{ƒU֍G`۴f(HGQ%{h~Z\r DfǕ׍6wIS (W|D,6ToE`sv@, o\<_7ER7!,Dx0*ከq>Z A@IW*w&oD"_Tvd}|7x*@$3Ӆy$`MJS +zc9Cj yPBnGYVKܽUc-)^=_@uh?C4Ӈ3V8w0HT.DSօ,#b 5Ż]xE`ϊ4ؙ}iż{*-\z=4à6kM'~%jQ$ +NM ND4^)1Q7g_D=oI63܇7__ b;^ےqmBvI깴dj:owfC1.sAIZ=…j̭v]BSy"KЃ`@ `,S!BG{ 0S6|F$ʺYEH53$cud{k`fO%IXH3$oMݣ5DttYO 7v郴|H d X2٦mT{J(hį9*/zըTPia:fJ+>yhP3)LF/B2GX nJ HB!;gUtQj.U5GCWN<7{/q{s#"L}n65PyP v[)4{&{C_)>V9%~+%~{75=(T \ᐅqLPS[5`aR7ʲ7pbM05 ЇWLnog; ]sVz5Jp> 7vڒ+"xRQ{A0Xkzr}zvug+$hŬGRkg|.o""trkTȟU=.yǴ'#]~(kA[kU\OWWϤ+LAUioI (Z <x`#ӒxCGee-3B9=jz/ FdH"W^ttV4ohsdK!4 oj(Ծ)iVx|'Ạ@B"\BÞnB>nN@L Q+"!Ec`i4AP\K |^Df[Ʒ˅䡆`0{\-YUU?<[e*!j [.K(=NX"b+dW h; aaY+=Gnzj_D/HV5: L_tM˷,p>^]b:r$)-ljAKx@s3oڔ;3IqbΓʯGp+CYQ\ +5éy P'7A6m_4u \LzmWR7 H` e2!WemGCZ3ޯV' 1 TxQ\A$9О'_]{}R dZ~Pܿ!ĤCZ ,RA&3~hjQ $r &7`0"]?PHLΟ2mr޿A6h5=QbI2k[a "g$>SKIӝPb{8: й(Y ٓ'tnl6CC?p*~?s ?ub\~h`)l|Q{=~HfkؽIg{|+ !nцR{b Ŭ7M=ՒwC&}FE=lKȲ{ Ml'7ܢ_Ķ D<I :\۬xai\d%.-U !;;v'e* ӫĮ%>zj/ b7 CQ@px8砦~.@&r&&w,19L[\P`'L?~qy4xS/jR;Y]غj49F6]L|^Φ00RJXP/X2i KSAjm۫uerc_92 ]HW2{o@1IMD3]J* 6qEBgn{_ݘ~Ѝ.Z0a>cdY-e椗\:t<ԡ"V& =b!Zjrn<'$"$Vȯ < ?CK*HڤiCC{2żQC7* U p}q̞|#)I°WiqOn{,9]{W)[]E,LHB%\ɢ,@=دH;Ov֦I7$c n wrPLRbxŧ $@p*JZ'tH# OE|MA pI^!C r?ʈ YҸpD,+P GeSqT=mm( ?f1T{T`ize<\54(EjK<3!y2؟|F0ҳժ0Hgɻz]KOzUu7t h+N ",ہIciǸj~F͚~XdRIAnIy'ňc&5'!{v㫎P!4(b z>+紖bb]{%W|y}Pb7*fkX;@ǣrl6eyp]RE&Pn) SfNNcqiE7v?dgtoANӕbNOTfW]EdJ}.YO8"-AY1*~&=QeETKerNjYt5m(̟t;1Zɠ+o`wl9[fC lmīro!'u_z'#ْYnv t v P:@iO% ʰiSBdƭXȭW| >E%D ^rLUݥDDlc? eI h2FSNTÛҿm=4FqUckq`]uxJ#=ԛ?0])Eqsv%v;-0BŌex}?ܮQPU,&{׶=?ygPa ЊwǢ$Eu^ OCUTźX^hnP0UL&KdFhrVǁmlF*ꅝ?j=hD0Ն| U@>Z&/ {0o_@?}Cs>- XmY?a.θ+ϼmc䊿-kt(]C08۽t6b!mI]+O:"N}! Xl2X D?Pͫdѿh1XSݳ8K*je Dċ#mMiTȰk>fE# *mã)snnc7D7xW*KD a}Pb<(^w  %yA8ψbV6RyJw4RuQn8}ۭ,@<%Ϊo i  `0p8 @GSg.|j|.+}n2X,T^ h߅:LϣJOkܮ|*рz9̚0T ٥TR K{Ɵkވ\XsXPDEiW |4, ﱽ+OSuh$АZsbthGӻ_VB0Ї-rۖ RKhɟe~OyW h\ϕf JHHw蕠#WRJ/ 3J|}{}3 Qq @mr,tTǛQ*aR>cwJ0NzG)[d=VzϬX]& U끞clH1(3mlW/a,zk#eXW{.y[O %&/ `24=THT ĺJnO\pDx!(ՁGtfOԽJ EPSZ`.W E]ȑ͞ĭ< WPc>'w,x+vXa(~xbT{ܭ!`(JrV5Z #fĞ(nԠ'M[b!@8:{J|WTQ e#[Dylb WȣrOaAGn&*Dc~#^Vb4f-@_iVk(PՅxޣ Q1Rbg{ z*>✪~6^D,UQoUUjV@PC0tu2)C,TqA1zD=._ 7zӸvb:;h6*(޾zm)W6)'=N{rK> TQRtD!!x2rd+9_'Yց)Za-sƩyBS|bEwcnn>-4 V >=/F:y;f5c:F:l=RE `e=KʒCӷOA f7B'^&JH1#h1XRW)TqˣBQ{-#_qc#!T zƔEjȵkgcT:P.T_ (!$l #7 ?qw̤6P(}GS6A.}2)Xgv t3^i'2~mk#+R˴̅ 2l5e~|NO P!4"RwAFF n=&H!ymt|ʧiC5Xiy)>:5}%0^:A=h*֞?e,*>SO, g:}Д$k"$AFaqO5ea8n( (k5`F0-58\%@O~ca\!S5^"E2Y3.زkqn(_PB2Q₨!ʱg/(^anAH*E&^O{\|N݈10$G=`L%>~uoZfI4k\vvD} 2Hlj nD﷾k}5@4Hr,rqHBqP!(\zz7K0k@×'p a,X~{e~%14+JgġpEɅޓۧR{DWCU=ggZC6ִuF(k5 yd 1Ai>(f H̐?hL)n8+;0{@dGlZ1} R^+Uۓ'h`uT0ab|Ƈ|X

j?jOCBJJVbk]&1A)|v[+5b>դhJĞ[7*v 7՗YΙ!M|i|PAS.42){烐A%e%QYL^YdVϡopC1(Jn=ܴ҅{3+ݚ4XL8Tg|P/{lÛ,pR\eBWM yb/ E<[B˽(R4z@Ǟ[=G5ܳ6ÉYLa7+,ON{~XNE/.qT6{n;^a ب]>oc(-: Z4ŸiX 77I(k`K(B`:c:}jWJu(*^ fK0*i{ب|yzEb#f,@5 ZzD }@32SV%q^\u@*3 ¯ws5 (!e}( ⬗m Иxomz]K8VpxUy(fgna%{ݗ ˤ:>KzAi4W d`APLou)Q ХV%`|?PYRͨ @{e%ؖcv c?&bZHJdOBV{Z>V5Mb< W~/ywbޗa B?Rz7b# 5DZXm7Is?,X NJ:iOMkt2vf%}j BҧZ֫V5,u> ]jN[/qKRf>?AU<|T֒_4{ΡY[;A!/;mt~^AJq@_T@q?8`ހ6]UV鑼 _`/'voF1jdyfoI`;Ny4\앗Jpu{Ĉe;=No5.72t@š5'0.DN"Rؖ#x-WZ_xe ;ֱ =| k ޷{їw@I,I;4_ ׳{lC `ݻe/d]XWݜfBxo!kũ?c7G\I*_?xpN iʮC:;0("Q}=v|{f5HoFs@20b?!n]uЈQ1/bg~Msqv-^":X ŠSzh-oVgflWV{'tNc{!\UVA}o7 LV{GYY-@T W*}-ߢ[gԿpCJ+x:i,$K< ܫu bչ'0 {A7UJrHާdv_p]A q i=²ΌJeVaU--4c<6O~^`@["]f|q]wܜ;5EG''ٜLBl54ئe/A\`fsovb:28nKmn-4ߋ(j]6]60NSލFhbtƸjm3N[|6_ >qۈq0b%Ut۫9,[3~r]_AuNڶJ9~tg(eJF1EB0aR'us> 5HFK+ݳ7Fƽ[5H6Y=Zd?A2%]ZqV框`@ߨ^~`؋f2Ha/j6āJ/ZTiEcL٫H=T=aQxT{0hüUd23#iY["I4用װM#@'{}*=Ѡ⡋crYLm9I=$1 01e+Zw%jCC˒GzUC*}?nX1CHok_j=BVA7pp\s=@o ]ur'@Kqt{,;b%+5 u䤬4$ ]yP)Rz{rs%.Ѷu3B/ H]HfDyߗw-F>Im[n Jf{-}:r%j[* ߆0U뗏H}@OLJ/K2ȯ4y\GSn6@̸bwABsZOcYݍ3M=ɌjWJ'Oh5;Eup7xAАJwES@ڻ2J dՠIh8R"#ƾYO6?PC0hKKFX'Qp?*ۃ~Lg\c-/:?XExFV 㽵bW s;:R 4;iIa*5;Ґ\I[ٛcDi|AǟQs {r_v]$5Nkt1Z ߩ4ӾXA~`xM$g Z F"yyXcБ0Q*n3v+v^O̷< yZ-}I]5@͇XfקeQ=i'lw7>hV?S%ZQ,tJ${^~3:.d*uKo}̶9dRsb ֐kWZJr 'R!oNsJixC"{0c|j5{>v; liucUZWWSj~5\3ov6Sn T0Â&ޖup 1z8ъI5 K6$ I!kѤZRb6~ JS.`%*k=H(BmbC3 2Z{%=\GԬ>eAV4>#'>LT}'>E0~m^ܣ(։9Ɣ ?n?Xb~7iiZޑ>/džmb?)D 2mxt{C )xSLfeO}M4a/G'a /a%/m=P+NѻyR9ޯ݇x}~^ik^flpcǣ;i[|LA̤FSblF+~& jU[6G+,mݠ.{@ʡz"سP'mIû@_ۇy3;'s0J{܏i#\ߜ@Hno/#!kW.񾨮Ñ ~'8Mpx[(}MN F .ҠJח23} ^"#͌Z3eI峓43)8!LQ*Z2|nxt-_܍ >\8( s7XD1ęT(;_T}vzBd&}TD3}=5nm'dZ6oB֔pjm+eIvy Tن`QAv㙾 vN" G`K %^#1eM m cW>Id.ZSpؓ vg^2.iDqi1=(Q]{m}M֚ ?RCP}b#AG3}pk>1nzzwk8Ym&e!2涗oH<k Og- -!PjV[@~+2ι{lP)'yh%H}lgZx.?H^zw!WbP3ӱ]A9(M\clD{;ߢ V-TK.u5UTdB6ۊhh}p_)aI3cb)B줷Rp7r!P? t{ 9)a`+߼.kYo{֕2@pd;BQ>. \mX? nfdӻ`&b>_nD ?:U}V'.ڬNd'`CE1գqJòs[^ESiz.erZli`or}y`.q`DF}1/E߿$robT8k}jyb+iM 1j5 ^SQpCA#-8􇮿Nev/c׳xGFLJ#킨R{hV TP r}j*heh %rUe c(T֥ 'auvA0S*QOk 4|93)DsJfKƹRWAP+[ũE HG3&PJ?똶:1 ]z\dJ}*9pAN~/b9Lg "TEVw=[?<̽ԫ/F4hŶ_ۼwKB A~]KMgÜY_At),_ͼqBų4m$My@ QЍE <%"Xj 0bll⛰=yz9,框(&F<$'ʷڟK>:]ZR`ViF}LϣUCiy>0TRq)~VDZ \Z1W:!MMg\&4;MO݈WQtpJyBvH/aj!;gl( #'_c5H/̒ML[q i sbgJVIf:lac0eH*`O\&7JaB9 {"*kP"A^^iOzO d_>O {NKԔDB6Q ky>Lqkq: ]sVfEE*t|~y}nt(<|z>BsFP@T_,R->'7]Q +B%%}d֒IeW *b_dRp~/@Vx_qUD,{a[˞ߞ?P0@W\|zGUJ,,`2Q?Ɓ0^'X#P8| uE{F=_솰BABq:@~DXcH<5a[&}@x:c U%=2\o~cUQ(ܘ:>JE 5~l{{26_ ^vV@?l.1h]@]$c㦘`(넄2X| 83k~Ptw*H':ӟ~$߻vJeGf|2e͖̒mqX> a7S6ull".bO0?xb߮p`TxOq\)j2k{˚,$+m=g=?(j'a织 ܊KrrC7j6 '[Z}W|RHЪ rfIj_ZQq{_(I}\xqr7= BH:|X!a]^tO,+0jՀ/gH* Y|pX5kGGd 5~T3~U .oR3ryUUxA |izS:0u<1ǜ/N;kMΏ&=Vb< yS^+8(|/^SCGz)i9^a no9X,K՚?( W|Z_6* D}bХ<`7>q<Ӭ 3XP;hv}A)<(yr[ĹPqRjuR 챜d_ {Ч!A]L_5Y3Z2h70♛3uL"0է lô uh+a yT4O_؋v݃~^k=V*" ~^kz67'AQ#{k#D;'`0Cl#zCVCBu'2{k>-)b6*v$Vdy~2Ki$k I{ D:Y nAtz\&E!HӋ5ȶ6ъyO~O]hyPnSԾ%<(V 8uxlHpzsjɤ]i}8X #r͈=b\ʟ$wt E8n࿯b<9^6*gʦIxowNkꪔT'}{c϶WX0zS<%utz7cb҈qcԍ41#5T2݈aגOe=fa"tQBFLt7d9 CNUqoDcБL9^}.Y È/1@B^Ϻ׸LVY(NWiϒX*ȩ|.iݐm @*&ZcWûXGب< MRJœ VnZmFT:G ~Z}E|BMm*e=TC͓`è]K}̼wg[{r=1] Gm~@YΤ^WuDE _($uX%9m|^jtzޡOg,~䯷+FP^@>4;k:Wr=|Թ?"""֭njיd=` 4-M_<8Fru~* eoM;\g ['G{*Hbjq#o'_ }"M鏩T+~j]lz9z*t#U?ekmƖ=>t"@GHȅ?GvQ>/hg2Ƃ8f8˵~6:1<> `ʓ]}6m\="=o~fqggϼg?X˚< N 4s=[t› $c/?y!/YbuE.p~Rzf2a-p񭨘^={l*Y~* qEBYN$'BN P!  &B3 wdB<ƿ0G|Mu+:Sj@W5Si@;oܨUd7 S_{N3ziyA,{3b/OԱ@`U4W[7mQ\5DKi=-X[ؾ+T|y\0~S[w]~pCH\ޣnSE7@uOZ ΃E 6ު}| ܝnLjԴxFMY?w Psx̤=|H ] L>̰u'Ww_0 gH2.ģ#J_UkgЎ[~ zT,y#$#0~CvSQ W?qv|sq`O po)\]ZezAݜrlruUΞ( +S뱰1/Fss<߽ȅ@'?EZ`7tP&ܱH+ 7͟dj%~pp4bXNф է0ed80 a?%Nh2O-+bR}:fڹȱ^4߹;21쌏k0ڹ>J*pCF g>栆drqNw !+ힰ_ ~@K&4\Y/ɴdzOz[=Q#1;~1xO ιr Yapr#\B5cHmj.Vv=YgRi٧]S+~UPS=E){ya aa=5JQ ?BEq_!h*BǶ+CL^I a.8"۸R@(pHh,{ tͯ(2`*7T'ڿXHk&k6MiT"Cns{Qiӟi rТӞ?nP' Qw )|= ܝZ]Y=YdSL*aYB:d'QȪ<CMB8i^d`zxI/oR7-G Rd$i4_g3y@bOrcѝ^a j&s1)S Aߩ,[ugi ϣǹ/r5c -10nQlVSaei> X~dW%92֕`Ή BrR`W/~إМ18;@: [:kkj=ܿ D&g yE eV{n[2 Tp]K#L{gi_y~^ X<vCe}"B/"ХI ުjF\?l[DP=v(UKʿ@LFŌ @MQDJ ?RTsSJ$x/h>6Cj_!9 Q 6LA.yD:t {dsnT=9mq[ѭ*c׾㡁xs {y_-^# y@P*=lSjsU}QPwF!m'ޭ&A uv- =.gx+k:7v<V_O\-k4߿} _p* }|E {[}-9 e_b^ftsDS.e0/o8mѪW>] ?s QoxW7ZknݘB݆{`K咍}Šʒ(>>ueb'^ren`:dW9Ϛ@^\g|luxk4_y\amn@sC ~5xѨ3 CNsWNjwTHX!A@ve| j`{9 K=/y5LV*顆$LȀ㬷`YQM'GY|$?E{~<h'}\ڡear!o >C0=*3>ݏ*YX"Υ89QT!K/_)=\V҅KpŹ L#~ŤTuͽߐd#X#AS[F{1Os2*;V tC?P.Q|=4o7W fi#.U>\Ƿsoo[2+5%#GXd:*֓noD*)2]\i0&NZ]m_y+p,[P{^{}ҋBaZ|ԕx{R*>S "iTƯ,,3 qV|-sL`iB F٠rn8:Ɲ?<^7~Nj;^EH$]|EzT1kZ:bPUWV3 n-K)ˏbsߙ  ޓ^ nɵ\A@<֗x,q[եqc5 Du5vjsRe\2O|$=)#ntX|h[n=4>jJzPw٧Y/Q,o|sO˅7"?Lϔw- BF4>!#^>ۃ>vXiV0k SZfӍ>Lî81kT+)) '^)o=r{VK]|@ ze+bIʾ?m=hCL5$_ a7j=WVgVy7xUZ %@Rd2޳L=zݣ: ,1'ޫ=B xƺcomIrZpCs/L}T.{dI-|\?4V* Hj.YyrU~9n(Pq+^aeؽOe,ky?M9jEl0b,V *Ժ5dZm g󾇬B'/ <kbRsp6Rs Vh9)NVB?h.1 O]_argV ك9T_=uRS=Pڃժ ޝ=,eݘ=\wF^8)2ajsX8Iftjy%"@X?6/U ˇZgQ!vB?)/dcҝTg hBDS^Ua-"T{AqU9~PSCP}>\Ru P* %?iX詫$CEMH՗?H2U>/:WW3rd/pV?0U^$XOp=?0}mFqI}~jPm $U -B%W5IW/ʗ]7K-`7dڠ``GKYuǭ *.:G/3!ԥTH*WB3EPA4-d-[x;Ȼ#0A)]e3VjUp?+ub-e"֡=mkޖlt(66h٤տl=wܼiwI5H)qI"Pe`[+,5OD׸#~@{q$sSM~p7~};mppC1siA:Mb"_Z!%m R߬Y-}F,5uc[Ğ/"aWhꁞi `I/>('?n]$?;J8ljy+141kb^X͒~˥^_(rS@[/>@Q>Đ./+w&&;4]{7_-Ԡ as'ڨҥi޼KiF$.ܛwsi|.ζ`,.GLf-!wR|ʴ8w~]45"{Bۢ_ey4=c|9J)OjeC \\, BZIO~=CŜ፸Vn-KGh|<ܣ/{ʟKnitDXD>cѩ?Gen=7s~|j0j[`BWUTNG} Fwk<('A1{9g|3B Y+b潷[j5: jo )89JCH_4wnh:@V9@LunN--;EE{̡}SPI.ڴ(`o}O ك̧87Nh#VhIc= H˴R2` B`cROC:1g_Š!y1.@{M߷{')PH[:{[)ze5aF<[LU;WshU<5oÿ4(ͨ޸aYܽg;:Vjvnd]d-Z[Ս%Ь>L{ʹ7B몯v9 "^vxz4ݦ5h VJplg=.@OP%4j 9Rp<s# q c9,2EU| ѯms|^u&C&ٚ>ݶpw\AWRfj+B0LjʨD=^3<׊@c9E4v^xN_yUyc߶b_vvk L{Ӗ XyTNRЃkYZ{ɫ}^[[-=?F xH3s:*b(vǯ= -BY".an ,WPJCB>4ƣwdňoyZ(1g0# T| (edW S-|N&m]mjB>v_*n(NÄQJg~4J\8xI!&o$p+;g#A9Cuj=4#G4])i ¦'#j[m, @mûLk ¶ 2u^TͥER56pGqֳm4BOE#vޥnVr#Sq_ڃ'v(GtjdְWژ(]!~PpHS5|1W}LuӻK^R#ҍ.'A^>؅Ue6{=uvNc@<K~Pu7dBhwqֻ}`)26EPo6Fvك.b'`PC$ ޤqW`*fӾ X*D,Ѵ4s̴gǬK~ rI!@ QIjՋ٤^GbO kW&3qC:ۇ]97ٍ-ف dDĎZYz_H86vye g}>O^Ci:֫(vWZ޻N d߼R%P%(Sf-QzE_@)> {"UrHG񾭘z >S2HC` RI/>udA{!טnipgJ!{Q jN=>㼶iw*tl;/#S&H{ mbk QϷse,NaY%}bc籔N )xEF{I9cJ1rH˜<t? vCz$ & @Ř)BMaMfE*fہH[-vZiĔA몁^{h3=gn˺c#tu %_襈~YG>^ec78ve>tGBKܣY&(bmr![jPMXqTKT3MRP}y?X~y9R/sZ>x큪Q7TzAq{KЋUx{34|ΧF%>/%u4o;ʉgD$J8ܒH xumf5;ŗd6x4\4'>O<`,1|O|r{),{*S3ȅم9ᮤ\F=ޅ 5^y Qe_8ȷÖi0/R9MT当yϧ}0],=;f*7dhyfHZq֊S=_]5bc!i=oj7κVsՈ:ߗƀL{ λfVER>+-K'DJ~عt.>)39}M6c6 E1rlY6/v7KP[NIkj~/ I e2xv%of`gĞ$n2ހ5HOQ%XM&Kz{ aAlϫtyƺ6<ZD]XqRǞ BBeR,َS'}jۦOr#W>dZbP[%|eXI絬c XyAػUKAj،s["&x ^HA\ƅ{I#ꀽ eyybe8iFF1.#}-KrāmqƽK{ ҞEa;O?(ͥ/b &gfTdW@?|AmT0Y#9"~ׁA]z%gZQ.@{~۱7|Q5V.T{'Xa €b?mz7*fSbtENWWEmgb=BϲHB j Oo X}=5q^iE'7 Dlz땖avulI/qy,AMT@iwN⠢eJ̼]5ܧ ݻӧ7r$+B PJc5&lA{|j2 1'JZS&j4zOcE6  ?vKgV  R@?4/ϽG9O+ l?eV^@9V MͭWTGr)mbʙ P!`p@Gԫb B#ŗfV;>h?Gm  p$,ձ0TJ4O+z?fp(F6 +J"XNRnao|oL^.V{,kHV}bO4,_>]|#?(ӪU{"uoȒ 2)R4gY+YfeIF^T[gaM^1.LwvPyeo H<ף>Ķ) -./<ʬ(*TW cϘV]D .OꉓT"_GUȥd$$f)wiy4{}΍ Q{,x 7"|~Q4v Q!㇧=i_]/?[ej5Ou/όS5֢E&6 |zfAӈ4j|=>s$g#~ޣþɲ"JgB4?ķdM@] c<;BbY!?S3oo=&%W8)zq8Ergd/f/~$O._r/|x|zE *oּ{6 %m{ gzGQYym:3%򵴎M:gILBHfX>p.|P q^=~UW0Br2s'{E@?M6ƶ6{I1< <`6M@y#\e{3>F%MdYV :4(1L-ghL*GY>ߢoy~Tx4EȺlt$f\i U%ڃY +Q-6`4|_iMX{ ;" bmV]B,o뾗Tq *zcPq2b$zSYh'A0.QIY)qD"L#Hp m\gƜbPaF6YģB~BA O| hB$tWdq/r#+L}_YFeyKpun *a0%(8#tQFGuK@#n<{ Bzʓi!?[$PpVpa+ח eUb XF,줽4E%&\N]˶ 8jmV[jĪ8{4u_(Yn)s= t`mziIY(ēJyԏLE[x¥3铈oJkPW4_"n{i^=>Xd?} ؛wT]%{OF1_|ȿ(iw RTg Qʓ@ Ȯi={ m5U9" t+,9Vo<=tɭ$FI9oxZYCIOUNh >djtن.Ezd 9Kvޏ֩WR 9!y k%ucЎfrS}AG7Cs.{un G wm:']zEhx%X_C)QhlAkh' #=M G]+5)N{*L @weVd%B#JְK[d슧6"MPrsv()'kx :%剒 VR,]8\]!MAiZFE5uU}0--;JaY@ʒyW-0sk1l+Y,0Bn %_iV&eufƯA41a^yHZcR`*l\36u>(7t5엔k|WH,` [o5ڂB 5fPCӿ^B˗sݡ: ' @LYqnLmVKy9QoY娧^w@J#v^<ڕ؎UakS"΂G/XâT R2}Ô&Arn%?!8dH~a51HŹ2eY^u+BOXi/7)i8Kw1f\4UliK=P,xA,q ^C|6gI> p K<μPOҧ\ﳇuKhWE@%@ogu{٩3ƘiKDY>A!lB/zY/!X{!{w}ग़nj(.9|n(H]"_d~/>N}ͺXv9@ ۗ{t4='so5H77_ mcMŻevRjIhWY 4-#׬|sہ5B(^]^ʩx^zzl xH#%)0!S1q/mxQ2꘦%5|,j(.6yj+)y^Ne`Wݱ&? F"#`ȉQO)$I9j^/25ۈ4U`V94T?Fi,w jm z+E`ѬlWMy~/􈺱5sHE /lwyqB;_lOlzb: A&ЙC { dNm/8Q'^龒 @B%u2$(,$_gn³ƺ~>ؙlJDD)oX 0Ȍ%gd.Z".Zωsu&GNCy|(@[ك}E!$eıyx}_ǭ!V 3鄪;G$=o0jkFC{cԦZZ#W2 *9.vȦ0X܆jg&ܲ5Ԁ7L\|aPo eP^ʷF ^V/p2=A2@]AOzY}XE<L2z!cl!_~/a@J #{ r_ ]G f!7Tu5 ro\vz@׽_:ޏ'՟d|)O?=B1Joyݒ ϫ% Q36Ms9Lh/\(\X.QѱmYoq#+f<4{v˧yNG.|=ow/@4Td-;~r} v7BijAg{_%FS{ofgnA, e1SWM)ڧY6P{[R±S'xԄ"xU}>E<(awI"PѯgK|!YR[>֥&lENajose]w =/֞iBȮ `@wTϱcĒ g sw–;1Xʓ1 ?v*ү?i'1c֩#*>J̅9 Z߇R|Ʃ$Fp 6/HmnNi(?_SMsz8lwxen:H퉯fߙh7 EٿK| b*ųq7\GP!#i,w?u σ2GZBd Ĝҗ>6k9a-IH(u_IƄуG<^A k .WUy5Y)Khl_'ǀ5'v)jZ ,zykݞXvm%;aw>d_)na(V w)- My`&,%y|I޽ dDA[./lW;IX %ԭo il -vk +%.1?Z=Eʒ"(~V5CA Od^;H}:?ڛ!1exTm_+s~R'E#{@嶰>NuٛLʿ$@0>Qpk(6 y>FY]=acE69g|҆kpOK7b%_Ws7b+veGg~\ta 2m{`:AjHd?v]{ ,<3X3źKZ؃٩koJ:~ֿXA`e%O8?Z0I.3U~CI+b/3λzCEc.,Q;Tء'_+:?)&ƅ֡u)1lP1ظzA  #p_Ɋ4}0{@=^oj6 *!DTIUSt7 +x}Wwbo/z߾`dcbn(Qߏ9N aj \'CE3cӥ;ϫPglY(-6xEL(D(P꽰A >y hnc\`i&o\5 NF݂04{e7J#OP:9hPEcNin5&?P#Ԓ"1՘ۘUѸo3w§XoirvvM-b f3@z V N_7vř=)嬨v)JZ8W0%t5( Y.{J3JrS>^ r8Pb|<` R54[\*0*tQ %JtKܬ̫)Y[}?/m XMZ1)]}V=Q5g й=^ Wڇi}fG~PFХ{{<W9M}lה˦]U6L۫"`O+_f8sEr5͝W4mږbm-o5PY~@8j,zj=jM\ʆ$%7#{u^ M&;W(`}xp cKTQH!{|X \TkF:e k#{_>σh0bҁYjN&KX NjvWM88h! tliYFC7mvOƲ\JW4mu,jb27d B E:lŀ|25e?zؐ/]0h6'sKvU\h«E2[#2&`5UQ˟:q^DGt+qL7! T$g0Ȳq=jTH){ϷE3(0% e_Ӣ/{+4^G87x^Yv a냼 eςJ(źN۾aVP!6U#/}e ?Hv]8cNՓ34D[fV]]``ء'Bs'8Ϲ=~A|uy/T9k8l&bLU-Ze7M}]I|9ƿw :\xi-PӴKȵ2 >HmmbT|{Wݺ4v˴҂r^?[abPԵ~,.*} +;xƛ''hhq^oX=Kj"`xdD5 UrI)f>"Kݜ% hJ||6&I񥆫b'Tk7q v0w׫W0{Kf޴s'`Z^9mxzWcS"*Bn BvvK% j:0q:1J$#8xkIP)Z|R̙-?te/Sh[vX+*6|>g=eMZ'M0Rt?UF̓yY@+<T0pz"dm1x!d:'R7lY'pǷZP|0vzɤUWnbK?sc<̶>k}^֟7D]Riެ a^(f!W_.@<{Q8;a7XQ#8ԚU;0 vt|ֻտ3o P4ئ [EDA復IÃs_r̗)F€]%ux:=}F/Et#>I@mgvC > *mnOZS* 0S䤧@%s#sv OWvɍ3eW}!m5tz3Y?!Wd>y7SUwH':량 `u(ݻ\Z:d34ɠ(%Cť8AR_?/4牣?xZ]mh#@ۃ*EҳȈP}OOJ\(p{p''Ͷ@N]ѥCSlw~C1Jtޢ~(+w'yfm7RGw^*RT<$ ^|<ӕOpҁG2 Y/SQ {ڃ%Aһ[U{q JMϿ2}?@{ML:]REuEmGR8+;8]dh}ȧ4E*{u XtGK(IBIg7|hݕ_X>$wx29gu_8RYY-bR  P 4 .cJ%ElP(wx2cvz^ðB5w88C 3IS2Q%d?W`{M!=E9iWE2d{ e(Ayd4 T Ѧ+o|碫' Kç^)nj¼P`o>vT{0Yܥn1 _l H9N|ձN<&`!OJ%ؐKs:mIdk*z*. JǮ?'at ÇUc `/&^qbJϊD։)'*#'N YKvP8ʃO,*%y^Qatҥ%ͨ" 5+cVAàcK ~A}&0X=gAoLNhcoP&.ʜR֕Ese& T4u ߇UAqܲ,(Pm?p'/3pp^qwӯL~.܎|6̾D ^h::eMB: Wjt- ,Q8!cd# g: jůS{{ۃ_ԧ@L|ݐa:Q?}Q BQ%5:ؓT7# hh>4Ҡ3 5f$reN\zUyF : jN̛=.D:t' S{e39ؒn.yboֹynKi$0|,/ ms݆g޶0FP-/3~*6w7ã?b&H;AQ#8K{?`jʄ275sJҸ债ݠ.6H(kY%Nս}ӶaA[ЮJ[LmHrM/$$13|TC `tNodS/vTS0qګ%b ҡT.{ $m6Lo@V+q^5v``Mk,_I M\^8Pt}cy_el+c}Н9VzͩmM И%b/-8|0yvaDFNe; k /|,= ۊ߄ )Pxx(+nO,I MQ# L}df{h9f  fBhF\Z 9"I7X+aT}|Nǫ6$X%+ExzIXܥ P0g|r-W ) H'Uޓ箯p{˟~#6i[1^_b]JJ' JsOa4yl`ApPC< Cp]vt6erk:l I QuG7mB`}lעutd,v&A#v̩׳NI('pί9Ǭp؃p:\}еVZHzt> (L`VN- Jez' \9 ] 4/+Bq-fhT-@MLLaWr O*8‰8,hjE"?sM^9嚅^0 _]ϋ*Y  z 6hx3s?`=s#^fi9R,5?> Ncv`DƚNy+/bz+Zޓ :5T=Bax \~SLn R:c>b%܃=&ǁKshaJa=Ex3N xY[\(A53 oY>%6O|dvGmǯH ۃ}fZBUX t>fB@ 3Q.ȫ @vSA_!2 6;-o2B XU@Z@B hsTG [wFC M [,`[R͠ lٮŶeXB']$@ {,հ4dP| V&xT |QZia؄uwJ?O*M04j“+Ȓg+ygfy1AJU>|q`;J&Hspzi̊鰮]oy4F@Xn ;I~'2Dwlp'\bP mvFfc٨93~".2C1Vm?F!3xDY ;H$'khmaGs2G'=k{*n#&hIC|E7;|  Rh` 6rڹLlnv ڿ\x[DKM:Esa>~ruGSwm9MS~`g݀[cW4䱓bc0U6-5ZO m3/O؉iCA؝;D9vf &CH }L57Q0TP͆kTGFFMy,;#OS"Gu.Bo\q>j\iقqu~ EM6n8(.50_kat8a.3^6pjӆJ]x^;@3"5 kuQ՗5_t J2ڥhu.vM;OcHEÀU=@Kt֠z0U/0k2{oEϥwRa2fDwdaaI uǣ0/ VkqD{rΞ?/}clL/&/c=Bۗճ y`gf ~Yom};gΧ^eV,$7 #2Zm87ւ;\+!1T {<_Է{3yigM0SDxG`ǻff ^<4PKI<._wFB& Ө7e%,Tdo9E/^4 [u@ᨇ{f__?4V;ٸH6͢,ܼ̌BHC:5*8( 30GɖOcS'ϏA2-PgRaGݮ(jE{qs9PTĿwrNrg\ a|s'yد]'; u2+9ew?1rxg`<&|2 dB"+cؖ3];vf|ٮvFKЎ'1)hϓU~w;ШuCJO ׺2Бϱ'ܴR~vd]/|5}w-׃x r5p[B +C7r1X twBH& Cp|7Q< W~ Vàhڸa$sוI-U~KOOmXTyu"aSj֐vwtv9PD|}:7 #NՔHS# 3AjX .Cӂc-WMF&g<,˅eSZ8\PsE3q<,_Yʽ,.(tԨx |][3/;pW),mI@a҇w7Ę~8bAɢb._r^5t(z{/6:kX?1OXV~%1v͐y\Y`cmB'xä!:YE[Q sIy >P:/c I}ɑ)Ĕy& Gs乀HZa7FiphN\+ ؘu DҳoG=2- mt[ٸCsFf]N-!MDX4\$>? Dl"4tRz=4H*,F,=ղ?7uaר =v^ c5[JfӃ/-wR7|S\sƭT)^1f"?"齃 P]UC_jY jw<ma᪇V_!S0';OaO:>W]^XɷX%G;O1 3_V6x4f"ϷiQ+7bf"qhl=]lxɬ%O| { e%BLh[Y[j:S J]#07q㤱TN1O]>/˙I\c)?m{=ȡ7ZW'ߤsr#ݧPA"?0z6(ubBO;XNN<7B↻Oa}`czNV+ìw+qWyb=u{x\xS 7E0%5U\-Hcu=Vb辽 ݰImy>o$֞S(ƅoe7xdU\__yޘ2JvE<]S{t~0* ?vn44pH34a A' e ؚ;YYLYcrwt7Dċ7&'+jjzu(ĉq)I >R>+s<,n&SfvkwC|:FNv܁O`9'iLM8w^k=gGac&9u<P?L|b2^ vtJ1vWulP*CפS9oFs܏YCfѓF̟Wy_ab&ŵ;eSTW wdgZo`IkFIʫ-T=gQԔee)*2bYEhl\T M]!Ur~YEfjm^tf&+5ێ"nVV, zG] !Z5 -{Y:axQ˯h$J[Xg ߾ZNs8{jCsLS`4F_z^8L<_Cc4=Y~äf3KX 챵1Tzj? r$4{~ugD) _0N`B2>ɒkxhk~*Xe/jjcWНf-D{kǤtƞ/FrCd a1{Yz4vP"0KCK{=M2L׎ ؆& F׼V-E'|ᾩ+ 96: ,KĖ$\ w8ĤD;ZiI8LϪL~NO;{_}1p Mg5`OZ+-KD2U};u( | pM"* G(Վ^Rqm%w0wT1|0 TGӡNI=wF d թt xF6)j!玹i 4,x]<񞢦nqAp<5G&qMh}sM_ށIU&}+.O1ҐN;h ٳpuAʈ^9zx1SV!s~(JҾTT?3_miPDT2$ Tw|Ǻ֖// 3T)Q%Ff*o?CHaA"{;N dj?cK\&M9hLŻVYl6=)q4fUIm65Vʌр!s!X1~^g#C3^6SDh>>ku {玏'Zt"u*_M8NzJE>$2hEoayfhqQ!7B2.sk!!U~92 {&nlXna*d&P5$ܑU1eua ;+14mW1NqUCJgz) Ss&'PO&S)?0P/ _#X$I} {tF_~DKl>cvZ:<'Sz A@4pJ+:3z ]Yo}Il2[h>HScn_Lqh5+ ,Szyŵ3DvKXSʁ#2}`g4-a3q0UF0UzI,$˨?oL^R?C[B"V?jB`P/40yS~{قn^ѡ9,[+7S nigvkmoPɍV L/Qޗو+% 9]DP'?9SD33DT iFݪخĮ6Flɯ>a}챭@6SMvCR՜$t.ʻM?40}eZl6&O@1`sh?M3xCA쌓Lj,g'{KڼVB:ܣAgF;nc `uGLO}?`l?l5E(j˝ IB>Wf5D]тΟW-D[zPg #͸l2jƿЫGFSzI6<]Z!S3ԔF= (Þ*/8wd`0@ کh c[]x`Q &xeF8G:Н'#` 7ERiCu[ .ݼT ![PZ,Nx}p/92Lml)U\8"g/ ΐTa;/7q1669Dz<&HcOŖxFrY}ʋ{ :VrmI!_~h4Zy'3}"hcl?ힻU|E&=ve|P`DpRsOUCyQM> .FhT pͰ+ `kC(-rv*E`gfEkg߮ _׼Ҏw=>^3)>0s@->͆LyA)bYUP17U10/{?dpLx_~r۹8PWV|Ms&RL2-8jH$[=[< ӽgoTH"dئ.s$ڏNY!ʮ|Λ'HGr !Q~Ip\\bBO\](@H'34Z .v(I"2oxY lf=h=0IJWU.abYE_h5-2ѧkak&1;rv) IΗx@ }ZU;C$XPorz=T<{FvrSޏ߯oH܇16?;OYvRdMY癡̺D*ɭ?㇛[hѽj8M-?UPci: rqi% т='uI<)@D73ֳ^h;.IFd yxSH]g!nUaW#ގ!e^v2޾G><5J%Cƣ;" `IA>pe)E!r}~s?  3ѶvC>|V~<8ǤQ ]ZA>K[ъi(A^Z7$eEU#{ϞE[KI5G^u(ll#>hqJqjgg6XFZO~|4lcxJ'? R̎QNI,>$SM^|ؓ5<.+ڸ5IVS UՊ, M_їN'g}>4v3g6! oώhlJkf݋rdU]? ڣtR#l4vjz;5=¼4/`cd>6bPr"2ew*ҭpу |=%6b77~іF +þ#Ua93~uy\J}b jr<##I>K5d"/ b4qOQٓM3ڙ;9 ѐc(5`{4v2oTjQj޶cd1_y: ~Wyh1Y_"L# y|io6BcR3T||԰gt\oLe!&󸽞mx5;No?U5/UF,Gў<*"li_?T6'iҵ׬%4I猒M1P1?3v#2#|WSkGmZz< 3kGE b0>?f([_ TҾ:*Jcg;<,QK$6([%ߕ_U%`wb%' ~G-P%1fR]X9a锟LX9$ߵQ!~*>܃ΡZL?<޴4w hU^tfo *hLo"90 |_vmr6F21x'pַ3F %gi30g>,U&83G*3#w[Tu #(SGRog-͎OYct[=kᦻ+iM)? YU"[Q*–ܱ@QT |f#+caB\#/+C>:&<tBcVhs,.jRʷ_-֌G>G *H%FGrxSa+ GԱ~TŲu ?4I;A*54)}!Ma,rI^HU+ GUɸ30NK-rĒli# 0n]VL[2|\(1t?j]#93zac9sХ.\$E}D}sFJ셫XuMnWYKɧj_l:)׾E$ևs(FVm1)ᙥ n!0#iO )_4&da[f-t(iPB66V J!4*V&a3 #yݎ5~Cs4]x_n`Ӣ1۷Xc{i jEI]j_JCNNyj\5hܼWWZ<*6'I|.ڐE$)\aSu38"'ztk=?GIX5Jw m̀y0I xTsq4l\|ޱbȬ ېu^X5L~" X08Gh,PegWNdasv$f{G'˜8۬?I?:6ݥ]Q5${zg#XRX%R M\B07j3XWk 2[Co*ie3m C+xxݱ%75LsSyxy)> o(ٿxh% P,| )Dc\~0iΆͤg׀SE;GV\L6]V%\8'gf͌+ͮ0XJ[Z l̢F&X4^ܦyhL ܟ1v^&Q5tY)Ccgk7AMG84(X5_i^-64.ڽgWL-@c c~6!:ܱ*Sͣű5^$wy ıM<:Z:~4{l'Bg,`vAgV<L.9T@#%dk\KSRVhEz {G^4uƕLwtJ˓N+P WETχ;CCW2jֈudsoى5=JC捡x_>L $w{ R&_ֶzw\ `4vrPw.:"4HERvuڌ^{y+"  {q! A+Ǻ1fƒ-"z/boAxA[~rٮu%{iYl=;CԂ +(ZNR*P-kc'"";Pba!,c5nDr [ԡ"q q;QߛQL#dn$LY 5 ^ȣۋNЖؑժĂ1yl0*rMa=BW$o8cyd(~`9\ w[k"XSXtӱ- GɳzB"%CV5ŷp_;&[K w_y;$XN5XmVB1xRMw(/VSeu />e1ם*Y-= "d*?78uW'?0rvgjJlN-Nе A7Ť!֟;ljP+ COIćY,|h2A7Lp\n{cUڄ˛/,znُ[Q;iژG:ʳlVmCg?7^ i,l8I- yn_R]s<%֐EfV\Y oowoJ7:K,$APE.{a٩i-Ȣ@&~&,7H4J==,혒i5əvԧOjaҐ'Ӆ#KL ٧#[ yL;^|O&,JYGd?OHCNzsZ1_ylS_\ʱjD.Vt$VBRzE4(c[]'>Cvm=mǶR-I&[[`^6l ]f9٬ Co]sycN}OՑd'R`ʕB ~`+ӭ _g&1[xUசڷXfRH:%UW'Wsıq.XB>MbwYYJ<2LW49{ӏ" _%fv\j3̶ gr`7Z&`ó?\5/MY@qJ> 4餖FmGdUӁ򬓊pGe!ayںuQS(\5ek"\K~`b6ŷvK<Vv.ޱ%OW=t ?9,"AĠEJj'Cb;* x6L'T2<w`(}Hm mm$VǷjOQ;.ly_YoXqDb:'6oBشu?MԴ}Eޓ .r\L'gޟPH%x0&#&كFDmGeN/"<]{Ϟz}'], Dr(^]xP$5٫s*`FsM% xg$53%s cG ka$?P0ç.d9yRj}"amG;LmS~a #d0:qIbA)Y76$X~Q RZNyW yQ]N'`D%%|h2&m|n"N!HSNg.exV wμ}=; C6ӈQ`eU]v?B^KCԕfz7F29Ju2o?oή]2 zi48($3?1h]Zˇ7͟Wqf\JY3Ζ,-7k;Ioꏬz@-|*" t?)D̅SdPY&Գ;"bTOwѠO/FsooZK*5ٱj*-NA퀷]CaO0jqَI #@ #k62-2@Ai6SHqfu2ꠋfDh$|%*z`zUm#K-9{MM:U@^2#>ګg>26[lޝG n+:@{A+Q>O@4B 8đw#"ibfsnvT l] FXR7e_e;/)-ے@1pakB]YG}&4<5pbNJH^mP([y*xݏc~kUck{E$n{hDT7LC4F~ XKP!>>5B~ѡBҍa4Aգ0̊2SW÷ӯ+\ܮyߴpZʢ14v4sh (JРiP^ᴆ~4nSJ094K֯ki\8^$fMB'Y|<%-"f g+v?_$1]9"_2.c^*>yNb};F1hO_{<+ʬ{Mq'XGhPj;X nfYKuF|AM]yUv;Fj]VyzkpYP4_Ѻ_lrѯZ&y?"4#`ܭU-Svh'+[]xnJk婀 U@mr`߃ac(sw}ʥgs9_dD%;B}|`GX?X9]fxF zl+E|wT^!sTIj&I홾 8Ԣ. \D8! slZ=0LK%y2FBHUgYS144=ѯЛzDzϴ"u'( ^cqC/هAYE.Jҹ;…TyQLYG"k4P牝zO"l4opK۾|U0hSeѰ+3zt>MB7+dY0:)+zLz.w{ ljOc8ZsSUb&*aGfO-O"4:bBm_vM»Əo7d'4Kg@[wccMJO=H4У~tUF@NОbC!|n56<%|rϐ+ohܷcKbքFq/sQ`g1Skz?;&OrQ/\=ԋѧx Y.7SQ W'5\ >Y.Z1NF_9>ٍçwgت/~lk JqL rBfmSn5"x~WTց~O?XԮK^uF@*(ޚ`l$+o[ٓ+H?8ّ <2|d#(Q8oH#usV@bs@uUqZɖN;)T:r'"97?#@M= fQa4Ai/lف_B߻1`1~1t֭6Gy*3Jv3|5`ƐYu h0ZJ㤰 7-mnx};FV,ZO+7DX;"& /XMeX]qv*#Fc3&N㔊Wx6cw!2;ɣnu =g7l=/頿4 QєJdKzsr[bqײm{. YE<~s^'Hߛ-&- >iݳ?G1Fz8̼k*MތsWƮ:F{BwEUpAqUL+dg9݇Y1۝̞6fy5NiDSvn&U{J)' ҵ*:f;Ѥ~D2fvo4{N^mL;Cclx̎ZGۏWrخ~F=.ӵJ1ҠYIHr5y)}{˹ bηճx i(k1Vlc!n?4ИQTtYqɓ<&5>*ʝ`{TZ3 &(f^?ilSyq"VZdGoBe*g 3,he]Ln(-iUGޱ,\C%) L*j*sՁ6X]xP\6 OI1 1huR:9b6ey)}=u#򝩱xu\l^acG?87|oۙ.G61Rlmϗ<%K&XJ Nؼx2F{G-vFx5xG?5bh|?0N{'+Ӫ;&tĚfny yU 1?L/gQ֏l6x[{>}!6f3YrfqKd #j7&mOzvfS}H/1f^>su^XsҞghv9iaT^(vճȈ1PYRŹie8vG8Z K:^jUBi8u#mKPtG64:BYXab^o<ӑPdj[;j0(2˵vKc?ٲG-/i (ئDzܛ0nK3.cB#;l]Ӣ Pw~9f {}NX}edطh"vㅗƘغ7,ee[5oM.|PΝ伧/@jܸ-dF:ppW~s?*wat%m=}ֹ<9&^j0ƽS'6S[OuOِ1swX { XV=n]^ (-:vJo_.n=fs:;2Ŗ~j{ g$n*)5]y9ҠbW 0 ;swBRLz./i}/?W_?PSʨT3!w{Bd?lK4L;svF@Ѯ:Qms\ >Ɣg|B%N0nj0~ 3@W{OҊbZ]{{ ٹ@cmJcl=یAEϩ_PaT12u.6AK%ni7,`sӁuDK'sh_vwTUCςKLng(^ Dy|)2^cbHiн^ ۤuJS#CL.^7kshc^ 75OvgWz yն-Wl sL^47{L>k@&8%n6yŐ.$>De^ƥ5(s&tSn o W6`h_~dx{+\3ߨj|aEl5੸ͬMlYCԴ+3{"|%+ƈvO{)_ z oiVo:W[\b?+wG3VWgr'^\DލS۴TZ%[9#`gO>)v*BCɀ nVR,zlB YLQ2DWL34^[H!) Ы9Qws(vٱjDo_̜}Z:aۋw~Y!]"fN3SQ:ty=r>Gu*UgtT($9?ߕf~ٔL tTugQxh?-eTTm&R65LLHc&3X7 C+aCD/G+]6ˠIhl}>4[6Cg/RkbXa1}\Da706A}/`F'x0ޤkha]"WKh }ahCi;=>w㽎䜩Ort,v (s t[JxC@t)RxcrtUԎ2l7Sph+!'י2nwS9oC6b-M783Uypӹqu9rn FCz'P\-vrE踓2 :]ZQmu 6 h[NJ=g5{}0t7 X@b>+ɷu*eR BtVeFHdAd(i,c :jN& ,xŐ }滕o{ְ^c73nVa2 #hqk]kgxXJjļ+(c ,9/J=))0=֨,/{~[{ab\!=Ay;-(Nmlr42(Za6&\)v4ߢT ]DF-t _ń`8 AmkEfxHю !vɜYS!O]OB$W)Y٣M*=άGmyy;Bqa;7;_9z7OqF4%yupb1IndX&^@MjHkQW"U5 DSЈasmNQ(4I%Kɛq_vnc0fUry\NXT[SAAX%?j{/LơfJ|2.s&Xqjss(,`!^g{Ɯ?DTl ҟ[=ݺvFCppH ȉ)nݘ|=o+ ئ-4d~Sm~}*"Y5ؾEb[3CC#qt~0Q.A?6 q,A[]YEBCz#3GViO.&o֐ٛa1|2M 3[ܯ[YgPFXFI%3:Kַsh;ϏZ%>?''Ē˰*oa*#l6W;S_xQFgNt?YeCC9֗&3A l#Vęܰe_p֢wZ4}tYC1/MI4OK" i~ߙwgQt/S* 7%) )]O}&> = 1]r/l|~Uw;G. ױhk$Y[\0>]k\o<tK)Gan[/쿔ok6;11ܓ{mN`U$[$d&Ǖ[=d.OIp7d2wcC~x.*?pa5/Sl᮹u{ X;Ĉ6£vX:8**e/z)՞4ǹs˃ aAP:)޿@2F>5/}TZ_{j2r4S4޾zvAQXmǑHf+0R'=ŏepsD\$J瓔?^e'Ƹ~`iH1EI?z:l={ |Zb Y)ͳerdoadRNV}6<r&#-fYzS4mйS{O?h 襖9OE_n=w=\cf0xM1Me=Þs 6=̏+ńl|j/, l-1_ Qx1g'lQ/<mlJ'8_E~#dϙf%Q/gGXl4 %qͭ2vߊF(s-?}cX tbO2, @ps۳<9hm;hұXfnU:8x/#0vQLiP'c}:H-g5|Obqe1lLI2e|b-Le#!@w.0xXs|wЪydK D=IC_S;7Ϩ!~ZqoJJ6Pip6Xs@:0Bn˟ JD#}QO/tIg/KYAi]TL:[,X>@LL97`M!K͌Ђ 6ea!xj5Bh=##=-lj1tHz- {[<@ fGיsANF j1ޠ h%8u"] ]Td`Yk ytʸ%3#dA ޼졎V BJu+뼽K10y3W}@7}Ԁ%ߢUTpvĸ3xPͅ76cz`l z ΙV|;bwhɆcfVaddڟfN&lQ DWQ㎡&ܢTB2Nůtq9kS(JͧY5L"ݱNJJ L)jg5mjZg$Vtkk9n%B3˼c4u+ǻoG&> $umORs Ҭ?K)L-_yPփJ^v~=(z&>p߬pUS~aL%KNĢBuEުf?OU&4;Fv^îjJ,)̓L!ˎkyr>bf7b;:Y-zڛeWuѨjžj9[9'ds=~`T"@L39KrP7GQ 15q{UaoaPP^xێlpez;vAݥ|7vI|;Y=PbT=2oe| ],5 Q<- [&);ț_ZS._l[8{*? B5zCj~LVƲMHMWҾ(MA'کPЙ7>o֐9>rA^g^6URrt)]FmFHx~W(=|DÈ^m'I UySuͳiSJuٺ%EM>"0JD5T3߲Y8IdmHLl"$Aаϲ6LH fY&:MПUB[d ]<}j>3J6/w6ꪙ9#踋#&=Eս*U{}hÈ<^@ \=҄a|p(_j)7 aWR8G#5UJ}|hUSu' (ٵ2;l A͓SVK$@|n Lj x &Ȫqc ONk6;@A.t+2JbGUYT t]*3 2*\—.`p N Ǩd)+y+%1ZV583$֏?>v:i.S0Ѳ $Mu\ۈ̑1a4wy~ۛBzOLvR@Y<}8aM n ,-Vu\qwF+cآ{xh$KrBWjwC=:_XYv L߰ncWjvuVtMk;^CPWnP#}^~'_ #yM>WMS07Ȧ'voV5PQ7es LIL)gvj@Mv,qr9 ~,Nޥ2g<0kD*iWɬ{_ ;dSY#Oñs_e+7 bʭ?W0C =.\)._4jJ @mq_i/"Yf^[ӨAuY*?Wa@FՎ92|qJ2P;5l{Pc _woWRُL>En5jsH-k6i"nO j7q7Xx~ޝ}w ?FY)Yлka4in<4Vy@]Qu#֓cBtܛ(iT | Z:! B@F}_{yR@P+u7W5_uа=EۈF7E)ͩbinx8=jG`.'zWB9Rd_.>a'}iAdxE %R‰G8ns<8W=I3jG_Fy:F\SW'}H=M3ۼ[<#z%AozE9fFUuZۅ~ޗQA MQk񃯭1MP[\o^;ڨiUmSlQvG~>D1{>5eo3T=vZ6gVߖ4/PQe9C]:M#XU5n]}e-s}&V@9\ڶM| T򧎚[ӻwm˛6ʺLMuZ…-{4śW'TA8F^?X6B,og_< ͖#V Bț.=Pۥώsg7s]Ƿ~S9ߟWsOlӜ'C 7O#:ug7LBha݅:Y/47Ѳ|w7Qsmk]?m}6npͻYypYn>toЭ# O9ӧ}#aD,UkbPZhh$ޅqt0?0"ya?ݩo ȈgwSC[d4Q5Oxc.M!;t>7HGџz޽[ `8F2tȇ(F_/I-lMs}CdZesoDC|blyU&ྋh+ TULcO_` ~m&Kr`Gik`8F}lO~kVTIiZл~>Aܵ,;Z-U{b@C H-7~橆\ࡳYĠA!{5y]Ϧ:pp  }V#>W?hrNm 0Rڪ\3Ux"vWwLylwTct+zw",gMmq`[pazRpvTT0yzzHW8CjYfV/wBk|`Ay='6QU<.ዠ꿒w@v̟%0F:m4U n^7n@O|S %Pv+|ݫboeaŵJpVKFRTV#{mod75ofr)u==~4Yjzaz?bՖtMnlϢ$cz'pJՋH8i_ʋ\\$;L(Uy'uضy~d/OH5ePݮC#ǥtFrx8,(PJ]\5 4 s_m5Sw't,5%F]Z9+>.mg_Ҷ"֛vvv>$vpQG^ccNoFp.|dv*tl l#Gyw=WWpiDZ#u`dJ݅ޣ4h=iWPLgß?og?Ee^D ˆv^~1=םxD^~WncM~оɼnH^۲e:{njAV("|M6, |zmq?K5g՟bb?\Y٘W,!%Ru5'?~{JW61aU} gmp\ =)׌8 ADF@VY1ǥF ضA ux;Tp,uZ,/kUY%E˳J~X^g;SY%e?_m;UL@c^GJ\xQ-O>P.܎B]Euxr e9/7"۾SA52޷j9g@Qy |xL"O\*ReUZDms# U;r5ICw~Hk,#lˑ]ʌ]h»/AꥭחPz oZ @p߻|%΃4H#>-TF?-ˆ r[J?nK\}\]@{Mݶ}~]4 ϋ('ʾa/' \n1syqQLqNqPVQ*<ۅ/n.|l.7,V"FBd%I4rg=Sm+YM]̔6 VV(Ӥj(^O'{VɃ8=|2o@yku9AQvd\u>G='eF]jp8~O Í.[K񋒻HSsY~מ"½G_Z4X\ي_*h='Ano M鐔9t?Xa֒S /cEaD 7{!po2"Ω-$mnH?s|+L"z*-+aNQf~4Kfȵ{<}ttĊS s/LZnG/9]LaVC>+" AE u *Ty_Ƞ ɟ\&q=|9(cC萐ID9rڡ,Nϩ|'S腉06R E8*gIwOcՑ>]y.\a tLzFF%IgW#`5Nٶp0ZI፪rbi늗F>5ߎF2t|!f% v}r_Fi'a)Չo">5\ʔ><~NȆ|?y\nr1HTv90/n~t\Z,~p{Ul#0([Cz$Nwx/o E:='3t4O- L_(;%zv.ppBBil8~#w_$yS=`]*_x2:qnemnv>uP7(2\;x<.%(B4+eb #kqon.*"PMrD(AeݵC%EUzfPW eP{w#0Gǝõ7;ZIX_`wYGV13޾sZ8us|KmbJpqm_ĴFD.x=S1*8\"2w c_X)>,[Hb^#K>fMiK8f7uÀS'a% qO}X$j (ScD!2㬼^ob`k7 ۓN4}.~w VʹLQ$ya("fT%LC']K4nR[)hH@Y*Bk9d|p{2$\*{ 3%_ֶ>iϺ_̕Z.3>2z}#3ݒu. kFdḚQçb C+X2n~\dNxk␴Kh+*:]#NA-!)EV Z9YQZ;#OMo'>78/~jzrFL!SS91dҏW`MJ!b.:ߺmt4XԡӻeoX k묤8 yla=1h{\ӣ7v\g;NR$Yr&^yD wmD 9qG9y!HsK]E8 P̼1δM=BW_6|]0CW BevJ$8FߎVTѯ~W G=S\B91=8}$1G ɫ;fTeiu{ؙN{F!~z0&Z#5oI|@FA0tAejT4ze]V\ZU.P%ɓAga3KW<*?+Fl\\~Su!n{v!u鎇((h\3k6Y鎧8kV.@S!Wm'JMm]h8UR܀<@h4ekgT9L;/E%$?ψJ'yyqd,_.9w*PO)46\Fqޠ2OԵ 4p/p!&Rwy4kvW\v'j}=p3 #|^8Safn"u)g+tF#3>2B; 3 Wー,в4IIOH ^JC\6? VKC0q^>jIRyѼ+bd(#{)^(הNjGD k}(^T>|&pJ/ #XĂ$l'1CJnw#8-RYNfx1Y@zU1J} *@@xt„h֍@Yݒ4×QLD+2I8bs$f1Ia*Q VB*I';7Oy4_G{wє\+S.9l./'ݘO-n"OoP:=Z.ͧ$)/]艃|׵@TNKB?{ښ)G@ 3\;1_ 99wz_̝r9$p@kȹؽVz$wur:Nw D% ,ML~#l!]gJ2iA5 S9~A);]^*D [lvzbx/R3'yN5d8ya|}&5 R pf 66":;V uˁ‡B}vVsweV[\/tqd:%yQ!r؅Ԧja󱼠֠|iɰ]]9˿Rv)e_ }z َU8sgg0V8Žv#w3;u值Cuއ KYR~NWF7uL9|?N:s ͡&;Ά!CH ׬`C]J$^Jϥ. ʔ/7k[+tQoڲ ˡr3XE:8/nI"yзO~3θ$R+Eli!am7kNK&¿.x[QsS|Xt7jg<'+hnǛ|4rneߡ'pnkNh^J}MN~VZ8K<`%\vC['* Ll\\1"%<%8yhl7k' ʎgmz}}I8`nzq~*vkl΁6eFF53}Ae $Y|U1 ]uGT)qL m%. $}iZgK=f@sCB1$ CxҎp9c\A]Y1ߵ+5qsLa L ;bALTzCVP`4Ćֺk/e+S`7XCVuX'ׇ&Ķz*ጛg߱wz̷vzE{2nN,R.mupGHUՈ;\kh.*{+%:ֿ_4Z7"WIv*zvyD_,sNSvnuHhZfPv2 !::-+އe}ɵeQkSFs~mv%Ns5R oPB)m2$~r֓E`k]vE.$Y;*sʘ;Iu}#lKNzot @3%_q5n̘YN%JqsC09tû.NhCZCky=s\Sxז;C, _Vlsi$>Xz(kGy?{p^( qERNW>P~ :{-W}ӪY-s찆DI 4md}}&]- };iU7KxBD3*C!w7 2TnرqdH5ݮ 2]IDֿ&e8B=/Ԍ&A2e~(2[יV'k00#G]3*)軚8gU3PS\Nn [6,{pE&f۷v <3?lj`~wu`b:S@yX qZ0/OŅ;@kut8j#9\B؉}m)4"]*VYVD'|ڪhسkv9Y$|M"gVAFNkT Ɉi`U^0={Sݬh(wrc2 n 9EW2!C2|W1UbrMjb/xNc# R \ 6\'5HXŭNNE4"N=xp"=͙M`{>YXȁY/ԓL3 Y{L>~'+|M,3.L7fԛjX^l.'I ̘k e ˙h 5B,Nހ6Z`_(+st$ Uzmr{߉6\9nu)OKGva{;Bp2-(E0չJB z<0uZ@݋odAԮ}Fw+2TKtV˂JWX6[T{:a$r+qn]u>ڇC3; ]`"`KK,ㆃ#ۮ᭙_(D @/Ե?w6HEo_ 㠸~}+yd\f>eMNDg}e<&]P8Wk=gr;dyşJ*P[h\A~8jàqj#UxrᠼbBnOAzրlŎ{4-B݄n[ҋZ}Va >r!v=8(DbKՙ[Z_atU2]zLi94I*u 1hHv͗T-4P (Qkczy@@RYȷ$/U"|X Z<{ 衉{ 3H6l"d!|cPKKQɧv*,,Ty= A:k;6o_dIgsn2'9, `s$4^;ꡍ}u{d3@ p @,Unj(?m%)i 2[Dт.nԚR8H0/cy Va阆(~utbKy@eϦcy@kšf_#=4+s|;L{۶3=@^k@֊X}4fowENm>3eסx:$8<4i,GGmH]m * 'f'm DB_&iDNE#X\3?Os@N^{C޸e=\ܗ0DtARKZ'إܤ дi +Nك߂*yHI/|eq[U^<'Axffbs B Jc"ǪϾp=/{|gHqDު2 wpAAOލWS r9B~gy RI$SjdE'AÑ׽vTh,8yĈLZXKg.+wЅ($X/6\L+YSqp _9r~Z&~UEG~lF糽IL*b 6q< Z`-Ot9jHxKXe;AChﻭKf5jQKWہr'PA^=\z@g}rE;@[d#bKj'܄vܱY.S|F M<]: n}:t?‰ ?n, Y=AWa{Q C`c ;I`[ Lqҳ"\Ӡʥ^?KSkյaN cICrmp 3 k9d!_փg8ɳq=rJȮ;V9)ngmiPkXϗB ~h}br ޿Yw^%^'iHnW ^GЎD*Q.hH,^'ݒ8rQDw/*H'5RBhz9b;"hiS N~Xwz^+n}@u\)@hpgVGqk_νF h'/hNq4T%SSڬ.>Ot+̷[}aҊ9-U)T4Ͳ 6!̊H2.cj)o3u  !oA E&ٵiؘm-)#]ߌ«ZC `1:P*7Cw{׳hh|xx-b տqSGB[7j=H;\'+j}xr{")\([gJAs;FU ؇Rb)q\nZ.k슝%޹oȃQLw|DRI r&ûknŁKg|ᆺ[aw|&VFriښܽmM@cxDɪ?7BEo 7my07߄y,.꥟_nqiNVRۥ=||ǧ?Z>PӤ2}/Euwx@,j=}%"i-x|$S 3^K']>+9UR>:D鯆]\p3m%5UFP]D% "^A5딆eٰ.M/ |D`#hA_RGgӅwSe8'|=!.@ k7 qV1^zU 3m!>g2e"rH*ׅQ҃"sO|gPVg _C1([5/xzetHPx |\.ˤļ!5;EJNaއۦ$̔KMeZņ.ʎ/E9qUOD 9Ig1eNy9>x4{ (Y=ӏOV\O7݆[6ş0,w+rǝz $n(zGvٹgcocn[^]?l bJi]̅.\{t|-SꁔvDnT _rSЭ>@Y&VI$kAh fVn8P|~ sCEMj&Nݱqg̻Y T&/P q> CQ/>b;%99(5+޳gғL; 6յmO#wQ=>u e u͚s$m+)ޝu/0l&Os;Q$&4Dk͌x>i*肐=v yRGE+\Í7/[VC/RËpnW8YYd+7ݖ9c"n{mߢœ<ywX\,ڨYn:tܕ臱z*LY(.N6(Jwt=:L>LF/]ާggVCHݭ{ K' u0  13j]<4}ykYn6OT]7MkiVfz>n0|yonrD3|I"+u(wy&q6ˇ=eGj{7^ !?ڢgTr:ZTFZ\R2V{6K.gGm%&Y("&{DX8֝ޏp :j9jl)\YԱ#T39 PխGa1 >$V3߶ ]>݈5e/H;( ѯ:צ\ P:|{>_AФ7d58$x0GzO3[#r(ztf<.yuͬjNg`2ôY}'a$5i`EBa'o:R08?!Q০rd s{?1DUf*+WԪ08Ѝ9v`t$miv"!SżX bo3l9u2 -(Zj X@jMh2UKA `YbTWri jy^1r%u-nEoJ5׾at#b >a`m?ЖP`(,> RC)_\6[XꑸB2/ezmmoj#*}o1\N0! \yp,R\1ԝB G@T=\#Ůby! ѿ GҠ:}X[yz(O5JozŧK\&o栗^C]7 :⃱xVԠ< &~'sNg6$ !=#u~r5XG:t"29m@al*) р]тÙ?~Zi=x"A8s_F"Y8s~뫺-- z%砆X<ߜ>3-~;CR',ƬAΰٚNwGH[ȝAfM;w=t#B.4s\ z(c! ~hK54bDNl;&)˗>4mv<$Od(#}Hî7nM;0t#P^u>=2'T!UOkA 6nhs|/a|5Ȫ|w͜6LoܱľP.p[ $s_C' w 2;gjf&lVoZUI*[skWYP7|r7[o/ls=T_P rZJ?/vC&(z_.<Ѝ`^bWȰS^u=nsAVLJ 9ÒQR2!ѷ?vCN+} j,҃)5uF \oKupk74w- _h?f A!MMoL E`FpP =$ݐ>HJ|@GdL>x솨 m8/sb7d , |ln (SM5n>|Aa-5E;]n5?@h8z1m9LU(_/J^I TcS[$8ǫh/ӋhA;8gq5X >kPEx_Ecr)LI^N"nr#Vajzdz@tc 9Ȳ5G{ UQ<,zߚ@;%UGAz}5kSFc~6I}qa9소15m_ iQέ,|qغ}d=:7@7a[Ae D9ox7Kj:(<56C8@+yz>~fEJYGDL =©A:gD+Ήׂ=PDE<@5΅eKnN`Ѝe kVG,YLf$"Jqޝgniϛk.@iQ ݦpabl:b1~} n}5Fb`H:&@8(7-y <܊Wzt|\P_7ӮwBAZ<0>㼰KisUYFJO'sP`?Zg5b=#WISwW2͈R‚fP8v{ WF;'N[6V*JK;ZH{*]p{=YzB|i_ i{PQu65~:k[6xUi['LW&&M\+h:Q SO:+qr (69~)e*Swޓ,yW6o7kʖ1J;5h2t ޳^6ۚPC@7Z|!$S46Ae=b}c0b9}>7kd70#^?/|Da^WyPDW"}|psܞә]9 sY:3ܣڜnȘxC+֍}v״Nw Al5?tN}P5u%͟qm:U+qX&KX" b7uH"Vr^z08)hXD]~*U?Q:!#FDo&+ZBa;3>NpE @؊d%..+ Y%I>X(UE;ݐI:"dV <B*RPRYOPLr IA9w'udM@j7}hnxZJ#Ҷ3!~1Xqcj>SJH>ʮ Q `i6qZ19lDN P+ @XEq乢3myop>f ;\.GE0j C{q?Rɺ4by0뾫ZOjµIPBL#C[C7b=*f~+3-z5׊0."Skf#^qda_7,v3ɻ`}Z.egn+KE8M(~_?:H˲P%V$?^](cԕ.IbC=ZN,yZǶ z|3 vş"핢>vW"惥péXMN8!f k- 3g ,ng>~HDe =B` ؀rB#t[R<`QYh*MBGKK/Q${ ZG0 4B6AJ5ݴ@fQ-t´+5pݱG]kG[am!MMIx=Z5w ;$@g\Ȍb `DyG[SN(`Q"PXݭö䒡bǰ8w N|lv)Tȴ.Her䳡`OpT5J/<3{m~/!irak|N&ɇ)Q:i,̞};]}Ndc-{/X6Un%H0L=3]͂słҥ= wƝN>m ]k ^y) ]6%2En/HI$7Ck6=*U]+j$Tt+/XeUp׭$"oX"_8ab X$,8䮹W{0ya>߰?ն?\.E.yƢjaV)o r'V<7M9Ddd\I +Vkٟ5]÷;gFGY"¹TyGz+vP7 3Ͼ+.Jٯa$"@Ƒj@1\Rr=p#Mna& i>o:z[]@ (0 Lj$a;1wiExVP2T}gܻfDͣn5(Bm1ԐC T4k`eM+ ]&,3^-,Q$U}aa|HW7.uG<%0ǴI.rԡ{`weO) x Cm1b`!ˆ"bJ;;FL ތ뺷J9 ;=5^D7|-ߕ8ByOuukַ_±m/ WM]tTX&?Dc}%F~}RǶ=f* pgީϴ1K[jy`on,dye 5Rq v4ck Z= J,Q|>ѳZ6q!%̪XJaZn(&tB<ÊUcN1ެeU/% -m 2 dXR}:K0JK}C_ 7#1XV '>^<.>(~DbjUjS<>lx(e+h֠ a}*"-=Hy bbsh %칩UĆ`pw81;kSARBϡB-P CY5^"]. o 9̫j^-ljE":^ Tz hAMOt [ۊT䟈54Sf#jԧ cZUEEc%sx!VS!%lmfH^]] ` f{TګR0/XBNd3%ɔWU= TY|HKHК(ܷ +.>ԧ5c lC%SC*b,Yucy I\M:%ڥ3UoLBݷnk% S5` 뢍XU"tt+|S|PrO]"=w_A-VkY k_Kmֆl!R_I]~*r`VuAb2m+VSWoB(['$4@gXYv"6ZKǔK*[TmZS7MK3غfx)}tV@6^t((>WG&o}\yKXǒ,aSjڔt[Y5uzBXx!O{l# 2>IZ n_/PиS *-*fE_@4ƉhXҲt,$T{VU:8GQL[V5,Ne6׾B=.29{!Lc*4?^l_[M/bDd7x,$QSA":;wQŴD {[CXS{3hg PCحD"/\|_) w{ECBd>UK|N.mιA jX<%p(1$QEr/'?T1B2 o{q"ÖBCzC"WDUARXrla3Wy,T !r芑Z(:% ا)bO6gN۠`"kfg[uqjuTbqPXiVƂhIM=n%?.bE@}6:9R t >/OHܓIH%Y[}daT˕KxT^ -1'kXtUt`G>զIѻ|kOd$Jcm̅Oܷj L"=t@ 24uU2 8\G=@ j Όts8k@&~ӂGjexhgVCep = 8 <R=guVBTJVYJ 2]YUޠarJiu yqA1ԗ:=t=5h*o>!^'Kf|4a@kh|b$6 fky%+7:N ˴HbP $"b| rѼ'&֩:o hrVRP̫1=ۺP!֠J쮾^%PC0ҝTY;K**FZ>Oz,?n {m;pبӪ^0 sU]TW!&0xm(>1? g"v*@=gLr Z|#zx;B%kЫj_n)/Wܓ4ݽk>X ݰd 0of x`kJbsXPkA4=+ Xi0)^B>^41)5&OQ<; B+͑ Gyv,'rLOBnl\SefnXIW=NOBuӒ <v0a㶽g~PC>yNvEl# il[g.+ew5C\E]Z5x nr/ Do&25b>$ӒW*mC ]v-+PҐX`S# v̑^xpDk_B>l)DNkSJ59SC Pq%4脦g>B7eTvC$N(Anr< 7kP%Z",p" YWͥ~HdWQ'DD8%h\,yoRiY(*]ϖFc}?ewV)!V^έT^).& jvK JdS!TmK Pz`XwԑpC1,b]qml6b (}SO# M"54Λn:pފcXg|UW5,QJ#oX&A"k@Kޅ.uoLjS~=λɣɃF(Zmn#=E^9e%/!:a_zMGd9+bPDJm8HU|S5CN CCO!ǘ4- SZd Pگ5[Uxo3fr IHsD͸<k@~;^Du݇"XtFvYаrW|j26/5&IXJ ;rKgZ+@UpEѥVG.<5rP~:%["tP!ЇixnvqEOj[AlAYo@RƄp7K0sWK_j-­wy kJ{`t¯;Cf߹ ä~72C-/m}]< G$eih&Z@`f0V&FEATcBLR-r[}"YkX(lNkɥg4.2tw!1_q5{6i6RiPx%t6wnZWM23!|HΝQs],ΘcҪ)i5v Fnrl#Bo۫C\[犤@{4&0ǘSH~s<5:Id^s90Aw:!WuX0JE(P!ɮƻ!7_ś2cye\ !<tCCh_Bjʝ y^{d&0 H4^ua8?LiO2]gɹ◴ AJt~En?P!hnY ]y.xCGT`JӻbWC$UvYQ:o~jDS 2f/t(/x@]]yd"KK>ekS;u->۽Qܚ$W2t'OH?P!Px-A_g{Y:TМ}{hC\h'#Lz5gRP=M5a F7?Y[jy~#qkx0xۤOog ]TpJ¿J6 h액AYz G316U QtΟ;/uh@I,ah -FiOI?4jg9jU ߸$\l;𘖂ր@"reJ[{@͐iPU}>*T?x+#gvSiJH(L~Vy"9QCNLm2cX`IDlXG-Aqy='"j _u_rwu9l}YNKVy7B0 ~L՛u'~dM#@ܥpד)EH*ɺY.Y4m|8Io Mg-ߙР&WR}~5 {ةO؜>Gú7~H\7U-Zb|FYfPa7d  ټ[|ߑf8/t6R,UyR]uʧ`V|ޅܵwg5HCJ?=0Pl=P{#^E_URE]/T56&KNl]9UH骗 L4BOwV!_ AL#Mt 0(]1}$j6;;I{w%n|ƠIk}(ԭ?VjT$ ;^_NrK>͹^>=jnHwqD4O/`׎}I7#kKkKIov@ Fļwx8/tdA:^xp5 :oXX]M<Mp ;!']4]9 AN뒥8CDO b0>PNYOMu2*ʇg|F 5čo|PI9W>"V~73>cYB4(Fgd|8ZvBoF҆nu0PNM46оrVɽ㊬ӥ}}``"({  ~5ep&uZS":ߔXZG#AMrhGnR>i}]]+]M?XTl0ī=E'2^>7=/4J^AlGRgdRESSBO DREha"g(u>Ӯ҇%{F))f>|me_56_ޤmeFD7'-g6%^mBOL51LZ׼[ƓT}gb ʪý(fJAGUֿmkoEuiqY*uX0S:֡'zM{1UBWiQ*~9yq}ZH23ܵjeJpB19%lř>ie2d2RSǍ0?5(H1>;'`KSdӧIɶ׾A| U>W 2@vPhGXVw]yLiI5y24-_2j4$k7k 5}\L{'0@ C$_CFZZS_` rwYאA ݜr :,tig GjEwȁuj'Us7X^(&MU|J> 33йOED}T>Hj^ʓӇ"n(PU\(7=E3гArL3naᵒgX74؝)4PCAOқ8 [ADTC}yjܗMؙT v)+qm/8J? SXxYdE%%BY vHzzyY<5Hմ-ٻ]}aѹ.ǜwj\*gɪʧ-꺼,jJЉ!ٿ+E1 ;PCdjN{'suLueAm Bm|qHKDz֠; mh{ @*U="^W `I`VA? ub=&X1VAD1IaJ,i )s*6y0AijN5!ڻ^tE[\>er$JiTq;Q7Q&?<*n<_'LԶU6hyD tџ4hon\g 4(ޚH\Zu?cZjb5 E-fb|u}'pCQS(OWvٗns݆XO) e^5}LvEsb}#ԦAїy|GtZӲgfmt_&G/`k|ФKq~#)RG5 @ >m*z6(gǦW<;#  TfT VqXH=]W v,6tR] z۴8T6"$lrp,i2m(V5=j iQ{wXj!45sO}I˫Bsּ#^)VaHj{o*D[=|pQx_Z˩@2}4pdN5yVYB?7f\ {iB^нk7K+zJHJ8lVX tCW0#V:4=k_`@tqX;Em>!9bEj!r+mqo,b,S=zKoO@0~|m:Dɵ6 K$CxNazwMY%z//զUimsap']{K*'2,v<8l堔o0λ,%+4eMVfs d:P4#I@̦9h١pBe:hwdAnAEQMd.{2kO&Lt00ڊ45:f4@Jڀ;w~gB"k ]C^eN2Q.DAƝHh$ڼ?Qm/x( )Uwfe:瓩d=:]"``zǗ S"c-i/ZLx8 ^Lt#ߨ ]5;]Dm *JWj^n>Bh"ẟ)Yz@bB]f6j|^ ]ゥ Ƌ+bO}P jXu;*Wza> tUDG1upPmx౅~ [N:i=  ړ1PKfkO}1:XU`Q75C /Ak (} )OFR^BJl cuB,3o Zg>eqރUzl| f5-%EQ^TD }ɼ|=ex)voC S<TxkκNT=BKՉD< (Occ%$mB|HM12@8l T# n]̝96 `4{#|$yuf?riftaGi! J'i{, +'0L:m^&@sn]bgRюVV2;*iNvƻXj JΛ~hy袛ў;.H_vA3L:T/XB A7kDݬ>j?$FCŮ$wZ"pZ `r#;uKxWob> pdo[ KDA֙Er.':+ݮDo(f<%O|Y`vɦ`0dҦ-_S1e'RLL$7xĺT78Nx+^uOjt8Χj~^jߨ,g@Oϩs+P!>X{=c}CA9]k䕦V h)zv. WJb)Ba):ލpMTX)ysit]"ӚM4ôz(T#wfC1hJ ц$P>wM V_Ӣ +tMˀ>тTxZRa햡PT+Y Z"t'yKJiUNa Di`` (3|/I/b7$-- 'M7}{C2ʧ Vk\d"1UVR̛b֡/d)ka ?񙺒+av{9%Lk6m˾Q{_ [Q .$˷OB j狗E˺=euIv#kuس e˟z,u2#Ex*^pZ+ܓ+SYO#DS߮kV[%Pb{x >jiiHhiADYa! ORt5I'vZ*ĭ˶I_e 3 -p2wXiN_ӗn(0鉐Uo"f$n7>4k=c D7.}5k`pYXh3.ޝ&ӵkn3Q¿d^<}@ӨYOBt*BQ7,ɆM!`۟ Rd(i_qYp/ȸ3 \`{amرGqAƅ@&պ~ړC8I){'éq]YR *:gH wv4rY_Օm 3%Ҙ| +!XE=⹈˰d! Pt Q=i},cm;6zΚg A_ r' P!֠ tYyH#v6&75_`-ef'pl$b/w rI80*;S Rި5B;NoThA_HfN%s a|> ɳ>OHA)M4^K}p) Ek'WU;8dHژX!t=mF@-^5#"f`)T4e6^"4FJho<̯?㿑ms$\G5H씶^8\ʾ|>'gB }V{ͷ1_ʉr[ b)VohVlF쓭߇\bMɼUGorBKFڗ6yhG1҈C~;U"zl^<Uk)Uq+`S.Q9A UzJ(AXSso6FQ>.#|"]&IjE}!uLj;H-qdޓ׈K,k-ZJ%t=Z—i(? ˅H+]uMQZ3jv߃rM}fm{.]2KUDtsoTY%0:$`[%dѣ> `HCuav$wX,*6VࡆXQPҲv!*K׶lr=ЁPw=@7˜I$ `^S{SXR~ (qΝ`HըeA([Ӳ(^2niNpә$xQE㊋V+H ~*R$/R|Gwb ^',5ߩ V`[VU)5N[N8P"KǨ_=::f8ZaX-;-׌JM~dpCiRÃrP ʫYaĴ u< m<.aG"P ]I4Ev#D3R6Yʝq6X!>Z!L4GpK7 Ҩ[yߟushGXɩM[|- 5̼#Լ(;>[7g,qɮ?*^as%bez!tK VX.^ߏֹkF:he?CWCv9',OL%iNTNҡa?X1iSЇEo/K-`'h BQ5-4[Bhz-ЂkP]`0/YZ= _5@YLr*H#NY6EgUʠ J Zj]%heEB&wi*jTcCܠBڰ8,ΙRG[=l?;t"@\u{$k X^zYEMwfC:/S|!6EGR9>ekxz{݄:m@k"RX~@ FA5EuD L^)wCJW^wwTi*?zugfѷN3Ć]79*{WS+U :IW t' к@v[woΡhۀtgGO2/%#jOW.Z:0Q_DQn?4a@ <'h}$hb5gPU`Od{;M쩴EaRy)Ϯ>iѠGX_r뀧!xm#ݵHh\%>.[2&TH}Ic\+hXӝVش0gRM{m}3p(3jXl׆(A7E?~EKRorstm%vqm5_]j`s7xn)˞PvN[I\] cDZ/Myo_A5^Vƹc)z<ρ0Q>S3vE|Iz:Z=(k X fr{:R^-c2ѰAvoK{@P}0iArTtCtDhVb/Panc1l4pJu]-bJ);xZ8NfwR:ªw؁ct!RmpZׁn&kb X\mvgSQ6L Y;#3˴~@ mb3~M,I, ݜ6=T'S~fT637g%c<, l2JtoYr A8_fbv8e!K緻)KhH$RevͣJ ;~!IdHw&oL v@l} fY6~և(I1>)6tFG4>ཧbԊ?ƁJ쁯Qe~>!%튷;S0I߶⏙ppk0͍6Mh>|wS,RxlZY{(f6 U_s,\:UKp3hd>8>Jmbgcx;R[)_Į)f{E\N[N=jy?%8u` :YO%=tYaGJ(d= Gl3Gi_r )lĔ|72ٷ fzЇ,~)9ՕqD*3t^tnc R27]!Nݐ5@M=ލ ;%aPD{6.@W\^,0vYTL1T)eKii^˚\{U?959YxTrX0bhW[ +YIyGz'o+ YyQeyޒe(Qנ.gP)d[;A|޴D5ɴ} K)h/{~ K X7LAS vg.qS_DX2k􃟴eV1596`Ĉa5 xoz8c^`|lSYt Xk@ UzOyMvI$%f8N^^yvTlf3:@P;19gWhr Y2)\E@gZȐ_kZ iա]*zhOmƍ\ Zv`+R-ܛ /s&}]V)wɠKuX=F]~Bʗ<;,^A(w FP!F u ֩56 D15CǪs'2۫P5$ !#{-r{tlkX;|{dmpůn 0e"[ He9]*h손Sw .:-7l9 S͛5 @(+I+_ :L6O;psk߹ -5kQ|yMiYF@\p: }Ǚw<6MUSh*w[%޺~T1EC^ozrK Q[EݯF[gzWu5R_Wlkd>*Id핗d( S1.[g L{t5P!ء3jqV9/GCi TRtBzpקZ-_(9#$F8ąSn2=lj 2xAPl#{nɁ8Z37P5O{x* }L,rzs m Wz <՞|!U[i8HS+נAjjq`" TE#Bw,ឿЙ5PX+Ѓ܏L\_(R5V;yҿIa| +P2"SL-"Y*1ocџGA1&gwlSE Qhܐ}F+ߍmX.#Dz' Gzza^ܕ+{ k`mb{3×` 3N~|..N&.5U^IAeKt>:KG}؝.iZV#.M"便<kb50$B?`wjlnz5}l 2:=_V)7 V)rq`kPDKO>4xlIASWO(!߭@l#P MIPqcOs~ۋ5Y5=GjOg^ ~MA1mbd/Z`ux:'``]LjI{Ry)~IJhQID}G~C  |t(9߬Ң8`tȁw4?-`o7=6U/F;Gg c@:g>YF P!U7zj3c)mavP*߫*}M7h2 x( }^¨7i8#&>Ճ(prH/0i5x! 4Yܯ5*ZܦO#zv}t/nz/G(#tЅkӪ)R] :XGDGRJV/shvTx*fu"+G@끭SLh}d%;/f )o/۴w}^ȩF,A^݁ +Q@LHid]+·/tPP B.w~lqEho-4%.aB:lXJ֗hBg! U5`RTbr>Pb]ϗ`Jk,G  J ;ӖEۇQѾfA!-Ν&t鏉 ;bU׭#ӗ`ݮu[cc|P 2 >R`y3CQ4)9l춀UŞTm}oBjۗb//ixFAڇ`H)]dD%7)SΘ--JFbdc [#vXרq Qzjy0"et}B.ecPbk䪚'&˱0}z \ =-~g %n(:^;j>[*?&By2S{kæּ5b>h+^eK۰5Xv@|o&r4X |{DIʲT- DM\ $nF:Mxt뇞AE @R]F+!~e^tVX[a"^ifxր>Y_3ν:(;B`@cnYIR]w1J-|ھEL!0 q\B(3AšՇ/Ȁ = {nNQS@mY(~¬QszE=U<0M:JUC kdz„Ë11< kBoW<]nZ`f<9A<lI6fZvH9 %@73߹TK* x#nNeOeNV6 s"n-RoToU85>tX$VUbo>jY(*KdE{f,D( K=='  n_3Ss*ъ/U۫i=:nٿӢu@#l~N'['ti F ݦ\aƌY}0bSoB^ MU\yV&t%sN,5-\fTw|7ݲgҵ5I&>_C`om2'l]bPjvPYd e%n ,®X^!(k/n?71&wG-O;E&Z9#I:K}ٲ2xo/)p󞗷Y6|d;8fc1~A Ru^js1z}Ke~iO\sh4Faachz6e;OrEhDӷ䞦ue0q'FUqV{F`yn)V(^Dimȴ[zyˌg..:%׋̫NkX['Uva]M:ҝW(*fkv 7NQtV|ٰJ-myfk[~:ͫ05!K.۝=2d Qўd/_S|[kEEP#+*ɕ+؝Y>/w)?'姻\a9 UB3;߭ӷuZod &k|Tj#j6re wze;"u@֨vg{R-;*o`^?w0LbXgrPxhwSP8-Aa|MlWKKUbn|%C[m;Q%yݿ24S4*Eiu9g142dӄ]y:8&=s\yG*R7m^9B1)|ԓQZ܏C@1~dP56C޿T' v);AÌ=ޣMS\^H?nVi[pBSGO_=ihwRŞJY6Kč|.de{ߩb0( ky{%ynb4" eӏv'T O?p2X|NzjpZ]':”}=mf|)QmҴƇ6jWd z I˾.5fI7"o H? 6ܧ[{}i 雿ش,ד^-%S(V*h>9"*E򓢱SxP6`_Kwo)^zΣ΄m2vG|Xߩ6:D mDMӣA㽊wv-v1`>.0PQ66]H )gY힘45A;ޙU5)LdGtMË3*Ƭ:;ՠLAł4ۨq@vJ5d ]#"­gʎI"ZL[@;y6˖ʴozK6e[wvL4?'!UY7'ZܔlSK_bqڠ5 [ۧѴrZڇɪmOGYN`/nq@e3k9r+]0tڸKs lG4BK{2ؒuyϚ=j.疾Adͩ2˽kh 8$߸:hʶV$$XbP =@{otb M:%=)m7 uQ^={2nKxD*mSUi-GA\fб1cݼCvBswO !v! TN;QithgMQa/h9PK;DPOUNg)QO!2(W<6ʇi13P\O\Pȁ˾zKGx1NʽܧGeȒ3*h[FѪ;Nٸux=ZwxAnk/ի$͚ubuO~{2x}ɺcs& ōb~W NIY] }4%T O3NMx[X!tneщav-mퟫ5Ф䐩1yUy ~+yz= `2];#kYpN)*ovXwi93F qDewЄ*Ù&[=^)&.,t*U"kE0[ؚ۔rٰӱƁ<=isU{ֻ:#Qo}>c}0?˖E6'E^0y,b+^q^%_3d(Np;Ymxvd A!Hb߰5hɇ!tѾkWj/詜V1^ӉJ)鲽 .v2hшY"t3lżeE'ɬЪ2 :~M2z>ǖPک0J}d |5IlmO4j LUzfSѮJ ͨr'B3Vd ۥW!]:\} #2(Sc8ߣ#WuNм!=}{)N4)Ųӄ ̠ΩWmR #*A!>~щk{MҶ/kQՍ)!s{t^f k j*$b{ԭi|3`-m ||nHͥԞBj>s@cuDH婟iǠR~cnVej^=9IMtAذQS.^2}QXv5iĝ*I9i岄"v>=&E}r[5 t0ɭwlNkQMZV&3zXsbj6t̞;{.fnpqwTg cD..#nn{ *AyTA}JnĻ tک*nXw C/;W:b1?гZ eAA. )Fv šb*˝A]Doys|gh2x:_ϕ:__v]{`?W6<~}ۛ GV?đ%gXFw4Ma  :ѩ8}A!n`Uջ&}~Zof졮zGBws{+3{R7/k 䫸zZP!#/NAKO?^pH[)~w"9lܡz 8"bk[ʱ[OP[2O(XX1w& aovI.ltPJ%mDCz<>4P0nQOy MgC3'mMl޽e#_֑hh! p4z:B{w4(u߼M~Z%SߣhPž,b85w5Э?p&yeOU7FU7Mm݅"9uS̓eAVi^EݛE=v{{U.2yϡUm4?mVyhBV[?3p<)eoƺU'te;ݟ:A,nʉ(͕=Z|pPrc=ՈʥzĎNa 2`\".;ؚGN]<۶1N*q$^y KU陨zyd@bw)tҹ;ؕV4e&q&7l6ݹNMI22mKY=@ +ttKN>G^N=ܟ;1?ug|-z W~1>1;Ҧ26]`/ndkG2K1ѸE8z-& {/+Ug:\Qklh[qu=ݒui-_[WF>F?QӋ;DصkQHKtg5dΓD vrWKٙ}z]^ؘ^UNmUL2?O#aJ-1Q?3uh,  3 EڐN>kw-1L?&_OQ-n7q~٩gPȇx~ӝȇUxrպf ]gi%UWa[sqVP|ѐ5NQuVrIՠ.ZB/X5)b-gBӠ3kJ3FW]1^N({0Dpzt,wL ֒*&+$0Yqr WJtU<<&9tCTk>~ ;Q] Ė~E!YOl:miƫU:fZ]T=gW`5j^֒ 2r4&VL-Bo%+l+EU<1ǘ?MCuTjy y"٥}Jq=_Y<-b.wO3ޛ"qÀ8ZFq{%TWW,zrJu9: jaۅ Z@B$?M 6{nϔތuА۳= 0muj\yrW;tޗ=<.WĖg[=v1? 竭Fu4HbZcH Y=w/vj\oNR.__+>{&vHǭ+y;Q>rNßi?jQx<&i Mki?0 /5!O5JLfwm̔ffohy5[N); %\<6#ҭ~^|b}6lfѐDR|5e’EJ̑&OKQ%׎QZ;qa, 捁J:o'·1ZHusufa,1,z᫯!ΐYPb`ʗUcEKeHH>Neŭ\6h7̺dq/[g.ܟTyK>WV.-'n2^DdļԾ0iEؤ4aw)DOދwFtQA{[]VN\'Fk;"Ft̞%v njD=t-ɑv`[k$a`*v/iQ-IX0[{lܗ(U6>\/VU$jg"Ǻ.+>Owdj w: |]2o݋څ>7o:?p?]NYX <]kvfwS{A&2qpWJ?ԣ$.Zz1[\޳vފu =lxc'ff3rkA c>ќCSKMA.Y n*mVp 6ӐG5ulz:BN%hQrC Cqn%% Qwd 0_(臟yrm.f~_v$9vk|a-Xjm2G%19W M169V˛ NL^cj׵=ƗׅgSkTp.=*,CID+`#{B+ў@9{Zc.MX 11yjMUԢE; aw>rOEW'~kLkv}kYCh [d8^ ZGC兗21@.v;*'߉0c>K;i[Q:ѻ#2nyjOgU1tdEW{JO/No օSk[ +B%kdIF{ZxY5}IO4-=9ǻ,i<$t1 rF.Y5<[4QLxS 3zՑCݤɮ_j*ބeX.'Gd2{|q iTt~qȜ PSl>U6|,B.92Jta^}g$ӶwK,{jTl 5½OBCPiZz^d@b;lJ{7!M"/ģ5]6k46q}ɽk(2G-hC,y1d e?3F;m1<_ߙ("? Up~guAr7i{ȹ"Zڙ=ZK&Mx"q/*@ K^Gk kוuD|Yk?ngl`nhQf,K]z|Oy)4+:Z>oZ.DŽxIg^gÓ`U}BrTԞfb,l}.}Ox`$7V23{:jFid(xal,,ɋ -Y/CS>[ Xc-u*Gum3$S0,^ib-&#&2q9r0]hU=|=L>Z? EgmQkQWE̢ 3ҵ99ͱĞ3v`Ъpvw9a֕mQ3?8 /\CLGM5Z#5 g\qat|u浈?_/}HjԐjZDIL {a5=:쥍:y~2lASj? .ڣ9X&ʰhh2.ư<! Sk z*:6o}JG)si6|/j fվ?`zT&;3CN*z͗#vRX uQM95H-SV̇.:dr]Niެv yN}bK)!ww NE2<5D9jK|^a=ᬝM<'y & 5S[E}vuj 3kKxөVrjlt9.-3TތΈqpt=t_b9$#Mu@Jr`{y`Ŭ:fG)|31q^ h NJxSr߉AzPxY#k3|{ E\lmW# E7(ќv?20 ͙z|J.[vUg{qboM SN@t*PУ5 FZ`'=7#&nwh3{G`SCˣQ*tc,ܸA>+$ ;#%( u-q=ظ5ƙkmѭnCi_kж"ȴwkv_6p#CW*}Z^$1B*Ivn \`yx- D5ϫ61 $Fy]P*؃|KO,L쉛}N(pχ"y#!Rv`̰G3'ԯ3u@?"2|" Iu)NW7B/uQ'M(v'qZg5:rT7=8ά()V i`܏gΌlu8*|+[:܅~gzʴϦ<]/,+ uSfO~\ / z܉`k0-j"Ks7u};v*`Dn:h/k}1l_"I_;50Ctq{PUstaB\PG/ž/karu@k d[mZMb:a_6`@FdOr?=.XEh9i1ݣ0}h1)wdz&e@ʬZͬҲܺZ919[ȶC^ z#&dM%L`Q<:ȓN;E7/{FPѯ}_ljEHAJwrCEXU=*3-r톣5iO2؈my "?7>8fz|N컕a>8>Ī{Z OmM:B[$WR}W7#nM:iP_6Py$ p=5g<<4Fm[G^."L?!}ߺ' }rAvhsyWl LXʑkuD6$ή-L=X_,9Q@A0&EIηfĩ>OLZCS ۽OӇȻ-}Ϣʩ-PG~&lv:1Z'3" a'H܏a1Qv&I]簉鳊r|OlW>Mn#ڙȉm`4vuX pya2 !NeTMyJ#l ] (4=m B2.l}alXE)-ⴸ[)V}5 /L\ΡKX?;<_s 8~d{r?#u`$>p*@ ߩ#fG6hzin 4\8z k٩gdIdtnKfcTՏpg@}f2Q6v眹Ǎs.6 |4 _J@܋3Os'r+ M>:MρFNq"V}E_iɼLse9af'ڸuF%{agd(&:K]it],ZlgRf×ټU(T4'VwCNnVUV^z_0*Ϥd»SBK G\38.U!o>dv `_A_ڊɍ"_X̡k<wgs;5Udynv *hXR;7H'`5Xir} xt] ŸC9$[rb[^2d l)sćf# M; B$Mxoy08+43U'=i>rpM@3d |:5_#LTOH~-:8lߨ]|d A^] i`,zygɺOgL`b .OZ1Oshea=U(dr׃tm=_R&V +94뢶H3WW^iGLdkhuUb [s}.h~Ffx];R\J?ދыC U/fSz\6˜Ӿ@Ok^ɚ|yUt5I>\6fаd:1oYz_ &Uw 1'Խn<l )]{ h3yrw- FӬ!ލ9K /mc lYjgs&|Ԣ#/ذΟE#(rNĜ2?Bo38!N@c8uYӦvd *в#Ds:><-$QF;ϫV~YEp K%nsbuäa;:IU9͕@@y #!Q[)]I[ŵ@ٙk蟃vDkGo]!&YibQ l@+}]5h>+e%mPTv4P=we@ݭvFZ \. ӥ\RvR"`~+iKcMtޕSn&zTqch^ QW<{!ȂD׷1c.X140n?Xũ͍|u0 pϰIƤfQQCwdڶ0W) pYr*Om_ڣN9|F`AhxÍR!qi.XRIkup;|*M B=}mo8pU6?31nXr D']ƦOAvtya_W.{FQb(?}Q <햕G'KW(Jg?{ /@<si>v C(;&_)UpuCjo}̢Ky^& Sh]n^Y:-#s07e]tcsPHυslą irO\e[!=a_SX?0!6,%҄a`j~EM> ʗǀt}NSe97#L.r+5R.n2D3ZlM{rh@b+U tVrJԫ>6r&Y556JzuCwSxNFjn˂I*v?[7ɒY/ P͆]qkӄzhoƬ+XsxC]LK_modj6իswlyi~S]ImU_:ڍʱ ۋ#, *>Th%!k.k&&58~7 kǍdsSфhXwڡ]N^FJl"|>c.8p`z4cb$oZ@+ZN)|0 0>ĉvw?zacnWӆ[UhX|ܻ/ _?%"*> c4 |G*'9eFtB jHH;ZaO8pͰwżCXEd@hnny_Xd 4p#?&Zkx` [KOy<.Mr924)GNs? -"P'Y }=mqS]ܱvyr뎄'?MnNkXNB/}#lUu] !I<c03[gyf*%3swnPnV~sO,l`xGmݯ]'a™S%Pť4vJRr5cvA]T`)7P|cҪr+5-y;sVKl!vMM}f(?'q(3UhCZ>1:xj?Rƭ;y3:foN#l ~K'MmZGt R' I1dݎM;sAd-[mԳNj"H}L-g% 4UxT#ᭂ<3bJ~\̫*5h#V|H/Dƹ$iU{r"KFb0om{*Ll Oh:ͷ&]/).LTzOб45N^MYQ22TŀZOFb5Eie?˘fnyufnU\OӮ@S }LXEHZS?QO~;# 8(7t7k=iz'}uztUF^i8x)fXuLZ-کt/GWE@uyfǮB]f2g'EeWAZzNMw+V£B+ɀ@ytںf#ͅ wLX1*T{ơګ;ZΕ7 eHwLhD 5R{fQ 1*¶qn2@㐗,&%uە_1fZ&6dLѵȕ\op?N1R1UTE^ԙ;C}jG~h;F|XѣUvq,KÏ h߱8 ?%h 4pG:]MU%o g>f*ɍ gX{ Qۨfȸ_:1QQS@}cjzF0 _>dvivBMPJju+fyI\D!J-ϻ*0@48V⦈ 0@6d/JhZ6+p{ͣYEs:a|u>B>1(S<ďyι7MaSJT]< uiݮ3 {6˚?1lgˇ} }!!{ +T4[l*!#tfs,ɂy(7H7%Ý u8}_JnN-m=tc"%yfKgEEk(dqޭ am+gq2VtyC1}{)K= ;CBcղt[˄Kq 4"<~::xx`R3&LP a-K+ F>*ѥBg`cl;l\jR${Gi, =Ų*@QѠk;42Gk竱_x]+TzhyU+i+v})LQ+uQ4|@ eKݺl7-t̳oK`ԦO }.KN38Q9£RGϿ7imf.jɮ s/lRXmx7evϮ0jgvEYO?12X=CNuFhԃ^y^=OIe Z XiWW>JHB]jf.8dyMsc!wPZ$r" H%x}x} /.s܎ɠe3g_u 2U@dUTt9'േ*劉qQ5*s]/LIt ϰ~{H!3ơ0N1?*jV498.[t 1Idu![m$YE>SxaaZfEO}dzSvl nq(|j X֒m˱mRY'}aĵ+tI޻Z]#N(1; !3UmYS{bZ#co"?ڟI1=%TH2/sz`a1[b. O{km²Եl#sAf}St/xS\pm/S 6z]9[޳#Ӓ~ؚeA- Z9=N߫ 2:2)^+_2Z?` *UgC .K7paÚiWM'/"n3k}Z˨4Sv*HU3IN$7o&i<<߹3Vl=YE7!WROrKTUgԕ}y6fG]/+_`rb 3_ߕ+&kWu7@ e8<-DhlB]mQc +S>-AF'N%|]~E-W^ݱ{ybvZ3{YxëUؼH7rбEk/8(@T~!yweU/5 A:0甆lΰ cl+'_GtwVWT_H'oGX!>%ɏT`zɢ[X;c?GȔo y~3t4FWByFy"4#)^ cdByf5҃{Ɲm!k:eEWe1~Ϙ\퍒EgؑYR6KH A&:e(9=<ċW-5"v+:j>)TU5YElHj4q?{M)iwT+y TcCb 6f\JL9gè)(|ʐ?{Ib;"VlîWIYCY*&5]GZ7e{&[oݥ7_SC)FS ADt#FN|9yۦgu[}'ݵx8c5Cb|R n% l3Fԭpe@bqR@ZZ5nd9oaЦdԱ}'Jؗj]N01}gC Juߣwjm-~㇋$Փn<*0ॽ,K= O V- $\Fbc lN`)e0E>JM&vD~B3b;_UZefӹeSEv:  2UU|M\b`eDeдC5^>jp;Y$6b?1 |1~J3g`r!j^#&"w{11Bw>f$VTwCVo_rnzR!xS^luHa2KrOi`{|u*B3MBi.y^FZv;U5"j'H&!VG ؿYO~r\}? +-{ ,pBq~V<ĤLSGȶ:jE,WKWY}}Z;8'VQ9҃u_1~H; {_'(nn٪I?{l _]uY٩Ms "lDh^xfSfC215H#|>W5\%O엫W#›aKr ?U: }C槕+F\&C+Jj`na>N7=@uԋ~ÀԶa9v$?.NhXE&y)^yn'n %GF[\1h4]m%0O=('V2h̺sRg򧝪졚|~>|I6 +ݗo"˦P /vޫ3"iFX?]jzl?vyYC@&i 85 P9rvre;ItEbE?STdSd//\x65qr`d|("5 2}PybaVjXd}U5 䔨ܧf_j^vS>;nF" vFnjw?kPSSmk#}񁟬RɪKARͷCLAW}WRm:_rb7J\N`u1R'ڤ%IS.ȓS }_tӱ|j_͟vf )ڟSkAƄ?ٗ+< |ezPPJh]&֥6|_ت9BhúyjXd\6)Z[TUWNmU:o%## ZPcp;a:~fުh$ 09$GhRA*D qorM1bO۞X"VMO;y7pNMTFbinkr5|8`Myʬ3\ݴN2\>aؖީXK6O=L QĤB BaNzgQ0G-Lדu*:}[S02]7ssAͱ;QrwBaqJuNCN0T8fWGK3\j w4+V`c&J(HpX 1lX{YٸtXTAXg{%WJZưjzܬ2OUz#yTS*evN&ޮ{?N~ʶ<'-0+z\0l9ŶZ_YXCmȦE_}O]r(K;T)^zGqa7M|{ȊM oF@lIN벝RSÑ3ú3S?eST1LLNF{6QڡmP%ѥ0NM V=ݏ,ear.7Rj s*CO?aP&#d;Ev\$,ѽiY,߁|QܓaV`l_>Kޚ#leKFfzekdɗTp3֙~4uύ1L'~\N^EڢbXH_)i5ei>r}  V3~aH*P_[u2=XC&=7o}Ljj7-+q2AgmyRtuD@iGd@ި3.$b]j\&[V{NFo\=aXӖ":6ML]/I%7G6*i/ oIvd@AFe,(e䉏6o/ QRQ׉[`ѽ~`x;]QR}r1 ʠa44>ݤʋ1 }B08ЙHh_^ 6VEA[?gm̤ٵp֙>%#m_2u#Lb?'icZh<|[~Vi><Ѫ{z,a&mln]Samn[ߎ ƶpԭAM/OݹȮ1h2gW05_J>^{QX,GMONh[[47պ3P'̻Z+{[`9Q]-r XGQ?b xf(NE'ӭ~"l 'EȣMҴ. Ԧԭ|xOe&E$'cȣ4vFR g`t5cT>z4OO7YdmEllR2@QDkiv(/RMzkŴڬ*Áq7S}d3"-v? _!Iq< s'FJb8ȦFcmS0 ᠡFͮyA"eK-Yjz","MñiHYK:ghC&/ZDVoJB1ڪ2z$G/vLSK'JŔ2pJ?^' gZK,ށ76+VɅ#ߨvr+d(0WӴad/k礝p?^\u̅4& +a&xZ1ڬUƦ>ZJ$huA= >4iH*-?`ɞ ECua;cy-R?cq4 ;m^G|ٕ@] GO)pGUڈ~2+#L+2F~[0DQظ(L>] c]BAμ{6%V4ںF;3ScD[>(] hH t{.$˳\V91/fۧ]k1"%g5P 0 q"O*6&!kݝEY‚ @FVV~8=)x,_#WۊWΓQv\LT;!p\Ŀ`cd#{#6/;-z8hݏ/)&[^%& ѳ׽ާQ H<ى%VIS|yiBbҌWr8\l z e?b.+Y}. ~@9Тnw}oio=tY=m5/}h>}w= ORt CLⲈsޮ V,bcg<^xui> tK:qW|ۙ WѾXj(n,dYA+}L7u:{h- 12?#Dffh]p ƒ3ҁx%HL,VKyZkcxɨ ~j4ȞZ9$ 6cb.@F>=>"/l,]'B켰v'v ($]Ĭ<7VJlDiz>h ajtb:]jv~fEޭMHģU[Z}FLæ3viǃHAؼrMɡ3?-5Dl蟺qm&b^YPEqC{_[._ءŮez\۾vf૎V6jؾ5ƞ,E\w4<dʑ#CN(>2~^#⃩Mw6lI*Do-:6=/!a#g4Hp@ ձG#E|u"R-  gռ!pbC.=,Jv-ZF QfZwp+:kq^*F0Rʻ>OUGֈfaEL6'\i YnƣK)-m;Z8e2^fv.o9YFn!养لJ4uΣ[`0&t5=>`L<"Uso /L3e}gi5׼Ob;` Cŧu|=@nTm2i ҮWsPF *v\[[^K+(| 5\#-W2c^/ʟ2b4rf|T[zvL/r<^t[3X y--I[{nA-jpn:(W.O-({}q˸\[z L|UT:Y8W3.۲ *yz8ܸ% tw^-J`,w]u|]!j)Ɖ_.km pCaDhXWS΃?Ӱ]3@dcI0TS&1ŵ1 +!];kGB^ <폅Bc8}wށ!R3X;b$x#Q>gk2.-c}/e;A~m0rFCHk[}El#q1vׂ`l,lGή= \B}I7AHS% v93G} aTu_q`LnVS} Dθ쯿^ovN n4asBf#w GZFb|C{rjԤg|Or~np tٲ6>|{CFRe!rο`r.5:mw햗3ǿo9ma=\?2='YZ!!di!8КGʱa[F:Ǟ=#;޶9A^ړfg*\Pւoj鬴/b<* -ybeD<Դ+DUi3ޮO6Nnz^녭ޏ p<#);H;5r36h-VfBhl9, c$}d4}̻Z>uJ^?}r{v<&ݕyg^nԐtUJ oeqp/xrE5ȀoNq?Sks'm;.QʸX/3 i>5l ^Sg*aO{Rá P];h*&~E)dPoql {q|>()/=w 8a'/tJEd#@xv 7O1g?{:q 3`S.=ҊØDgpu:j( A'H֓Um3q0CE5\ޙ=Ww 26΍1 C`(!yMr1^uYGSgAB%K0h ,ku);s^pbuXNto&+>x'){'Hl;CHz[#V8yAh!& }Dbpz[/=J CIc=ECF8la(;-B!`i|==P,!j82}*^Hi?w)OF7AW9nCF39iAΔ^4 U X}v~ȠO0Cu;u:U6qMnX"Fxa6 |d={uRο߁鲡a=x*ndOo/B`[9 k道ӋX=-m6(LP6 #éPƜ:0GTN:$@Ϳtd]͋#E b-sށq\zerZ',= &ZޣPSζ5=h(.}ZtWFEWע%2I"qrP2mv \z^N V e`<{$<4lh+2>pag}F-}|;tbE(iE)7'SKfK{kE`v(+֜r_ iQҀplE"9]d/:d0L[ovd$<ė2sOҨPf%SlJȥ|ǁÔ 4r;l@;*qm3NdoH@0-I?~XG} Rtpo3!xQ7[I4_|aWL-;GZvaEJRgm?2"n}bgUum5i;`Ө[F()ryct83G)ja8~-w.-=q]b*rB"gd8{ ^lFW8P'Ϳ :8~kxO8H7w#@;i%|M>b '|ls\?e7ϻmXF= [ba~J^rC/r yBzJo-b{+aqz@QF#,޴%b;g 6og9VZr0@{Q87Yˀ)w !GHwK{\pqĊK C`[npk֡JxcF727G-8Zy3To0TPseL; حzgB|#rU5_i7>sCPoqedA5UFI-c!'oeF{j' V<7Sp h˼B5nA?p#gKU ٨ku72nEYDT!`w ~ GJ1Zv![߲|5)>c;D^!}iyAO4 !=ԅM: Z۝HY'u'?뜬~NJ`5e|A<ĪOe2}Hj*tI$wScA9JH׍=/~(m,?m1x/v\"xkR)tn:קH90C#kf="xנtP2}g.~ᆰئZJ('ݩ3nYoSumL ')^P jxZ;Vy%r^ͷ ˨OT%ǺOaql2O1FY{Ŕg"I0xBC! t;1=OLju/|B2J.H!2O{B/vAHS}IbU!V\;b' d5L/:] MmDfj=>LODyD 2rVwldav ]S:['$Wz F)=G+3߹WB2vgU9uZlw_gEWzn~U1ƧNո˅NeOmWK߀ nܣ7 jhM3Z况D,ZP 4 mZ t(H?k20f Hjm1dM FLmDq{^^g\c*?w^<?GY%H]#[`gxP^E{F8D&rmm~Ha^qyFS59c4B{=hvVꦷ+SEl}bĴk#Ͱ h.-Ce4N&a`-,(I>҂P7 .tsǾ-A_rUgˣ`h I`B]z'6eϻ7#sB_:g;Ӆe1B"z=߳W \%w- kA``GAyldig O_" ݿ[) JEtfeDrqRh'7owԬO`\=pb5YL6.ݻJRHon$`%:Ⱥ~ &B0MJQWY)HV=STHPu=4UJ48.oyGn%[~ŢfQt<8-9H+%u,KMuSۯ[wLwm;L|ᄇ4wĝpdDH]f^3eǂӿXnr`БJ&UwgW9i*,ub'*$%/,5,eO7 M|H>k1#V!4H5}ޔpUJ5>+Nej5^3rnaK]oǢӊ}k/LΥ`:L2 {tF|lhw䷣;DqKN '5(jX2ܩ=e8.O3A,><:İ}JKq;akc.F>L7W%⧱py|U&FzS4sg2bdŷw8_`U `Hc8ϴ,iDÓkڲ6^S2r"ŐX0[wy)wn*ds%]sbSע|}l-Z<ϸlKwvvC/N}?iQk^e&狸]ja>/6^!BL_ MG|q `aǥzM,x/H6~`Hct8q99Ä d&a8: 7y>Q{0 Fˁ7AR߅aQ0!Ҧ[xy4zndz$[S߉K:wÑۊ߽چ9uZ$,̙C,x?#g=\ޕUodH v~m f.ZxnTTgBJXt6+x@`{YdNǗ3XX&ОEUA4C^sUfmȩ9ek7#<P4SFߧQ/]<< 7c9]UFB!F%xNm.%D/`!V޼xjS72O4 pm{bA;hXPw .k_"=Cw]y(1GZ]D mch1, #& w2c`}I ~cvf ˕sl߅E+,2_F5$$k.~~`.Idh*o7 S!.rTKйU0e8`[U܌$vp[ Χުo1CAO pOJ+wﰍO<-:<"~C|/t ;oӴI`|Lp~o4oc6/gq77MD&&0{D&jb[t@#p+w7Tf ȥӥDGGZFkZ_Os-"^HSs(ݒdx/5pݧPGrhv^R;_hAIBWZSխ`=? 6e2!^RO^.R,yBFS_/~=g4dpQJ*(&f9^:u VbnR&S8}& |XM$I-#XXNtӞ[V`uqIvyBZx`uܟIT"K;?g4d+*ⱞ0d8@b)eu~`9'mR]^\l s)*ױmh7 ~/)}빫N<2H]/blSs= LkZɂ6B9+* ?`8MUZy Bc^zZ&p*mƮWڑv@c!4Vjew'*V#iY4QR|jV`QLrQ#C%A X&{ 2ʭUJ^31YuFמxh`Wml*KOl\4gF@qo2J_VI9N} fp%\ok);9y3r zAb^kΌwջRR|T}玏V=*l!YFz_/ ]7|wJn<$"hXz<ާk! ~MqEc߱Aה>Naޔk~-p 9`ՈH^y}UbskU*$a67Sm|.J`gƲ'5`:/A{.Q4 Yl֔Z^cth*<䣳j +{*ׅ:כ:(Sx5-5OQE)F*NCՈ掽Ε!vE00gh~:h2P1/jck?/0CUPNIӷ5j8"WMN.еY{ By[[*S{n .,r  vn=ۥ"4Ҹ79/mvr"=//a1_p 9VTc]cyۜxqcHv r$Vv Cǭߴ1+)~XӗYePlH`x#\)[SC,U^,Pg픯0HlkV*kBWlYs1KLj0_,ێ3`}D ZeR_0S[) ZQdd j*D6eL85c n(iȆX4z L<쓰{/bJ~ht^F Nm ۛB]{>{Ў(.57.uFǥm;?@gw6V!ڠ*Xj[e"S/Ol45!#z6khEgzW[ئ6)a-@#<՘ONbWD{}]_EScyY: 2M3j6&_7#?-v4nΙgsВV97Q# ~>t͖Z7syAq^aI}z74*[B6*_0))v VA\5Q[M`֊&Y0Dhþ.֬)[:9VR1'ؓ^L>lREih&9KئA*캚ܞ|D,)~8~te| qSi-ަl(:ޮM rAE$+f}'psW4?w7fv&%wuaHwI[bU 3u!41r-(r?I\a9jw|N%A(Iʯ84݁:i ,AS=zHB$վcI%sIc6̦%ޢ\ CC`` APnh0mKsWvt ם h+o[ '62qks(~=ER 3nD#!% _)RHC֘-PyݾD1?^6Kt2eo0iPNa wXW!-3o0il<x6Հ%CsiCI4;{M̯m+UptuZte{)8?ญx'a+; *.4,*?56".!ZAlP؂9N|k``w2dcezwE o.Džpup ދ"<)eaA2x;#;#$Ent}.CВ+_Ԣ lp4gfGW*Md/Xg?mF/V0#Y)745`.RN7oweF07 xe=fnZ $dJ51A ݙX-Aꁠ}kLD&EJӞ7bi+:}lHåJܼ3`Q'L$r ʹߣX TH5U-<8;0LѵDQr'p\V ;Go!ޥ /+\i|@pm_AȥtWgH`X6H[3ؓ[z%4*$6c(DCV2-* CCvIfLZM@:\*oj7Y\ŴFgؘ(ȱHp j>sӅP/Z;Ŕ|Ͷ9{~H/Nto`Sru2} xIc_Z֝;z^U`xwR<4ݬZb+=\xIgMCš>)6kljT_:Omv kib2yb}|kbmTc3m7!%0'GUZKpXe`">n@T'>G:PmvK_Zȃo_|_:xps燭oS?_}YmCYQ`>Xl6Piau_j zO\3m7&S1UlJXҠXj0 z~-7ɾl(i,=:쁚%> 1b/= нa0约0chm**Gý#ViD _ZgdCQ2g'냗R6Vb;2gAE3nHC [=rGo"(fFM{ؓ]z`c`h܄ޣ矟$(4(kr"lþ;pe&:׺0'VC{@@P>qӣ|Y^(5T'xxҎB."6 ཱུM~PA,ˡQ Bؾ`ʡ;e?wb=7z-h6 b[:AhxoH]H6];Cc ~dE6Ű6q{8"{S5L7uIQ]Go40X/ c=յ5%7H~8}\%J3eVIO+2kQҎ?UҎ<: (!&C4Xz dqj̦`ƶJr)iDV$ y]Y&L@SFg^G}\&CQM1+b,sa O$ .]s2 qu<hh7}Rkyze ~v DZGIq|-4d}JdV Œ)v PG 74& r{:W)&WϡؒynXLlf#ۣ ME"3LM`]: Ec\z$W:GW-a5VxXmF-W88!VqGdZ-8+@IkWhoLYrt: e\ lr74P3'G/]hJh˛A~_I $I y.? ~@f$ #(E]c}4+묞@/.[5a\F,S32#ǧwIvMx x2.7ũ)9{i5D|R`doY.᎒Fl>bѭGoyŜC!A^3w킬XNAb9m/V8dvR|tϡ|*۞2lX6>1bu?}kM,7a[<Te7õOA!(߇WFun ]J+~oqru 9?|*e:0QT[ZInnMݯcd#FCJ`{?H~Tt(#͌UIǍiC!=]tI`*d0ZK-mԫ O `LmU3 w޿]5<%:uw?ض\A  .`[/siBXMxВ)d[!2W}, o/PJ)8uӚWOH~A>׫ 8`c75G rfψؖRg?#Dᠱ'}.zdQ Dd*[ވ318xa*u=M+C6q>_0kIl'v-Ҭr"qɵ:V&lϯ L&-Ҩ^mWi?_X])W(eOlnԝ$;iOj'vۯmdW-CbY͟υ̑fSx5S>DE8QLW22B *&f< 0Mx[Xm)6U`e4Ebj`ݨ!4j#0 O6h}$d1 C&mX󅝈v"(}@0X5֮-]4)|_B !œhR'0$D]j^H2bd;dNC eCSNit*d_R&Z%N' v1D}"EۊXCf 9d¾~F0|9iU#2ְ =A<1'+/fEA'20_3WUրbAMwPn% tcrAl_pOb70"lX}wm?h&_Wo]Xױ 25Ŵ Px#Jqn[ eC;]hE?xu ؙ[A,PE^ Z}< bDeaޏe1lY:d}4L#㳬dתTʷ DN˅6FE=Pݯ .N1҇D>[ z`[s׳͑ytEjY}xRDɏni?P@W?Ǿ>jTuX?Oa%r^\eOrL8mذ uLO/Ms ۝/H):W苖uOѺK7 [g0Zh/&3, UwCԵ#pwX<0ekPʟ X&8[:3ҾbŸBTΤ<'~BhJ5: Y5M1 K= -7Nb&w)sKޫ~dǦ`^^bݟj]"`{ֹ*+b=%m4(F ;ON|IDCF˨#~}c1As+i'=qeαt>}3٢FۨVm!CYw]Kt)ڳ> 9O_}WQK1"}rYwy ШBp/Wv"#:h,O{^`u^{n4%D#Ίq @2huMk-LZ#jf:ʪv7}ݒGӨ;iS AKUrhBi^'u-+S6wAAWޠlQJAI;tχwȹ]>v zI4beXФ|6µ[uGeۅvhoOjCkv#]*4PmFi۶#Z7II5ߧrm< sww+ȬKǓg;ݓ5ܚWM"U #|[Y=hNˣuK%M>wXD FkIû)5_xв!K(øMF|`_W[3j(4b/Zǁ~|5Liٱ<+!UVϪ?-h :UL  b:[]ރDK| +[ a$<'}@ !kFj lˈ׃o3ޯ~?a@FazH.`{P oO?)/|:)QvĨ@A=_íl)X'&Jr%#TE9R/? մM8  lu?{\?R:EvDDZ'?r}$Mwc)LMz F|cht6H{H5ꪤMyYtn? mDo TGB G&c ee\s3@k?)H\ӻҥKKl39wD.?TYD0 )^:1kx?SeNn [0FS;*813VџS_4. Lf1:5~/'dT,2Spl'! ucUm/<>y䓆m$l4m`ScxؗS{y&?Ҙghh'ٚk;h o2Q&*d;7g nm6n&RNVUsw/16l/lģMt S^61hʰ%S>]Q f6L!qY>_V:N=U1R?hWJ#5{[0cy }H.7MDfkѨG7Rku|y?QWY|}{IoGZGW "3^2>XO@o5 rVsLVTu@-][R4<_"jc ut M}R4JQ!գ;\/ѧK{ ah~s ϝhK6N$| הW>aX\>MhfYw'!Xhj 5BTHσ\Unpv)SpV,>CnQ ]Lo4㎓H5A; d ooW?~/x U_& 0}5frmW4SBS龖y `ڻV;ƽa¬?Wیt!3 VBf?a-XɬVII}D.Uı7 zSKz1i/wz?aT3١qWtO~;Nk@E^s]7ѐ. -mT ]hY۴~h $˟B#(N~m r[ ~kVlm;V8X.M^#Z[[}ӞN!cO4XOvFwR?Qc$Ӯ|6vD|FMQ(B]5i_­!8>ڀ988~J7Kx=FkxbN>w)O} a]yr+0; l'ޮib40>Y|6 N8{c} R'GYx CN6Gup1[HfK(ߪJ4Ehw?\7;چ],T7:L"~vAyM Fy vbsDf7l.$TŌ׋YzѺ+"|]D]:==sEF5vk~ ojTjڑ[e=nGBf:6yˣӔeks>m> }tk֠OIg3惏g!~G ލb|O;i^dp?n(my8 t^礭k.6]ޓnIb€X k3:-(WPtNB i6= $M۟ ::F/Z2PqU2 ]B|6Ilj+0 #kwnf'Wrv<0j >]U}40MjO >]xE|_#4az JJ۞1.=Ő^c"nގq5!}diE|_'4Sz0,Vӿhۉc6(O_CxQ([0_P/Y wMwr|&Aj'7X&։C{I^O6$0?@ao DEIUO@r] $%ׂoFvT /I@-OԶJi+ b܅"n2S+ϛnDĤF mHG4[\_ПǿkNxytƨA :c'Z5 g1WC/l8hI'0.ڽu/o .m/S8܏ǜn 宫kx7+?%EãaEEoIgqDzMFؑB!o.nwqp>6upNm-G>}]h#[N.z~l˷͝#TO3Vѐ}9Ydfs߁]Amt,tihn` a//:y"4v6¨4SON;/q5{MlfQs\HIvJRV3@r`S*<YΓMFgͪĻ QSl.em #)>e_oCay!gn0F咓3|{1VEbp9BeKشيO#lIݡq?lդtb`6CM%|_GGc `ǜF=L<$ئ] TH[+O3&q~UD< RdK0C1Dp_fy^_y2nCm-yVEټ={~qpk!YF.l4 ~l9ѐ^xQl>Ut:s #lLa=bg|Y)T>,oʒ0 #LX8GL l_jc>%9Ln[tVZ^Zo_PF9x7k?1/}"k#؛A&G=˰NjbM߬-[Uj%ī ?ó7nϳcKK)g9bTAP$;=+i78?:}>e4,h7Qz/M$@rh²F,?=_t:_Чճ>YTcʣsH"kS_sN@fw#zr~f7FA*~ql.VBu- wJ4ujUYl9l;2Б@5QF0EcA4\eKZ7+mMA=ٮ?Jk?:9R eoK ֓;^Py dv|xp3# Ĉvl^  O͊"@YmYQ<]y?bEF\bHgECxm4@)BOG'՝q~^=clF#.i#:>sL)-ѥ(! G7b7vcL5mkKd7 n gP4Wb3TG oaǒ_FaY\BbDs,Mݱ >^dhEX- d!cTVظ_zO iyî kY}Sgw{'|i9Eu=J*g1,T]ۜoFBCz>11jÈK}\qvU92v}oOѐ^!Gݹstx)32("}'4x5}(kiH˥F)nwÛGmTOSNٸǿХVvybxr&?/t/PJyn`G#ZF:#ylضÚPGFޱ~8Idq2/Nt>Kݪǂq؊ ϻyakRAcY4]zQq^:!gT̓m,-zXgC#[qpa/[GZ@fT6z݁osF#xy{| @/q(F$Jh^4/~'F=; p]@SMNؗ>UPw:[&`=|}I d )-9=vhɰZ_|*jzd5 /h'.ׯtƕ0f̟pUo\75jsE55JJϷ3[?pbDJ f)>P=|D;vKHO-w^v扶<{D;׆kC@h4D-MFn'1Z^ݯdj?qlPb$j=J郞M8˿ZL H֞y» 4еe#:x&3TbEܯ% ܗ9[!jU縶.U7 ~ُIg^l  R NVBp>[ ׾67}1d~/`-ҳ\2 ^B UVO:y/N&\Ԭ6ѺɪL)aEn8)eHgsm˰&21 F Y}<x:>PBhZ˷ӈWS,4nJFnN=>v46$_/ s6>}(m{kRyA\G|PBICuK=ePj?^ψR!I>K}Wgm@FpvG#ٯk߭y*L+/;@~P|=cqmۂH~=U$ZLrG lKw յG@3CRpqX3wԕq..y_^јnjmLv,_!zy4/Qϡg_+a>v * `Әs^MBK a;>ƝlxP?PRQFk:]sDmwk\X~8HQ^r ~#:kYTzB&5tӫՑy#Sa1PCR烯ԛ&ʲ ʍXAZ>5m"uDx-)EDZJu˽:OsގZvS¥ݘe ҋ惴mbMmY'LcjT>S烣~*Qʟo|w'N"z=izbq#qAVīK;ǦM?뽪 5:D&|oLD?jCHN/"[~;y\kgQ $"̷&f?'9Hpuz ~t8~?[Z.Wud6@NzτeEmk/L-'}ڇW{{db}*3e#F.bڠSNtmv޽8 :6= Q $,*OQX}#SrP?Kpow$~N m[D&:[n:f| Zİ-qQVD V]Bѯ'_$up4G66%b7e1 bĉY/0筜ԋ){ ^Hۿ'^e x{uϵnHCEŰ>lkF@.m)]fC>b*xW:Ns/[28@m$v`]~ERt.k}"cao;e SZ3#~ 2%RLqe(J6zt'skT,)G5dU Pa-^39 XևlzH<ӮoФˮa0[k/@ H_rp]RNx@ _ճv+\)|֋>QmޚW"Hp PϦte)pj>HC`b>HRgt#4C^@rQ)Z~D;e'|PvoK/N{N`a{[ة}p{-t ܤZ ve[/85UVQE gcȖM; ծ'U WRiw Y~²&%e^2"д4M6֋ ӡd]u(dI]-Y56ED"Ⱥb[zìyw0n9{o-z $=ٍ3km{U`%x ^r6pu[߳¸bm D a}'5Pȿ/bRCh ` zuHOAW1bpuy 9S QܧL8\c<% @'i33P.cPܲ|!o?멛RYP ةIyʈ{$t=N-4)DBVV>@QZϴRւ>uZ$#AXŧGܘ %쮺Ϋ|EcSŶ\[S}vׯcR/xb? N/L?_v)d'h@YlT4a3⌧h+t W\@_B~ zF4eJVS,h_!P(NtTTd@%kfc 2O,V*4@&Ω;S\:1_bi>f:? 9Uqq--Dnwlq8 QgJ5ms!"ՄBN1s>< ] +Y3ĬD/p+JtN I\@$p•߂S=~q%UjQ &N߅?&Se&S7粩>sߎ|ܪt;2I(Nj;:%}KV-zH=F a=FzNb}1r3vVτXO4-l1]RV0]׿Pa[T }=N׺ymVu q/SIϪr@ʲr؍Y0daws}s_Dd@[h0Tjyu{9:!@>;y?G}-^r.%wAD_~4\cb?yWxf, m 0SpOtggψf\qĈCu 2zSkE4$Qy27hx)q%'׿YJ#jn"*&߯)T <"ͱh"'HUv EKFLq=ATwګ3Pj|3a dBZx).?I5>UA:+d+hB,_8)9dzǚ[?0sz?OK_RPȇϹ$74(8u+~c>Ӛwg]]S_wx.&vPc6PFFV- NyJuרp])s#z ;on-dw(F9ť)685LF茠#7\ڿyI7*XXl!O&{t/CX*WqMZk= ZRPɔ{ LRgZe1]ܴ$zƒƚ]{zq }Cij3r}m|4@}|+JemXÐE\;p0)Aj,uWョ!fZ?χ" \vސB_7OA V,}X['#'+v;yY zwEXt)t7C n#Iq`7a+-0Ex:'^b75P / 8)@g¬ qn~41@En?YZ߯+?p~`hE*T(7{ σud5`!J˱w+2~+' Կv nwܟt3Rc]LdxBD ~ ϕF`%~U8\|/h,ܡ)79Hh޻U` .\V[{:KT B4ᱴԨǭGEx.L;t00۠ʡG(;N_6Ä2F5񙔮_ ́3G P ."r>[F8RW@g/XM֪J$үaj ug}6?lNpSuI=boapeL\,J + ^"}tu ϭ)բ޺+S}T]n"_\;C$9ZE<[$d' _>a';[ֈH<ͮ4 44|c~n~'Ѕn i0X>]'f}}kpU.vLIn h#N:aBXrwy-َ\Z(e &A#K>j$wRvr&f";~Mw ~Lٿ/$XW]Vѩ-0Ê9(kSH7v5/.ս-P4#^qƍy#;h[WRxP:5߯1*ɏ֗J8l"n|@qP';.W8Q4 t%Ir/rYBE[ $yVlr+߯σ?ǑA5L4[|WR`,ulu<8}%gS㮇eH vt"X<ֵ>(l(%i0ImgqK9tܹ Ij?F{wY~Қ8(AJQXW-}(JG>n~x T=~qU1As3UK V㾧L/gf9J|zOBhQ܋wyQWfD> <|slO9 TX #;c"k !4@[n(O s~(ㄇ8Gp=S4|IZ}Z!R%MCV;MiS,XgZnSNGfy ICEN*J+^ǑV$w%m; ЕyM}eIH:J6;c!7oQ"08{O,`rޤORkbq؍A F}f&rew_pG2K8"%\  ||k'&0 P4~!/n*y{q+žodW`05)yx)Fی' )ȟ@DA `@9ۓh݁ژURLQY>ЈUCY5z[7GL "UzlicItsdY['mK9kZdk-0`î-G.7[̢kEyz& 45Jۀ~--nzyZSȎt̃$vyZBiQ,8|0׼ p=pֺg ~m8}!@UJ: EwiNٹ&{v)y i_R9iQb Enq޲e…}K$_uAt3N49&^a:fk\ HݮPv/>`LyBCxRp&ZÔYgUR \_QZ|"ؕkV8xTn] VQ~k gڃYx/vdbVU笪Vh2I!AeW2P/ZlN]D,OvwN \Ǣ=uҍXHgCk.]0[ ) [񯡚lL_QH2E(hpCU$jhM FGam^'KLcv*s'>:]rmy9& (׿\}us;bIſT׹}/.;X֬xE稟ˆm {@GI?}_&EHrHif;up:SgμםRQ gGs .8ކs7[r㤆D͗[*IB[&Y! at6B4ր 0kH6g.{p8='&ZՆ1~j풌-EĿexwN#iE5/pDz%ڪD CyAb}/\zT2ʑ~X(5|wŒ( cT PT| fhZJ[*{ZD%b&C-5e;O^ֿE1zoϤ\;xn2\}FX;riŋ<! Q᙭Җm|q lK9_`[tp/=N 8hs+JTIq$JSPr+X;~ۓ 'C0.cD d4i_Sʰ lJ!b=R9]@&TĈq@E$rJxշ6Nj!]Y)IUޣJ,Р:1wړiKE@ʙ,`|7;R*pt^KuO ܀tpt; ~7]DCD?|jM]V_:cCs=%MnUUyک]g .X9ݖ4D˄#`@sEmyio`=6r-dk׌|Y TW1(Z6QNu^ȖO1 P*VIw9GJ?`-Cboyr"mc\1A"XdFzaq"쫛Ǹtһ+xXN[O2e'"LC؃ 4y@8YO U^ȅ >dr;bj0mg R]mw[j};eBO}(;)^owkSC3<{/t~|25yn7*goMT_5P p2Nc \5Q P\bJ߫ZQ˔ դt/vCD%u';Mj G0Rw~fr V}{( Cʔ:ɔ8D7&=)o[2<ds?׻P C5[y

83(O%_T:O_.['%m 4<=_>uRUi'])#"(zH4g2 ""KbVn%a[/1=R ;B EYtm[/r\UZhgolP:֟#}.{Xϔ=0RpH9`U0x'NaB@䥈8MyR;jslh`?Ys8[~`@kI'z PAy$i8A lnK+f uqLr{44]7n@vh]D6w#q8Q^{99$CZ*ӧiAW3, +"RKP 3a]Q@G>L['ȃu7W.VpMi ^Сr~y|lvr Db88o^gQ^TK?t#ވ$y8˛#qL+k6rc61=r ;}0o+S@  qEQ`B^D=~?-O G 9|y40o' Xnp]rUo\Ԍh0h%El]s.@+Z6W8sRMV1Fq&:TݺĖV{'>{P Js:D F(4ewDZ[Y5ؾBՂL`47-]GV/:' û>:w,vzS|o!ՅjH_ Co,-sfz<ݰj NQ{|^ڥD$jܞnf+zfΓQ@D}x6*;Axc-xW[O0N〬2)7FB"MZ$:h\*+[Aps3q{8C/[ n+Bw6 1]UҬ..-J-'.D_}ሎ׳ϛ!K &@kh> 6+wKp hg_5ߣh@ @k@ioFy~*- U0Mh;>]P` \c~ j}dX# 4R%E= v1?, t&U[lugl 1?oG40Gj=, nMviltD}geGA7QpMIJnݧoT nXT JL_i- :6zfݍ*č|'[VY֦nunIүmc&eqͩ:Wf`S^#k=]Reş/;dӔ{/XL)5}tfq/ԷExfPC,& @o~%h;GOf ]קNQ V^q< wJ2d3+C(VKRNbŜHBY,=kI *10Z ռ30 ֢oifZReFbq7/-qYCYN_YG=E!nzs/bY䧏 PmbR8)C;TDDTkOO̬&A5}.07dZ+ Ggc4Mاyi&n6濙}c$+T0ht"&&A> '+nȬ5yHZ~\s9}DߕL}f֩KBgN"*Ι:K˟& ^>+g= 83?5?B uv C漜b3Ӛ_֤v Ԗ;C5|L#} nh;>̼;2:(!ψ;zm ;l*I,Q8=Deq0+kv [T:<ȇwWA˨%MFrih0zLui0Xދ_0t]q12h@mM];zls6=XǂB4!lAPIY")=vp1X{ y.>ҀTٴ|*f_pߧt=?an-߈0=29Y׳[5M7d mr)!a6 ݢP'>]k-He s*5X^Ǖ>Jli_FYq ՈR뒞H2"&1LDUfqQ>sa#i-P#O2NE-^Ū˼V%C'5`SzPPuJEIT&KS=1[ܙJ6 :c^|%DTG ΏVdY.3*[rQi3RyjD䮐O]4vCHcQNI3#K`,q^EѼ5bUCˆ6L/DKVQHh[K!>y~-z"="aꀥ\LQE#'4OaϼQaDS; Ҿ"#5h,4D0{{#>Y_2Ħ6RxvP!ri4p~  zKi R*!^|mn$2ȗSWYSR:7]J LPP=qzCpl%xc5/|HyZk۸,I]*Wh٬rr_!10nfJAB̚tz&+7f:8; ;4ꃻf!T"~A5S߯#L{-:"]h5 p_#da)fWx0㩒|BɏmnHa=N}z'[g뤭¿Ƈϋ>r$ &JeX?Bw}o?W uGz -KipjOq:@L)q?]C }9]ŦM)s&V}$VoUDhMR6Ê,Ÿ`A)z $S<}W fT|>ˬ'Ǖ#]5Nwbm FnlG]kكC]X=?<~.v>r@a< j?/gGZ?PX'%W݉|qM +Fh뿫-/Bm}}9Ւpr$Ω+Z.0FKxkR1CǏ6XrasotfEoBeNSqISڙ[g(9ۉ#?y= R_5a=BuEFG&>+Qϋ:ۋuЍhkR%_rg˦D`#v=ɖ-jjr#T{/3P)Qv,@D`?2 Gx2Jcu@`n;nT?S@|iVd$@i[ZQ]+zh-.ci|oG.d7y+Dį<"* jTyRpVE}-~Z0x^k6S`oIo[g~bKG$lqXRL{ y cNEև;P;lzzAיmRǎ妐Hn&nFC~ 1X]߰bf'l`h%gVi KwSڏh1G^HFr<ҦHLiBN}b=Z;&mrA{̿qtHIBu~7=hS[jw̴ ܻhҭ+0j-lk]?PK~\9vt#bRN[E{؍!7SnC)ku~gE{!UhGZ1ȼdX)v-;^4?P $Wy# czNKzR>SG#&UNO37T(tvmxhԥqi{>g a 8nJ%iNE+ y[ogVe|P_NdCJ툌GEuZ|K8"2jM)ph/)y_UyS,Z + {Q>?LI(W}vTnA ɊT/L;B م:f`@͔.VBj\d:"m2x\b'dk ed=qI<ݟ|t3U-<x}zO]v!}7w~W%;$<|tEEgI98$ZQh-ta'6Rt_̀g@J *%x>;`t [ޓ!PÙ۪ )pTw,1oT. #^ A-QodMRr '==p4) )o'#MY3*U}=q/r_S6OV~ѩ-yz趲_쁬/ZkfP~?lߨAR3xڶnRƩ#o/3{W4urղ x|<N -rYx+ vCƲT|XS)F߰8`mpƬ[ۗn;=y/2"G!z/>{5ʨT*}>ZT@޽LOBT rgڭC&@7bwAb [ٚN q X0wea4̌y%Ƞe`bk4W Qם SGFGHld驎*`Rެ~)~[SG^R~$m:{fC(A4gg^^ 00_ xUl-C|q&ƾjM0OKv!Fv]ԕ}Z|)N~6i!&|O'oSZ }Qgg|ICv! [Ӳb!|.kU5*DGޡ4z/ X2I~R{PhSZ>Sg=|Vahbʳܡ%t*^LGԬY`G2)eˡy([Ƶ6Tj᮸W^/~Cny^'A\ٍHE)l'a8}S$XZlD%z%=|wIb{5*XDj![ >]_hS,]kjW) hi52*/.5Ktds 1j̺#Oj EVՠσbuy N= x/r=$c#X+ t&kϩ80VXz ߖn 6lq-`Y2D2Ps'2q+rXTۈEh}൬SEjn`{Xa9b$A%WnrxMl[yAlȺ 7tWn+FTY[}PJG/&grޙATGs~neoqtp=A_\;vt#? U՗fli2,s`~>e69L"!BwO/ŔmJiź|u qAWK꣑p;[oԺ<6+q~"iz<m]βՊߜ]bz`Jtl[dj<iPbͲ,m0x" Hju%Z ۛwBT̲8Ŋ` KPݱg~E <6OR՚{.153 `|w\'_Wp&d<_raez@`^ ԯfe[*󴏯EE@":2Fvv +-N\!DP4m8jYa/ٸp^,M1Ư] Pa yCXe>P>scq͋H.1!@2Ќؽesn~oa/ڡiYG lFF"d-C$ XhaJnBL.Dt_^qF)J5d_,W*t~/PBiqbulM9+. aPDW[s&}׼D[DJP ZϬB/5vtyGA'C 9Ntw ,>軦6diw^@S!'YZ,J˜{:e柡@拐듖VY [Wj3o5]a;ikfYKԹ}ZW[pXKȩ}U[z,Po|䡆` =vwڵ' .Q `aȒz 7õ^M:@))ռi6'=h$[m<>ȃ>顔HN:L<-ft[m:S4b TP~sLv|1U֠ 8M]6|ST='~]q|NtC?xKMU5!xȘhE}ćܬ=v&ڛbkk_-dL ,[COoڷRNY/YcR޻Td`(֑{?P!Ca'eVQӾ*dP* 6j (Z?aw miz:-CP!7窡14c Ѕ ErQyvCր$Gsj$0>= tx-;&IޏgVr-^-C֠dqT/A;`sĦٱ AEI'D{1ubQْh9d0^{oc 4v;knj;BZcT:؁֠\rw##_,&X5m Ә ;kYB PodpiT;R=Ⱦ_AX#P]k3oO=>I4*3 5,HOw S 5 []!S^dGOzQsԢ6*ӈ @O`iHc!Z)څ= 1Gr#5۩Y*Ab(멈sc>mOnn!ج[n7fY^L) V+КëaBp!JvkdK*w<0.{m^31 !TۤEAP>Dd# {oW0|um)^8;B#,)c9BO!?]ѡt͇Js>}<-x7\م?]#wb V-tlU~8FЁ&V>Z-OlY: yk[ vg̟hv4!;L5}B#PK{F|'U$Z4TPh~Y\XJ]c-N,LG쁭 غi7m]sjQF'tf}ykV]=;ȉNwj l;GL2ȰJn6>I|atޙMZ*0k~mbQbwD 7+Hmpg; lBmO,SB;{.` 7UyTaǭn0λ6[^Kjz"U:y d.(7t;N6 })ݳ](v;h#DG>TaGq>^һcoK-3y+RB'JWi߱Nu J VCKk1w|;T*hM :hX i$514kW;>' Wv*.kޱ%ʾ~[~c B*^\CQ QHYe9Bsg皟`c@C1,vPz ϯ|\8(ۆ4,ξ͐ܩ׼Sg۬)cDv0;5?t>:]sp |[ =v/g95|ob4kQozxߩUO|Q&=XʜuMq禖5c:TLjv]6e]썢oe}k&RO6#i:SӂWЧykxōB/tmZponܵ׮տԂKiT\9[^Xgm⓸!-z:Q gZI4971t~G.)x C!X8C@Ew; aDR/o\VKe ]-u~G?x|3:8vdW{$WŤePw|o*$JTkqhq|;&Qk=Sj$pL`v.BM&G z9Xx2D'4u C,4rJ;%6Edۦ.΄+kf@Onˊ }ej ^4⛳) HB4!{F*$K~p|,Ke2lN X}tK{+|q[h^*YYᣪTT2B4]vVe$kŵm|'R[0ۇUa";hL>e^&a6d<Z{u(Ш¾aksFX˞CPHyC!@?z dۦ׵ؔrTe~EE.Yj [-{~k]Dcvi @[n/|ȣBm7~8L|Du,g*9i'K(}C}aǩVTey7)?ŽiiuⴻJ?}6Kc\%K-vZz¬ն]ǸZqRл+ebڊˌ$:t/vCX_U.]yRؤ%qu+ mQWN ]>XK?Mqmulj=aGx]u)VbփqBKׇҡ(Xm_,h ືdH"'1ψ=*54_bH,EJzp˗'ضi5M44j=GoJzx4mc9ZYy>4KF'd{{@7@ jfYI}bNvp <u˧\gMo AԅŊ0eb#"$+>X'%L|a.SXL/`2bme| ]KU骃Lj?NA2&o /+X t""gBv"ek`=n##7@SH`Uq^[\FeCkXQeu  h#Z$[F~@aŠ^'ׯBʬygkt42Hea*х zUnή[6,FgW"Vp3kЛrXHFU|AsoOuwu1XԼ#bw出b(x%\fS8M! w dBuc6g߉~"`5TwukkC2c[u SN><4;=y1Y Ɛq@ Drw.'+KXneo^ 5ĺ/#fv; "4/|ʶیb qyOwO= U5u& )6,2:gHwazS vxnUC1sd nA#'Wf% ?H c[5(\$5^^ފzSXz5-[xFh O`?ٷؙD5WԪX3cj :f$ @O}g^>J!A&K긷[ւU|w@[j.Sؠb~o͐>/XVA-! ?V4aE9m/RQ5OD~8uԟfik3<>Yzw[G+GSlfkh@oh` 煁vV4@@%yki|}Ө`=`yu{޹^_7^[ALzWՃ?Y5ܶd R݈ J7 nKeq][tǂ;5e;ژt/Pio0UI9CEԣg~ex$8}G~acs0ab.K^.1OḬ׭DŽmۿ[5 YKxS8o '6_9<"*BJ{bHVM iš4cɵREf)*<' 5ŬYJ [ |>Fm焃,ӂ@l;UOݠR@L; $b+I +/Jk:i uZIOsY7O (=Vmo[{>VV2I*al ֍A|yיC>F: tW ,ȀZDZqɤ>Ƈx.Jfm24BxzVZ)] hkЩW=O Vu-$oƪ{b]\X -bPD ~E(*@ 5Y|; ;0E:5;0U?VY5TB㦕@ub5Щ:o|,tVU>pztx Šb. m)m|K Vj˦EX ձ!!%P]Q]Ʋ烡c.o2sot[(9Uo0/H^7^NjzWond7,#،ok;D0 ffEa7X J)z(4:yB`R E>HGy);o$:M.]өʫv1T\ܺ1xeI3L_w<ن 048IkX|n`\s 7U#k >܂WHPCS8&%7ABҥ]kV8Wxj:E%L!9TمV mv7s"8lEl?WZфn˼}a=Wekt[m>}~( yP9I=bשGX:5Dnt X++>1k`ǟO/T)ej w[Uh[&44[-p:co-{'}6Yv P%ψǬ\mΟw`&%h}d}*#'-4:jڌk/ɻ\"\Ÿ^1X{_4Gޒ>3ɿ|OA`S憷TΣ@te)d5}SxC:,€?=0s.hDz p>?|F!pJ}kqק#TR^gNBz ,%Ym%Y.iq$P2!B"FXhe ZZŒA+l:ygj"j/0T5ƩyZY$eTM̽mMfKfbCp6yE >!յ!f۩/ VA8^/7M'A}˳~Xeuu%fSeqU踯l7W}<^q}@r2;%= c3E!?=VU PC0]'w RƆ(=CG!+.ePC,ןiaZI!⺑\P7zGN0Uڔ+ 6)0(k$;ϋ:u]%Âx؊Qy $S]k(Jd?sSGzM;_ǵET ,ZT O X.f=KKWAe%AW87q!'(v TTI^!TkD/Ud5. ʇ}$H䏺0 BRޣ)Mo4`gk/Jd z)" ؝>53X)Lݭaja ""$xv{t#aEak_VKǓEQBǗ [bAԎ$붗E|I z-r hhēA57__m@"mg9@(ݳ!q|EkPbepjF^6¶X$]rVܟ^}tH\֯;ԙ`㖹n(S\jj^2Q1/~bM|nBK#<@ Z*+Dl߉ 2p.W%N,FO%A3<_jK\&)kPQ @/zJ3d\wXQks6-9\@]Td poy2x֍B(9] kIԑBQzz Gj\r{dӆkx&)7_eCּ$q'J`] (9,sM]!J <% G b9 }YRQ-{@^U_-"7Qf)x;׈WӤtbYd|?I.[GNj/ jnl>;xA( ̑av@MS9]];UQuy6uQDFr8PPBk&}N;mK 6λ!k-jj⒥R֍G \Pee@:\e?yn*ːYg4f5Ƒ<Ѕj;в~e$g?;wUД}9q?+s\q@j *y9,\:nǚ  %wdŗ+>q8ō:`Nm (cGSo& r]_U69T_K0mZϋ3uBwIe}x,cpmuJ͇Eq 4Dc4@H3نT@{ 龻05w^l;h/ ZpH`\V*R5WJS)܄UG9,:eJ(y_SE@s/KwVrA eϋ[8X?pC1f|Z,*O[[ b*C}͛`07Xcy?q9lyG8zY  KU;{Lk"򭤇5㴊 >Pl;6DRI)WYTڐ^%"و? [U*Z\n~Fc.LvkXV>Pt. (=jsyo>2EU 3"q>/d/ kYlR?/Jn qZJAspC10R}!eu})6@ D-'_}u`gѾW^9j¹ SQ*[':)ߋ(.D⢭"6w0 p ;*lA33'B$U4yX]%8Nt 𸕹!k0eeXý+Jۖ/P (,JKi5]mjYwN`Q;oS6zM[\/DiUtCb]ռXCn7$%u}g6р00l.\1\=}g6,&fYiےP!$*qm 5yO"'k_5B6u!}ûAٯ͍X6ӍhU[/kOA1Պ̖N6/Z5HCVLXauy_F,[@޻ڲxe̺]aD*~ixhbu "/HoYtIB<| ʩK?ɭyo:IqXυSuAM lؽPlXAȂ󘓏=9Oe b=P ]-[^Tkɴ ۖM;RY}&mC{A 埴QvX iDyq=gG ?], *_ Rejج>ܲ(1n%w|c @W7HQñc(]_,di,ߣáʢ/gfoFH5Dܐd0Q.a粭Xa=IctI| TYq(&C Ѝ`@fh3hLP! ᢦֵn? \BJpJFC]/p p`Nj7A Q5sUb.^閹I)8&R vD:- )[v9C1UNQGU[YoG;xN 2Z&NS{RӢ w"l=l;FA%}!1zHZ[] ρͅZm`7?!ȺA7&J>}ffqx|W|t BȔzO,I`ou(s]7ʴ&M}5,u5`[Vֹ]`ìjf?V9;c3@ Je ٿ,߉ QT֫q|^+-=hEn(t zOӈ`tuyG]rn+ ٮu=`(eP'#x`,bѡ7,u֝N3uPTm(w=C' aK=TASXXXx XDܲ?j hކ5)ܡ~]V7''pߔv6 D[}mBQۦI!?oXR!L#kq>*F;`E~HIMˣ=AXkbξYibݶpG^jP MhH=PjS+Kj96l`TmP!`Y{ b(:5kdЁL Y¶W>{#ր%9X!V)m{/Ӝϑvq{߆H:,MkVz!w w7B][6XV'ݥw>+8ԾT89e"m2X~ .~1,8dR|Am(;8<B%Ōg?괷 b7Πʰ_۩֪ARd^~R81œO2f!"M\}Pb3,{);CPCyh@zcכnz X*{zNef]4xM]kvX`Ow#z(}} Rs_;Y@Y/3h\CUͬ zUF.6G&գrXh@\2u/4oYdE+xj5ImtKy(q>M,B#BOZ FN+j%;6ֱޡli3ߙYI g-!r9B\V9\!gM>Ʀ0+Tȶ`ՂLm&AgauIh[Co xw>$C 4EkffiݜO$pC#M4OZ[86Pd#PH%ѵY{Ch5a|24bmP52("^#)^ʚA˶7ycjjPRM8룵3A2EX-B~L炻r.p/_T!"/x-㺵w r eQٻ^gRpk-kǪ `by6d辖_4Ocf V*^.ßM!@ Q-fCUumlGh )OaGR9{kA/Pc9j#LKgӠhbl4G6`uyN[LZv\q} B(%U#z/ xʲ.q*k{lY_{I3ާvC<ȁ2)VD)%ٮaמf[;?b-kp+؀AQڦ䒆wQyXJsy/`k#W.H.81?s H"?k徭U>[R}<#!U4=UߦFy5w1_q~32հJM>#9-H7dꃵȋawq\rUE^IQ"'Fᖎ^T,^YR۟BeKy5dw1VzW.R.Q\Hr=' yogL[w)- ʖ7Uw8â*cj=klU3Z(dp63O|\U"aYr@7gfpv58%1ElmajN0c74_fr94j2*>%Ο,t`^N iQ,-7D^G,BjiƖ+z9Ţ.tӠ v 4mv̄|گ%%H?e j4+y-2d]Q TD{6qfYâLQJkWBUWn53>_u y{tMwmql~F ٶtb8ldz"2k&٠>yu .ݻ{?0gR΀0G,A! 5VS2:C#a_TR;,f_Re V}ހq4$u8H2;g.pwhXnxm5 -焧SH (;1 d D$1?V-7.;ie17nLIr[nIQx^/)xM.)bMY~K:Rk=-JުP!Cu}X͵g&0]ى-i]3it141^A1N4F{XT .]VGW/t֔hk۲Y= t 7eTGPL)@dh cUhd!X kCU5'XEn il7=RP!sKj]YglYŶnEo+=?pm:TR؀c752{l=cʱPu cCh5I;c%䦿V?v\otӟA[\J$6rwOt_%6*3O{y?]N,T(jXߘK(RfPφ_;^|4v |כl]?yO-BT+4:dJ6G_=!cz68F͚$ F`4M]}=hG:kl nߊYϻ>mf蹻u/cu}쏦Qoyﯷ1wێ_iy '濁]TFz51sEz=%,gFLY Uخ'y߂;Tj7X ;a "h4<[[9u'c7 8yft[ƨT(Mkzv#X"*^T(nw!-Ki}RMzA]UCKlwk8LGƎyChcPԑ8|S%͞lw^l >T;7lpj= 8;eNJ %Ŗee@OE,˭}l F-)dU\㊩o+`O4"ouK2zbtYZe G;J= fz"zḄ.CpݵGdKڻ~,͔% ٓsoiRqs!pn۹ұv]_K@tAzS|H%vKW̷ߟM_8VqI21<݁-r/c>X}lI Pvuܵ!=sq'y6GgwB%2{P~uyt5BQh`1r0OչDFņX2*_=mkKyt5ɘh8"qlXztݒ۔sUIJku h{uvfMşGZNWZswhY7} L Pl2vv@m f~`PHV'EPЭl>l!nߠZՕ(_-FN(mv!,GTsd-FvC`櫿zJ΂"7~ƈRb4[棺SM= V.K?.t #6H!ާˢyިeWMlR ʒY=Cl_TF[ \ڸ#_FK|ȑȻY m.RQǰ;ȳ auUͯ SzV-4* #{buҾuS" Yk\ξ2 Y:٭O]^2hOT~Xv$!s}"{+m<v-vw?(+~3p~sʙ~+gU).mߔ{Նi#S+O YlT9?u- jNio\q߽,9<;T2$Y;/RnkPY.\UoTu?!1ϵ睛i+lLe&)վu]~d ۟1s6z Y6]0TY;/^3'],Tn56~Wv&VFޫį݅dwpy؏lU.9>@_6Qo?:_+ ),%$@ݿ9(Yf}j;fr# }S\=}C7dᩯ㈼mtkJYe-bWU MQ#g$c=:Ax.85sK>e0{:wy1(&\Yc$wNO6൓&=:[HzBwC@-h\#)"0 @GD 6vapgG~ K识NG7+~n 9zYr' ol[2MXmoddMnl}.dʿK>Jm+ViR7B^7nNCU\!U|S(6(u;#YyO`x]bai֡AlLhW׶ULk2rEJsoن,c $tO'_W4T{ H:'^swdx;m\33hkI>+Jy$+XC(*e|iM+Tp/=a"(ޕͷ ~ [ŐSN!*6\Ğ,c^{Q%6j5<")T.v)i"o ʿmrCbUҗ҆ ȋ#pۧ5oVηmmWw Hu*OἦefζT8|SHja;U+p)/(!h|xGR3)m9~(& u`׻:Y.ƝTb)HϤKW>/=hy&\0-Cۦ6_ N]J|ni7PKO"|"-a~!5q߆0X0B+UN>w\{0Bwfl~8 kvݓ>J\jź p@9QUXDG2Z7ϻe=~OX=GFA,U>GsL9|m]4=70F?Z`-WUEM6Ʉ-|]{M[("1DL-AqKs^;?u"k-cP= *_OCU>ieN|dgyc]2!$ AGl)N}Ϫ{eפ B 7 "oP+|?M L `na; se]nhbL|7iǤl|9x,H"Ex]36!rz²WCa%Ig':t b詹c]УK#0csu1v䈬)Sxߜ@x~SpOmh*t lexݩxGɏ72zw/c~cB9BUuZ=E-*]/;6|К*@rєgf~JoiZ{6s=z3γ6{6S_Zm3P{V2rnN*6$o1-qf3Kmm:!6n|樘CmkԨ{D72ikf|h1k[7VI,<7ЩoszwBOm}*N# Rry  -{. >eeSm( G(sN9si aͩ$LؠU[ќ7ˤņؗ0f8Kypi ir# $ۈBٳsKFjFzVEd_>0wz#ti~QAvp^^Tp0.讝0٬=tQ7;C`%5Yν9 |>I⠈s}?as:ckOLo|S [|6e`A}@`Rd6LnVIUA)klИU\&+vgKkQz-%\Zv0r7Fʅ)W 2 @[nd&dm,:{~^\N"\#6l8%BZlrͮ-AǹcŔat"U`]sŒKland$-u=-ZϳoƬ]M׈k{ЕbA5lso^{~D.v7ktAx$hd2 -h8ςZuZٍTgQ|*m1|? KmtNG q$ OC"SDwW6/M滑]U)+ !MP2(WGl {}?Q-#F??#Y( GIyS׎6JF!S\F#2)۱]Q!)Y^/#?R$tZ|66< I d d;|49*n{gOnG%#@A?{Fx $H-cPeN؝cS=G{ᛪ}(Qb4T?PV&(v~YpͳAlYƈ_!tfF=b:3*!ESrH\[S.F~oƠ\k.^|6ۈ$x56SD}3N~G.;NR}{ak7p3B_ ׹װ*ib @"+^k HmkEx=3"b~\Ż`[lߔ2W5}*}]a{"77zM~$Y񯻌XAuQȧfp9r^Qs)2dQo{SMf\קzTk2\W>bMY2"})gTQ.}U*Sl=wu\i5)(0(`Pjeg0 ^cAޖ=ڹfH(=|P+=:~c?à3p/!a=m8x1ƩH.j>HuwFolmgXסgR&a375&:Jn q?Ƹ\Ʉpm_JdgcvzZ%*Flc/Tt_^5^m1"b;bS55(ǭ,J< Z|bw|KVDƈS|[kt^8o cx3$FY ?t?#Җ%ސ)*$-#;(bm/(F(+5zya ITU>hެ-W3I?/ u=lf ish_ qv ӡ e,6=27woFz#_~$U0 Qi_IqtQdaبT5) ,)׃PջF1>ဋWDhͯe{b= ɞbx3/[Utfl,\~CƟƔ.e-[󼅞Z؄Z^]ss͐uh]K-Q5Qv66+fD?yx[&/LD|aC'[HJFHwRXYԇsZ HJ>x>\Ұv0 .C3u\]`Oo^0>#ܣ݆-c Ėϸ<,(\?Uk"?ek:)O%PlNsiaNnBH{zXf1l#~J[za@i\*%Tj6 g*n`<n) JJ4'{YUWkÙ(A[8.yε"AV# <]VԘ $OgBb]KI!8}u +pU|I=6NuZDv㯑if+,YαRYZ ӥjݽkַ@S=si (S1͟FQ9*='wpA.q2}5|l2SҐAbpwñ֋SS5Vv}G#?x1p5[&_ %ī~ژePDpH3nqP|2nߍO}J6 fpw+ig)͞۱\R^{U:2:kcT*1ֲqJ\٧]سF54UQ̱CE0eTƀBoZr{ iWđCs$scRT[lHnDFr'i%[\]N(I'6wehwzYVkiUJa}'&aEB"9ojX r=|>O1}`uDDc-ja1Zńbk'J`Q5qa2ZSv tr.&/LCe:,ϱwJˋ-M'nNDm)U8UDQiXa*\(*Dp;F=u&ϲur J&=p٧ð"7Ħ8s/–=4- v&ew%{Q>EyP4;"j9ImAҌm?fzJ <;v}v4jxXS{R6ʳBU]`8I2hr[a:3X`* =\"<' e =E Ta/` 56h~ܔVOʸA i׫NzߞzeWasNeu/c K]M(}`HpwP"ȔAgIzU@+!鶁,kH0BY}rc>hYL/' *}/hjFt&؍PhgjiKazuPBa_6.<.UQ(J`e Yƭ]7׻jW-!bI/H0/n5ePnndz}2u$v4Fw?_j&)m}=p{m &gubTU$0 <ݟD; 3Ǜ\*),_;mx$F}p3u}omd]zq*ٳi:Ƿ{|G*登R){Wv-w[g71Tͱw2^;haSňk5G5=3yͱgfAfʎj֍ ${ߕ17u^~U%ڪ΃ѧBȱ9`e㑖 -MXngTmTb4zl,Ji#[^7}aYy[vCXstb&_3uOt qTy43."1jm߿w̎kḘ̏v[|haC A]?xe v~CNOŃ6%f9Kzf0w҆߀WŢ&caïGشr4խGoL|5w?GÛ EI"TمŚ,{dFJ(١MM kvҟ؊X^n7}25RlZ^ؐ1eS]f~#Qltw@{&^m}`BW(w_jG߳ElְW DUN#2R}>Esl#UM_y`cw>8bFW3`ccG7[h0:k3nZ@g[bGf86f$ ?]xXlNﶡ83-uSd6-C_Sҁßziy#F[hJNst~ئ{L<yFn;m{wR()h+r X/QG~D=3%SXs a=PZSa"^Dob$cأj= 6`iv#q5ɤuX!kRJI(?K6H|w[[Hs /]lCl_FZ,Ň>q->B߸g\p? 6dE[W7.Y^]mY԰hzf |3(tBtZ꡹n%{ [0g7A:p$ֵKq2>og׭>vnlL㢽ii=>\ @K]g*wABq2yxA̳ .]﷗ћAfs~S`$1Ϗޘd:?Uqi-c=̽8tTjAY6Nё+k*"qȩZ6x]&x Wͨu-Br^m~Uith[Iy^.B x05^jBnKF(9qMw^[6gׁKDFV μ@g(9OKkp;+Q9t#k"6%I݅-c^lQd9徟wjs]n HL%UboBݴy|8?Nlaf5>$geHB\3n>3<~Q v.Տo"Z cnsS{6?z[("r7H> AQLڋ='xkէD+ǡiEE>0/>Q鋊hOyh^[<Ɩ1LŌRbq{Kҫa\瓴$7yT-)s:НQGYzV*BGa Rȳ'>Zc9a8_0tSȈa?*s=K0V33w3/'p> (DTR9ϛl!>)d+>#O?5j!0YI't>Mo tV{Pü1=B BpW1NЮ0?5>f0 ϟThP/^k8f.SF0 د޴@=_i7_,+zUv˲H2276=> F)2LpHRRㄟn!};O}[&tNXfW~D>ec08ŽIG(.࢖7&1 4(+ J]7g]m;e7 ѷGNQhn7`!e X%U[qF^b;'N+Gzp9x3@Ã+t.v#m~kF rVi NO"»@ֽ.藉 iS5^}L4Nr?)fn{)]br]#O4ް18*5\W-!Fvo|S\.wp_OᖝH7I>H;.u>P?zg-cy/Nv t~8"䃎cФ( OkQP(ݒ2w Y/낽xC-;NtT6+znFQX~A0k^)F5M{w12C6Rz8S.89֋!$S+rzmtg`х ܕ1ix R]1sEENHBYOQf|VY*`t]dD\yx1Bs.bT~QXVPrmm}iY#o C*G#[e`NO ѡ,yarƐSB6cl=b\`rX}CoJ#H/+`BFH?^L) )O%ՍK_\5hQog2gm2'qcf\u[|ۧĄr$y(赖@]LɧMPҫ^-P]'GVSű`.( ]kN+;QT"t-}[ʡ ?T / S4,-Sv6W~*#T:wT+Ma(KB.ۃFA|umF0;c[w]&]]erl;ؚf޹[Zjm@u%y_Xq2W_`4"&``45 YF=%ze(aVHaƫmh;#j?Yc A:0Wݳ{DS7]|XpGm!Ͻ'qSi>&e[Y~nC0$(_+( *w{>[␻|0kr7 %8(*yТ%<\d$2.}7wQ]nOj[-xH_XeT\E21VUyz44dkcJmqñY;P,3[p`ڝ?`\Cی/m~{6dA{}?9/<>|m^ybf2f^8Qr,OM =:܌ReCpC\I+!w{OP)>-a]_G$[W:Rm>9g9?P0-S{ou:҄QJ*7\ԥA^Ndh)yjGzɥ@v7n,]mVCWD-c*]cp:a-.AV5<0Tjܥ˸hrfخqTÕ-gm$Bɒx'̉EPq㌎nby܁B2(;pNSl5ǧMa(51- :m! Mtm~1>Ѧ9,-0م<&j2 q=W 97QTɍ? h;Q41v<%ۆ? <6lcБ^ixI_|~s[U W@Vo+S`ʩJY>/QK Ϡ8:جx0LMzF^ڸ[s0qVQ5T ZÍd=[vTe8sNv,FCHa0*%hNF#dH'Zsdn]c\,Ӈ=Gɾk eQs9TBU1 *+-|Zd~Փ"<9c2PW5>Ip8ySZG(PepvaԽcmY Rz4ePSMvuq,Beʜwu;V!}(902w{5`c0ڥգ^" xkw[FRF6l*6w9eN:'4[9ӔTum˱Y~ 15?J're LjY]8|W RfHMeM;r=)Yu5h,YQ`H6v*N5`帺i}x07+J*jVT PfN(0ev+nzq=OOPn_vI@f|[FNnFrofyT+(yR;x=*F@4^?3?*)h#r< GcS5(ֱ} js}5#dUm}猭ÃGےX)$ض!kWמG94ě =|ۚ7X˂0goޑy5l 7 |vyx&~uu:lsGVEqJH:<՚*ϝy0*qTΣ(x9%qfbm8[Y(cЭ'Z4̩EJ`IaB] sڿK4)>Tw9ͽՙ/1 ,*?"kwV}<$eS\`K|}ٖMaP.ƦmϑqPqlP'oXwyV5TJMxlh+?TeIg/{t:>OG,Á؅A!_Γi? N0Ԓ)^IRl7V=slѻLzԆʸ)ѳHct0g w}VA8MR.ߛSw&|u!hݺJAڪSÿW\pXNeS_"9FoQ9y3[Em>Uݵ$˲sR=)S{;ن-c x4'5#wyc#G #;MX2KGkX<)ғAbUO60cP)]ҽϞn!Ur]t ۺ_8/i|fkC "Z׎'42V 5"HrB ]CS~cXg~*9>)M؍,c|WfwsD7֮!t\cDܳŽ20Q/%{C99'_³~ I򒃰nh%jͷv%xrA9مL/xaQ9a"} a$şfgLegG6)t\Q6ێ6:*{ق$68>Ũmz{yCCa٨>nw# ~*^(Y3o#˙vm,L]o$;;29DQL?bFB_zq +Ghi#P"O^}&H@4y`1Qtl3»qQ~p5TU$V5vڎ$q)js?zK{vdlƒ\GB6o|S˘*nsh o~Ma?|ܬM/MTۇ%xDJ-CŦ5&Xrx<$~.x˻POJęlwSmFcIПiu'JaNj75;czӞ< O1=Bie^i3l a %8nhK%{F~kR5+Lt+ymo VJ_niT4:``O^ۭ2#mGi4qS8v;&Uk.Ԁ &[_vROA4(|Zm5R:)^4־Ӗ6#^2Pry3EVdMloHioڠe*OU[G3p3czIߔ-[uz$%u-3Ft}m9~Eij챯Sv{GGG 6yt"B^? W(>t( D]8kCڄH|X$x6;Q*ef벃gQT }u[ݢAT3vpi)~`fgj\22{]zv*".Wi9O|G)cqfϭd0Ÿn)7lTUǧwV}[C [;cR|D>O-t\;&Oۛ(R+3Nb͠vǵqQ˨ kSzDb7N(ρΣ}FaC*)$=oRs|~˪<b!^}ju_g'F9P[Z.BIqZ3 llxVȚȻ#..n[qjAv51JlA0t^@---詩=.~DE<\TumTF^Sl^ÝMI// cJv(MGxB=.&bw2-ɳYZ eCӶIzg%ʆڅzE@⣟9B=^ .S}v6T*1H ZFj- ^{_-*EV5U qns=4Cg݂sÐ=bkۮVS3(p[b*f^S~xH͐{drv=7/["+_D$i|sj;Ta@bމ4Ӻ1){!/kychp2UEx=5;Lmz!d&B+[1J.7d2Jq]d+i}̹~j6-P`/ǃY_=ɕ:)ьl҉fƽLԑ3D4cdPs ~ad+__I xzRCs92tN*ջi;yd/\/iwdOQd#@ .gd-J܁ym1f'o3@l ՇS'|4*H(9b¸,SvXCcAW+$a @a҆v= 嚿mo C7{wctk2ug`t86Msoy$r^1$.w;5Fc"V4߽΄LViemqe|NuoO!9 QH|0*$]oE%STHu`6?.bnV ܏t!qR‘2|.dKDS<~l"+z&s$)y|S}-ʼM.~!?#=԰La0쥒@0D~ #$/|B=?5ޔ?SnFM*}jp:90l>KjhٷPVz*eرгk:E [#{|n=)qf#LcUVm,˒r}PPEkv/2^/CǎnJ߆0DRñZOp/ƚ#Ww/<ԣ<~x1(k{ؘ|O=fIb>F05t4%_ȡzVMϡ96mG|%؍tHY ټ%Qc\>/:~m׶cI=kWQ)?x3}Ǚt3SHe`cr$'\vIAJq=RIzfLi: JG;q2Jq>E-ÛAKsjT.k{ͪJ^jnP,v-?wÚCd땱YjMs7e)o^ vR%|su[dٻRz\cZumojE\D( _B>)aOMV~ĸeLSσI9=<0x+֋cQg7nU>"8ox1U$; ' bGޠX:2"loD? X^=ұAF% y,Gpl%+~r|| $=;6BNQ}մ9fL~OR5ѷB3}ޒz֘ ۅ q/**ϒ䮿9;j,<uj*#09'Ftk-ï׏bRg?Ӷ.H zu̜=Cu*F7cȗдuڴt !wowd,iS|f;ɇ7QSvo9k(V|U7NN>8Q !>֌mIs@!d_ l'ܳi11;#{%XGmWAnӾe.8֘AoEOg&ې fﱳx6sݛչFPdw둾,;>VsL:mGj DqI{#5yb̜,.!­9BDVH"0w`c:Q3dD}|W~u0^hPi)řS®{?\VWҞbng2?,Ŵ")vg}>| !*.4STt~|>4.+D꒤aR0*\^>OB8Ie`r=msN8 &l\\e%v*M^ag`c=DsBLRr]} $g uyo9b}W8L˧ar/mC'nlg*N2ﳇ+Wv#kBJ6|wz児#&v'\邽= sIyx1:d`_V;sw*yg'o&^X"|˖h-DA4Yuvq6p-5V{vj_E]]jiGn`$U|R+Q .Y/ai)ME5r'%^^~0]U5; эw]f}N'u #| 7*] "zdmFTͤ#NӽZ9± fqyM8 ]!m[Pytx^fQ$n/o"EɯA8$T͠#gv^'uCaNД6 æwMe |'˳K1%Q[ZI33!7n|ejg"d7& {cM~E+-%54l>)<쟆qOMa A{O%J2C.lMsevlCåp-}ιo)Cud/DU @NNoXR m{\M8~1Nv<k!Oّ5}dQGß - ;8ujT96 +)zs@8A/6A-~'no )IǕZvp1(SᏄ)g]'6/Sm͙doF+F8kN%;߭|}SS;h6ɹV28^l7~R]y%\/Hk;Dk}} T\sH"yǗ,c}AMBxՏA!Ikm*4+:ql Cz>쨜ƔGfkQ#v~g_IvV)N䘟DH夜gxέ2Bu2[tjDj޼l֠$͎RO%o y Dz^ >D{5Eⱥ2Hmo ul#-dsY ¿]wR*cݲGXeM'=H cbc OJQuC7왒-rBQ%%_f8MZb7[=N06*ezbs"dߖJΜ,:P #3)Y7cv ?cg&lD%{> m6ڀW5l@lhc sg\2/x#Aŏ |k.$FĢR(o(:G?r{̯5FOʋ}P)˪$YE[{wfP Zr98y;ڦė`0MFd p< j<,)S掵(*+rŴ? T:b mLvfvթc"euaSalf;O6jDSB?('\FZ~_"!Z>bWOː9qK~-f0xpuQs !wFWVr[,\U`{㊬ R kp+M|Z _#xPToXWnVb/z'22GlkCV0 MFyP"3D )-A@\ olY8|L#1Q6k>੶U/8@ÂP>K%9դm17QtTὩpU Ye'PZm}F:juVfϚvj(.p ]_YN~u j45-sd{[cn|С:qIF0tKիƷGݼvX(l|̶+C(<yzS#ie0z|4< hW ̇&Ar^0zPlˠ'^-Λ]>I)oqm"in7XtWS.?уi ceWJ'Oz[ H(UXԩ=ؤ=|P+k3,mסGqH?f XA:=6ٻ2ucn`{3V$?xO=skE3xaSS5Ç1KLjyv{32t8I]ǺAu-k=֚T- d@#7/"75W&.6z]wXc9 GX^|Y  GȎtfs.!/W|V*A`8@_]ATf~ 3hM^ 0hwdxzP;kFpiPɭ7 dzߟubi[ {Azi:EAI8I豵i(уRϓ6FSUw”zJwY| QSo|Af h h~`b|f0i;Ydg3w\iqW/=lrYPcz(0 ܒmH"Uikbי5hdΈݭG8cIs?eoWe•"SW;yKq!]OaS uv] 輩4">jJZכiq~ [wR#Y"8bga`²hfO&o߁ 3f>ޯ'*R?_ALN]Q.D i|a@៴?C|kM 5DP ۢq{:Yo0(u}XA֠um߷Q>5Aﱋ 5>@:q/0d/VqAM'ҹEo;<5iWNxy0 zq} t/0k0h%#b\}Ex"޺Ej{``=/Ļ#EfsR@Fql}͖X P3@ׄUMAA|}V"Qu/{_ |6}Vhvs@$G۶8媟7} 1%B:-iP1:a.@,'ɩVF{?`4+Mۖ^پ޴Q>^rt`}/Hեȑ~9SK63}2a=:m&'7(m :vy4ޭ Rm:Yl4(;}yҝulFJ+u*.3h:g3;,B$ ٷ{^h^NI[O`|xk[╟N qdh+ɧ'ܵxa0ͮ+sbPHSXy{^k;"9E~B2YEaW1걂Pٚ4a\fP3 s564d?ؚ$(,ɧiP%GKZMQ9֙_7BS/q&i nf:7̢Њ 6 TM>$o'ud[ -%6@ݷ&5TK?fh |MM7 ߃7-Ƀ ^0lOSSP$' s`XIV.3 6Ȭ CQM1QvaW^a`J<vJO}{kĉJ}~'VRpZiitH&%pؼ^] .'r B7I-i\AHH,a+"%{ (-ii;_5gԼOm1fvJOn|8RgwgܶzCdFK0k0{\t0PzZRP?}=Te}xc L/@h;$Focԟ?(dp.f{s #ĂGs$n~bh%X.I"77b oݻŗ%:xN0@NQq}f>+˺E׸u骛JD~tRTGIHkaK?pk*KEtg/DکSZ;=ņaC F{46 H-lkgn (ʚY//#Gh?pk`|1 W︬ڮG3%>> z--~R%SKL7{.2TA-w aK{XGcXB &qsK+*KbN7Qߟuz=8Sn44H:zyZ7M:zP4u|'uB֢k@q\ڠ;1iGlY;opҗB+)*@< D ;wf ƙwh[qQ |Ҷ7"+!V/Jeb˜yS=MDSD4W\v*eHXb'Qk@f7%-i jR`[K$Z!*`_=9LոN]cq|_NQBU7-SIm `,'w gvݶ`/uNJ)#'?w8[eۣqm{l!Hh=}}ad}T8v).g>^b $.>c Bt$E j'D0xGq#- cj= t.&_ h3c:_;~]woDybsvt8~?mIJHe'Fg:~w3拰:;΋#A|8=YN_V'# P颓xzQ3ُ䅭ÊPlEQ3bZ.JX[^@50}%{{|f*b3/׊[ifY7hJX{Yt碕b;bwv6ɺ:\[a3STԶ~AFZ1*1C/s*ExzB 6vyb= p/dv]pSFOV L٦XB'J> w7h:!p$(!4߱P7sUcFL oA&ПXFUpN3G}P*uw8o4X/(fјNc&Ct<`;#Po4z(uO)AxVZ 4M[nܮ KpȤ V#Z_=0wٞ>pKQ[`S10GJ GMxbzl s).CA9L  GoYwwǭ7`ٮQpY Y*#7 J NyFXYGB6BUe4`!+je|'Į!\iD9'-M|$ԗw -7L6MHXrkߪqn\(-8WuҜr7 dFqgb? 6qSo2qĊB"\ FefS4L-8bx>UO~&#;x~ܭ i4$Ė܁:ř>sI"h|i /)U| 'N)RD"oR?w}:Tnq{ّz D R9+~u'sq}p{IeaB" AW!qٺZ<XmhmŒl `<@:(Zn}<X^]9]!pOI3>k'_hT翶 Qg{xt?X,Q5([I %EɚYf6>nٮ<bp;}p W208ζ\׶48 <%; iEqv{y09OAeUX!C&M$ u7V)b5#o7(q׿C I7c.߶f^P2gI x) @LU.0f|@ "꿁܉5[nt2bd˷ #3ϣ9mköz~:"upw,09PASד^>*4 AD)@ 0=0j`gݵ+n_D/dbB2{[Yr H1t̪uh `9A GjAw5@{(` $j\{/h&VAU~8*ƫI@kbUO -,{&oC6* LF-#rYo[VboӵPh^c=V@yKZ}L{ӑD[]aC:[- .e2d2hE)yaq~ȒyhSml[=\,zo@34 ܻ wZ[Z0 ^%,wߔ !;&3A6$Zϔmŵ^pMbOpG'Q{~^p>K-ƒvhOէDQJjg 4B"eXk\X6Nf5e~ AC'S[S5 Z&3?1A<InjW0a.-}.u^jgFB BT| t<yv[!!~<<3@}Nٻ# Z&10&螳*$وx0ҮhWMh9sғBl!ηm-ycB`ߢSOVV2t@w_+u~=SUD0F0eXTm>,g 5y.t\ENzy& c Ie]` /?é~__~}WQR OG^6U&v@mȱ6V|!Aޮ~6Jzq>5NwS~'Ti/ r Cik`@dz^ l KhW0G,6kQ s@xIl 0b`J*   2*<'A:myq4h)a ϙ,q(u!d_jEc'1@Ka `w9F?|:gkT`o b@WpnH t&APPtme^k^$ zW>Zi!0+EuG {_EL!dž$̆36=#ns^u@T.3)׿xI9NsD7.sXwOeG#2ɛZ5-^2^rFQN<v dµT f@ܯhgNx84MuL"zvqiգ\q'J}t,_zHFQK3LAͥP]-+X74z*-W,F46-|w' tiiɡc@Iq_L>$!ש-S[-ȗs e=M!W&EiZFTȡ+dҡ9AϓCG|rN16b'v>~{I@f0PRg5Ljz5II``x4l5qt<>oS?M'HS+9Vj #|?\kPL|>'rG6j2x}Kо6$ q=Z-h }~ >:ƴ],ͻșDϗ Jz8^&UX"'i@tpm 1RVkFҋ׬W6!ku42|C4C`ūњ$Z~jʿ94$*68uw@Z@8!R}~ YMl>"WmsiE,/\4Vνv~Ɂ Ԫh~<.I%F I0q]1{G4+yG;I&Gaul=wbpK5wȿ IFfO^Kd߇CpYI~zZ>h'{JǕ"pֿ3wq)e.R]^JwhhI)`G,Gp'9 p!޵;/2=`-z(g} |)*^ 75f W{l!jh3B].}GWz ߵD+؏b]k/ 6h>q׿+g_G:;L|0'cA7y[y0>;Svbo<ɋvJl2,sܘ 6s܀ {sA{(P7FlaSCC*>7dmACv鉓 $wdW8hЖfL !ȒBV6VRO[/ܷjL*!S"_8V-jZY{PwQr'XrYdɈO}hTT[W[Dd߾mc]ZPA͈ ݽ/0_`^(I"@kPXws-+8EL8la]JS4W |{Syz!. q8PG>3b`x^dK *`db+%~#Sۥ]V=ٛKsws~]Di ~4O-wSL=|7Y0Q'2"U0 ؈ޫt[#%AKH_gx$Mp=G^lzNa~_ #iRL26q8<0/QeAΦ. (R#~ͩ,>.P#2*, t}2)>`zľfK햪7IrEHl~W+WnQz36ir5W衸u"[P͑ꁨTPfU3ȭ/vcP|XXaoqeI_Ews[w&޿u02iYD)G &5PW*q'=Q{lsvF nKm_/g=N$˹qY=c DXKapcJle;\wXNAwģIIpnc_2$Z$]P229乙-'egcX\ ϓkL!y# i\rٖ1LHZA|xh[(0qPA%%Jd#C4R9Nzڤ62i$kRtä @^Nq9'cߦ,J\{If!!mS" 03'өL\ k]>uT!J=gҿqӾb;]t6e}Y.=<ԭWOahoDp|, 4bSC"w ,4gGvvʊ:,qhAɂwP{ؗٶp Q3C3ηwQ~aRx{wrͷ;~Q5_-uŷp8#.1*)<%pS-Hlێc2J|[2~AfN i/ F_ .PAPRDnvYцKq}z:^e)D,Êʓ=Q&+I\AD刯en/M2eSY-S듾#C{H/KH枾8~ ΖP/<]d7bw{xYK+Bcri96hRf0cKl ʚd3\ SyU<;H䰆˃t6әYA&XȳzVNݲrˈ~YF i A#:OIFW tȑDQ,Uq(!F 3E[e >S눸f.'1O)6v \K|GgDdݚHOaEMmf` 3ƐAZ'=އY|lT|ZpZjK4>=D7K ;+ u@ńhR=ifcAWuHsYWUyz^VLǜe-r< qkyZG֠6zg8^&U.@Ծ7I}W}Zʧ&.O;6}fuMxʐ9Ofcu `԰kтD[s8릛*x ?S^OǺQQ*3]}q r}#N+h&%ף9Kl_ң}I %I[ 3djNi ";]8xVIsہd|O BAN;qOXWr2/eS S3<0mN G$b~N z#^޺ւ[[:X x N; (4Dz%u^q֣44˼R70ȏS݉q9lkI؇wps\|nl9~vX5Zw;i5 ɮ4YPYwV޵Nv[ɔd+הꇳl Tecn^( TծЏ2>=T*r۴gh6U@)YV䀓HKtW @Vhp/r#(!1|Q1Ƚ꼾8Z׿Efs;<y9$92bko'h̖ t{1f^ʔ]xs=69#Ahf6E@G"*Պ+,Gb6)"c&~j[=(!,+AW)R_X SdVZ?,䡰H] y<z#Nv. I݂>Ӏw𚷿PCĥ=I%t#֠ݜY;̪zY.kkHVYSQI_-2}vq.u'

!'vaL0=%%\.c;[G|=Pļ-;%|>ԬCiLkqv60Ris<{T]ytK%|λ^7J'zqV+H/ gMC(~D_N9IwYV :#1zծ3u?_)njY}|ChFby i^ai Az'JrsRE-b {>i36_)![Nz'fj%5-<4Ι΃jw&0=tIPI!9/gQ=ԥ/OC\aܘpЍX\&KsQ{3 "Xzpˑ\|׎8q|AAlxA_d'VL@Y-^51Y7Ӳ }p[)D1׆. 1A)|f5,Yy蠔m rꌐ6nvf;F ]yIlfAPأo*ފ6JЅhE=y?g/m.N˭Kqғ:$`O¤diݟKޠ5RB74Z:$C7t=s\"t>X#";d: "Ԭo#k|[.2û w]"*)Be HۯJ{Hd+i#<-hyx(!61%x7=꣄FƇEj/q[AHMGZ21=PkЇuxCX*&"K^C} =gk N3"NS$E[n q`h zG_^[]J]u?83lC~9άiPC{ &ٌ;cXpP4q.k["t16@UI9n'%7lH$xGqS?,nP!U?X2x si6 mq/%PmH6jh ?:01j91[]p Ab`탠ts{s3/vd0#R4:P}>hڳՓGvO0G$r{HЫCG|:kj`faXAZm{ȵedG]$(ZdՋj}MS}>Nߔa$t LB4 E>Ɛ|Nߨ5XoQWۊXŪNPXL<4Qg0B2.zdئ,ϪR{y")֊>gSʣwf!SQ/ 2))mU2@6:mD06W1?f+'z}&%nlѸ1gN j3#rm{T)L;%D`f>陡{ 5ڴ"O$U>!k>fI8TbA` J6}bErY7 3kS$Io6gpCV襦w/_#$Μj >N yt5ځrwR &K/-S yտ[z]%5O+b `afFQz *H0 7kQ3jπd0i-RS{bPEr־ͼU.-15"`{dƀ bͿ4 ȴu5,h%m[ЏC5/RJNs+GL/ D.?Cu7Z<$PSnߧd Rܰ:#:3y`Qޕrf|7)<crH0Y=fMA ({uX?t%k?_!Yg$D^Q"R>\2} ձownFMer.J"> xɛA698Ek5ͽL# '![u(t"Xpl=NNV9FDH< P7}5pƧ=BK}tjy` K=t\lOZfc*H5gUsze}Ma݂C%GΞUszJ@'{G jt$:ˢI/_@ާu|C/D0;u ԫ?讒c[x|)gr"!'su5X&@&{N5Y]q)BZBS2ɆD!=2-<$qI::fS歩R:-q^%1HC(mUBo Ud%Ś/|z,iDɭ={#C4`fnH%aLU+A6 v}s}2܉*VZ͝GVYJM\.[}`tT'[Zk v/iKwߋޠ6i}\NSwXg{VB4 Uk%yD[N[}T,sk֎RwgbhjQԽ<_%pnQf}8ӻ҉wZ(^mu(Bc^'z_E зonTasqƭ gnjD-!;ov3v[j`jͿ71_F5ԢXBWiآV=>h"y6.ao*BJW[z;sb7A )4@~=g#רG]2\Q'{4yEngZ*dX%]5إO3nBeϸm*(1oo6dZ o:PЍ=*t8v(nN!@!#X5>M7j 4:|k?e(?2:/% ƫ@I|VQPCAB 86iE9.atn+xce dq L(T/{!=$v6tvմePL@oh#j5Plti(+5q+y쁬AeKc6hz0e'E-hX:| 7HHP.J/|/Dx͂3 ݾC߰PC]Fq ӧuԕSMsvķ٥:!<^ܮ>j}/u꼹FУwZ z5_cF鬩{t 7U5׼"V[߉7b0#XTCs̏2 -f`oXCQR'r iD\)4TCJ+z3^.ޏڤM=uKH(w ABW(aH!"j@A?N!57q^NJm0ܞMT7}BA>NմOFK0';6]ïj2m.\:&s&] kځ^a\`<}9Qrnfc-h-(w : RU\Q:h nz!G!n-8nu=@ єwp6LwӢ׺dA[9m;@Ldg34~ƹɕ#`78}/]& EuwJr߹Jm9yalc]ŨXvD;t@rD V@#( _ϴR2qqa1%HG+AD߭ZF1!"Nȼ:eQͯikI/`T8EkJ*ݐiE{e]ky 4nӪIc@=(9%؉b?p4!hJ*'7Mk7ymOXZX>=E@KA?.9) " F%4::@@wjSlpfIb߻2㬧ϜE=*R>T1 l O|Wo0V1({~]AY)xNc1B H$tH{Wߨ̃`GAD0ֵ<{7ݾ6눫ZzsjCĶ =D$oZ^$ BC9jv2^MLi@ %jP7P2#z jn.#o*\DΈؤF{C>g][pbU4[h.Im  &et}K';d!yˮ/I!n }Py1yJ;fo/B|kd~xphd&¸DDOT ,^71;΃.Mak,h{7mv0Q/|CZ޳lm״֥:p7oX=ʶϠ]FN?AlnͣJ)II6W, PI/{eoDBr 16INnR\G $VnMCxL,(pn::'u`PJ˞#˾iSx g>}Aپ՗Ñ || S5%`{` vڬֵfxA8:D c ?PZP֔T,1롆`T.Fj5!˰LmtSPWu-H b)ٻu|ItO]h,v3k,e ݋(hY-Zhc/qxҔ/Cg"%|ƿ6%)pib!>V<܍Nu{С.\83֝Xj`GĞv#p$:и'Rvב)菶dLjqCʚcPmCܗ-hW1y$z:bOϐP =0/I'k&[Eu! IrX$.3,jꏸP± `w|WTD@ςjo'rv*,q nygH­L=A !RtjB ڤknE./' P5XS`xO&Y֍Y=g7X`,{pćks Be<,7NHSWx,N5zQ)=/:H&.1'TB@weHX1|J5<h)nXVC ."VVp4gsvx%jo[nrdPn}E ћȆ9m´"{m$o0uy&X^td`'s딾o  (`֩[I ]rZP-"cf/eU{Z͌]N6q%/֛8S`엥xр1bZzDHU')liZˡ7a%`^g`$='s:2 gx(~yɨҕpoG[;Njŵ:DyDy=f' ҵ= b,uY҄v\l0!v~?"v}m'9:hR w}>U-'דּwK?jSbQ z(K=jzIkϹ(УZSϏ n #['5ARVeeA/5բ/"x $q~R9 jY919W~E6?* =\:dz;cRO$@!D5$9}NfpQ":ÃסkVc<L6tֱ4iYǏNM '֭hq0C'urtO>w\ Af%ߛ՟*b1?SoP-)><_osN+[NZ H@-9ʋ5u;l۵b fN1 ,D=o7Tb' f6=u=X7j d4~<3f'Frsˠ71XB;eWZ-Ug>/ӼTLOv1Qiǭg숇vQQ&@n{۝c̟+^ UCHV }mn{a}>x 1!v[$Ggɋcw [Ix;DCYZFQ-;.v\q ?ìVB'!5@PiO>c ڴ 'Ci?k[(kВjWXSYP?B'ΧKSMC; 8+|}-]<zSSWp>1IOsh|y[n>-z3٩`(]7ut)vx fbdp,pgpF8"2}ʩ|[7@P4F L3BUY YYöx|Nb t%0 e ?hgx׼Q+VPS#_?LBl(kUVRHHÌΚ5#{Q[v/@XUT"9HuSX/Bb퓪eJ0~KIbC܀f=\Wta09Vq^(`m!>нkڦGj灨H'[؎h|B̥gtzEӖCOI0lA7\ =`k^>AD<I$pC:,C1zS4xKnx5atgބ4s"D=:%@{2rXi: D8;\f x%hݓ6@~Ղ=C߈5*⋌ScC_d-ʚ6ꧬ 5bO$l#X- Bw  8>I!K҄]ۼIOç9cG}T$zyw=?|V/A.\isH:+=CW|A7vyh3g5N0~IYTEU={ĞڿXd0|-93bҭ @@a([E5c˄!q]owiuu.|aa't0 MTFC\n^Є2w'bC (e]>쎷Y/5kn2ϴ *#ޤ3 Kn4JZevd]2Ufqd i|YX78<6в~ gxĈِmxY6 []\%}88A =b-j@7 af-4f `Z?|UlLg ksf$a-;VBY{jŕ.ea12Bd>e?VMV'{WPH.z}/>%P-mw[|o{T#⳾lKְUXgoc>:PQ6zP _J2Ԕb,fݛʦ$>Iz@Z]#X㖩f5%#'Yc۲GEi!u*.6ZmGj[Hy vw-`5l{ uP'R=1~xڅjc,>e!kG/EAݒH.>iLm) un[~V(I! ImMf zMDixx:}79iFWO);`wg 5(S*PmL PP9\=0|0JO\_֟ g ;'33(}f|2Tk'7P*|vc|޿ ˟)E Ӟ׾i< dEIu?F4>`jMjL|=dlr[iX l˕,ٯ_Ѹ4" uٷKɁԂN, {J6xޮ bP^0}?Tac}!:ݲe{|/%87bVW\{ͪ{gamdLkY}n2]M׌.m0Nџ޸qzVn0JA{J e2t>kyhWzeE#@0Be}]G#[*|P ŬjHG0u+iA+IdvWXe 6 :E<⥟.A +HgѼi~k+>̼D7/fq`bubR]n5HUmи黜X{;TՍ#׽r&; (,ֽEÖ)J;S|׻u iu4akP=B=;7bs -3NgYyBR`dKhǩ)úl=* V`Z{ &h L+gd)u

_)x,_ͨj_+]t[l \v!.xŪۑFQ7.Ĭ>&eYw>n@լ/Yكa,&b0t=8XLf 3pi|I<XTwPb5_D,o?pp GYQjƑ0X'=8,i,x(Ȫ`Yr]FMi` ȩH$|wQ Ag]x[R ѭH**FP=> ]Z2ښ A>1o#Y^$ol XZ|(-Nv̀R Ds~qץ?vЧl4Q;pQ}*Yxjx=L" EPMuDbh%)MLpLDDR?x7uzx MC,`Ff|PҖi[6*'x]?{A80E./YI8-SoT["ҸS>+@571JN:&1@.oT9X/OיOդ] u{*9ؼ~ S*A:ܪ5U : j4a|2|@pEgniipCAG'Nuw鴇b T]O,Uhš؂O&f Y)N VN@6Rs_@Wݎ5!= MT`"$o.Ca|_zpٗ,ux8P.#bs/rz{X3C? D%ZǤxK/S9^Ig&DEo|>lu>{Kvݏ"-cQ9zy;^gEP}F[68h/`(fD mݧ*sX] 457-wg4㠟gzY'~rXwYuLV><%ﲏd`kZm4ᐛeWpCHCw.^ &@IJVt`כMOt1e' BQ/=+F0؁(y;:)gex,Q>,xeނJR׿n(#;ϮmE1F&kf*cTw[P 48%nڞ8RDR,`O&vDe_F~G?.zk#ԂԇQu/2qī n}?kh@pȰ]հcZ]Mݦ8bT@n9+e $fD2yR]]os0'ڵy=b7A3OQuPKPcލPŦ_t>.U.+ }M`X3Ziݐ'r7r@@mXYvpjf'(. J kYZX՚DP=})M>~.FՋQPez~E-_w2_Z}0ͩ]bZʆ":qzNb1/}PkPLVBk<4'b BME\˶\ߩ `uX P!:Yn!#&wwJþ྿X2t{(^R2jx`, * gHˠVMo ]>(\^+qZ$Q܏eTChb B(9SFG6[UrpCW-`4iE$9|UKY޾t!glE)NԪc}AAovs cLXōU;K~g2 T9+qk@?σg0zX[3|]JmcUj;I{Sdn0MQ`}@xd4͞R$ K1 q)@wGTy!Lk_{T-<-hUi-33Se>Ы&uTF)RtmOuSpCR=6%[^|,P4HWa\|}FpH7SQm8ZYPްl.2#.Ҳ6bgYm8Lm&Sx@ۄPMR#}nrԈt?/̖$J}^y8s@( ||@yr)zQd=Y؂HC2Gvf Tg0ո}xuT?6 Z#ѹB7B$,zc%u(J7JLaY =_SYLMT7(]@O=8ЌzhN2d 4Ո/(lL͞㓒fR5&}o[lfm``j*ԃ^@bA>2ϗ:y[ĞUݘG Hxy^fT+Q#6]5S({ qVJv|kLvJF-W8O0^;zgՔAzy̻!1ʢҲ~чX"H:?)拝zXJήl=,^8wjE>@:qWfyJ $g sX$Jc'4]\s%Y* [ v">>~mm \7dyyX]X]ݐ =~{ _Nf<3iuxeߎ$G&.Ohpmjbej΋90Hc+ސ$cRU~uHٙƠ}-Tʌj*'qt {G߲m>[ރn;.ž=ˆe[ *6#[=)$O2oTȰPgU,3 弬ë BmϤ;Zp8.nďGH C g8^>7X^I]e8b;4~ǭAWK@>{JYwlZ)PYnk1㢺*&{˹>j]M aLҍԼ`}fQL$YѼ1#<*)3!z^)}#'b B%?LecrCB0ڨ=ՑuS>BUDUCle~ Y{4FQAujᩙ}ψwBOw~7X]='ʗ$?ay+"!qfs-ă R/QeUd FSa )Bܴz S{oQ.HˆF4B7Úw`hP?\Ϣj>Qv%p`3YrGa'Z.ϩkދ>(%+J!h,u| {[ٽ$#27xQв,}p0 ({t"!yf%YdF-ja;c¤] VA6$!/7l j#xB8=*Gy Y>}W{REVe&6t2].%D=>9^!SfTs8?q JF_kgTDՋ)2?Qߙd`@)ۻ۝#b;(5rK3GR6SRB PWE ֓ 9t~x}]vCvЀeɂ(یyocd})B6֍.z<&HQ:NݮND7|v9=XE3zMHk1(>ALQﴅRf׸PO,n 1tťsD'QZX^c ikۄQqKeΈ5HIJM51 I@u?='q0 LnD̿[2ifZS(g/8~][ 6[Y[_##vUzB`#!Ha\N<ϴ%Q,bjWsjU A e]}JzYi{3uz_eGm~sī}ItY7 dbzr5w'lI. ,sb9ߟ .UE:{Ѓ|lYBJc`""]ZR -e.lF>AlS5>.$G 晾+L] g{d. o E*kdjRrK>[ߙ `T^3g T2|xCKw:4/`’'LηL_hPl# ΧZPll*.kw* `eFO딍ib "2rPa%EWyP`E[T>SkNAc BHe:xaq(淦5 D't+cC2kJ\N/W f!I4cكю.),|*FE8OE[|"O]JCN9E?aG{[D@DUeTWzd+|PM,z4#aG;%Ȣ] š/LLYaCKdCJ:%뚺xpdu$_vYn@ݿ[i̜?s/Hu.S`%<5X3n>;O*#knD'|j!o=a  @.X]v `BgLC ]Z>!ڙqI3@t4o)vs5 }_b*L3<J6}\+TY[h|eZ/2k Wu>M`oqҿ,6= hW 5yh_7kVwXH%CS ^~:5 ۿC3xxn~p 2#k = R-\SJ]KlC[}+ޏxc`-qA~c<{߈WM63(/m_ @M:7/{Dw4T w!ܸ||-^0h""soT3//B~-;u}lZF¶8*I鷼?I(se0u"K]G됔xL,"(|5W}׍CH,m8n}NGJ #cyPasjJ'u;-BwE 1YOb`Ax?m:ڝt~0]wpPQC;ްOG=O4U~G0;$Rl9 tp[8ὕ$\ȟ*a2:@[hAS6]YW 6G P%tԢ=}D*YL^W_4 V*NWv=: wtJܬ-؉?[hF4ٳMkT@'95p͕} $_k0AYgXɜi7-ѵʑ|F;zAW/HTzF0:]D{1"Ue0&@n.{0g otYC T%#u)[ u* &Ȍ_?DkZ=6XD.>)g^! 1]nM Av^z6bȀEFjfw]ENRU*Rb0;yy 8{9[)zVw|#Se78@l=Sm>t#NT;@(f}5Y}XP_A4(nj5FKҘD|1|WHʤXwndO|žFiw)^}cFqsɳ z;5b}R[&j> [xrX z7d JA87ؒ}!OezlD~U sv * Z=E^>Ͽ (j07ti>B,[!밬1i#dBy|9dPPt Vm$BBPU[Zܭѣѓi 5z3R.#SV: e;ijL D4FwXAkF;zߚAc[SѸԳێ;9Ҁ/7bo3Xp~K2}mۮGX!_Ոױ{95O56>oiݞȝv֘H1 ՛n3o??Ju d=uGSX(l,n :\feY#g`8^H8^)$X:6P4^E UﺗA Fi\%M49!0נUzj'B[AMx߷өu8*ٞ)?vL†X/ aGR3fuzSy 𻏠Y dGeB;PM/\ D߰5X˘)zd_zИ5z2 N7;H]ee ߨ|݆0Xmp{GzZ2vP!2ιؓGym_~M;߭sCL4JS;N+6?yXz8؃|m#7[\ :G9#NlqȺQE=zհ#{z]-orx1MQ3o{.yCnʶIļ'XRhG'fkاo)%wld-.#r vNJaX>ԒB( J&{@ ݰQ8AXluv] z_S!65HEkzC{∭ǽ ^k_6_9˜nDz!4B3{IIU7dѰb(D͔e٩r^ssPu6&$Њ ;_*T!"9A1Dhj}>ij*؊~խJx/XQ]m bl,~[(յapv!:;<1G(AW&c D_؝mS&XdS Dg}|fz1KVUKC^:U];/7$5)<SػvXʘ]9޷.$Pꥫ; jhA|X$C X P}=썲]n.4ΌfX[R>Go?]T:r݋ۡ DTmsDE<`sǝGa?tX1` :rlQq$ ]lC-~e·:N.?eKZľsH3P`I7|z5YOSqb]R?`[:L"KX&@%!oBk K3&ҾxvvnV߽k8,_.ʰݎb|v3UQeOv=&` {){w fXՙҽ$ZX){w>oG(a `_zuiP;N|M~P j/t2wW.TW |$RޫP0Q5|ڡ^c PH}\:ţ=vP`Q\7ujVI/ nGQk[}x=]e ^qq).'L )ܝ6i_h7$yiT}"hd[Y(@g/zʍ2icW ]l :p1l6` G+8b!j".hJ2 TRHV{DvfOͷ,mPvi[U5BʾhwVL-eR`ol=ymK~Ab0/Z8ckYňtKSsD1i `&:r4/.~h٠q&uznӄume B5;팏z'ڭnrl*DZ_D3a?X^O+~bA-SqĤk.y C'p *{ua֬A b6JFUWq]|a{Xrm2h^AثCFt#ho$]4yA)6gE ,:S&n'tXyK6scixTJ*w!TQIBEǠq:ӈk)}+)4`:"9^pSlnNӟ0!thߣexvuS6B L]mxvEYf$_C˴6vjyD3I<(ЂY7Rċ|&[9\jgT&>|7l*_([ <|$p./]uzwtA tYQSh%7ՋM960`*t< U'bHq@{r Pn℅%#55hrSiIqbYDݐh8nJq]y(AUC`i)AQv-LѝsskT>x1G-C`L ǂ&ny՞Su^,xA$=@ ejj9^ڵDgAU8 0o[@Qp, AE` bӾ~j@E* ?y@Oݾy;@ V  9))S|t9I>b&k"ZK jƻ2 Vd|+s[5G d %{s {m?EK 6ZY>ʴꮫ6@ᄜm'aʠl{Hk?PC@TB 8d.l;d*/}+ިng,]~Gn H޺a_ '/vAzqdV˳C>G˼iW!M]ՠdUqjZH5ŠBWE KrI`U~Ӯ g9|B6U0ZCy3D 7,[wyְѧь8틉Cxy~\GL}Pm&PpCQxeTSRN -S4:`ɦhPҺ9ιZR,Fz"{iO` I7-j".htu ;LͶ\5I68m{_sKXO}YBvŎRY[eWbtg1ǧxtyYv+kdyj'wkxZ] ↭ڪOkP" |p.xHya- KԏF^XE$SbYG\p,z5CP89vBZUPdtڬ3Bô|m&M NNԨ=FYvPMLvh;25i]@u&J]~-ʋ7ʂO{II4qu{eT&+`bw];4S,zy.-MAn)r*'oP!=VG3,PCAHMZX |Z/+4PG|<}QwBVE4g.eIw2+.yAhY6@X#vZ@/ K%>T}%z'@ZUI 'l'~}}5DAp EK?4]j$=1.MGD^E ߔ特 RQ%=v}'c렆(oI=l#^|$'@{#]|0m*H^Te ­CbzmP{>BۙfSŸ`N+X )7LY7Naeχt k@/T;h4Qȧyk5Uu9C_, TaӄNʵjhc9I"V-HЗ5)y}OՈ',c4@ "UltuRGOmfEX{ĔoӬ[C kvNlK>>/ 1#VGwTF}_Ƭ2)9. ?zV,zٱLySSK~vxRp E$Rɱ뼠](Q뇻0ŭ_|}»HyjcvfKZ'Ggk^2/6~\L]4 UZ-f(yI?:GljRݚۂ64ݯ11AgnQOͻهi?` ‚nYX&zGKcz-u~D%ZnEjFRZz.Pdyl ] ejޫ{ZvC2g'["Nh]Nh 9A0"'U?rCSj1Kp`jny9V[ǎ7Abv^7\wC^Fj9NUvW3?cB{cS[hZA !iI-ޫӛ'b 2U|]mB}.L% ],}@ v[7,yMbCj^זɭ"}`!*hq$bbi=P 7\b`g0Pۤx-bzl\ͪ4q Yb,/}-* = 7+Rݳz暘/X|,46Ju72ynz^!׏ ZW!=, 1H,Kr7^8b.nE.1 ~5ωHp% q9,"mTI.`w BN񲗱s8MT=Bo$3FXc=X~Zw`*өJHJW`H4,縩%;? T"OUFj> vw`UibzfHnKJja_Fi)ݓzC)š% [vpCNsp2Œ@ '颴vξFXDf81ĺ5/ D 5̴[5_.e$I'w2Ij-P8/^ A(=?r=M|osuzQ,9$W'(A{7QTkq c__'~ [hwZ7r*`#ꕚo4k\w1E/_kS~5*]lFsqx_IVϖ8j!U NѠs·XQ]ze\Zj>oM`K?Je^c)ʻcwD)rE)OVrٞ? A3E683?Z;{el#,Et0&5 n>@81a$ qNR-].z8ri}\ݎXĸltd}{ZC^"0 R챒+> ңc~E0wF~G汨,sɉSNUUT(O_ʀFY+3F=xap62-=_q L`-`  ;¼:ڨtӪ/@q;E>nЭvؚP_#bϫU|=e|%Nba YdO[(u}?ɠ߀8}@p*,{g*#_ 4 TnMAӽ.濓]@)#tH wRb{枡7Bw@"lMKأBg!OMۄ$uROmP1GAWEilfk TWqi3+vC`k֦X}]Mw{XUrqAnAKe YS,.҆Qc{D><5njQ*Vz)g_KHqn[piֲF)]]:*sH ݭ'#{ ?erG:ӽ xG|#,@-ҙ5hߦ]DuC,@ǭmGݓOu;㡆` uG'{ihhzou?Z2I''B!8Vtμ,ڋ%Ί\o+k evzA`VI qyab\ߩ EXX{PD0PD^qnۣm@Xuџ״V連<k9}!V:&2V ƽ0l|gՓB^kۇ Fw^Sbik}]A jz}}ni,*z(m.QmQkoѭ.W @&PCTrd$ĴͼGbҥs.zU*']d$s&ay=0J 7wԂR-`IC#tF^:DY #4Rwz/Y|l>{4]g^]V=hh%*`I'v^#}RiN)+YCI@UI\M U֭X&HԺ'+*wJ.y;R  TJ]; TveJS9Y~zK='1; ;=N v`=vۮlkvxy%yQ9 N3f1b7 P<Ҕ}:{KY;e#H~#W4ws.{b7ASU(ik;I4N$, :qȑJ t-efv-EJ5#v#`H Bܶ)7k0iqiP.|Xa yA9}7 p~CP-[c0`Z?2N*KaQGCPS oSws P!^%zrGh30T\C#U-vmjO †įOh B;,^k^P-P>֗Q$/}^IHctX|i -zKCᡴk0``6_*!K{H9]d {ŶIqjA,4p|&8\*کᕪلPg(Hƅ 1)C7.Gd$1Awxxw> Sj,+lmlk][>soziI2ANVFURMFO‚jNLtw?lM QQ=:޼ˬ'1/vC*llfya-]ZI&'l\E@]c.uUT)"}`ѤC't5[hMrHDcr0NbX)6Lpy;lp#cwLdjjwoJ/#;{^;Ț'[`A^ WRdc ͗d`7TBJ1̐ cw>Y A rIY?T 2 5RX!=ULVy50_yAzc >r6w]OAGXR01C?XUY\UpCAԤS8?SJ7.|'.k X/e紐JRAo 붸;]Abd'=:CR`d~aXYA܁j^h&o)BqK%`dh`Ou 阄L70p`|{W!˟Ά[bQy0]4}:a}uX4c+ E >4qC+رW敘zApEd$4}`:0Pխنc:, EAH07N P`$K`{,aeyDVE&{րd/\txUO׆HAl8Mښs/Ny  -#P aXНhID`0@YCbe1*DEj4}9Zg-YGASO0uBBU#6 hr/l4}9s([\Ї-ZӝXY;poI[I$!/j* ۉ a>mee_Cb[Ʉ6m GǦEK }q8exkZlom|a%T95 \`Lל;gsI?p>*8>FU (l&]b|Z=EFpj0ITu1̺ӘC.Fbo7 nڱl)?Z}FT-^NK JyN', :lJ[r<3l"`0a?Oj|O!NrYa+t9 c?1x+A_q2 5ӽbnL, cB +13WlFlZߩ V e RP]L &M`{ =Vl9Nﲋ~1 NTԱ?OFPN*E(gh7u"[OS|a;ר'6<~툱1d.}A&(i%0#<"xwu_ºDZ/ǣ>3;l `GFDڀ?`8Ib+] ŷu|fH?XxT(˼'˝"ANz~a;P580O|a="`Tb^TNaX枩_La\u1iDemj~}=h]H^[ĺɤMuޒ"̾7qj!>5qS bx"{fe85q 'Z^~6h) 8jbRyϮiǕ:Ko)!F~Ngb64eMz؏{Iw PAcd_l.3ܑId0%.`ڑ"E{ϣ/^)#_{ƒUFwiPw9hRpg pd;k=W(4ĉmg᱊#YPW,ݛQ/QĐyZ( p>݉rc!baJ%Y\;˹^gefuCB,wl-{`a zD~&MOœNUC\G`guk3'wϸe{5fiLE^ c[Oڧq)M8w9a4HzXޕc}>gf@Gʚ?M*JC3a$Cuu#+`jA)I <7rIyѨU'\dQei]OƈLr`YB.g7C;hFU,Ҧ8!p]5^pC{ 2n[|_Ƭ[/B{ ֙j(U5T l)d[ąGR2TXc|.ZoeIt=McwUrDZx@؇NJ4HVmbRvO!ۍw<ǿ:5Z;OBۊ<$UAOY8[ oh9xGIN27XҍEB6οMYF lAJߝ>/5߇6^ΒA(bOCm? f^ "VT˨ߨ$z]g Q̑"Y1d=k8hĵ">y/xc4hxDnGAR|BFEqLBxWaX/Og I o~BjHn{ŞjҮϳߠ5jM@}CoSl ܥ5Srt3G%gko@R3LD%/?H~!Ɇ?-?w!}>Obt/^]u$l|<*Lr dƫ.Q?(i`L xkvw ekzc ǖ0 n&־y¹AlO1>7t%M#%O=bqk |>{hےQƥֹ|-#5(}\`G 648  p3>ސeOS{AGD"nHP&[9^]* F'f'2tс[W;*h >iμB)N$od?,g `D̷ Ⱥ撃Y\@{d=RT(J=rqW!W|{bIb?f[i MHC^}Q9Ӭ:%_ʃ`} }9 ؤBS~#vtt7:d֕v;'$u pw';W)ySu;9dAG\tG0\˙}T#ou"]K\iM#XfKw`ì!cCq@Ras x[zrm}:k/<68{ s]"2o( >6f J ƭ8bOpqN}؏N QI"bgOuБu &f=MİeTL|)||9PÿC+7P ݽve@eD .u4hP3qm(s,";4Fcїm3bP=ۙTB@Yuzü;=S^I%[H*`Fŵm@m«dC0钃p#+H*+ϴ';LJ]E*7uildmld lcrKrXx8FJ" G 4x@\? raiRy;?bl=gв9`IAVfa'>l%cW8h@%K-jR VRdI$QF;Qxa` is1/T!\w/ E)y><y0Z1oMԑYXjL j~ں0Ͻً$H^J+6;Nv!pRjFF 6<8DL`6R ;2 ?&# +Z ٕ( f;$u"^0t EbЉmd+xoᷡ/,HJ 648]syaL y\ |o`jk%/']$U;3?ɷ2Fi)bw;|\{`)h? ' )Z. X cNo-[NMCZaGX _g^_ȅ6"mj]4| f{a_ƬAFڏT] ڷ5 Fj &<@xk}@L Ơq\/Gjy̟ _޵~WK'A;zezۥ=poQ#u6dˣqXJ$(`l 1V,m9knӀE(On6mZX>ؽj22eU(ꋝJ6(N\Y]/nRnz/+AHmQ>ڲL)V8wH=i@= K7 `^bobF;,{+p֠#|>k{>3@.EWǺ2S}S #ы?>} F 1 D5k_%ӫux AJĀX7biNl^.{ a˻_B=,ޯ8T?W!*(n|8ms{i8m( BNr嚟wZL~]m}e)I*"ڥ/'{;GMW -s͓>$p`e%jAG74be{XOAPԜkXFU?n "!%< mqJyO,@M\% GرDMO*W`aSs aaoɃ2TTTd!ox5K~I5h3ӵ};Qv5orvM;ͿOU FDEL\j׹V`[陼ӱP+EX+ֈ5E ~v ޸wu;~ry<ň( %jKKc9mn}ӾYe;2KB;̻m4ch9dxO>g])ye87^ċU(qYə0>z&{j8HxBDV F]U䠥M~`TW yE;xgI?\44oR.|;AVa+N.ߎG.;}C܀VS\lФjc(<5@60RvkF#.;`O.sX,a*V򈯫b}NC79+EU0mYQً4rA֠뻀J<|Y~/gh`""s}Di|ZH c9TEWdN_#`>+97xv6(VMw75iy8%%wFg)7bύ/w/mv5`Y`kSPwF́Rk |< #a@/Dq`w JiNqs*xP#I`1`o@!oYzIL=Eu,} 4{v9##L'Ii]7Bk$+-{ JcJqr}H=ܿ󎵃 K>s`7 9L=&Iqg~TM/4 L>IiKό*{+/xv -T-/6Mh|~` (?d$^̍5Y hSwt&b|z7珲O %`R%EX5؎̦E\`n;?A5BvGmxsf Xn䋙~KJ#[F. ׮9 ŠñMSg},qmOZ_E6ziTqޓiq`P=PL&`Ox˿XA^T@7 cvޘF$=ޱ"T@.rM+|ܬ+G-^"UIMtդgnc̴ Dt>_&C 2*gxO)Rl]u\gnN ygM ԁl4Ow2~M]|SSZThu h06#^ƞ!3sX>Eo3. j %"48)yΆ;B5Ԧ= kv`0P* L=lNw(rK(3$]{7x<#an(O" OD ~klRćT4yYUd6⼛q.Hu&X} wʃ bIYgPT1XN&eu u0هC 5v['$>:jPfm쳓˻aڃ TGd\senXޯ!HM6`7- 0;jSʊل^/4i;j*kswHتIU](e׆s!!Ʊwܦ?Yg!nu>y0뤹ِ 4@As]Rs<9#z8ay-DUt|gkP?E8!mfܷ]Vz.8U E:F|AHTށ]  EXuYƫ'?w Wv/ui;=\Aî:;(CKyX5L66<01AhIeS?`+T9+;?7Q"cP>B7=5",WSctT N{pbНHLݸF}8 =m'fN>>>=M +gS{\#5{0fz{#5Xn /V2Χ6~B`' ;W7?f0wf!*4yii{`c 3A  ?;2֠&К[|d'r[H= Y_ eʡxD` 3bkH֤; t"A2WcRvv卐SP^wG3RGܽobAƎI r-%OrY{j Ļlv(/nzk2MjwqPY(~RΔξqtVu#)bkR~k0ʁŌ v=vx݃ Cf%LÅ5q]QiZi]o76Ѐs5:S3BVw\yP Ȫw[o3?3iIѐӂS"uXѠ"9YxJdR }Ώiظ5ZVTG>Y˴?ISEAk_8}Φnـ0?5"ozaY7*gKJୖ#{h#(JYſwrF٪k(φiUߨmUTwKG)b~  ꈬ}%%r4hw2( 3N|JY-`{6vz>ӎxW=Jr1m`#`h.z}ouKW׵!kv!l>3A~.q⭙"V|\oyOC CU0t:ŵ`GlWMR[4O" 6[#\QRJOG} mؽ+Nr6jCfuxT w&zў p?qFK+ v)Rں#;LbLlHLqF 9~xCֿ'qC&#>2 C?x)G`n(NKYRIMq} @Hgx&2U _@M@̾˸#c\y %+FܱFcG5bܲb m}B҃ #"4=ũOİm]6G4_τ"3R]5xaZik9RBxD)v; F &1j["6e=|@aPnxr.2ؽ#6-yBvn6"jf65/h*U`ì"'WMQeElw -ʲAamj;e=&"wC/lfeT3 y9 'ؚbf5PbMkG/Nrq?[-o@Ot`Tj O]eI9jK?pkдڕ`}kցLF End~n ѵS-A߇,%N!H6i?qt!צ}!HNuš'h</ m]i@JN6?x^l{pKfsZ!{wFRe>T@ !^3+\dIE?-WU3IR?'"@l,Lit/HBn۞]QW4Aw{u{ U5#`BJnS_2KzhMN}cUl7¸CZ2P1GC/rm`:_Wwhd[ЁgN!vDĬL3($.|It7d _wbyu`aߪWs]2uLӒ#.74~P6vĉ{."U\/=>i0̏4}{ۆARk[j--[muk#`ika!?-w5|i4?"9޼>T=7n3#:0k~ѡ~[1 Mkv sq7o[%k4:_3|] aA^ '>202|#^`" 6,F]y­A6ٯjr#B.ֽ[t!#\'HX&?`5`#=O-i2*opAeS X!gVq>S+MJ];85Xn+.Hq ~g Fp֎>pǏeѐٌޗ|ض֡_xTH<;2]=cJ3O{E-2?8!)Oc|&yK)qqǵxN*@"d@RmbZ{i~bwb~zGwH'Zx> z=aoLXbCüLCv7A,wg(ئq u*K(pmn(U^CۖM耭PZcVY#bOS5BפxהwuTOyVNfP6M$7J|WUNZD#؈59iT0ZB X)->{mD{0ڗ<Ю%AB-~E0<R:`N,IX袊>J&Q?Ca9۹% cPH ? ? 41X(Ǜ>~Pmמwn>>{BF,zJhg/AN|}u҅BkԽ90q^x]u#/xad";R fogH۬('౴i&em$X̪V {mޫ%x/ @F&ȧ}x ֝ X=[󸙸[i݋ Yc.|3YC IṽneM;8C,bkl0߳YޫMQ^RK;}TEl>c3;0"ʬ1z!kDqĸ/Ak*ufɶmx7Le{AɱaaBTd9;a7CO?{Ɇ7bvqp -%7I2RgUH=_5><Ωʳ;>Z)xFLN x3x37]%/cǶ>@@LտwZrc9؍: < wf6Ec_Fα=frǠQp<ډJ㟎KC wdxn`)iFd~Tת?9lR:[ʗ-~ Ayn5r%z;T#luG_ռxs>-طfWٮs5z"@ QSC F #nQ4u$SvW UYoؾ؎QYT}O>x%1,EQQ>MŅPpnn/DCuiuāW{=gAPWEd4-%HS N#&(hX҆t".m˪;C~mJ`t@iw[ r qn'I5Zu| N*>FSFdib=IcYmuogØ/C Oޜ׎Z/ 3UQvfqh̽O)6GVjFg >9iC^Ԕ&wAJΟ~7cX#NӰHouL>3 o;${' GSe{nכ?XO foo^}$iݥYo!:*]۬q_h8z@k EXdjQBЍ鎀;:}; fJj`|3s]ыF#~3elϜg/J )TBv^[C6hͼt$_Kՙuړz.0P.mqFwiP֕?x0$"z!x-{(Ñ LPm&>b8Rs28)v&6z3ףIܙt~nȕ?fi٢8X씌nӌbNx&X3j/s2 3їG3<5CcOEO*a_V ,sNuX9 4: ʧ>?+(OߛJ:w鿬؃Őyt˼OBЉ~ʳ7WqYύvxXh\zKSz2vi7(z|]L=՘+,{e%%ǟ\54{?O~z_LǵEgySNm9V ܮe!39ow5!6X X9[c7)Zͯko8!`?ah-Uy1tl+mցV6. ,sb<Ӻk|JƔc5U/ɔKV>ܮ,02X$ Q=R 5Yp; 5rTCL"ZUe#w`s)j-=YInGє1?CxT)U~o '/A n},O`y:jc2>{#$.C@ psX{zk c{?jP|{7Ѯuv:Xϵ[&dcnq)x}GRFE=gufxzUyΩҜF)SsxQNFg`ͦʷFڧ^R0FL{>k qSȞE-{ 89TZ}"4e鉒x#a=mn^w: k9Nr= ZA֖YN-XxSEnjjnqzPsC%^%Gpmh%O`.>nקTtJ`_}p1j$G S,vE[f )K7k⁏gtNuH,x~Җ~cjpWyP<;Kܗ1(ZI>are!Ҿ0@haB]W'M:>o?]_Y_?  8U8+1:2'7 h L|5B$T_s )dVBČ3Z*HONbPdIA6;O 3k-k?sLcٿ:*YS*H 4';dakVԷ›*gp0蹩Ο$AlӴ"e5&vn*9{9EYn!4dm AG-~|Oʱ2-٢p=΁I" fF:.T;>A 'åTQ:ifκԭm:`w͚wqf`s]6tDAb'ƾSiÒɬW/@P`hI~C0/\RwW( z۹adՃFf92IH91;i\q.vd[42z4:,"FVxٳ2-5Z֒`'{T7Q*-%i ҩಎ >uLdxJg*\1Uy33YGf[>|KŴkޯ @|KKRDf %tzyy>Ns=ŎA|ZDmjY%C fMA>e@R}PYa1cN}̍ϐa30a5dҬ)8d;u׈^)^?yD>uKj6P(֮Lj&5+?T9ū$pJ _8Q'1s3(9ߎ+Q a{d<ԷFIf9kPn_/G!X[/5Z"}4)ٖ'f4*{^ky|;zv#4GSÞCdR |O!=e1h[;fёĈGDe2XQ8ǶtU&oh ^c߼!A<:A57{0gg7BJ?ϊr~z/o\s1 \?[I4\aG犕hIٞtJ}#Kwl۹wtMJ`6Rٚ2,s]#uSQSN={gF0\y:{\> Y{ ̕ς_I gƌ[G$U;UFTP}@50^0v9/sT[sI둔mH!v}@UtmwI~ƦlM:\E+)5,E=Lk;P8nt3ϏƎRM, j)4\PrN{GVHuol5rz>:c>]'wM;j0lM5yYF =~Zm@EtKLef@WH4Q#{.uD<\EUŊ?.(t<@g3< 6xSh3Ga|Ҫƭ%e;%w]W{\咵-;~ʶ>m~LĎOC ޤ{\s›AK 1s.)30Nq`49qҷMˑYS8ǰ͘cNW6-Cmޝxts Icm x_8X\4:1ܰ?_-9zxYϩS?~l&w+ʩCǟs~ QaRz.Fu\k?w#9J2r֌nkͬ@'6Gv#@7);GoZ`oO%^>Id.7 UzYBJД`oS.ް?;1D}: R FztX9hP 6~#'2V`GяFT0"|Dh}C9z!w”B6PQF9|{Y 8ZW6tYgRXiÑu:{5aѺWՈX7r 6*!𲵡02>o,5qÑQ4&EkBkBʑmXͦ` <8ԯx3?<*5``5:ٱ.C!jzk״ELifR$BubmCE'$%&Bq~l )@4Tg+C53X\\2l9p$N^Kqcȿy>1>1e_!]%dV~Cu/|fm`p:NGiofMۅ xƞwu7* Z YBLk.~ ѐPbQGmzf_oduqkn{,zЦv8hs>념ao$VwQ>Bwg\o"R*nv~٥= J u@DO@‘LNب|I?K&#Zڽ{ǎP2/O& t0O5>wء (5\7S[r|sMZ הJGq=0if ^Ku%@KD`]5H^b2 a"9Fh4j >U,p7M͍C{`˩?kP<_=M-0d5[ g:ke]Ϥ)1x\23Ud:CSfg<:gb5ڐ?{2>e^xx3s45nAueNp:D 6h?OZaDxYτm#sPCѮ?l=ƙmyr4];X;?]QKٛ 1+׹\T 1Og7BПRrkAu[$T[u4ّ,N "򹲢 Vִ5SE`s]wSyhQ8etof5rj~)Gw DٍO-W@v9M[۷zy#T{7:33~~mIZ }mW}R,ËHZe:eaʰT7߉c8S* Ŏ^H=uGHH[.jfA S v S,  LVĠږ{/)`oS{6Fg 1# (\Y7 =u'\¨/>Hn/12R.ƁPwqDҿ`7: Oq >M dZ/_%\eo x:8'k/ϙ {. 7 @%l*S[IXxx3E5m 5ŗT' Çͫl 8YS ` ' 9@R4c r!PzYg7BJ+ɞƵ֎O!.)&M(^LS%XقtH܃v,[[Vbz>Z.AU83s}ބjGȼPΖzy9ױ%7# |?L6Eiu |ƾ%OY}7F犷\>g?>^p?Cp)67c9VpKd:)1$K~`$yyPع̼^}hEB$iۣb0qΗ>"l'g0^S/ҐQ YkZtYj1?Q .>? 2ۨ6hZ|(:vZ[s:jP̙+3rs@2[q%UX+٥3 'Qj R7C\x h¦/wP*(e5P> Ga\hb/,jxsLwAt\@}PĺSYwwl* "ə4n3ɆRC>.|S-\G蘻W  WV(0'Fu"ڵM"pyn}^w Yo6cɉ?G3d7,Ûj(::8sjId 5|m53n("@O}_3#lLǒClM W,z>\'J>g]SLy!µe~נqζ +~7,SArvΧyjA(j1I9Ŏ࠮?FL Et [.55Qo!mZ 21ARXCK AiT /酖):4Gn,l%fsȝiL'  Lڡ&H"+OC݌f QȚ!z@ K &&(6ۡ&F´];Œ *hme'P)Zj| %t:lBl 5%PO明͊fi@ZV@g,ӇHZ:ACȦi"d]A ?A%xML"[ (]fS<*_>ТzA֬ G%_C;Ha{V,wFA `˓52^|BS\U&C P@2:t9ZC5`  \ρNhЁwKS~НQ PdQ EW44pA ?~nI=ajٟԶ#Mavʶ@A5XNEFuN-5Whodb(3}ldpxNǠ]6 :l-vyW>u;26㘯3x :>aLHZFMW14`ofѠV^*E+p:>Vߊq󛒜O>:6TX)2*3g6n F\XC&檗{ޯ ; ?vw8E+ꯎ4`-vz~x+ldQ DM[ޠ&ʹ$: ,L)zj#ٕ\^ 7u>c[!Nx~ zB)k#YO(ĸXTTlS)ߵQD-Xmq; nQhvR< hP(Еӆ5z/3bY ̜Gǥod|ŘH S%7P}پ`_'Eli*ea{|Pyo ֝!g vMa)@H-ۮX-G ˮؽG1!t^/IV.vt 4l%a  ЮiIYc?XL*K^(l8#+fxQذF[h{%&>, мf"3Kqv$//l&?iޱ/j>dYm {"lu$@(Y +7a}NvjݵC&h̺Qq`t-IS/X>@(I6SfdrR,Avޒ r\ic+֊Xm]Lopt@и\tCܕqYL]CĽ^ia|q[_y>7Q`0G6zV}iv*`fnch)rbxYyV|%pKYkݷJ)ͧǤj cWu5/e&m dx)U(w*@_1 >lDiQC4IͷfiKhIlkn#d֗ClTn4 6G ˰c3HYډ?n;?K!:a;qJ®<&{ & ]h/Ɍk5e+y,Z۾f0]xXҪD{Gu3#l1 A3N6 Emqv8|>78RIF zU[h\zi?h/c |0KhNΖs`%>Y5-r͗?ͳV<`3p,;p^N6_=FLƑUފm?n=hRE~ʠ9mt0b'V詩`3KC%?>jFK~{*jjo+H}Q Z[7ovdΈk!lIEed x_Ǜ~ܚ "mmwoV,!5lmX{ 0yJfPMi."EZ9'YX$ `3 ~o\^l~c먧&`٩ k- -pv dm`Z]&RPO-ekZ6G {/V˼|?+5ؼq]ipAsEM+F`m>:8OOfAo `0l3x@}CD|xIRw'}/bW%izֻJP :^܇}D TOU{gؖ=Ѩ6m.=^%O- wX ew{(*`_;-jI =Rؖl3{n8gn_P{0׳'_]\fO y`E|n!@=rXei]` 2E;4~ɮ=Rs|N,qZeKJ>M 1]tyOZ#*»k}V$UJZ…9Y"9|[QpI dLD +ş{69JW&gr*脧z{F6,"i()aߋZJ|UՃsoz J4lڧ%nF/̴ @7ni㬔oL\)U&>r`4HuO[n;n-k{!_gvl5<\Jf79\j$ѽ/N>?1&%yC|eϡ{ܕX@cQlzM }fsxRumta`o3ݏӁ |<@ZK;*>k[vEz > 4Ik:*m)elYf.>ʛ-s?]>I6yjDlN=y8cJ LZ:́ 3I9bAw jPId}4[0-q&7bkWB}rtXUnƹ/e &ṉbhT)^h6 A+gj>߿+0* _I=,0 1t]dt`u%b%6aӄ@f>`4d4 '~y4 >8mB;%]jvxZdOƖ.kg>ęyrzYGMZqUa'%vykxqpiSXYi7aQMu+UxuH8Ez| y95@{u$,LU\[Ljd4ί IELHCpOVyy].>%(c0$얦fҷ>+S;iHQ񷊲L QJ2sѽIe*_= ;O .}ZEv@9.RIĚ텽HwVC{Z:fRONgẟ@郸9IPyO;O? m,w ࣻ Ի|6!?xA5Z/_K*Pdtm7Zymj=G 0qk%qAڢBm0md(Z˧'(iۑ!WJ9T5 =wF;ɑFFS"/P(!+Ql#KՃ ՅHR"Hσ>BOt<bTWLq>jhqW<E.q졦#3/*`1[܌8D-F9{Su+#E!(W*I W&IM*ٸȽ/{ Mk\{CosrXQ?3FyˋDn߂=~n3lx'KD9f^zsKiD?I[P:$)F[YϳLGcygD^2zBzط(n:MA qn+GID}ն/E :, .^0J]:^z\%UueTGդ_>q'󵟚 qɣڦ dE9md u'p'ގIQ3[ww8" aQFś`yܟ;f9%Dw衽r?bX2|h{ZnQο JQ. |,䥄?f>@tl3Q )?ߞ&'skRqhu M's@'!%´,Y.+ UgnfU.J@b:U{RnYσ54/VU7տ yS^x dd§=/k7`ڿd`IޏWHEܿ`Lxj8+ʹ^BPNekzpc;w0z2b!?hJQTZι/U#M 8-qBfD]:L5<P'g A3& \G{qZƷI/zw|]k~aa䑩*FLxO*W:wTe֫ze_ʋ= D"$FX.). ^ul.  TɊ_2>8!0`iÌKS"Na<,oݟ7Xki +$sK&ɄŊDU]q$(F—#ؐphhyW僜Rd(kCiv2w.k؋y7SߣT^׽B:)Eq=V}JhŬ\iכ\aQvk5ȶi!,K `>kt)'|}éڻM='$~,eՄV7=xprpo}q*W6t!]>Rtl3 qaūUmB6K`*iuM/<Í6>VR`W"lARza\!܏{!{+Y,xi]6Z^'$^S~)D,qV8u9o p{Duj>atc8 Д?7x(&gۿ׃Y$/E9}'0\~_λr2L؉?w=-q͉ Uҍ'J$mC1(0Li9ЂnFCjm@:gs$ kH:ߺΞT@RH? *{_J.6]d <+@woJgns]Qo|'GARWOEǺܠM^5 Wz|WYC&6{ !%g#䕪NvēDwW-d{T qZ3nQ"?-d{n(Þ˭zOЖXCk-~9^gF7.ۿWC 1Osv4G5 ==szLĮaߧOvX@ ٧4 L*HE58{r#닣 ȇy/#M^?G^4e8obZ6@W{C4XLek. xmȳbKιڂgm 3ך/{y G4sVqeVњxS.uq}#Mdy{&?W +*ˑ.` !y./ɴG2//tvu~O}Neovh3@zB|W'"941ݫ&&w>f6T|&cnQМwwVI4Y$#BF t:A-mpJJ,P دhU\`Ӿ BV~Ic8}CiK%8m(XB\@|Ndxa\M*_t?PaxMfjTݿK>Fkؔ_?w썕6[_ t`8ZAe~< F|ya+՘C7SY0^ƙWK"CZf"mũLJZ}۾o C譗'6;7eZ]q E:\Oԑt(l.wiةOn:MJW}j ׭T? k=*9@B,z"Ȏep{`qZ7`N4Q|dU7C~pLof\CԉܓhӵXŁ Du(A; :Y5; Ȗh5fv7i{.ؾvQR#R_o!Rmf WrkU[Pty4tUx '/ZQ]I2K:[ y@TOd(Z╂1t`՗SΩx Մ5EK}|{{C:G6 0J҉6\ZԬx 5ְDyk@ٜ?F[j~.\ӉN&j]2&Lxߏ(yK"f%Y3r}(>^ ~<5P'E5^)})_ E|Y{s:Pxbsɺkl轧&(M୕YoliUD58z{8tn6F»,ϕ^C uC* JbO\w3=Ix첵ʺ6'nH-KJ!o?WC/k}I#Ǿ.4O,HXוtKkk8nR/iw@#E "4)}ߕsɩ{FlF Q'}c854{M{L^ҲDȜ8"R6=z,Bաqh ^mAD_9VhZr~N}JuP҅DR!a]Zc{2zS`&Z`KqONLR@D܂+2#Me0SuܭߚSꤎngIk) >:kY-3"/8WCnmz:osېufpC;07%׮YꤟE+zG,;5h2|xHM'[J16v=ً')?IE[;#'M]p,d:S֐"߫\]>703p< Y^Cj32u zUſ<%8EL'rϾdzD/-AcΒͥ7 6=I#`F#= mi wml(BM`m3CFM GE2x0bu"[|@h>nİK|g/x߯Onܩ]@SJ/Th%1y v90k[CSV+@u@,r? LzL_ᥞ+3U>@esj+B38og蓦fv} Z0lbrU!LffTH+_zlu/p8va V(9shr ܨBplN۪$y@knRYWRqR% <Éؼ<%Q!3 Iklϫ_wv+TEݘADdz ] ,h16J=@C3~j= { 9ڏBEB]" 6?&>ǟđ5PizKNէ#g0) @OIʩ0ȩrutwST^[|7UHB: Ϝh~P7}u Jc) 6 )k, ۀxAT 3~!myOn" "L|v`'B A-A"Ge(zM@{0Rׂo |ۈ=&Zg{LMBhmKgIoP^J>@ /a0"qEnW;#`a%vړ%K6-F SqṡH^'UV.zyr\֍`Pv](lkڽߞ̲_Pُc_Ks)\{ʥ&R,(E tS -Zֿ 2_ڈ~BL8GAӰt.19%Q4*kR865Hx7t/*?Z]_Ѕx3nTYHYۄ$KCu֐& j~>qPb]ѩwHRZA۔&|H`޶4B h2I{ t[" ;z񥌙)@ `a!EGyc}']KJ{tFPqy$"W6'WoAYoCpmҸgR(@?< HJt|Ǽ( ? Ym,3A0XtFfU (JK+ mP "m_${D(KѬo6{#Ǯ eۺj\ͷEO.D;.I$( ;@7s)K3Swlz~PCFܿ@/s&Aw]\+ 18K7>[ v^#}̼oVb{SV:g̒Iqaϭrtve6e'c+Tz:Lg>0  MeyO򄵲IxA03z~7SO7 ރ?p?&tS3Frŗ=#[Wl)~ú"=ta iPJ S}~94qWh - >/ٳ"Yϣ#Fs =PKKabq׻NiVSZRZ5 (ƃW9D9{A]yp+P-|r!&o<&?iYro8*A?=Z 6P;HflB^G1Xhe r̝÷s9m5DR19O{3rEZ YFNp2)1@^R+#5Dda=,dNrzOp$ :A$2/.|Kpo+tQޘ|*LB\LRdltF>o(y!mTZ$D k{ P sF !m6q7tR)EY<; kAԩ#d{\=e,i ^٭SJy)@BcT5Y9{Ki<\55  z3U40g tt-isH@()HeM$oVhX9I@ A< t;GÜ=eR.c)tvm&{Q/0pCoxG emDΏDk(R8~96 b!-)ѾO{0{nXr !}}Ҝ:e&(yrFJļ5_> p/7!FiMn}g;ϚwGx >(`&ߩK_JSB1>E'9:U߆$x:ekF8[./buEۚ~+{OzĜ(/LNҟXE1蔤 ח-t7`'깬>@ `7c7[YM|TЉ5|yɎ X+ְ[xO0Ʊ/Ф9I{iSt&:JϤ`s5୿) ]JHsyAg|9CJަdAZ{kM8!hA Y,O^^xJJ|GDjb-꟬nA `;|,/3@ۮiWӣeJ2Qgaumfʞ -Tb`={I+yKVRDu-?EH!񾷏WSI =ImSpsq7E>J) 5{!HDG05i7@[>(>(R~)fV?za9] fv9Ah IJMy*BX ®Ry P Pd'HJ蜘u*V1\$e3}4aɄ}qթ˟!7ЋP*̾ai~Fu @6̟կ*j)nT1I0s\JWm pR՟%Ut}UHzpw|yo4ܴdOn/$Srk_}Z<4)3 ѩLtYHnҬ5ZXnVZh`B(:5+7Ò0}D=utڃEjiC[X 鶶~u( 1lf<3 r˦@_}~Y /_>H4vO$A/0io #~Vt|-;rx~LW[E8C* x1 iH!v*Fom nSdP 'YG[gN(qo%*^BRkH:ZYT]d2HZԮ>=@jI}a|BGAaz4H0EtZ0=j}/gf9t3_D'Ed^2B(^ՠ`:/ϟ}9m̫3>E康}(l1{xm:Xoju|O4p`R-_tht= vB\  G@MPkϿMTxҠT:;@/R{Hk[n1I|]9zPʔRgf˥jXrϰv,&)J59p k1o7T-jq:&Sńs3!Y^v҈7Ӻ rE$NYR`G`?Ւ0܎SxSy 4/>Oi`=V$[YcunФi[4%"u`&U&?(!?[JTS]ŕ*U=L#K6mH qpó<C3'0L({=~rgOsՐDkyGY ^ 7]S%MNqXYaa=o@b&$s ՈW%Ť=h}-bnj$۩.xVZυcR}g6t8_1 K\Fh=ZImu=.x_{iY>M̂͐QF [|V{؇#z`ͥH51uvӃm,2`5W}j7V,eT(f[8KY*~C%6:&wM&ԉ8饕m&uPCFHBIJ':_[6PLl1/TI`s&?U :@C,%ϓnE J|\ƠSV=;]&H_;[ޱw!'a-ǃ àR<|2dؒ, Isy/'U"815X^1qjאI-GĹ0n[ny ~^>7L\@ʫ9_5@\<l=\58ða> p,y}B;-'ۖJ57yQF[e!әLxd5[ZN8n"[8 ::"4Yp&ܾl(@Ф|@GebE yLwsd<{2'2нQ3,y}{]LsZN-V%Z(hAPQ?Gы(К `]>9u`YhWHۧt1& \qSOvX <)boW:r=MLw-:1hK#.e1sů;3#?zn%^I}19#]>vԌnnlY$O^anŵ8>ZOt#t-ηz?`W493u{ qEͳӥn &CߒÓȟ[Iaл{b K|SHPُsi]i+O\H!~P~޵wV1a7T{$ĨSV}yH;y.G\gx9&Ů]u'>WB`q\7/SO"Tf~ȶ&x~>C^"rM㪟p+˦umgPw˩\%Vy;4t+uB!g>12E eJ%3״Ky7Z|"kPE5_5كD5R[,)QEaL[w#Q$0Jg ,y|/{/e脇Kb"r|ă|M 3zl@7bi޾Gl]y$1KbsiqGu*TS W;S d(jX.~ MŐ=!)[=8_)AԟS'hgfxN1-񙞕"|]@"Dɣ~\?#ԯMxoVo (i'?n8{ Ѵ|O5NkKS,{~PkoTxBb:Y5|K'o/z\QO܊3{l.b}])$i:9ۭ{ ),iY\jWmV*["L&C(QOAmֵ/,RdRdߙ .SD: aASS*%`AcO$1$yҷ;#6m|΢%*^6A P~R1"L ^L}lPA!)Ay*%o 8~X^ʀ?~ {P#9lPlA2!)&obM@ԧ|qd@PSuVErYe0bT.`]̦\HԳ=X"YݾL|Ni6jqϽCx 53ܺtPYSW/K:9W8O-xvbS=o.A.}4M'e&sɘ>K .?Xm*%NnrmxPU}XE7țAt({K4^kP! ].*b PED()8xةA"g #T,cYΕ,RB-L`&L{ zL} R w~;0kcw{otsnORAjF=yFsFB2MCfyj0x9-m`&6C Ki8Yc?V:8z MG>\ `aP]o|uJDf=mi]@MH+>3Mo0>bi=Uȡ//P@bO\th%'ɑ}LI6vBש3/qW}U~Xdy) 8.@R5օ-3‰CjQE@pf= +`~_⢹L+{@{'@p+¶MjŃ6 B_Eu<= ;Z.__ƹFd ҟ`o#KbŀhYPHsZMIuS;m::GkJȯK>LQ_c^xv/Bv^mM>ַl#X8|LAs_`Ph 떙TJt!ƍ"ÀMf`-t]d?h; ܶgsΜP`,g9ޱj}̆bq ƫ\J P BqutSOIb1lb9Q|V[Ne i13fDյ=ȗ^jê}PDCx֎e꠆Tɉ#> f?'cdN\$ş6ެ؎3d˜aP&/UřV2YOXrd.IY<*|o0ܤJ<⫺]q4,TD` y tBOecF݋G;Ot^rVe/DP3>zkK,8Tq;pLK/ ,"?eȏ\{/Ԣq* g@ϬxKuz= uje_a>C4K|0D-OV ~X>K# .a sdh+ 框`0vɾ{or@`|/@{0 =NG٘Цu@P@ :ܯc/rc BÕ0w1}λrUHR찔Lm}}^9]i|@uɰg,L|%jf>XT] EGak`8|z]_[;AnS[9޳ VEЊbw}PIU+;hc1*f ~x!o݆u=s V3d+RF]A7ڗdaT T Bۇ"7|_*i-1ɣ S'tA/_VO $atz$3ozב1GPAWSke ΩSX]C1CG.Ct=tX0XRb)­mwjCB S] 9N{BG{쁰L$N{Vuy R%{sRG7U(Bq*-K%X:3Ud1G;Bx cZmŀSsq}g7iLѾ'k edDR4qxTI0AK/ WbL$I2()f}T(,EcЇei+(h5 w~xYA_*/_|nKd_nWqR1TMZȥ DE M'홏j+AdHZC}pbۚ{~Uۇ^fP܃jCL͙jdTЦU%RVs$:sU?/]MM>b-Ppc"*zOQG(4QЃȨ(j !U(o{})8[nL Ӛs%͔@2GM)>LPyjmFI5TLWp:bnY-t%:/ml= #p`:UJbPrz -ӕSMD^0u5/nz;9Iy}PuI<udyuP$$=d,n7A5g`A. БQ(ouZЅiM Aŧ Zc ݜ /EiRV%Yƈŷ}Rh*r(HJ޶ bE4lLT%AwcД,Q]VeLࡥQW坩P.c@O 7} eH޲9Rʌ_iҠ Va PB0] ߴ T{gu#TA15vJ_6cN²ttpkgكZ<| ۚx_s=&,YZlW8Z$d>|yVBf%pJ)0CPA3AI􈬤0S_&f><=Myv} z:8%f}jmZJhu;@Eޓϩ>3b J4`7nݑ$⒞ijֵ½h{ҋUEٷMnU. ^99lW-A1&BPge{o}ʸoI1L+rObɣjf]a[A>Ԛo<ߙҝd+l rnl{7? )5fgmrVf{U~Ԫ]U9zվ_@"hxՕ(_[0M7&hw;{ĹMC"nj{D-갏۔[T_׺%> 6-E@{&{An㊚^eMx7OK?$]oRH}ORuyfš]O85aC%05IW喇T>*-͔TA vVO t/FUB52]{yP\2),g:o*yfcQmvlȇnh޾C' Te:t KC7?LFWET(pKTftAQv"8mBs:߃53]M2ƭhw> 3ОKY+/dTf?0E+W no J>AGAM/S[hdJ#s`2ANL6:ޓA~+F'$EY1,4O4a3|sI Ш /ۜvkv2:/K# ܶeI4{DWDGo@ aFKx^']aXI !=ň

>uJ>ڛ[6+\0Ǥ$g 6/bYB}5 Tso@展 :ȡ]VþۺV״Itkब" n"[nԳt#&‰ 9 }.lȶ AVO 櫟xV#;.>%25sXjQ* +렠 <>MM|GfFB -Ț7tYكIhk.p0Ԭ+ʢO?/d*RsmUgY˪'ol#ۼ_ܧKIw,Ux>j! J^2LktV!"yQSop 6lu~,,SᡅCufAҡQ"֤b=Yv>}6jQ} +gꄿG]GvU=k~AB] -Q7= `..WkhtX 2®8IS\h&lnn= ^Ʈx竵B2$:u',lo?J^w)9hVF)G{=N  BK@u׎|%sDdUKنս5@n>cJo=E='-m.P9?Aij=uסxيh>d|_c{^K~M\{0L+ wT `% BXbYd$_`h<L㱱u,MakJab 7CԢ$Nm2^|/HbN'X9w.o˔3KNmCYMD;;B{@AM1KǾ>6w(8qAȄ|fUp6iYB5:_.~aZsPKh{UيYVn K+*=ȑOϘba Kۗ#E 3&2TM -aAQM\h]W<U=dWZ{WWڲ*a齆v='5?ЁK`J|9@l0D++BaYSw`!.Z-)UHs.==Mb!z3Ơwe_,i>tEo2Ê?ك)*8j:k?͔҃I}LBETͪ?2cn+$ݳ >Fmdl^)fi$KV"!pU] iZ@4>d >7  _D; G]vYN?{=ا>Mr/^T!dR`i sGFͲNrUQEK&U "9 g֢{_` ;G|c|O*O;% CW|-~!Y!L}vgh "QK)`m6! C\%]YD@FoYJ!/AaS<(h'J#|MhBǹS}bK~UB('>=GO٘0r5,-}3C)(Е;2*!ZCS4is~Px"'u0Cy/aV.58=!ˠ#o-{B.{io[KޖDAOL)Xh j<ĔE{(RU\K?so_|I#ׇLxԐ=Cԛ/ǔD3-,Ӧ] )zovba)B "k6f xUlޏw Io~†vn,(NGWd^ɫCG-2E'U^{nY#j~ᆏvpٷͤE`C4YE4?!lEBkUN,l=Z ZPsM1$pC1 ep nC+85P]dk?Xk>42?{2m-HЛ3<[OU)ӷqmCm5{Eۓg@TbRb=T>2"Ηdڸ:2KgA_LS Pv5(zA5V[\5BZ sU sw^J&ICvnQ!.{2tג|w,K7mtѲ__n+z3@~e#,K㡶EQ"(g=_"a6B'M5cOh/~æ4fE=ҘA6w [˘D/M C{ӞgsOMd2Xf$OҠZxaqvJۋ|ի{gڕ$"Er7ADY+6hmZ[? ~=[Ł= 4Wyʊ"S%_ :"N;< ?^6mgڍ`@RICH$GN1񃂀Θ9BREkbj5B5YkR*Er?2W| -peߛͽt 7k1 jP8#JzB(=kd>}3I-훧xLB{ _Q:cFoݞ4%9Yu`_|GI,K QH%)S.4l(MC.~-}HB& |L\FܻNS^!oj;>Ǘ:MZD5ȑ=MkeeA Y:OX>)JzfM شbn?hJ O|^nm))ILq('bũQ?DzI{`'(( s@{*pɯ!AC=!?*`jMkv!x6:.&E ԶExOc6?64}2ʀm!oA?}46zuG #Ys|T>xI%s_cKk=CD DK=bO_Pqht(QŊ3rX#R }[tTG>5l|AA]U[U,: {k;Mhy{wfCHD}ޒzkqNm7}՚Oԣl!N{`YI3@QGW00ǖ80njW}!7q춦V]fExA$lr_1`+?JQR|TF2TuzA1Ӯ&T=;v@t~Pӆs5C LUBQm~xљjK De$Êc R4ŹX.շ2h}yuVN RTeg5lPX$Jﻡ^)gZYizJs| 㽿>3 ވ?^VDKwyb`{T?o -^#1㼷?P!4hںISOHx<;G+}qEM竾m<..5;塆؃bӧqZODEڮI,>[a|m4ػм+boH0YŐ)bu)IZ>#+~QmuC&Q sC4%voI Y~{aYDiy>7 ƔdPE<ט`˻ҝOڏ/v[C!NH)v,6֫B9vԍU>ZWEx( 30 |6/P & Ȱ/gms~@ۦ$ps0q - kE)t']-\Q7B7nE~艭=&K{A4s_5E #0g_ı\tB`)k jM7bćN5 J~ nK+HS1 %f5yEJBG\ՂRH!(-Ӏ1?-d^럯Z=vAA&F], 2 ci]k:9Y mnWӴZtQQB 1?L臚彴C P _Vzm>_`IGfy'Bht `TK|ܽqC`C$rxo>/2;`[H[-3PZBQf>E.uTlK;,- ;{4`AUj'BϾQF,Uj+U)7> ivOg}/ lg9h"j_>o4峿@Zoꬿ?pp{jLBȣw$_& 'Y؁8T 7>)M=R*?c0 Ix%I*}Vr}Pk[5^AZu.fZ-uvM̫~Aj㘚tן}w8P'0|]ήC֔4ߺdC=z|"I+?/B`60kB P@n>7rԾp(*)?iw+b,lQ@`yKׁ0-IX}p9 Ai6Yx'zKS=ܪnK:`qGl0oHa4 % RmSб/'g슥aw UsubcG'[iz5;ĸTWBsy}E A-R}X7y]¯kBg1-15"824.iTr5G5sdla+4an2=~o3[=bM1dw(-y׫<,""fQ>޽Ot jTOr;2ׁ:.Iü9CroD}E^_컃9W ;hPi,h(>ӟG6z`#NAVyL}Pp=(xcjv{Pw=.,\\›W1Iuײa-/L=wE|;_T4¤~C)Qz╟ #[ Сoij e#2Mz:KS& Х͠lBπףHӸ}A slwOHn뒧:itb2DJ^U5`Th: Z=yG dK}1$=Dz yn:5)6{L ާU.(R&8ޞWR]C9Z5jqyHX ]$nk׺'VEhBB0oX/kCNl|YJOٚDZ%֞4h2D$L>B+L.#јb Lx곘MD`{7&@Za0V?Z3+Bę߇ jrdwXBG:37TiPɶt{|SVhaۄH )b@k1`U ? bEM_څ| x +X8E]xG;j0}WW^VPBl[{WQ#B `5 7m pQ/q+aU݈aJ*PLvzZKY7bj p.s}CMtDGD2Ҫ ro=Ms=HB,+cBuS9^#2c_ \\29=Xƀ BJ?`=L^)gst="lKzaK/*MK)kYǶB<|xMS#'Ϙ:Gis5љf6ZV{'H--}0P5MMC'A"* |eR9w-u*!/zbӾU(i>SنMbfizh!Rsi7}A>wй`(J+K4H/Jl@ A[gM˳̺5%!syh}p:啿>ߤ9Gт9=JiWZD El)Gucuk6T>6,krXab! zqzkw P PVpeRRMӘ2$lSz,>[]j?[Z!SyiERcu.]W7E4Z|,`zyzd59 F8ϸ7 1y{Sz 5Z41bN7tw[.`[Ӑ @WIȁHaj3xi:V= }iN{R8 7q}Bk^tm{>:i鱽һSd9bney= *ud1#U%~!-Jr|QX䫕"!Zeu51hfyob#%X䡷=F>ܮE X{r}r =*~{S x7k됿!׌3PFVKA=Nְ2]Vm$nsm]eWvEl=瞯l Y1Scsu/bo3E~)5"y'`),Kd|E:~ ^Bc7]{ =PqybչA8'ԇ]鱐 aߧzIۓ>La $T=;1fy{_S?@m9SʤeCT=?x1]rO~zKO{G HD8572=`Ÿl"ox=v.?Dl|Lfv9,*)LO=fӾ LѤB;H(V1>L RuuX!x_P~RB }`lQ?b48OT`)?= Vs5TmD?)YS[w5Ly,BGIB_F@9 _,ߝ5 N_Jm]u>:/UQ)^<9ݷkaQu&v]LN {_Xїs{,7g=Wi0 `H2;{9iT_9=ʨe37s"n̤]FdThܰ+>5bOG̈gZ xm2T+Fŕ-qb[)xlO1 гȮ@ G{g;X'Gd=9fr ~˓" Bo(Ahzս Xͨ F23Qb=c?]E^k/^&x`č:2 $II8}kF,_Noaa'?wTݛS qJQ{xE-ϫ)2o6Q[3@hS'ӭ"@0H.iDrER͘L

r1_dźr m%|RjH\L$ ad)G6xgo`;D1=@ x+ٙ8 q`n#gAᶠa,^嗹7\?R~C~'jֺ@Z泪͕q.~ hV~ PT@c*Â:Kκ:dZ/-zʟ ވaR7r^~*q X0(L9s1R9=a$zT9ZJ2{0 J顆k}먗:V/ ăw3Q)uE(V gn(-~x֨]}^9̕>k=*<%0u.i:rx1&>v =ϭ ߹ R[P\ϓ`՚i?v4gҦYn7}b | ȷ@-*KK#Hh!d˲*lE[RIټL%hL1 $M)j_W !\ojB\o'^~Eq1CWTj"7z{q'fFLT?"U:P =ݷ;]|$~r<>Ѽ_[NXm'5~_]jk[T]_7Cm8ezU[w9}4R{y{,XVz>%/OU,.r=7sL̹2{4m܇{GqE8Bk*/KLa5ٷsQ݈5MV'\k+4l -b{ff]hĹt ߗv#R @jڔXxF4,v3Ѹ?u.?G]w\uJ<4JA˃Uv^wuMiGǝtZ߆ //HZ+z4dkHyQꦧhz`Hi bZ.ϡXGԐrV5đ Y7u4E֑vM >t NOj5Z]1-ݮ*C![Cla:b ;ޒuKWB{(|Jj+o]RroAwQ ;yHD@3#Lnnny -}RG>%_As-’#32*уexN|gXP"]vmb4.D'~j?ri%SY}[Oku 0iΜQ${J)υ}Bqւ!wB QtX˴TWKQbiDp뇥P cq_ 3*PV?/-)gF;b%@"$kCȉR8}phT~X\BMyndZq9O1)eMSE2*%'K&ZEaix)ȏ|v>::۷"i3p|vm&/:?D;ygOF➿9}b8Ӊ1s[ ^%ŝ]@'p_ 4VC[FOU>?bA##Je'u:XßxnU2'=1ZjgOQ}yBLnK(XFEPvsi)qPVZKW h03.Z>=Ò=1mvkv24e}կe Ktly\\U"!*鴃^ 6S)^6Heë #,7RuuzBmWs-OO~zBኸ5d/yrZ3+, }P'hLJ[ɾU*P?4UxT?_Ug yhy1\g=거!%U>e~%أe׻]H.-}# .VRs:?7ޒzR6O9.WbyW U "RF@S`ubgzApej#M`کۧA?m_"ңIڱeBX +2}>/xSTUckss=Mc{G(ɘ=A^J Mu[QO*~zUDu+2Ѹ)=oxWi`/3!js5|s<)7~}GeCʮ(}_@ ʵn~c4Oco]/I¿ Ќ oޥz/GNKAL敖M]ߛghۢ&;vT}6+ SUj[;eʜYSjVh)k&|"L+Bh.q&s|9[}ȢavRY"JQ>Օ/GfZv~z_mg[oA!ZumlQ֕lؒyi;֚;Tn..ëQcQ[rf÷ܱp|E,+dZ3w,)ҽA7 iᎦ.&Sy|{vk<)*XEZ]I)S5fؖ~N84KmۛbuVzHLk}xJV&)E cT)uJd3k6T[~ZΓ8!Δ:lݎWsq ,rKe'\TmmUn}})oR]x3)%嘌Q^7YדNx_kbZ74cTаgkk ѫ%zF$k(^("K* 5lϼHojKK\J@5v"xAň긊;{@Ph[]Sh)ž۸wc`ǡ?B}ܻn` OJ&ȸ~ϥ˺ڗ5k(CڄYgvM\vF0;})lN؍1k؇9ꛡ&q6 B<50>D_ڷmZbU,Xh_˕)W#KzjM?!E9ʈ?ɤXrB&֑nF22)$,UFH#)vD'SR~)t0}d FyG_F=U_F.،[WF}Q0BB>ցzgtU~ti;5:֒VɃ6 D0Q@; I+Ӓy@d'͹oeiЩI;>/#FOf+h'~普F2e5<#aXk(e~_+13p{!R~.e~y5QE=Sߚ"Sˮ(Vz)uoفufp;Vu&=*NSPN]뗷Յ#}yn$$uEuwƤW?(9f]"k 0,WQlT@CNR#{֑ŗJ1[ b=X ?_~Ck}V5(GX憼ý O O!xrdU]az>ӋS GlՏON{ 7 un!83 "XQvKɕko=s^!ɜs\N'V(D+ofFvKq=^80;l󸑊)3q/"m;U9hakb"oƾS4¦S1K (k,yr~n~rprW47z_<,cU>}>qdv1~{55%גG8"~ ~^j2[3XE>IjѩO?/c[>fIZСKW4{WP%ByfX`g*KcRh\ M5 d ZN^oNua_ؒ{=΁ ų5S ɠN)lj]JkqsNĆJ,6}O@;Dc*~Ƽa~v[wR܀ƨik tDGvK3Ր5thl5 Ϙ'Tw ws%T 0IG;8+)Zt{_+8qo)4GV|qIҊl~;AkoJߋ3PmZ^zJ$tm@PPTSНRo J*23cF{߃FE`ٕӾr+[EE^(5?|*57"*bg^S,UCgﵴgU>FAUA› "]G ըr,vQ INZBXTWյUV"7hN#2$ÃqyH~P1o^'vcRr뿝5E{4Z#@\u3YY:٦׺|4! tYS,7)|RIԊ2I5?aF\dI0 |&؀ "97e *@_ ݓu>_$pJOv *kLvR+;4jmjоJQ*00R^Ɲbq?d-/TRy Xx>)ͺ}|ZA9=JN LJH&U0kۄ.g֑{1$J{R:G{wڏuS,ֲ5ΖSJN KJ|X8p-'a㲧\o= D2춖W>z7bmk߼?^Wɋ3,J[3oX=r/dA 6$اԘ5}AϛHN5O7/sm-o|_,#8_TSsLy?ʼ]ƲMiEӞ-՛ m`O/"ɽ"KE :=cmؿ;GƮ{ ,P٧vɣΙiiTt{Y~rߤbA:?6|}{Ry%0z 8ⵢ0-sr#G٭"/ri $v#t:^\ع%!rk"U"_}UFK \*$b%lza]r|co8ʬ5{6j՘XԔh{c!eBFnHsvKmyd?BG.- ; >: 8ncrͿh™f{wEc9 &~~4e}n3rA4g%]Qeq=E.x\Ap~ϔ״пK&ŧG^ķC/찚ژ웤ߺNT.Q̠%縌U|1:Yq zI酖s5Fh14CƅdIb  Ơ,T `n:㍭Z?2c=?i%$Qx }}4ͻ-һH;ԃL*H!|/i|j_ yq|kקkP= _ J9XCIQ0FTGwǝ!*.i|V(l\MV-WS d:lfgY:pلm)T0nwDE*j 6Ϳ}3T -j"3{x}Ye}6:A$XviXJ㤞ےxS'+pV7ԉGG2}#=0/ݶG8h_30-ivߌqqDeM",f|'Zg)[XR2Vwv7㈈"׵P~tKsV,*NcE; N+kCSe䉝"{Q XC/xڕMKNu6urlέEr ieCUu+XB4He7s*Dl %8gܮ]̜aV@h^'pºqڧ`݃cCeK&vl"ehhP :Z]ոK"c:!pzIW"˧8FT(tt_4mD}QTjh&}L.L7ObDkq/vTlsqyY0Y>E(kN#Bvuh?y"} 3ޚr; v%\R-pU,ӎZ:pܩՠt5ΔKz)_Eeފhub 1 #S{k[1if5c]}ܧEm>E"l5A#Bs?v!hB vd3]6mݮo՗+LrךGt(9T΁*֯aZ35孈 %(ӟ(x;?7"( nYk"K lMK5pT't7'1J=rI2>_߷`V9nv_ua*$QdL# [ht\[駌T+$mͰBBc^1?I儏9;դ)x\3oX]%|sf|p^ ʃa7E^?2BJQg:X9}t3Su?nǝڵc>ݢVZ86 >ӶB:H*yo;odQR;]DMקI}J߸)w3۟޲z"1gf]k A,42pYƯMX5eV@D, ;wK E*W׿qj@)"})f©/tC0 1kn^nA*H+؛6Ս~uK\=fYhĉUzN;FE$&4u>V7 "9`1Ѹ 6*md.shd_6&X*kLVpӂ#aO+"4XT[H" {C3ݱD Lm{rQ.b )fX0|Dke Ć% Q4Ȩu`1M⅑y{3w/ ~^WoT]M*,?rٍy!@9!wەfiGV3 01+l1[N _BXQYTTyef|Px3+cT\T-437 qXtWC\.gVO`jXv0FB`x#U +z*=jԿnnR N,ag<'=j܁u61}h(Ǝ(6d-w[Œ8vnٱJSZ9v0U#BOUo}ƹΟ^k)dP4n>rw.Y"-m&eI$]Φ-?u csB1-n^Ո^U~SY ui "! |F*͔v v0Nl͆$g֩X2X=&hU]0cWm*ôxa2b n#iN՘m:F5+K5̈ %ZGSHm ܨbO(o a%j:cvģ2n174Q"rkcboX:+֟S*/ 2RE]<`3/Lg<LBd]Uwfe>8Wh}2=?KJθv89^,~׽( EC8ʜ%kXֳm}; VvKY1꛼VIv(ZT:{7d}-z&hj(~|!QAEhVR>Ĩ_ШR$dKBq#rDԍNsUYklQ}cHkW(HA5˨!X;t-O县XCP+gTئ-,~O:ڧu=aېXP2/ Z*³-">}Q#*e-b,gg$t;w׆R:ӓ2BEY~mRؠrHOJZR[Ə7 F 3r>nF:5E&P|;A(h>cZN}FјU<@}a7קg?rm:j`hXYSqu.[xx8<oPMԞfʣrǑU46=DyPSOKϰ17ܵÃ7cQݝxdbr~vnʣmm״4CfFHGMR9Y$. V dmiy l ݣ'nƐ3YRlRlkC{7C?l%@;0ƭ匱tu,;)<[h5 'ݰ.LJv+ w*mEovTl_'VГ 0ZCYckz^GVmN[wSȘ^Akצ;aǭ@WdG~,ߊ5E, e#٬ӽcfr?jPJ^ʷ+M* r1"%'rE<]e #򃍩xu@wQF sG~ ZɰPu{w+u"_At6 `AOk,W8y~`*[+g5z=,)VixG*Pڗoע10uukܼ/l lAjYՖ VHcmziRp|7vOW]{c_5ٯhvݕa91(Xۦ_s*sH%. p]9Ǥ+Vfokh X(g2Sb?Kw]୼̲T,~`T`e ^d{p[\6Dэ}Ġ+K]_\TǸq>/& +^`l 2ˊL]#秶|fbCB~B1YTК'gr/ۛxF~u~S+&}{FdԚbz%'=3Ɵ8E-!G{'?0YV+71afJU;iȗ7|5WͳX.b V]8U\$TSSQB劇FmlvTDb~{wvM?0+gWc0WOÉNA~=;K*S 8w^`cx7"îLEf AB\$MǾđŰwRX{v0b0n45c,=쎍:}0 nUc.WgPL?] Slz{{e\ zaT r&kΔgٛVMtϮ(ոI+O@֩ϙ8^fR\N}'rl a/32[şO"2<B6r]g_~d,.;CYvXEa4*V3h*anbg|"ڏ7l50$qm㰒EĮnoQNzbۺQ;pAҕ񊿫^hJW>nbw4Xߓ6>M۪[{Yeh]ts8smxKɡowTdy:gɒCO2kdP#EZn\"a iV24-27FAYrn+?7 y#u7qy;AMUFz,P`]&Ix Z7f j̿voGq COpc|26tUR2-H)@vRe-;޸J1X'9]~9>pT¶uoX+vƉ&55þW௪`σ%A cY v gַ1?)/v5qwfx׵E Y-?;kDx1QƣZJ*'ֶǀuˎTOpRlV]hR_QI^&.c间րúKd{Y/h-)i'_(`lҘ; VCǵ w~~@&KA'|ѭ%BP VJ=y ?O&4nD q.oEUqrDj$63EZcL=( vEe2vc*(QSes\LzHkJ:Y{ǥ<YϔƐߥ̑a#ᅊ]rij_Uh"p c>ةЍA瀒@(]ӹqѤR{<2l J%rqW Fܶv@VL+AO+ F~; ZP?7ÏY{6f5Ɉa$)X/>ZJ:|ɼ:3Ԑiڿ ԤPN !;[WuHcמ Km_oRrV2:udxGN^m#|nP'_Kouexo񅉙R N޽kG`~9q@;9'{z`,jLX@3NIbmXGTAi :2tj7 g"}GX:a8 Num>7S5FjQc=;ngK=麥qG@o)z3 D"9`EQy}eY6,B"0E[&@VeNŰ`X̖~oݞ;∌/+C{Qέ,!1Q͈=r~[{~Mҧ}"nx~=fXso("+`e.w=2+G)Bc~EtYm18xMG  5VU6+wV=M3zdWZބ΂ʩc{;~N9nh-Gs*DƸ kՄOeׇkׇG0FL};^|'i \9 qn"#j1?wN=((Cqq:)TN? zudeۋt-GukF)9h|XcƲ%Zlt I!4(H]ڳ4p i;|Y߳&΀ѷk _Psj0My-{>OƬ 7R>E[pS/jeS[[$ʱ쬎w%EE֋zZ ŵ|hhPsѸiI KYRv_uqb5FRwFY_:vCW3׳vG'dQܡSmCK,Q4^O0:~\`m|5bc8YiD6Fä^@w$VjLhΑY& z#&=߯2x\]kiCu gm|*oh u\;\vu#wøPMY!dKK$i*PR`"wsrnJ-!cOp繷O q-t.l֫)~RXYq}>2ŜDИ>-bRןd>r}<^ʵT.lM6xw}&]10G.%VO; Ea[':;b(5]vN?5OBJݹqO$֜[e*a0B)FdrY'? "\}l•wtOv^'Q`=r$]w@W Uc$XcV-iW ~F}X9nkK&:7$*e!/v|C bz[U*̭s5 ԢSͭyw$h"Vm9Cg8sޣe`c^ƽElEa~ym1j@-Aw<{jR֨rEx^gn>e pRc=C>F|nH gf(;qQlkȣ%_FG:(uV6k6FER/;#8J7;wۧgExR 5xxx#2Oi3wDz\x~\k7O tI[ R]|n1\x}Q "#z=5q 3Vsj{zlj D^fq8Ͷmp7nb~-5 1*Vϲ(8 &C޽C*z5_Z;;ކ=jdt[֩uKws 蹎TlkN:o]YL(S{u馉#ʿ hnc5*n"~\3uV6$:X CP J;^m\!4s~XvG?ƭNlS4=ߧAv"Tiio?1rRz?x}m5O+:eq Z .@v{;u__s"Hփ #!TZ"p2Ցui}۫#nz/Y yIlu׵;SM EvMc9qhJ}{YwŜ`z۫aD>pWEX'"`C_x`bmʟ'zaou+ rwj1gt@T 2JfWǏU 4k4 VIhUJ?0<5}J97^k]kp:pZ۾&cfSh=-gϰ7 ߴ3l1^ϙtSs0$EVmUSNa 8б̒ul_O0/ X{x&}ު;ڏǬУ]Yti̝oepP(k0:VC[At|~c44Z@ȓ$aצX ܷe>8A㲐V]?ҷƑ5:+5e;>Og9|(yam)MB.H.z)5֮n5 W҈,~O5EH 3.r9;]N)ߋSkCSIa}Fŭyw oMJ3uQp\Ѣ`݊~<%YfeǞ# ,Hեp˾Jy8nM,< ?ÌȞ(Kg%iqqAOF&Jw'$(hũ"mxq% qOwBYN4ےAdve-;/htMٮm.?ڰP_[QefS*K:z_ol| 8<)'‹ixU78U.\k {Vpe_b)1; `R{l>L8+4Ҟxm{2P%VۭQe-jtCS ֗x0.tQ}Gf;~,Z1 i|pkuĜ{7PlANX Tճ&"XX%8P$TD# V3uMG]C&q@tSo͏xv4( xE~q+#2KE֧tk_` 8fhKaU$ZPۡuBU6Fq^&@%>ӷQx|kgȨy'ECN8=31W{^sNaC k ޭ D'52v7Kdۅr5:ZN7KU7Jgq`]l/ =ilzTBK;؆8K/y ۴:6Ck~NZUaAUņ"^XA/q~"0HbQFQe8?1C&c`2>1BmگJz8aWY4\)zY}vTZqjm!׽DVHÁIs)/`_ k8*{ATwam?"AUm8{}=)fJ! |4SSP[&/¬<սתǸ] "<{b+=6 KHFwkuh=*~{YĪi4%m>yLmgf<-W@dz+ݶK1l-G=F&ߵ N5nJ?@PÔqz?`PdN{!ɝhVf~~M(uH'힧X!!A8rR&th&-ᢟ$3߶}:&EWc6/lhWBn+|xhtwXiF~j_#ZwQWzow]ӿ"KSWYb{F>sH8Ko4P2ؓ{TF?Xcߘs8a)}A+ jO7 &F3t5U`{fӯ!T8/f{ثlKž)C==!uhi4~'ճH;@ƈ Z\ՎܨgmtѫE*%abPZ<;^ȁ ;NrO&?`H jFwqPTM肧ZܱWUrx *$,y~ _m1cmԶH#򑄮ێq 1Aʦ$t`![n2]s!v[!FWbgugF&LV:zjeN9V޽28YNc8lϮJ`4urZPdo=ǮaYgܱטHդtOJmIvap"$; /uoΑֈZXFrzwHCF|`SiyT|:PEȝ{Gój٠w|+%L`{Cʂ%-u?<~Rccsiq;wzam=Q1?uօWCQ<+r^ .O(t"F}V_*voXSd,#YNId]qF LYF,ϷHؐ`JxGWM'k뫨4FiǧU>/\n#KbMG2 aqyVLw<*'MIIaMuUkķh(O=MnSLQט{*t@b49*rd$ (ryF<٣|}_4.yHrh~ȭryd)MEbiw]UF̭v6!{Fb An}##KnGrPzIMʙ_]/o2*F? +Nk}^F(Exx>4Eh2jI6MfEdjA1;:x2eW;"Cgӂ:&OkT˱`cad2#)Z^LU`M k.9}1e\YA Y6 Ia $_O{m͟1.FGLo!6~ۮ^E3h9vNnDFP/mb?&irD{7!pTI2mǎ8$ayqs ,/n/BZ!s! 1jpˉaFú?0] 6+#ʼr[I 74:$G|?/3E^>9is4}lv礵oc`u#FLV*.k̓a%juxk?x7ZlΈ.m:]0?U5"Fti/nN:&tu<2$4QΖX^ :U-f(x"a}`U,c'j:vR#LK2 YF#+2`}>u,$ ӛQ"V`(@eQEܨVvP(eKzm SDSpf꿧,̝$y^,⧴ 6yEeZޕt@}׈Pe]I %/B?]rOv{͂GltkMR']c_0i%͞cZ7%t)xގ%kda+a4>Olɬ/i&0) $sƢՠZBF`ch0ܔRq'Ilg|:h,3iae(\}ꤸ>2gV+뿵*~ ?q7Cf{"T;»o]$ +Tf<\;]| p* b& "2|#&Mu3p(NWkǨ$rYrl՟=yNj'R`eZCfQIX,93jM>u3?IuZ0g%!xzf[=ۢߝvH8QWY3a`ێEvb_ 2O/_pp5pqHe~>" 8[x`lYsSK};u}Sq(+?j/}D_lI庎Ew,?a'\$e \bcݮVI!k7ʰ޿1hJWb9Q94ӂp"2_Q~78t0~VȠl&tnnDXv.v#|7 ˇũlMّYiR.MfWٯX}?͍ln]TlޙlzHd _I}U_)fI1A^I{b'kE#-"֐)O+Z ,*LdpRCvRd*_.[AH֤{KbRLNS #,'}nRiڠțNh}Mt9'h@XMZ.*,\; N)jK׾̑CIX*o/f"DTEp$1W C¼he;P*%Ft#v|tsG+Չqݏz]̔CZtA9d\# jt nVH`+(RhyGDp,}~9M$9ɀ&c}stUS8'$mdNʧ-*ngXczvn/Y/KO}B"l N}n81hؘ%AZѯԥzZ_o:hZe,pͰ˔T_#<˨FD?i~cƸ,†s4R/sWycCW@}u/%_jw|> [KŚ-FV^;wDXX-b?Oɠ=c=.XzԗnQZf& ٭<}a H;1}U,OtDt5{`_I%u'ˈLZ,f30T@1bBv{uY{iZW1 T2縝bS^=SSYuV'gn)tlkZN",aX= | RYkJeHӍ J0j.$Pz L~9,{Z{%GSoߙб8vkγe|Tܨ)#6?U:m% 6fa8y$fމ"oikڠE7W] ԖW5ԽϘcz[5v)2YI"<% 4:iځvfQQt-$Du ^8~`W-P~bė*=4{#pWR2Cz|-&5fHY̟߾ԏUĩ3Y9[8 J5rX `5H! ө(lkY:ϴ\?*  ۹6N1~W.N/XE,2քyYvfqS ؊;n11A Z?Y;?O*9^ Ph͊; Rҁ)D6F9ܬ/|S }AA6?l\YI+l#aGd JبֱeWј|v]L$'Naa`a^RwIElKA*.2HtHXF8&~agdp[=rNڠEN!PWr "&)J{X\s:<ՃLl dOta{:Br5ڠ&9,- - \3*b.E,1PL[v>9pC8_шenԼX雐~82TReqx>. -_kYI(#1lRc\@]VUx!DdnWYػH#KOj숼*w ~>C7MǫQmynG-JiMh5xkcкWһxnFά"2oؒvO.`0L7zcI7ks`ny<2y<0;b.ɥ! ّX lyZLwi͉nE%c4ϴF,`kh*V&JЬԆ-.ԕ g_TLv%̀.ႠϽrE/OoѼ,_~ ߝƻ &jE?լ8MF>E9\I\GVT:t ¾>;'-F- OgWnVuk/43''uq^MuJK;d35#v/ fO1vX7kzC2֯ z{j`k jmQυު1d,T0*5KXBG!@٪iz{3^0%bOKba5m*V1TQ:s+&>{\JdNV͗`6 5Ua<$6FMfx_@m[H0Nn:өL~gw8-&[%U߹b"Y2H}_Oc8F)>EB̞;_x]"ֽ%;:tyzZ=3Xsнp[3^3C5e@P w4iO*ng%_mG;"B٩O  w:_Wkf;Yt&N~8P J<AYx[vOG:QGX L|tr"R; 6Ta -:N:,H9ݽZGlǗ7 MsgUY_<)LKvo[c٘Q۝. 5M@Q)F~֒S"0<90z*hؕF\@Pގv朦0yqPֺaHg;NF|h_#RyEedƑd6v}8,R=sIZc0?Fž?a{`c(^8 ;#qkrZڊcˉ3N :?̢E c;[dnEt-*46vSG02UW1UO FXI|K4kacdUDPL2 ܷ&,1OY=g}#1>fh!cZV%,c0t=t/9?@+2"# m@ԧ~OB1}N䯚K8^٪4P{tE>٢#v̛JFؘĚc5o+#\1d/D=I4>+ѽ@C?r꿰3;z{^ @&T0-y+*4Bۏ9'{^uB&U)._y臓0&,W^dG^ˎb]zRGBZiѿQ3ˎdnH9{t0pѼԮj倣?g5ChN]ē_LkqFmBW>B'}ڨ=pY;'Wgp5j)iu Ո-;*E̺v.iJx̉cYet[kx뭟FKXA{h(JRV\xV%Q`D./mH~cX0ck!_ n0]&5{FQk~0HO<'dȲSu\e3v8'~źtsc!lS'u§>>}Z/=+$ śfxS+{"lk/r\cn6\v*6sr Zѿg]l`nsɀ[IFƾŎ>]?ݕk,njhds=Lxizo5 \bUih(&5mNO)rTA  U΂7/kb"үp.iN͢qɥ[jOgrbN(Uq|%$*&hݱS"v_{g >."-;cPr>;?}ik)omY[l.H\9TSC+[Ptv+xRKz_%d{&^o@8, nB7] dK CTzلyW>a8pcr7/0F#gu0fI[>= & +%Pqk`6a2U:ZDZ}dv _!MZulx24pvЍȰ|rT .?B5lY C"aW6/&Wc*`muLTGtwPt鑥̡ cQ6OU [Ƕ4|f9IQ f g"9%~c~DgO\(S(q1޳\w ?:!6S;rm^5# vLɟL7s:+; :Zf_EC~L~Z0: ʖ$QM//0Jm:Mt7)vgA /vprQ6rV&;ӌcAQ\B_/Am[YBNB"\v;.S&6n 5z 3iYNxBlHա0QJ͑U4dcxY__Ǝ9x360gō|cj2.E&X> C~!/P3zϫZ&5ܠRѻ:$3@Y p-d[ !EdTc3`_?@|xQ:5p1 }K%)S`Ti@ k,I$@zvv%gy>ZΓQ86 TA0ԃHc5J˭IdYa +yE):x޳-EYΌNj:UQf !lTFU% /Gq 3dk Z_l`4gN>) #ni8ɽ֤7ЭpV<֌ KN^Kդ/F/; Tʛ^7PrdB(XBdCvJ{`Zhfa3@0(L]94!Ȋ.f؏=ȯc"($g:jS&Ɨ،vFx\AUJ#,kC3}ϡ`̊?2#nBBǞ 3+> |=2\j 7ǰ60~1C^fjA7͢hl[:rlJH|Ӱ7rDRa]Ԕ(2BcyY{wq^nzڂ(2U7Ov@=TI3u^.g[8pt} ^t.,8_Ciz׃ àv8[ˆc^_Z\5ѪK`R83=7{4y=S rinq n @R47`YI;t[e'+|O|"(v0'z9Alށ 3ă. ػ\h}+ҿXAzw҂p[OdD)5aC;p>R0t?-f KSi>Q1yj'Ԃ?n}3:}~6$GnxwzaOhrPq@$ vFz 2MCd=x {S I"'QsN_t,2t[in<Ǯ;1@JZ:꛶ciο4h$_^ }I Ffm2aE[ɃJ B6gǵj4ͻF7ɖROj!F>`-d*5hj*=ƧSگؖ>]lA)gU:o+bXjOʽ17?SdX+A^'m}PilV^T~#*YvUdy{x 7E;9zWy纾оjshU?z]-AK٢ RRsycd^u]zdSF IGɴz!H0goP;`Q_@gOHx_vq,;; H//& po♂RJF<ך4D6wl}.r<擰DXwԟULܹGD*@)Gi^>*Pv9"1C<.D\_U|R=gPJH|cɾ+<-Pt8V;f׈w2v#/Y"q /vJq6zywtz#j6ªfyJRLq_ ZK?RkOd]_=VGӥ3yyklg0Ee{pE\_ͩ<"q&-\փ(345Ռ1@y^d ^U + ܰ|UDk~J14ւA(Ww~:3F`}!?ߖVYI SsI'At9΄B߆ md 2SC+"}ͯŘ J4`#~94Aϔ7b=r|HAS LGKڰu=\ϴ`7ά ؍!Cib(OYX(f$50SCٺ̤MUxǏWU-ˇp=jߋ;!J0㾞dT2>F¤1zs!Nm=XF쇻$mF0-'̖z\aX6 )_ 2qzL+I}k2 Iͮ~mZҙ 3Od.Zqv]kԯL=t8~=_/9Fkb7SV;oVb n㯳?8%GI&3ųe [jgx?}%{_]NS3eC3ZJpu}V ~TH(-W5[ѝ83zkNch+T.ǁn +JUSpŸ"1yv_+eңM>3:H"\cq_YJ"O׏td!O78JV9…5b_J8_ϔv@F">٣%3,a^^Og\O3n q-=ȁzӅI 6D|wn62xRy@ Ī&4Y Ff)B"P\3ڮ/JO$RU*u3!R&lgBetpv~Q# ȎCt냳[]\׾+2O[zLt '<;!hfjfS< Qm num ~c@|]*TdUϩS+Lv+@^$B@_ i^CVÏI~YLw6΀*H{X<zžgB8ɦ[p_'k[mgcjZV7]g>>H9fBXG.]Fam9%ME;"7d';Esn ?r{_\eʴ 3"TڞP9]YW,'~3zZ gm7hDbs|tPv}Nt`5w8co'rl ͚?s$A!9?/dW~qCl.˽ּQ/Q-N6Ztf8HNZ+|癞`ŭ;z|Y!.m/ĴNeӡ؇q;EY՝xY^` )P&%@J3Ếծ^0}=|pžRk/ ~vpk )X?2Rp>L3Fݹ:o_>l![kd/pHH8,FwDm)iiF X*N!ISM焚V偹ˆmꢤ3 όUi,+>nJW64(2=0<炑 -WSS ݐRYZ DoN)S;6]t}δ318>KcR.8z̾9[)訬ܼT)+Kp7 K{"Nem /t`U>컠2YO<#u=nxsZ#Cܖ1T5pJs[. Hqa^S+GyM} nrYZ=aoub}AVD['t#Ȓ8:R}iF`'LiO0:n SRs  SA'%uݰA!<d%YpKTۻ vu-<⭁sy'k9Ϊ4߱O ܧe/n8?q*qVq g#ľB\ x̤3映I%QOFfqyZ;V74QSM26BoC﫾J4@HxSuWo{z*)OAeLYI4]Ƨ6-¥roPS;*GzJnt PLCb@UZ9 68@>dtM8%ȸ(3ˁ D:|Nm;aMMKjbi ܺgq38(HjFփP5y7iyW\j_NlcC"u`柀5 de-< αWəL)d $CXa* {=Z 6/ptK8^'+YOaiu`TBX^TsM]qNTLUZGNܶuszyTMxd0/xzv4:t# XUkt_\f3 }67{JgJNhz!QS[zj&Ǻ6ՈK6ש%pOEdcՂ߆h'>~v8]98s0i<ōeQGw-cpv}ERtMj9fe_M"K3|(A7Mՙ=6pτA9q"=rI7t&= Iq2nJءEn7q;LR@ƔG@kf }:_6|zP <7`(zG {IJ<6졂i(:ov=rFFNCE* l>O=v/Pkv48X@%uj$yͤPP3iDqe5 ^=T@N,[4:MVB2ҿI[5H48QѺ8]m(h=6=["֕8/ȍ2PbiE?/vc_B!8]W0M1)u 6rziX:T[R ` XCE{}G Zkbg=BPM/tIsx ^t S_pN 3f{|o^xa k^2e}QX|>C$5o }﨩}VӴtu[D.^);&xu^a4ϰpv}DqĶ,r^HFvj@O~$7Z2*%)P%Z(쿧saOHnH}fǞ0V&LL㦬MDFI+*.E@Nu7UAl˘w$p9 )-ti`8ohS(K_߆}UJDG59āЊKsN`,ȲilKDFmOe]-W84ry)@aG+*]oʟI7ûǺ*Ymeq8d쐨!z ڎT>^\QGbP;`;mv_r$r?Z5:cCA ^Eτʬۋ؝/ ( χѤτg2O>q0t}:&< 8]:%A*Nh]?&>cЩ:B"}A;J:xQք<0֕2a#)y[b.j^ܺ~ )#8˜#g2rփϤ f 9Ř`}V9ʃ9LH}>0|p}wq.5AyX-f/7NEv/e@@/.XH/ήzlq0h99_􈤍a:)vl c=zu]'PT.etL6  vM]~\i!J3Akc%"P$\f z c'ur#F o"ksoFq(eꯊ5ſ{l/d!v{(IϾ~W Lw:T=Dps@c^bj)JvR:t ^w؎Ie,n:ܤRru_ɌmLFFOW*vRn; VQH.=rI7 II@-֬ xƬRhޏ{ϜI%r^,ݬve]Ʀ4\[d&Ni UCq=^MkO~ҰwuN8ߺ^OK 'C}\RzA8ftm$qD6 X0^d B/;’OhAh{TBQoWCPd|(P˻H_qʢ::1TvB,J@U,ij#R|eM, Sx}tJ5ެ!pgSB|-$^ weް6$En#\o {\]y?an;MCp.DŽ Ev ,=ͷE]"Hf $!dQ~M!8xx--v 9:xrx۰^ Xvy5];Kf艹^_->w"v 0+l5_כOkvv/t78QJ͂5/ΩNCɣk )}zsoGA/^PsZ_H6?)W@we7螺;鐂9yO~'E07pjN O ]]^?tY>`e*qQL8]+A -(uaXhvJ'!05u=AvOZ)r{!3.iڂ뀅e}u/4?4嚯x2bҚh*1>"wUyD4`BN{pv\m-Pۺ;iqb{}p~P'dh`Iլyz.;RnŸ^AaP%htH JPE%L\%Hs4FAoټ3>I}=A_M;(2ŰπD*DmfFE#נ*o[?NmA&ܣ ġש&+P*?q^mY@?/c Ak\hu_ܪ}?C `Hȳgo6 MOqqh/30uP-)3bgٛdG[ =/=m*"v$(tGvbIA-ov _hn]*A t@f10ZJŃWRn&wt6tWϜL7[ QwX6nmCQfP55*8s?u+)ã#]sM_Ї}Pf5 \/dZ` F@ܖ_B/[ @w;^Ruې@}`Em8L8 l+-y4,^=jݭbVt2R,?ޚRP8\¸U*YG@ ySp;a7uiZ{R_aΖygqލc@}y鳟;0)#b`?E-"4[@BqfΥ4= =d9yNS:EQk5yfҿgHÄ/+}RnH!r)G>*(j5('>1U:zX=֤jA9k¡wĂUT+5nz!(ʡ*^!z'އim8dKI EI4$7../Y-J<8-o'ѼazHzNay4ڇ5-T!]m@g"KDe|V&4* *-8Gd=ǭ𾐑!tW&>hG%"@CQٿt$Sȡfjڦ>٨ԕnpS0>AH4kTb6ț> F & 0q~Mym d>B4:B1[_r sޓ*IXA䩲;bߔtORoGո7v՞dy8I8ܵx4qF.o} A CSޖZmS#u Ѯ9BKFLjPҖW})gEkΣi]iz#RͤR{}oP7U%N,OqA$pCA]~0`Nˁzs`:hBwQA|MHTx fohD*y[b8 qKۑ ّX딎 K;ä%@qÒbs.nЅ$y%!|']Z3Yo2sc@Ý"9\TLjLÈpC%IݖCPeX*OZ(.G1r6ɐ RCRr$tOrH57"?5 Gf5č:J~7O=%&X:!->nn/@ӮJOҲgA/>!>HFzs,s7 ]wK,t} y;kCۭA'{F]x ɗCF/xÇXIm^)cmJi~Z9YeOSS`ؠA;3F7NoD pӤ  mil3}Cgen%m._3kcZ9vrGD/T{? -o&)C,>&5 U?9!T""d(fJ2(?҂JbiTAw A\t25P4\ u=rdtKmbol'Zп?t!dA @mA>JI̠tNnϤNg0 yzS(lu9hL#xG3v~\a7dWv9 0aDoYFX7)m~M75X_Z'7{>vEܤXkz~iX6ٚ%ù/=)^ٽ7 Qt}P[`5yEu)B7yG~ni]cpłɃ{ ݯuWۚf 78!i-*I182|ր:=N|>?4߶,{P!6f'd%b{tH{,'mpi页dsDazB4j/ "Bziq 5%7b@:ʭyt-# W5,e^[v5 %P9ϚsoOs ]BgFGt^A0ȭPߌ 3?ȉ(D ٞxm{-1#+|p(3 4q2Ǽ%WkA! CHW|a*"Q<nm@"H9w)=Ph,d|93>^_(5DCqY]S Qױ R1I2Mb\\W|L0:%[wTqlT 9T`m޷lL!Um&b޳:`7d ꝇچn6ޤeq=~!'?-@Ӊ6: kvK%'ջu5H廌YhuB|@LdfC{WmnZN*:PjZN7C5rr~63XElM i^,!# R5ͤ=PVLnH]nWk C5Uy_'v=ZV Km fVcs6u3H*'P$56P#yIM=h.IZ'蠞x (UCIhva>"okgZ䂗0$Uj˦E85i[?ynGa0:[By&xοG8]py9Ce/$ݵvOxى]~zJcdM]mhJAQ<)UMz[m}{__{ o";'ubhUx{_i>ݧ@യsRM^OetS惝DU_jHLKSn?,am3"КǗl:ok{ljLliDf,I KRTݯ8_#1C>9u6l-ڈ"A h7|JԄO`I x'oެ<`[GM |E?oh;&ыؾ{E%DUP}Y(r/#w}4 UPvSomY{0isvǔOOo49t?t/Y,MJG@R>[o I?xuFjj/|ԁ:x뇕 a&Б nꔋ /*QɽA'깭E/޸n˨~ kGLJyWi5D_. qZi'VjB9(! gQ,e{j"dl<AzEV+]ϣͯ a7 ũ{4I(`7\O8ngע/9aڳ-(rڴ[*>[G넿5MNJf_: 7hs26xQ [<ퟹHˤ^ޤFmW5F#UJ:/ $1~{Q*’uz_UכJ0')ˬA2oIY p0 j~6Ol2Q,ZZ[˖R7#U!dz]o1TԫZ}i%M 7);0+wFtX 0LLu T`c>[h" >ՂjRsV )<58 5vM=AV'b4Ea9"oP˕Y8$*cFk@AŸV z D,쁬xԡ"O3YSQPQP&4;ɯZDbliΓEXe`Ta=ײRuP{Ε@f9FkdOzdn'wXB^ր\6=e~UkЪky֕5NI^/m<,KS]`, `RWNDmNEA-ۯ62^vrz!гԾR TaJݦgY ;줠Kz$G"<$EM}B} s;Q88>Z 6$dE/fKT/`af.ɫOjT/ *wK!v')s{Sj$n|i1XEPxLB2VxdFA3ޒ "ܡl&| EUP}7l#$k)5CPc]e)zC@,Xm&'ƻݐyΩ~塅ڻ:aT¾i+t'^̼yV0)!/Q ܇6Hjcn'mi~rr4 ,f|5^5,hc<TMct#zbI ڗF-i ڃFM~yx]ڥ }1 ˪Udy"|`ٗ?3wץ}?(ja^pMd:(Ϻ,1xƟлqM,[ϱ@\YDT)Ϭp-2(B?7 ʭ~f_n]=jbЍP7C1:,&6< %WE<% *o)6P14sϷov TL4_ev;W!4]&&>uB>xr,K>MbswպW Bekf8="vy"k-}{ӄHހ5@^?kX I5>{J1'6i:L_e);Q@:zmQ8iٌ"NєK٢ $:-0%Ʃ*$4?so&~/5̏)Z] WkCIz^3N.iZ$/ >Y'm:g~NdbOJ@-c `a:\IMY?o4u@Տ4"Uam,/:b}:tӭܦ܋î48?N\͖-S飯 V 딪7 BI[¯=9wvC W@EJcAcǁztX^LR |Y6s~ŀ"s+}lZ"GV05b ΁9 TiFt)bȍr"OwbC/8_| ~}" 1tG^2soi,z|Ajr:? a=+ LP| hbq Ӫ5Ɵia-J{Q9B 8ڨb;Fxd A-Su"GP9 V5Rn䧖)wڀ5Eg=b;ZHoIy"|OM-'\gëg!H5uM)}&Vp &W3 6\;AHE#+bV,”t{g*=X Q(M12b ̀ D{= jz|ڇ GI=7 Thn#κ{dpǏ= ]Ԭ؝ļ }I;a 5DRnٻdyЄ("P8sw"Q\HZ޳q2+[.) %'ԁ}!])-X7,՗_ՃQ{xSѳ\pCAk򽲧bI{y,q9:VjF+h Ѕt }ƾisCigfm.h1v{E(Kx$IJ:fκj)-g/{|ӽ =<y{eZmmN=I:c)N|oy*hdi6m,bCvo$N$m#mhsdK,gZ=8?"UQpQ=v<7N5UGiLw9yaK\ N_,>GJRᾍ>}c=kNX_qa0Ѹ6q* <b~ļ 30'p {y"VH~f :qgMΣ_P`mQ,@ 5+y$x5b|4ҥ'BO;ܻW}IȎht|z}l2(h[8qmb[B`mv#μlI_,:vW㡗Sah9'GE!NyZkɔN.'KPK^T,Qԑg%K i4W>0uTF2[+EV}ҚG.eDNCsk~vLՌ W*\Souφk)GHV}}kѰ B {Uvܗh=s+:I_&~F],YwuŸ3jҚ@1rEɧiL[u0#h>%ot@KTKi>{&wndaC{tiF,#wO/Kx4 1u$C!. D$E ~GjqnqmHK @ hUOvsӧ^΅vAVv  C=WfQoP2R]:PMb0ϖ#iMIn/XfFgnHAjXPb ~y I2(|}*iY{bp>Њ,hn~# f^y[,^}SK&5wxSVX򹆅Lœ -NyMUIUz@$@[u"cn!6kCyuY~c1]&]i`H0ʀ.ՌKs`ٱ0"3XV4jKG(ňaΑ>`~#:-z ʵHt;j;wZOwqy ML&tY$=*"mMLLyrFeRTY!H:Bv'Wư(gCΝXmf-wWqSHaIj4.Gi.ɹ1ƞHh(Br`\|r*c2)o0En(]fH ~ga޶ ~JK6vX6_ V۴!B|U*UU0%W9lXyVHR##.RkIBsZ)?@H˨J_Jےe'n5(ZqrBDispW@Lg$30$za\L.5PK{;D-~O7 (CgM:K#Fs?nA%a,YY(ږȞTGXyx7}=a`5ڇz-\xI7Q+`˿鷌T:TbAuh1Sd@?μ14H*&ݵ+z9:*(*n^MדَG0dڵ~M>[6@2N6m{@Y]I]h+7yd&>G1j"zy?Q0{p (+6wbQ϶꧆ Iynf-'Sڍ/~ÖK?o-4SS͕l<`6kBHӠiasZAyJTZȐ|"[k mZ^SUe!O%WB#U)€L¨Gӷ͒33hN%nݏ^`vxaČN!>ә}o_ΪauQ'H0&{a$|E٣ Dǁ׼l/!ĪBL0ak6IUN\igC`ި×}@1օ>1|C{p 5|^y݌率A1^}ČI-P" (Q &W@. 7jTo/>zDۭN;"0#Qn P! %z\h|)d1#>V8N1L[n8Scg],籕E&zmj~5HBIM4-T_rR:9L~a5XwEWI  Jfm9Bm޺EL^,W2V8u.+t!UoU7sJ@M;уBif[(&U# e&-zh=ٖeMeݏޠd~"'nquoe$4s}o뭈ky'2_p}!/ v< QM\Wl$B!k@%8XP3E,aCpYcI'KņDop*){2l]R[ ǶMo|2]m-(ECϸJgh:7=ץ;5T DeW 'sޡA W}9Xa5oMU܄>d~V>XҠߢDT3̠ ]ܾ :ח)f /GI*J"޸Ł$Ejo?aƝ$6 ԀF9OoPǚLRRygV2Mk'-l~T\v B"Qokj$^ -xYwO}jqqx:ȖPI'v4D atS0xy V`-$uj5e0̑ 21`@ 1*&c`ET]6cv"2G l]8dXB7zCjdޕ@Pwy۲,Qd=[pHTX^Pv!/XS+Rӗ`/؏Gd[NG9Y Dt/쥁OdtY9cH[uڑ>E7r@wˢCgq;hZ WА%i\z=yn眸XYo/)嬰uXC*vagvO[,zx e@t{l9/څZ*kTύm]%hlI%D5=nLWsa8!.'uywBS[YUY$/[>x`e2%?{ì(Zk;G#ZWu0l_%l?&XtC*b|jR wKG1[n`2IӃ~ODQ4z5<{A5V=s6x $I +<45 TO3ND nZFtF "ȓ9ʀ7k!J_R$v7%L\_֐5eHEnn;w=#ud0wa5S4d]{YCҼdzIB(fy0<ԡ#a9%((*19a!Ք8/tQ1c7c- ?$i]ʔ84qعt}.N} KP6X=@Q7ͱ`cӻ,Kk%Zejw=L(<;dKq#8H?Fҍ>-VQ5K. W݃uTD~_F>{.S *ac_`75S|%kֺ9}{iLZ &MYء,!z)ts[,LQ]5˫["㊕G} .ڲp19m,fߗwɸkH@_b#ͣY/+S ,a@\I:#/vt-ql-DY:sM*|k^ɬݰ sru?dVݨ΢^ $ 9nPyjKi`ǎQyvȚkO1>qBUݴQb>[V`WzlV5}[DuIQ]+4ҕ?/^(lnG=N!$5 rR)vkxmadv5k5SY?/ȐpҚ?a̒U1xhٽlw_v!kZ"":yk׿(Hv=ue[GFO׆ŝX6ϭF~j?"E?F_7[8EFOɟwq(XCVdyj ='i;YF>{V?ZXu[_v _;$|PtN>*Zyھ2{>FhV(Jv0,QY'#&Ul|zLy]U.*9t<BIO?0̴ƚں|ƝZRW5ֻ>l6>]ϵ3WQKUyFPQVn_Ja2S*Ƨ8J~bϹGd4sprNҋ L F2ԯL)B~|Fd2ދq^a7qbdrMUzOE?/ s$qRGIɶ{̬ iL%&i)?% Xeur5M S| PIR`ׯ,M~E} xtҨd{J(I5kxxխM.ףf5dц?ٵ^] ;OG)gwz'J4z2@GD#5n'Vv&b%~,S|=v.STe>hX%uuϬɈVJPʵ>s}u}x~%#N`Z]zM犍@g*5[v'#*u5zQ3߀n79Dh.X|`'ju1Cz 4;p5:TErm9P zf,nTXrV#˜v21g0)[b?ے-يşIͺCbkRv0] $}wr^Ҍ^?R)HNz}%ZR9|.3lnu.;lJFdp850'U甈IF[2Cvv_vP>H; ]#KZݴŬb7*>gދB=P#2J)߭hM7)s2r\uƓt z_pPTGQgO޼mi/6Yi$-mgք>qHPb-K`xY"vFX)eBg ac= RdN<99 ap4lkF f PrgU:kq0.(xCz{R} ҰcXe(hfM dr() qUYi* .Jp- n+tCpV%OeN'وg AŪ)_͵e4qwnYq%Cv4A]❆`Y6HT˟D#wFόl$, :WUBg(,%F_FnWdK┉Bhl[-=lQBDEd2T=BOe*$?Zf{ d6/MAq_b?'v KpEǺE/ ]렓OV"4ͦK /~tQ4*f+ӽɶw f`[;/jsցB HXȋtϚ1QP#2ƌ"2Q3rXkm7qSѳ|Fj+/3s{92rBV1#`sA?ۋsm(5̵f~2GMǟnMc'Vk0\>3TVkڱ7,"tr>2ըރtOD+Ym|ukboviޭMdUw˧-k'_+u<^M$ikwv|С]iG25Kjٚ⵬Th+4앜/n 49\zdGv#bwH"s5/:gf0Ӈ5lʚ`9u ~ܢFU(pRaWhADO*Eس靀IUҿ!WzlhLՆ0z@>{wV_bcK.[#&{–c5俰k Sx4I+cK@Bއ] ^U?wD`kĤˮ6D !Ҿ]GRu{-QFGg~bQvYCXN1`x*?Ozc}N ~::[T&+wsR&.O{J(6!\'cb"NNJo,E},O=g_6ߗbZzȵ^.*$ 7d[>jNt.kj`)A1Z:c[1 rѣN%mez xLw,-t5wx^~XD8.A+3>Rs#Zs"rp :ܭVx t|X~,u5hn-Cz^5d5֓I'V-9Xq3zjju@06QqC8i;\`Xfh}4k>bNxL}{mٙ=y}~h!uϦ.Oo٫Oۣ+݈N=IZ,SU9t+9{mdX9xԟdz8J%>p(ZiGZ ggA"v5d4' S4qyS7zՈhX<_ްըVxSq(Y.>=jmDؖUñIOY d 9b,4ׇ':AX&]o#dhԢygлJ`%yi.`vn[d̚כּ0W>kꓲ~ GO 2CZ KUS楕g .Hkڟ7av\_ibm&3 !1g, ɞ_ٽKIBc&>Xqѩ1|{65{bسbxR笶A49}KBoO) ?e@;) ٛˆ\nŎYMq:ld9%QiP\l=?^Nw3Dž|A2ޓ~OkSx}5%˻#2WUJ]GK{~9Ne(c7jJ')^4g hѦkny{NQ aW`aLn)kM'QL3,%D6[Wf[gr>Ҡ!!$iB(a^j "6V[Z=^7F\0lmInYȡxVy5>TDJqyl/.U^=O]5чasML~WbNr1Ն~vgɴ0x{d5tq=R7'\6 "@ˍAv~#2}Y>yuNQYdP#h.g̐1yYFQBG,hN-$iB~m 5DSH]/ίUQ(G@{BCZkrFVvJ!7H;N9Jg 6-..e[fv%?_ư;DZn>,>S||uRamW3ˣ&8慠3GcOa`uMeQӘhѯݬ g/FK-v-^>mb!T&BTݱ+ol5jXP36#ӚP#r.`RAZ^FeT+zt cSxPu]Z={fZAÅtrue+g|mMC裻ogoG%N:tlj{?B%[fѾw7UY^7Ac g ~]I PAϤ7YTGt4(>LM+tDuR"SL, '8|&=ȸ9O3.UU΅u+wZԼT m2ng'ƎQٖ5Ml/\_֐ c j}w|DAo}F:~B*8ZCi{|K4rD]Lu<.7 UU w[4w tH@n@< eؠe%uO&g)ix|SгoyDNqļQBC9v L>"0k%J{`;npFVj " w"XM?:U>2Fd)Ar2e| g.EK)kS{6ZIҁjM^i`<=6k.%=; xy'sc͇sc7BCǙ)>lPn-7(ɞ%W>`1P\B0myV]Bj7LRH>Sl1"b0pO=fB@G&'s} A~MsXvXq]Jl)/t'QJtع؏>o)6YĢ"S:ߖfF0~͐,3X} XJsO1-MjՎ_ F#4[j#V 7j;8F;*7gĒ|rw`DHKjP>|N VguD4&Pp=T5o$͖c{| kA7/cNߎ7LՇ2q=pzԈ՘OOQ >ᓒ6*׻$_PaxMBX?+ uo9OYCh4KR|#6:^)By?68te7e6k_(̠?Ϣ :^B<2iXG)KjT-MS 1t=-.Z))/.V Րl w$b@X  y`*̏lgQ Crj l{OY}׍Dt’,iيȬ5>U٧O-(_-yFTJsn+MSl kD汮ǧވKҥ4Xpڌl7y}| GJltЀAZt2SO4Ԫ%} 'J+'0炙4sY<?ce?~="M[EcDwoB@4֌{ܩ~]gi*TɎNo,#XӵD1iOvGa<6HUˈ 飠K>FXO))vLi^@5$4:F\kɂ u37DsCa'eı>Ϻ>H󶝠]'٪ñ 6 w״ӘH "%9oNcq2k /~s=]kuPF=k7rkM Q?놡9g#2L62"Y(ޤ6h@yҩa9Je&M5vʖZn iRM5ɳ}OXx/qya T?qs4Hfc'r=9k=}?4)T2J/Gq%s8@L\ uxj5f&Бߣ]'i IoD=fbw;ЯeUZ9'}/ͤߗ C#v/N߽YӺFgB'R g`[ !W`D_'%s|1?^b=aAPuj|<ť?(j;ߦނ"h{ngSoLJ]%~ W^I{'k()d߲,_ wA̩[4FИ4sc[;X@'sfA癭Gς9G@ׁ~$V*[[X^t\J vP*DT<룦59?V#gO촠gd`5@U|Gv/2%ygٳ2+!j4ě_$5sr߯ ^dyYc#bhBc\>OI.7 5qV ^AxLeEmhs&!P_@SDȕAIJwۚ~E?R.J\ߵ"ø ÉAqŇu6,7ӳTR׮XQ=d睗"\]y:/l|Iʟj SU+Cr-SF֔vł\~xol5JŇ3eha^83Aե EHົÞv'ĥ avHPw\0|O*;RJumX-Z]ɫ9/u(DweB&Z$:R;LxqyB![^EnGC=ks{Tߡ<õe}~<}iQ9j"6GRY` )/dHRjibֽa7R0jQ(ZkA $ݮ+lƏ S 5eT ,Y,ϮaYQ8/tl+RM`Ӭ(b:)#!'bQwrVSzgN|#e|e-S`4̰F}(!?cTXp5v#tݏ|#{Κ p+^WkPTgxhL+,4RQ Ϙg4h\dG?v\3F@ZSM#PMok_d3w0~kv/^7c_n3PIUPcg3^B)vMw<(mfzKخg*>P[E,.{NH}X;jn'SWc+y휒jASv_G3_!eEh!}ӱŦ>xUNB%Ӱfrf?jZ ƫex?kX)U38 uX3Byf$>4'LAFmHyN&nrˮpuA6JDr,2-Vi%r|ZVoڢKZml=g-²TŤ3aUr!}Ԇղ0]QNQbȜs6?õ>]pj lK,-tqēR GZxn%voh7uBM i`Ժ_Ot֘Gj<+|Kg&Ԍcӎo*>D._t VG,lEҧ|J8?YSkvpӛZア^x23}kV)r\|Rz 4~9:&!E`7ւe7ګ4V*J Nt[n-+OfPIB_[/IlQ5-CI Y M;+/>,$fi :3rcn>XKOxY%aGS97p4 :[~ϥI+EqϚ &T]^kt3rl+ڢ Dv_*A}=UXVc7rO粍(C;٪#ˊܝDfJS'anARL%klw@h()?N\;csAgDAu]ZnL_B 858KxErb*sU sߔV~]+l "Oou?xkt}#Z9Tj[zU ~wOWw5+aN+VJl/jW^~9GG%^~z׊%#z/_Jh`Jr}Ulm3v}LKm_v!Uw. h{՝$/5}=\ %Und>WDz56>?ZX *u>>e(Ծ-nЩ;߁v EJ# +Ĵƭoo *d=!oFiDŽՋy*VUO~Iwm^m7YE)Tt=^ܨaY|5%#LR)ǛvS)|r-=*BDAGVr*_1ԀT TN{y%x1tKtџzvDxc†x5vjh7}q^PX:FJ--*]5ZDCM,1߅ <'qt<ɠQY!!Һf0([e+xa"|PCVRq>Dt5HXfQ=6,, 47S ,d_y`1 /TAE ^lO&w;BqE?{SFS/Pc:ШZs Jξ#*?)oɭ^@DVcȴ)rP:X Q4buя3lDac0BGͼʟtB*iᾤ{+,* k$ ~L{B~٪jo@|G˹޷DZK8C7E i^Zc=)Qozx(>-j 6 k~,:t^'v>)to( c{aSϷHT'Y;Ԅ»4ʤI/FO~>=C Bgh G:yof-V)YE=v{Jn[?>BHLRhC}NuŁCڀw.j'A AokgT{}O< 5p#.S"١l/N#{(.R,IMrnu;"W^Rc*Ӏ;\T \A[=V΍Et28nJ)Yн}[.EȞsEC7#33#o'UмV9n_҉>WDrR2{ُpG;nj$c?'N3l9:JI^O4"+|yS mʓ^I}gԐ4YjA͛6ڷI}-u{ oH. A4 <+@1!WWFt|a0}[̺)lƆ ]$-l>5Hm^6.WJZ «phw@E4Wz.hVv-GŔ"-h5fz>#fOr&P? ۱i/RSgʒFk~achP<`5VBg !_Fc6)v+e:tuߋ6H "+\H]@5d`Z)!Õϗ]ώ ܃|_"'#/$@YCxa_)'MRhn"v\v|KfNo6FGR 5_L;qb>ieZ*TZOxe+ fٍI&_͗32s E,LZQmo)$(Kw Z z)dzh񯳊D~y!,jȤxj~ +>9ާF@<$%D4f8U~xaN)5K7VJWYiͱJԎź`/kH$e]k|orLy/z 9P]'tV ;xHóhm[+mAUm= v{*(r zޕ}Hܨ9%kG qwہy@EڻM߻qKS>nd581ح| +o%]rqW Ջ,_[@?ƳDcj2][sLjT l>U%Ȁ/myktߨDk<9\sln ċ>iB.Bb'xv.beC.m|lUD@BUCըxw,(bSȋa-6ީKFHRĝ6ީ9yK5Bl;R{4pA&5i哤jױI”^*fOgA)p1DT=&q^ s$A5Tz5'7YfbDmQ AfUc腣RWǔrGoӘʺM=}nK.k/k!DJWWLe۽=gx̅Y~%%>c{M.0fS^ o5m^~M1?vVVQBɷ*}M}Jv0" aSkV2ށكر/GGϏ|B@41j@'Z!VU^,T쵱eǍvagPl*nGuh/mygv<Η}T`Za_~a` kN =>ԵxlNZv%XPZU;ُ*kqb.ڵOn٧U-xe̡&HU*fN3RRJd&Ji?ALfO' O]p5QB6>3IcN=ȴbFs7X/`sG}%} ۝ss2YdJy*4T1p(6>:joE% "1$O:SU-Uܳ/Df,"šտJb#fmdiLm(i7U_I~ǨDYRFY Vݧ2uG p%SűJLvUح=vB^S{qRx|o~ܰsbl19,ĮmՆb)kaY(ij|FğW00koĭތ:>1dB3Ctmϛ qf٪ʡl[&D{-vH%dRC؝Pz1U}+?}W%Hsuy73i'9P yQG*=?Ժ5Rfri""ORIy- }NBO|L%3Hz"G NYs[n(b%7$yݳn=WУ *fLHw2D8"QPa)uy|&N"% x5;R0F8JƬ[6GT8BLEgQoO9sF,< bk'v'FZΞsX1 ޟ.mrXqdC\o\0,L#|Fu6I7  &y>yFvE,E8%4#{-TlX@Y}f"KF5SxG8#~)Ca2~n1{B EU3%/ObVcFMgJKW& Dsʞ#.piИ^*LA{q3Bhĕ#2ژ@n=n+z"AbLVEwoOa#kͮ_p(\2T9̇Z 2KO٤&_)oCB>Oz3VU>[SECs蹃GqJjHSd⠁4ߦ,6s"##&=_2צּWf&_BC))XNڋne&9ܾÌ 35g#CȼO#~4Y`u>:1tBKF>ɷsǡ ~Jkd].2{^/<x9 ޵G|LؤT׌,RVj4f,5O14 ]R჈,qw>׾.՘((åc։uG#Vӭj+hз٤o\w~|6An:X #!ZܣRD [LB=c=R}IX#Pn,H} !&LӦ=]{mq__j܄p~D"0Mρu!߄m>~8_zݚ^snT'|]&},I"{8y=[vŁȩ;cURG✦ɞjP8"7 }} M/ BgH2pCh"u"ސ{go|;ē/PMܸ%keUMh1T=ӂ {S:-.?#Ō` Q MaiUǡJF| 3 5*ȏy͊wӗ:Z?|ޓrRҠ5H`¦tm-س΃ DVĥ2t!pq!Ccz0M¬c7O k# Kv8l?C0͸0 Rz 0Do>v 2vA)]\R&FOơT,?4o8`o?!mbN˹Of,I'Fpw](2ֽΗE#t]c/C *<a7忞VKl3nkNЁ%r$jCNE(ep f ;Q?h {Nn*_phЬ(Q w |uT9ӹTɌu:?D r]~KTzU0J#c1l-Lk4RGYA5%_ފFN& iV?̓ުvόP.Qm&Zh?Ъ@b>y^wAmv3pC5-%}R2ёh n?h5HиÁZ&߯dHj5:6\l=XNf/=HJhj &6?4'$/P 8_q ByaGOs!CuoYFh[r'ۣ Os^'۾PAN}<$`=`w<^2d^V~I\mDNL` vLYaT|1G`;pFy̽'g䘜|S ~=TmjQ3-۾/ͶrkР_`[NKW}xN=9t!3OUcQ\!d oҌp ܷ(TWDܸǜM0P>((?}ևkܖo<¦cbGVOs/N%ZeOmU JrZTXNxH린OwUFX>#mkRt-oEh| nm)̟WtW5Iєz!XnXc`zV;`h6N8XCttz2wm1pJӭ~\پuY#O@R#U&fi{e(ķCypC5)}OkDΐvj4 5m}~YBܯ{2XE}GkYrgƛ;]i2-]}eqS xD2[dc.hW&Ӓj VIhi* WX ]$J ^^4&VTxzgB5 9{'IWljO>3^НQ5Z$2aC%ƶ>*]:zZ1SN;l5:'yM]j. ӨƵ/E`](}ci4ZԳl-ojWc2"FՀN/Frk,a$i2inBB 83?Zh#;d}4ʅ:.l>> \)YR n5CW8V__6nR![DF.:k.Cb[iT!ol| VƋftiξ/ DFѺڏ'^ ׊(XQz'7kWuS}743~ʉ`U%WXX3WS9G0]N>`CX00>E5g@-Pg1to3X: }$8(lr:?]  )k{%LcmVFq\Oqd<͚ީcs! 7l"Y}!w!?\ T>C 6L*`SִgDW~p }jg_p= 늕jGJW l<=jEMouBC204v+ZX/VƭxX"9y]}(j$>s;wj> 5p#߻\1 n|G[+JD[>/ EC ܭw"EI֋gJ\ؖv;:Ը0hQnOw7[]됆%\1?Vz{:t|ۥՖ|77peVE#JUBW2xGK@4]pq!":ؾJ]ywŗ'8/|pP4zZ|N@lSe |BA|ʠg v ` Yo%/ J:h#1 8!rm/Ւ}ZW +D$s#m} {>bl5pgdk0N_0qPhAaםw 6"01?/"xNeW ,+װ=2`^:ќcFFSsjo;ޱ?8{KJt 6L#: =AB5_Z'1k!ZףBpFr%u.lP EcfGAV*ja[zߚW\F:N1D>Ҧ{aݸոwLM;i\;f5-dޓTFY_w0Z-ltw!DD`x3 ٸ>.XBJҭHdݷmbmJx4=൱ !ǽ[í:uTjUrV}7%2|CUcغ*3&2/s9.מF?0\##whƑ܉٬ N![LeTt^/!1INOI?"a9;;FSyW3X`'n0rULȰe#Qθ3TuFXקsABfK@zg0u$ ΢س7kDD3ydc䞞?;l5*ecﵥۡ/P4 'R C:h=vt;RaW(a;eB{+=NXWqXm8,5 Ec`ߕ\:bv&h;~6H~rEw &r[`J 5 dv?V x3yQ/!l,\S?~U^.L3/Ijl1 _si`{ƞ{ JjtN&wXGHT|zS|4q&m3t Lg\b1.K9tH|A.?`8Gz{Noh& nj MP.9l #/pѨ "^TҩamA`͔\9gw 1L8JtP:VAٳ~ܼ׮l|c=AA:4|&qTٙ*q EJںW^LjqcsI/jLU-76!S1G쁭Xu]5py2(>9MT~_~n]%d}'4cmӏ7aj )ʙNƻiM_ !;wQl:,{jKlanb B),J)5nzO4u+.3[~E䆫ګ}Blyxn]~g%ᕦlS-x;ҨB^uD'unWsfAa Br~9ӵ ]_fԖ8I6RnmNҒW?TL%asZhGkO-a"7a[:5u\e%bP@Tlv~:v 6,[\wɄqdgaK*)ɾ_=[>^A^Iuf,,wtvGN8UbQ)}}[> v Bv))Uc86%_+%m' ݌ӈF(`ǬƺYGn>]|| "uƪ vᗯ5 ")(:?vT4o%A"ݭi n,pϏY~0 |ʰ>`Kٜ Ys#?OjU?Yk;#vA:J '|YGo1ǩ:Nקe_qS4t Y }O nFb @V$=Og.Ȳ2iTې}Է=怅G `/΄KevHUv-:Ӑ<"B -e ͪ.xHsˆ5j:D?5/oubfvwGAh e6: +(6umj?LAxay}:?/ƹp8!7Z.Cs?(4Wo-i"]kify>TpaN鸕vw+;n^ $;'4e1Pn%|-FN;.WctBt*n2x g7%@w|J ,0]zyIm㨇N jodxeت;b‡I :)QSm)NҨpy0{ybаv^Kx#%鼲Pg=@ԅ"u(m۵=#+Lawc?/F:>K1vMkLpVcU!#8M'._(ϯ?`~-@?k/j"V>|3_ ?Nٌ0}?FW}+7^߇OvS:v9峐PүN:%DNx7$ )!,*1>l͹'Q IА )S-'Bf?@DYבe.-Q*޹r6vAf}i5!3v~ $a~綵iZva=L0랺yZ ԉ]Q.-s~+0)cw)}թ"7=ѵ²uitLw#-z> l-thEΓoX "a 'u)| ^r^GMwjQϣzWe5u5Asqv lt%SȧwyՕg?ʗۀXS۷/D0n#\znT ݶG#f5lx [aoB yˣ`P$epY֌v"@֌P֪՚kZ<+Ow%chP<8kHU`4՘m_#͋v|QD tK+/t*CܵgWQVӱaPN\cLIs&r"UmK[xNv~" S i*!-.@&JJ]}>]Z繷wHn W6g#[TfCl֟rʧ[y9C`K{#MK홠`uߖ՗kHza ٲm{yw:Kp)b/7 $|pO`'@;h "{gN^6Ԙ)h+ o[/-PWq#_NAG]ABLy7[,0f]awѧ&>*F{L g;tY=' xN;OI-Gm!KLy(gۦ6`g\<S|Yq*Z:D#p*sɪ|8.O1dVU͊W bhMuOF#5~KE΋.CғQYG^BXc{*GLը?=yҐ'yvկ#WdR[z̖{3| /-vm~ p#xFF J!h}m^PP .Azn:+d̷_0[ehq|x'DҦBLgU4tS/ TEMu6LGQ Vk2 5z';T"p CX 3񖀕 b7)7?U1u4 QBb1bH~q=ݧ.aΚn&xը.H)K0kS]FF8EZljw G,f.˽q 4ɡM:O}6 f|?= s 1Xeq[V 8ޢy )!'K*=Uejd\S7J Z+ )hȢ#o1N,vb  Zؚ]5ZI0 xP`3N}~fY+33VL솊dgwj AFM%iueH( vj؆[F>eAʖL?`0)?v`ЏwX7v}{G Uj#`U;H2 YB סܵbL iBa8~peX'.zC]s?g+ s+#[l#_|˔uE~S X"e[ !+Ku\'paEH#4ܳqˌBukJ %xnv""~g A=ԩY_ƈ_27't6DXn~OS"PTTb6؛3 (bEիҵ>-#er%ߧOCCEeљg2`VD-gÙ6q!T麥XOG%ܜ6ƴuvPgp.WBow~4OgX-kiz}}&ʘ׭lN?7w-km<ߧ^D & ꕝ|a_i[T#՛#;&k2G"}VCQCShQt5(guB:m^j sye6h&Nf co0Ubi1gf6L,=mn< :nYd PZ 205i,-c+z `l/jXA7K[uQ 33OsG3  Aȋ,ah 7^ ؓ5-P.6!՞1h9M@g}cVHX붴 X`jdK Ds/6S2ٱ`aEsz$C#MjTQh$nŶ%}°خp;kG'KV::qs,uOgfp aRm;ZFwn-9޻$M U,/3vgaI-F)kyR(G|CUHf`rwbՀ@oy& ;tVQͱ?d]  ?X.;'?JO 2:qEzUtly\}+CLk27{VUk0.5zi[6V6acz&$|hEhXwzO#DY4&;8w9PCM8,G\` ^#0/~7Mdm Dϴc[+H0`XʑC _) &deii^bDSVad},~$kpR=V`ΞQ.M3[(j'ij[M뇆;H>(6}F`ٕ}ig3+dRaq]F@ o1O/Kж@%önWk!hCt7Sc6d Cȁdӌ@|ҏTVN(ܔ[fTGLݛL< `&^ 4"̸g6٣K QG/D9cr\)xg8X1QZ]=XXjϞņ 1#־v!_c-&y'N˖~o:@ --|u%a$0\@H*9`ٕ V;ﵾX؄͊%s}ynkBf., ֨n/dc#[|2J $Nl+c X/Pmeiw`u.`8˂e%g}S/ܤ(?@cf}mOc)vՆcJY&c*qX 8Lm 5X[.WJ 4]TEϖ[Or*zp_# amk|@*4l]mi0vthp7i2_Fg{w؃! ~fvXʜOj}>Zc"'/^VF}hgihxӚCNN($#˯*YhI`GeQ+*1(anVpIN*AM27잜.NQ.8< ߏLǁ2?Pw`l7Ggҍt ({Z `!\ckWkK\᪙ޑ@hIKsiָP4;N=3mHGn+ tQv\0 tmp?-L/Gra'T^9ty)  N210B2h lIĸ Eǹ:r]3UsS7 x;6@ckXJƕ BAʵ_Qmq*v"^d_\~V [ A-]SmzQ;%o(^8lŭ噏( +\c,XoA??2Q=ƕ؛V2=W$&o>1o(;WaĚu?^BtOEJ4~1'DmﶚN|DDb~AwD$"nX9{DgށrhA#ɡ_Ig^iV4D>Ku fNS+xݬ~¯VIO)xݭcӸ]YX̪['wkEx=ȗY}[7q+A~U\`|v Dd+NP{%i!x)sif7jZd/?@劧\)'/&l"UM6a{Yx08Ԉ+f_O^dv5%>0턍4|[Kscuh ֯XfG hFnĽӞ:zͿ% ku5cj3E`hfiODLM/ Y23 4m^'2n,h6fh0Yq|sp[;Z6'n';#Ub5Oo%v?;\c&+xxĝְ zտ8ώb;BA3c}FxNk Ħo~='RP@nĤhcR:7)z_WP +1O *".%5EpUlc?`Bb҅ ΫjwٍY_IYV>ɠfWmOiI!2r+:w+Zdr١ #w%F^W>֚1%/T z=*eu^?x @tޱR^upF.g&%Z!EKt]m5dQE7™>6f*47*&a 17r<^ήR;_?`ܲBF_:TvPqԗNk}Rs@{IyTȊ+^R5.qY J?W]EM<1z>=stI!%9_GYf,{+z X;04 ͜T+]HfYƷ.^(~$l czn?s::½|]y)jf{_+AU':qe:"aP}цۅh& 8vGv5dtsylE{=^pw_k<ŋV~#_YN 0̸tp Ğ|{Pb}ȠK)od^] 5k/'ڧ=Y7Br˫J*N%= lT5P a! Zu{yWQРu%$Gx[[+qڠHCqə)̚28%]| #IIp qgX|kӬ *6J,p=0.DlRKkba/4UؙIS߈_,F_f輣iP~?ɉYIMTPiMga)q,Mq fFv5} ?x/n5^ӹV -0RS| Y,c0DHS!qQ_J]U۠ѧRYܟbj5F.hu0-|qp2>ВCÐB50ĈꝖ(6s@_te z'4Xn$vj5 r{\mZ 6^uǑzudnnݎ-ms!9YUMڙlx,}:vf!^Ap&)KYKEv/:pY[&Om%;zk l "bpG6؏$mzۏ&ɀ֓|N?9sT2`vuuTˢ#NCGxzbeĦD1vz{T2!"vGF_PI'3h_^ wѸ^Ȱgi@8"~2Ε {~#hnGeT˿-} 7y=>SP溋,zVɿ)4IgFcb A}$KI^%mhTzuc@ԊnOH쭩DU.^CroSr,ƃM&{_*"8dG +7nU--Yyղ\+AmwLbxx@Z&cY_8j%W4֢lf|xNG׺NBU-Os FQM/|]wtoF(Jl|va# wgO>n5dfMVY({5~~F,FzliN #DIWf.(#UnbvPplѴ^ui6)F=3hg!|g=32F~'jhnbi[t &$GDJس4?Cj{je jϨѓXYux,ѣ*BˈNEwtc4+뭤ts&- ^d1< ĎȚ}CaKo#-89($еVOMM#9%?`5?s-Ҫnr)E—πwLɌ#`-_ R pɎbb+k; -z~dzY; udn1;x#zߺGvp/E!:bرH̹]CZ*2S|(J0XUW2jHh<YE(ة<QWoGe gRbY|?ocѐNfI(b{k]YI|n/w0,TrӢ2ܴUx(BķMyuta-u:r0nO+FC?#Ckh_-Jq ͘Xx1 [4(zFvÆf85N3,eFupKܖNp?P£<'l6Yuh4moyhS_BrrÉx~b7 2x#9#&?cAtޙG)|S6&!Bp,N8*_ܲPV x'E`h~KL}VD,Q"?UEI'VYT/̪LR^[^X:2*J )| `xK6]&m͆?[}cEfQ1N)»jI;{(/pHWDR]l7l!K15SwlYQj>bQeZ?EMv 6qQi-DYC5֓3,9~acdVm2_b>ixjN1^=JOkޚI-6F{vu.9QHW#,RxiOuUg;^1/#oqϐ&ˏ*0C/>-cðf2Ok)>HD 1Xƕb%sKz{XbY,$kkǟz!gn`;[ &mNmxjfid%b;IY_cZiDr"K뷮M:I MgkM>~'Gkح"A PD3X`O"** ),eX3n,>= %/m,*S\]ٲ盋c 3e[#{|C1HSy9/wȜvgq)}Q^a21in-c&nم9X__2I{pb 2舶Frb,̞:E͒Ď9A"I@_ѧ/BZ'F}=n46Idq-,YG9O8Aze\uj=iNS<26>CU83RY^m3 ]_u?59J_z`E{몿Ր`7"2hZޕ=b)s"ܴy:J'-$vzbk~AF =/{3ٽ#U=퍹3ꖕ_3{msӣK3)si,' 8zqv]tIЋ&ċu<Q>3Slmκ%H:r9o+XC<cj0Xڨs~hUe93r:Dv~_c u߄[2,]d 5lKNyl&^;r2;k=NEN3qQuyWU_8n~tն~'#9) 'n#~2MkKlH>4n&`vaߤg׾GDtP5cvDu(3}_ON" QaMԱb۰^qG<߷Y*KTy}D'(B#Z^ Cb`4Ր^;9zJN98yÃ%blɭOVeA^o/8HATUQS2[E0aSna%;FI!;Zxfg9 ænŋLTuttLR^3y`(鄱$[f\)^u# qI&!h`S9R'oΣ,.y5דXTDGp /BgqFn nJiɞΘJ.<+_\WɧQ05IЅV=bM/M6).'Y>!uOYà$AmFnùvATEؑ٭O3cVH4M՟oH 6f>^"yCڇ5QJpZwވ@5 ]ʀV+}֭J6G=)Jɀ}cM$QP0$ノ}=z4Rtxt@ؘG}Ĉ'%Ft\"g>jŜP**e5ve[B_`Wx³j^*'s}*#l ^x>*ѻ1z[Boi%rbҗBqDNUW++JaHl-*F1W+x.Ql nW GԲG֐Ess: oXW '/+7nBFʳGoYGl-a<8xa4O1e/<8*¹Zb_Ud'#56ާ#V~9u+*\~tS+֊5M-_O0 .. o5u^FGUȭ:9cg+}z]7+[4:D?ݱE@fJt ,ZAz:lz~ʕN 8P[Xkĉw8i.L}5f%Hm. |)䩚|:, o=ɋ~)<!7،ω [FgM57Kb'd _;ƕq\/[t!c\tkvag6B/<NJrNW 1 v'B0c{lC hC--VbZi+\?`wO1{,YdA _ԃѢY; ޼L1" Cs⚩+LG:jK;4؞SU˪vXCIz^׶Иؙ9F'sXc67m";[ǜ,80r[~%2t4P9D/xm1lK* Eg,?ڄ2ۣ KojK3RݩQ[tp0%<~Ӣ*<^՚/I-wr,kÎtEv"d 뽶zn@6Wx1 sV_ZzPH޳/n旀xFa21m-Ṕ=o1+P5 *2LJGDS4PÛDx1 nq̔qWi4uHD7^jvj&=S.[O 3ԐynoIjהHEΡptWnY9q('gŽ$ w}E6y×<q9j@lؚ_D޵FIZ̺4o&v!+Embn]̃y\M-‹zR11 ^ Irpm1^ΕMƩlE!4;;]mRG#.5uR0Ķ&1<9/K¦[_w!]L:VZfۺ}nJA`|?jI2W͸>51r;g(F %׾=`zP1U1ez{bo0{UWU=\۾~Ug!V-w Ն$' &yb_Ty M)piЈ _Ti8#o=Q%.B ;j[zv&WK;T".j[ RQTb)0sJ݊P#x4E|:Uszز?j%_9('2/[gI<}fCeYM&M|}.{Hbbm+٢%m4_'Dl}dkfújtДmy|)!X.tFڑph䌪ŢCBO^ ).*"z ;p/Qj5,?&V 5ԥtAkN#|a``eV{5 vv7z=(wSb/%>w"67_ D0vMr-_ojW%V}]sM +ʍ1u1>/:Q~ :Ճ=bh2dJY-yv%ɶoXp,uąvlXM9k;|h`A^X,j^FCf" o;!ー$ àD)M _@-u94X,'Q9"NNy=I5SA3n;)Pzgb{vl;DGq-QBKsэSu J4/'2Vz rͮ i5׍ abK`rGL|x0pW\9vtŴ"*LW`ב_2<+r<(ӷ^7ڈEY,6:^$5D)›2R_{@R!4]=6o{}EOw1,<̱EL*9!ϫa:qPۜŞUOLb+&ɒp5AC pK"LN}6kt'Zr:R3n q";¼Cx#?5S N+}1Q0(J0~(3B҂-Wo}оW JuFYnHbU"A%l~Sޚȥ;tA'SG5Yv˜EgGL\:j~e)-Nl֏jGr3!٩REi69#uGۯ#.-Q;LE9&k5kn$v+L|@{m5d?WAf Zv#xyΓmSvRi+B .,M's"[[Άj2LAR ƨC$m  nS}|@P܌1) yb x ԭ>hgh4iD@\ {~v׍-CxȚ!z@ J 3 TͰ}KP2X@U/Vi"k1'Z&G@750GpG@)Bx m 7F\NFgq9x7RNdK5C 61]i= 9x07Gu9N.V (@S3L,"6Za:r`斨Zc2K3flIe>X91%):?Y*((66E!eo.[vD 00P1{V˵>p`mPGc-{ :1\[=\~5A@Ղ[n;|Y^DXϡF1m5ۊ0s=RKQu{#j]ۺ1cOUXL-u?byr=CA˦G>T^ͪ|V)sȹAK;ϳ n£uphSmRP3q)v5xYj . ר{Ė~aWD3w<?۟"`4r1˼bLyyE v5UcqLz۰ǃB<[*lH* &:J!>։aaPNQ W ZdhH_;Hm !rRND/1ˎQ.'}!2lT1kzzUk30y)mƬF햽:ƾ/6w #eh%& blmc3OϝzX$Y?ɯ#IB^LOjLENM;(d~8RV'7t?~٢jrHm&U.=#{K2-,BEL3$0aۃ^UGRQg:!O65:c6kNaɩfxFRP?ܼ Df^"4dZaTMY8z.}k[k҂J/(N.0`ch$1{f*MP5v1.l!H grأh.fiL\M=%w`!]m7!4ú`Jy3 _66f[n2AKcchnxĎwD a&HaYg)"7_hHǬnS &g=Ecr$/:2;Z d pLbpWn@^_ǜk.@r_3CFDOyY4F#wGFna̳U+N/14g(/OzZMW}5T^L'q̟~exّ-P)_FS8-=sctϗġPr^Y Ng_v#o&m=G6˧Y?V{ }_sȒ^)8sn%{x])kV^wrзx}G4%Ly9{^)غz޶u~;8ghTʘY*gupm]uE-y*˶j2GSBqy!+`|)\}b1UfG:Ctqz B9TyInJiN%ؾFXWPhXCh~ ҡ['Qun窱! /l Pe4hjR>M^ lU!2ԫYǪrD"?69uqmXC,$ETPh -[_sCjcV ) /PTzBE;۠SugxKrK^>0a?C. ^4H|`O=ٮK»^!0y͝G;nT!+-\d)w|K`nEM#{f۬^̠B:Q=0>0̔)+^>*x/#;^SPEIۖ('M~Ry; ;C?b9,lpG~9\t_KQ<1z5/T2}M<,ՄXb_XNRĹ>xo]dLKφ.*Np6&x.M> 5 ]_'9>ץg՘m#htSV&{Cn?6.B;?Vcc-Ծ8?E-)K R2A %cUv05mL? Uyhy0Ͷ'Yr'l{[A!yOs" n\ODC7uσ#gJ l20^$ ' +ކϴsl Y;5 ̩ļ۰7TU[nS;JMlxWpҕGu%vzʃ‹:Az=<^GyNnqw=kz;~J_V@|J fs(3l?jh;])v|.! XkH1e/^ zExGP2K Jk3_SZmϜBA6 ?_kq E-Դo /ldeJ#E P?Ne aCe_s=YIj/Qmcƹy;z0xK{1n_/Դ5g,5MA!- j*WN{~N64_ԾBz_ JͧR-RsPn5GkzD&qY&'oX{SֆySvZ[BMb6 %GX݁Cu #%UC˷lw  -NHP #JfWsW7bW',)g2ܹq>|5Yu+{ݩ{oJ_+vuMvQs?ַW0#p}RsD5:?"wAeGtħ < m֩V'/,^hގ63Šf! ނeRD64PNZ[C'Bt%4nI!l YɣvɨR쪚B#us\5_{sg*NCR g㎗{ety iA.C pF$M)5t#*e { Du]t,I]2UgP~cKb'("DĂE b'Ѭ<{Mk,cs=U>5D>iQ^WQ9~_U=R:e/ RTy̆g1b3[;L#Vܦr#l1?oƇ+I% Ys[D7Ć%*fy}ذWMTkttpGK.r+Hu\kw8YlvK ,ԐgX  xL.iȾreTT7@,""-axOhS僃SVu OSl͉˼ϓݎ3/Cҕ=0^xL\x@Ϙh)7/92>`cSU:zZ&u$;EZfv3S"qu {\yt XMեU)"|dW]Vw2IA}p=wrMς?y\-ՌcNaXX?!HDs{.ݞlvZvcJs{|S*I.򲞳=6tfHGNK {֘Rvt|v? / OYT6Ɓ}dÐr 𔴸l< ͈a ĘI2ծ08 e2t un[+%a{v=fF.)yw^)4ysX"*\m6F WZ(w^U7v0ŝ<32f* = & ]s0#7:uT6.B ]FɐvcEj`ME(*^7֋~ayMub7fUgԯפM}?B%6s9cN u3c1T{gFiBe$9n 7bõt];nd0M>WuwRQdtUC$DCK߃q}430nc`H7kϽxoAj%{ ]NhGUo-3ex֘P$ W_E+a&lWi$/ >[]4Zda&ˁm@X䝁)Ƨ{CcJ@>- j<=%N[:W`$ {]t(yP׺XSn䗍xV|94$J{DC)|..>4$HݞجW8M|A'_ X֍8!"L0~.SꩲCS#ډT]jLbOP2I++ZZo)`A8L<>^)D{3}4NC;+uϭOu{8Xm 5Tz\sm9,e+ (k`g(үEߣEj|ۂ8~%G#TƷ?w"R;.2zDd}3)J _MsȲ_2_cj5ɜfrA;3%}N/灞t \yQOT>ǘr)ǥvبtjO5fmHAh{ Hiƚ/_ѹ6a>pfF!:N+q`X0t{||v8SX^ZPzG AT?#\صWzR3G_NnEJ*枔B1T^=1D)g:\cb<|ro#), #V;Fe=6>`.>۾c0|~|0Lf>L@ɧ,B܁? ˭ABZr޳(3`aYu/xWd5fm&9*?GkU)!qѹmo'ұ$W:֎qba3fOѼTĵ}l")"Z?)hwWQ%P!kH z"tY꼭"R9{Ѷa'+=ݦ ۝@ _R9fKi"dDòxk/!"*~QE.'2ۮ5T79ש[j,y(@A_<OQ)9O1e㮗d-Hn!,GM&۾ʁ *fxGB'N *k=6\4\soZR%TADKc:NA+)SliOeϦqG Ys3=|,6߯ ;4OhrIxkS`bgzqMƒRMn ]bF K@YgsШdߣ6 c>}P@;x̲*x n_d ;z9HǽC.;zN'LGA;j!C6;#9*YX_XP%Z-O˖AT!ܜqU{~{5%-BzM -49)#p'/{=?ZA/4ҋ&/l?ԕh_5$)F$چk }S]>gi`uy$UySy@К}P4'MpITl C\iJN1_R1 >2z]М4#k ɔ,M .QP!JD㣹S,ӎ*06Xe#:ϛ{ +V7R Lv~UڧO}bYoX DaLIƾ>^l@WYwy;%_{l*p+>;d ~}bq=k JxPiuj`of|{sFq:{eO?/hI.0ms0yq/e1+,pC3.>^y_#y|XU5O6gB@*OE ȬZMYdء)f5#<q/XqəVO\,J~_irOK`0"V?Zk5ޖPO9Ao7)m>/!u7aG/!b [gN MsgO Gi 1ShڦkLrŇ[S]'iMF&A}1ljٗBO|nr硞ڿ(iSnw26,)X10v S7u҈ |q~zzze/Y=c`IY!$#}l[̘߳9ؚZ}44QUUa'?<~,r!ϓ҂&}557N=^Ю@]f2K()~Ą)nf=†Sb%6/d(Ao\=OtFbW'Nk @KBLP҈v!׊w@ea}Hg!`ddnHA?>CT0p uXv"pG ,ߓAj\/~̎'BkrZrNdAx_ lZ3' xKXu+j|{oEY$B=>*DTN@ݺq\6Bcۋ\Nj&%h i1Qxۀf<;\l׿Zrޓ  5t+VǁkZWvd?OT\g {-:d?oe-݅wlgcvxjվWjoHܣS|`wH.SCKz:qH8*߉wtT旛D4U-#||>tq38?}ʾX2Vtq+|5 Aw쟓ޯXPu-X`sר{sﶸkd}Mf]v jf:N4Ճl8nf9HD׫O`p#RGp gPlɑ;Q5:"ԀS"D#8V Es?>1*jL9ʲeDj1A T֝AoV\)ߖwE vc"DCsdj^=dp~ zf`\րr?`UE螑(zꍻs^8{v-=ܹU({PN4>OI}zpk1}@705 #(K'Vu\/w/itI:\jz&pHӥx #*} +ePYЊZL{}"Il,Q弳(lbm8"H&om_ 힎X@DH27g\C:ʀYf癭o8G lCᇫhiu5 Vsg~V#qY]L)QD]>~tֶcjjDţBP,׃݋g6>C$umLּ9֘WE jgO5cL"pKL&ϱ>m~/5>fygHʅ^[qft @o$tj=#zՉ+oj7I{ExT{>E14: D(֘9quWSv4_[iէ:TȦ_RcmD i6pT>;f0 z`LG[Es)P)pݑ=med49h}/ErGZMsZC r mqA_J/9.;d QhD0O nv|eUa7;[˹s;M_o="}YckS|4=J{1BSNT+Kl.j_BnU]@J=Av"ۨ@{(č4zp >j{*usŚ5!TklbWyձx{*- |M,B J8ؠWkԞаpSd BTo+8>/h .WNuz9-ȝk|:TV-/p\#`^票!?9~ [9f䋛wٗId VMb3ۆ;5bn^>n빶q:]Z^2$ (^[njvIL1YeZOfO*.0S趇(ފ'L z:h ~?;R;œVCHqxż.-H+~PCPl,>D?csH}h&ոswkKYod}%Y[,|o۳Uxϙ& o!ɂU} HIu%aIDE'6>SƆ;†ӫA)I'S"`lDgp ثUj5jz'e!M$4&ŦUкG2siLt4}9#7 SDxՍC*d}q+m2HB!tl9vLJ8DآXwJ>_ N՘ QjϢ9vhw";[9*)^x'ԟ[̬ER6TO+xr`x㶵4@ xX8TJ?DLJ}tDg© quMYG !nƹL6 T#}Vw-kWw*GF2(,\Dcu N5"J(9[bvESә^JZ ׁV ~#˰rt>0%+?3;;omh>Zl-qQ+O-CA@^c <:!j{L wΎRY޺?^u( u|b(:7 +fVȺ?hjflG5[@5ʝ?rrUA4>]MIm3^ w݊ob'WK.9+GYSG vD4Pq#u'[Mfg=5}upn0f\̹(̂L\B؎JPXǔ5&G^thF7BR||B=TL||-dT*I E{N2|eU0. c{o0$$񾜄;GW5𑀕#9maI"(x>eTO:T?ɘFĈtػO֡XUlޚ"^Ty̙#H˕:u~O/J <#X2*P47ړ@Q$903|걵۔Wbðܓ9ĸßL\ 1 ˫6N:TDu;rm0u {5HvT$\ˑ3Lh5}vdXGSL'@wePȝHy dK,WOܙko!./ (U+\G4i~inNUAdγgGf(t<1xLlOi_7@יT o-]]v*e=_gAT?k1seܪbCwj;Ͼ:}ı]9BqW#m{Hh( iwT>OK0 PQ1qvwdH?hT>S Kaal4.NHl(HhtJt;=Z~րX'fHRLAْ{f(W+C7 +C~61Q#h;{l!I_h0(crbʽAT g Y ^ =hh/Y]uASutQ pז#T̪.7#,u_ě8\#м+XB*!tG^ѲhpĜ zya9D? J) #z6F Q>!z*gyKH 1@ UFf#sҊ6 b#;1֊ķ̓ ZuYk;CUյըZ}qQ7GXdxJ}V&KD$cz@4e4-D{b<95Ζ{J!v`:Z'd0Ci~"1lW1_8\aӇ(d!m:{jҮhH^SDsy2XEi"{~(r+"*H[JM sPNFSʶ֭J͠R=NKò@+3d:5ܓ$$jlz!mf^Cz!¤eaxW `:wQH>f XW#4{|'2bNȿ?j;.BVcNn²?ZG>؅T,⇃roWp^!h d[?cP|Wc`6A.;@zyFePk?sfqRӟaUUh|е30g+{bAOEsp1ZBD-)Zr:-3Q\p!e(@koq n  (6W,H9"7}h.=[Eyjs!1A/ϩG ;ruӇHn6ʹ$ vpYiE.]pŘP1FiE^'nҀnh7FySDyʨBVWjSpT|"e.oĬ]H`AnǕ12X ip`{T&5ryޗ8`ǮO;'yKAP$4ϺQrΊ-:gT!o"IHc󟕙S%n;ur?X!N&)[͛ɖ9 / 8\[c|v90`)- w-Z`pӫ4ǵf˓ԋ$tKd^aDg7R?H;zNT{h#F? k}Z56A乏'w\=[?Z&ỹrۼYBJ؉Vt|FHo wU0TgauZr|[Ch4nYůb' g{Gj."chCT%D7Q%/ѥFWkG)`e^*O}od5}\sa7EO sw@W~y!qD⣎[;䥢JϘ~:)]=mrli|oM7;c;)W9KZR 8hm!P˻o;k74l,F|ʔ)OJzA 2z7 Avt@c'ҽ,ȴOzry!!eMU$ٝ0}цX J6n .;HU[=9{֥욷T_v#khLv$sۑA:̡rr>/H\_JC b8P .٩Y$Yɛ7(T9TbrzZv[{?]Wjݎ>_w+Z%̸w>څJ@&-U 0CưDz.J&BY{7cE7r2%n!ו ֖M& vdo[|ط*J]r镟jh3GR=S D@P(x|&U~|_-cd0e aGc*ΟAr9-r`+Zc`GRdޞmߊe'Dt 1=v'My# #yu.:{]9ܗ&THa*u슽-yJm"yޤz?{=(pL1׸nu8>qY.oMyo_bSZEz>f|=H'RNOs$!l "&'ɷ |VWϑ (vXFU%>T/gyOT~v-BWc"iJrdUƿw}?)^~T^a"KQy1,̻ݒQ#)7P A}ywBx-˄oݷ3ۑFűmʁ I.;]/0Jz'J=Q("ςpĒ-vF~ֺEp)2JP|_1e?F׶Xd3 &C1޴j7(-#u7%jw{o;y[bn=[%#9A: .avB67E0%v wPEJӞg7҉x(V}Jr^.<"f=F4~e^l!SGY샬G!=v=͔٢ mɠ܊ jH"bo0!T21 OU%^v[L@7xZѠDxح0."}>4_B1Ϋŭz^C%R)דV=)+-w=:ԕ Bq^8~ph˦֤KF*)s@ Qr= JQ Ϳxy5؟Zkedq{,iė-I?gܖu@F5S^He\㈮G|/Q-#|uO._EP0xC1[UEtvJȒ)S|!TYm{ٍԫF'hC,5TvC뉾쟞l|e~qEcYNV81Jҋtٳz i0akd,eC 0*h{ʪmړzvbgTLaɻE` !4?A{۔\^5Jke8nK =si$XHYҋ<YԁPϞaD-V3^ÇQEDRK]U6)֧CHV~$~}b2aE|Y%U\χ99-&\7@S]6 > &U6\em0mWR KFA9)}?ԻkbPx#_Fޟ:/59qhYmSDD#2Wϊa/dMf5Mٿ_v73)P-D0vekƒEKLPHz=6N>-eYVb? ~иEhSMҁBy?y}֢I+ 2:2H~XC 7)zQ+5D&wljL-XLb? 48PZj{-(M*4F!fY~Zm&5M(%kucv] G8f ͿR*bwSy%pن^D_S(RMY=6BBwp]ښΘk `ұKul~*!ɬxX;l]g-nПφ\籪,|} Z2nמ)@P\Zb&`VӀRR{w|miTj?9}2 dz`~iN>c ;ߟ'Ȕ莘w?MJ[FYr 5s,uA7Δ&DXƑg=_v(A f\v4.jV 0>ޣF;(vd[I.{[-mIbD'=~BruwV)4T{ȼ*wܱǐM YR \b(䓿A4#' UmXs:`({.Q~ܰ!Sy|6->uJVcm|b7ڎDJj=؅Lv+C{ͯumcc7BCEwon/aTԨbw9.q ӭ?힫f}Y/Ѡ z_3UmwOyIEyA)RQmiʖ#YOTuiᅮ[9'^旜r*% H<,04,&Oeks")o8~*1 7-ɳ$$gsY[k*AP&.P+=ΕETR9Ϙ4eWi`f7ָfAch|8Ҟg(X";mG!lsy㚕;h"ݤ.1m/xcH$|qGs?%j%wō >=1-#c'/K.7Kqy|䥟K5g^^_muJQ/Gl}[E1PZmk7BcH<4p:>q^ e5nyC 6`5HR+xg[eR5d5]y7-nl׀jLnZu YDi;i!O sS]WHCk0<>LKW[*t"{/ TFqU^ (^(c\)xѦ9݃jd24@}“ O\!niJS9K6Q M5TAQ. (Lhσ Th Vl]wj^k'0k vUG#BM]nc PI:SjLcgwGUm":ѭUx=۳Ac ר;O_;tR7>qT{=awH3YR*5咩 O}AJJxi>} S<=/k"cWr&[;>HWWY[.[Gi`|犥}QIOR55SQJ0X;0|ߨ M-}[y.uBPV`FF ^zSPXGu.V6 W|A1=\7WF&T[ş:b(9;ajfVc=sp).^JѻÍJxUϤzl( B-ݳ?#LNT Kc۰N\{ޔ ͬ!xuMDSAև)zĮ1e"A{c1+IB~qʱs,GjHF5m=}1u/^׍(&6.Um!ы \.\߾ QutQϸd%ƒ!{$p-Bq8ܵFقmkRdFBI DuLyeZMФV5}nJvc|$^< }*cRu=!!meIFyް՘R$߿e^ImsZ5{5{{'D{PJ5ȴ59#TNG6&)߀o*!Dѯɶ:끓̧ O3л;Fjm2#}PáSt$§=&d)/ B ćK=8Vj75@-prٙ龾=EYp_Q%W /.*aTaG4Y\EC w;j+XK[)t{tDu@N(>X d)$-E5B B#f7<ZN9׬ BWY+M+ #kW.wn 3c`DhlJms禟+8&ͻ1T{`_֐X[Q/L }O@-L.Lm`Dg-^[>i^zv=b,3ܲ|k-$ӵQ:Hwo.h_t-ryE2Pd_[7EA+݂;O͜Ut_ Rw>oKýMQ`)u;Ƃ%;@A3a[e%Du2UBeOÔ~G)гƜ hHDg!Hҟ߽!h4I B`zyCG l(ULzʸ1S[*L-ȥ2AvT~ ٦4θ%{\O>M>6k OgO=0-6dggI$y>FGrNO@S1l/K+*޼qVQg4W0=.jVW䫨񳰊^7)-k.aۿ%+rq+1R7Ml)C#5"Ueh_d}amV,4ZyLTDi`x GUzR7eo!g5z^bܪ[JN; "RH򆭡p)SI/Ouv\WLEvLYɽ Xkɝ ѻXJB\ K+!y*'PpcƨצT$|T?bDeMޱ7J|مHٓJasdO%TlzVH-4B'`OvkgyZ=ٜEVVG-̊fEP5{JmFJǍw[-"ꃐ*.=ZCa7%|:z5 l]kΉSlt,ij B6fçP&ōJML> `-{y-> ћe;#i Q?C&L#7Q 3++ =3AOĦHe];D1UU^SoJk?{ |i̭nXvyG(4pSx'Т=[/c ʲy7oc(#Hl0g$X7[@wSXcP:Kȍl?6{CTDk Nj޹z7j<{7E^0kv|ՠ*Sxm-޳CvHC}WN^7".zլf!hmpnT^LCRˌ EC=ehMJn{ч*w-h5ַlSY܋j $})"CO'4M `wp '\cA]Vo d&Emb}k.fٯ$m EZPGG|*FvǦo~@E`oԾ{(ޏ5IHWƑճrQ4VO Ͷ]&,5)`(FfTvIu.) ^ҐZC: / :"vcET9O%5zvfxM~ITD+ΚPU+Q썡Y.I@>^(ZHc|q$$ trκ=[C>xO'^sXF x/ZoϒǶ d#쎐|nva1/{(VN4Rv F(n_e75USwʝ N UY^cYHRX^^r Xؽc0+Y}|>8^qXR4&qMR3 Y9^7M'_klXM5L*9rjV[z) [dfbp%X"c[B*;rHZ ATOᢰE8:DZ 7eI`$ywİَq]B9b 5pDu`}4^:T"`8FK~ H[Lgvd4{xh4 ktjZNa{sNmFNYy8ʪ&K5<-ĽS-dz`ݛ?d]A0̕qiX$ؤ-3Lߪ\zXSOjS&{/_g_3!dQNbF![6]nn[2US[^0P!q1;[:ƂߠrƳV20ji7 8avdIv0D׹L^5b EדZP_XRH#륄ɦd, ?Y,Хs:$czXǎhorcwPM=C<;Ѯk+)LؗZE0ǧ8 M!CFTk;gbwzrm  [3jZ>w!挵O&^2ze:cOmUt޸?Ȓ"9p6G_9]tns}N_9l\1\7R} UpKz`6VJ8{(q}A@);ϫ%9E!1 RkGyױQ4Py?(=)MBG;* Vq2!_[PTYNI{lhjDACkC> l]͢D/=VHh= {ݎT!(o1NҏcOv1XK]`H(ع|7ގnpAMGsڮM Ԧc[{a,Ij}n # -ah9=Kβ23D˷ 0 S3P  =l[lW[1w2<@3By?mx}aIJo@Eho 5ˎ_Rxb'OvCY`]D\mCבeZ~yŖy೪shU_f#h<>Lc0zKml~8gZ8W)y~[Ah{6pASzcaNKHXwg 0GI܅rh&%6ijoS%Bi[D2 B'mlCՆvЃ `?݅%Z|vx;f>=5V]ftHdEhK?BveaBj5(=yL6@huu0ʻ- g\ld 6Ҳ_>m2zn]ڀmE|V; Bjc'ЬNթiz mEȀ-كfܹsdvv/)E ( l&GPt0n|I %1[a'?˷J3%ك!^@ܴx ?ƹBb+$G -@.m&{BtOUH`BLu 4't|Xh,0u9*^~ + Byl fإ˧CK.8Q/ `"WX=H[Gb_֗NJ?]_>C ^m$V=rDZ{Nmf/m3>2gVm)$8 ņ\#VDܒżUBzOO+C,X04Cri&S ,SX_9p\ \J.ߩOrr~%l#YAi?6#m!;3@o;y`C\\ůUQ0` R$mHRuҰ?QR.ټ%.L?yiˁX;o0t*N!s?.SW9S2׳91yl߼mHL rN7oސݱlܭ^M9If^? P(# R*qn&U_i_/^KIQ7fjV萞k7y▾0T0+=m߽[vɘV >^7\ДGom@Wǩ>P5z93rF>| Z [;Ocެ2瀍5-_ pb9W$NBVT!{aMsUC |j.y'bOb_,K}4zMei%ԱwA/t#n]R:AzI- BJ˹lQmhJN?.AA.z8)) %<BҸGkmDǩߚ\?# ( ѪB}3~JQȏmҼD7XvÓ>8ͤ%a q8ѥ)"M7%]'šud.P&a eKD3DUetȴ]nbnZD(rȹ#sa#.A0pH~\iq b~gM\|)X2XQYc?pg O{ z]GQ7>@}jԮw싐5'gZ$Xwk=9QJw|/ +ezgD@#UWSK|ה#nȅT9@a9as;F0c @Z\-+ aH5wsWe FQD_ S<0^΋P! "D›0&iJbf>j.}< Y~L}riE0規ˈ/.P2KqP!`Ƅmh2-#I Ԋ5mk 7Edϼl&`!ǥ,u~|3 v'`'`+|iw;c=l}ky}&YP4V6B̒ϼ3Ib@3;!?C?vWV Q7Xa8 NRf֒IWH9u[Ktr "Je dH"ԇ^B^ a"=?2,ys ^Bi4;+јU_f[F3(s:n.c'kƭΫz8LQ=kZ=_^,yd6K n8ü;jG$-@zG>Ŷ\FVJU}UkB 2~W'3^|uxz6&e008"$hIޯ ,R=˩7lkZ F{m|_hi!::{i\kvۣGN-)Y[w*6A4pM2y_=+Z2)h@#=!*WiIJa}kKD)H~++ϬTW>$r+czA &զ;Fg[X|n\Y cw`yE*[gS9MuJnB;?cmϔj,QA`KIBkX} $ OuSJ%Uqr0Bu9ybKf֓ ux`4TB zM]rp&ywQPeoh*fv>ihGb0~=:+p=5/fB)NʆU<_읤*ӯGaw =LĴ,miBqҮ8fRۂ諬7`L|O}/ScBՈ|cRv5N ?hC7}t)!Lϧu/⩮ƨ_=>qCMBRtUE#S+ۯ)i萷S]N ,7Ep!ЭHjBnE;PCA<*kpan5!Q/'?f.ՌHqr6]*aYɹ6Ԡnotu'8&HZ kƩϝQ6@@1yRIK71{}VAb3N"_U]AAw1;8߲΂Q(o^qӶPRT;H2bo+ca4`Ҫ.%v{t NlӞvpb*jäD'*W1nSC5$<6?՛%<"ǖM ~n(зme{]'EmBϡ`^N9җt )7W,`H?s8JJ )}|j B ? }ɒR7&(k=Q٤ha.rU ,!;P)F (:m*o@~pCRq&Y@~I*%>*h?a`ߺY/=7)狅NX KE&S2CWQ9sⴧ8$X=?`d_fАB83?ܟ ;d[P&|c"uTg4U#Y>cLTӓ!n@s'HiH6SpiO Om!}`wDinX,6{[tBMXڨGT"KQ30`3-'^sن*M'*NIxǯ8mAЁfLɏXqxdSvwcT|Z9k;N{* ;A h-5Jg8%єGa#5Hsk˨Գ05EP;r]4Iu=q .an3/d %و=OJWz4'ɗegLv=y1/1DFW6h_U~12)@[9*D|H/tQgbQ0 ukݚzjT](u㴯ZyA`VQܿNܦ&+} (I$e_XL  kSgnn`Xȫ lJ/AA>A}aSߖ穷e{K&T_K-h r}nzPais9VG?tǖ#.婽ɴaF6_-OAJA#`M6X C'ުf}4Kg};ArO_=YŇ#7g:lW{kffШ%_=@`ХYK'{Ll=*DHRso#.U ćs(2>hd*L A >UD႐lt%`k֤/Aj-sw|\r &z~0peNs,IľDL*E0OUTxi5%wo'*xx{}c=vX00Mu*Y4L)m6 O13r vZ5fN*%h~R}@7UkҪ쟩k|)#N} yԅߔKF-#_с0hSlu@'}@TC2%A|ΝTr@:rr /~J5N>;uGd|7ː^))ƓzsB ֨]m0y1kxmbA=[+a qaE.WeoЛl07_7v1hQ G^(5Eo`@g׭Z/ߠ#GuoWRU!G&$wo[g3_@o{[% @oR/}=~'Hл=L;o{zBkj7(>|`{0gn9sv}]R CF$b9yDB*~Hxמ_!NX6t#ۿN3pʞ|-,JE}6\8!e;4r?(aPĻ=BeӊQM?Vbjb狠\'bVA 苯5`}ߎҀ+lG62&= ;Ei22ގ΢4!%EE7__7m5\7:_14h_ D$ vFME%`<Ӡ&Xi:;"Mx6z\!dO)ݶ5)3g/G+p9nH%E:lP ^T^gh_k_H!lT)Ck*2|?*EqbB$:w07j"3{ n #u0 ;aw@v-B)HٳioG7UCmaacgV:lS2WPaP"+ N4lR]K@Q#U |7l8A`/EۓfɸW4K1Lkpt[t uPTR8D~PCb[Ug{cjvFx`?+uhQ1ItKQW3}t+ %x_Dž890k`R€YhX=AVsDΆӭc 4g%m%5Ş"G`ѶAW,9P@t`O#f^ufhobqcWeWKKO6>ϼ0w/)0lvRG~鈘oL%fo@$FFgW/ tLos W*փ~n/deVʲ /jzWY0oZNջ|܇eƴW2/ q_+s;_ ;{tXװsg^KVbtbF~?3uT\s5AAݗ wu-c\W9v\sX_(Wz˛5Nկ]]y˳Yh7 QZ`#:"=6t.y 懑镠5|%< 8UMO7Ռn3@|: w!՜Yo'pycд:1?W{Z$нal+T9TdIuaI'Vͩ K?:zZ"]N!ҿ 廝S5 Ya*:Dn( ˝XfWd)nڃ>uznԣ_c ~7ue~P:MΣC= ϛ} G\vJ U7?mql{m,޸gxUުZF8 wg eSܷj{v9hAgCW&F.d'¯"\`OdVYP\(NLb}W g>4k ܟOֽZ`7do$m$<@bk@CK안<q-A`R\|v.z>'c7eEZ;%YZ(-o'q"i'.qmh"M4eU4O5x%fZ}Dfj=bDu kۅg?;@jRᎰ5Nk;yqE Bz-,-`<AҬ6>o$Iz,ECRl޺qyA"6tGQDv?&YGIU5wn/dMhoGOgg`{aT|Qp*y`EEQă;}[Wu_W KXS5`S: H 퓴 9gd>O} h (5_m|cЊL Oƥ=܇h Bn9MKߙ eUre{C)PCEJ|Cr;c4n}7Hƅ}FX#>1`k.Z, K0i>[ɴ:$k7)聲ݢ@\5 X]jl |8-2`AE]5vZ%HǣtMhMf* **<ᄂgad.?{+ Kl $k(D/NI" 4mרtOev{`TlҭJ/{O $U3lC9z4a\ =wj-}*A2Sn]k/KHT8đ݃4nSmev@BT{?XUqtx `){('/T XozEdz[Tud⬈Vf{$o wnUl&[r2EH2cOФ(oJ̘tx@zIfֻЙtH"v}< 6sf6T}fDmߡW(@t/{=}}HBiO<zi ]Z}OEmCۍ {G{sʋX}fTK4@~n_(o=}=0Pi2Kc  '=>RpvwU }a.2tC}<eU#B uC&c]6>w &CS`KB$F8]-y앴5ȯ,3@Ͼvh-uU?Z$Mڌ|VI(MޯO^*1q T_8[;abLm*-kޭgjSjS—B r{O(~j[%75 kN 3YPae <[_c_jM_JAҧ :ٚK5Bc}n̠,iFܽo Cs-] +(2Aߗ\ߙ U ⧴~k@c, >#7Z }JzIdس7R5}!܇ ϜXJZTDJ]@Z֠Dc]6Y/UgBs*>Q1m| ;RDǞ,kn3vQ;`jd7*?S~$dߍlOU֮WIWRT5@eWKϢ 9}]+ە /!AWc?3eiD:踲?߻$2^ih:{$d)BfU{UWyFfoAWtǐҴ5c`~Qߕ/XtJW2|Za6F-XjASÓI' α* Ti2ƈ*RS]u?PWhbWu1렆 4[kK-_K\kϠIu5MOLĄMMp75mg$.ψ9@S9vjitLU>uEl\GuȆk:]9glmJ;$"My^@ӕڈ:,fR8sD({VJRZ8N登D+͈j~+ĵ+Ԓ6uy&cS3B/D@mF!|rsc ˕Gujcg*>Dw+( / ;= SD*u D4klthm)9=5$z?wC8}tw쭿V# `Gʼnv5"3NX.MR_" uφP!KzH+r=v*YO <33+1N?: / +H0L_9d՞5/#gt[@.5t@Yf-ղ 6 0 ȘFU$;mb$NyVo) A k˪z> α>XJɗi1j,+TYS *U8Ͻ^̣21ӋD!xBeBK P4^;v[Vʖ=HCU3842JAW߰։h+e1{b4,[͟3nh(jiMWsĆ@i}qu"ogQ5L-ia}, L::=jX+`*>,b W͒b(CnSTnG59 @ϥc fb2~Lq;`4ycPv׫) mD:ay̽ x`V*Nu~_ءH}|K݌oЙbu^(y_~ 4&O7g}@H@=>-,jIW `NWJB\> P! 7 ~8}Qv`H.$/Q;TTUˣsQ{~yO1>ةbDM=+ dj<: -"ۭ&幍ƥjSaU葷ô[ XZQtЉJMe1u5N/vG4/SOx< ;AAR,5Tq.OYzDBzeg>6I|o$d7+BOP)YMdH~}{95\~ } 2h?X29u8P{oeifV{;w|b42p$yaC@obEk|VZ=nZ?j\]I0{'$IE7.nL SHP]sV{N짵`4-+lYHUFD9dB ,%a!MNiyn5"bBaW]l_'4k\]xÚ Z@c/X^sdm T[ Ԛz٘6+ yNۋFa?{.VPqvJYM"i3!>W4gcaI3(ŸuXVE*.VAW.>[:JiՈ|U?(za'Y@´1Re 6G/1@7܌2 T]A ;/m!hkHsa24_ŏg`~2B B2@5(C4}V/϶J ;u4a& s-S+5"Z_h3- Z"Ԅ-! H22o|]hAh];Da ڨԶ_:Pr B;-)Dn:B|41s'l gI%b.5 lXc8F@1k@â:)MU7GRJ*4lSL*F#^HD8h՟# ZWa7&Lx A;Sw["IF k}MJABתkG6N'X8v%wG_$>! 96UuS#׼ANJ<]zvp*P+I8دSo?X43Ipsٛ{,*?Hƀ?m斝HdÔ/^a]rsCOM&ABW\ g9[.I@ymvcO{_׹wߞmICP~M,QSrkoQ`C&ˇuEJbdQB(_PA*Ix;|@d.uG6ѣϘ ?U> ./J" *C`mY%汍X)<ؘxd%C;uҘroyu|`k._!w!j3nDs+e2Sl!;UJV@E0U0M?%Cf|{0XtI-90MĮ1zzqy(KlCLlRD dUi3kNE"GO<z% q]ʢMA+cdcg^*AdpτbIM[topۋUHT 梚h7mi[:|d;#DE$Tn/ܨITƔk_H{~rFyNU bt:}OXg I*e`{UiNḿ4:@TJ<0~̳7hϏ`;V)^wH`T$k\&/0p3sD y+0.zߔ\G_5۷5GBFECUT% ʷ*FGZZNeQ,zV0q t|V"#dlpPmyBhLXֈ<jV s"F-! XByqnŤ}!Ec6:U9&_`t-E5ϝ- 4xJNc>P-J0hЛUsvXPdQ-~ >0TG|Z|P' +gFxTo N%7-erZ@juVzmfni,QV,U)`.5hLnY۱[ݓl=9t5̲<=suzyk凇kS"w{j4K4JvJX~ %\ /Ucng"[[ߒ,R==D}KQv%? `>04b/Hez$`HD4Z;TqnH/Jc}do&7(~`KGf.|E ]Eȸ3.T"Y ւux.lβ8ZHn׹m^/*..4ED"jz,m/=[ [{R5T\ @w=Qv[>Yh?5oM/ĥ 6JpIL]r;,!NiZb*o P1D>ţF6S0 W8%kЁLilQ Ƕ_ri>C\g/Mg[Oa㡋9g= L+ֳ7s[װ(:Y ͉BQΉkaߜ-a>_dK(-|YA̫㠧CdAk29س*)<ܦ`^y\F0aV7= ӯ)YMS[S2}=rT/9nM< i]2r_":~ b'xcWmH,:xΠ]<mX⽑>DwO}^Et"T}ű<" vt8@bZjvcc+I=A1kFhn NjbL`xӔ:=&o']e UDfr.4dљPĨzlaBCWX'\jPҨ{ɟei.UFyA7Sd||{[k8J&m `0[ fpjurߎ\MZ-SVt~S(!pεkR=e]Pyݠ1seytF3%ju%c}֭4&%8Y< rDY&=%!QƯ]^hH`={ ^&y@: } ʻ JNu A]K;rрhw;jHBLnƁj;#֪t;:I@ƒ;P| Ҫ?`<0I'R'Jz"^a4N-˻3VP}+GAvibxg@lruq5/ɻ4}L:XZ:^d DrXIՒxNj_?]+IVӧ"hy{|~qT;ؽe/'-7Ν#R\(X{] %nN ms"lJk{uSʞGP0]Zl>@ nZ* 83W4|(O ƀ׫ o&Picıh$"ѵIcD̿w~'&af;V!+4_<#BNBG̫`o0,wnEԺ?uS!$QILLmlޔZŝ(_t^98URiґ+{[o|lk Tr.NBj/xs* 9Cs5&m&2$转k |WK .$$={ XYb#5oI}ᎣTYߔYT6^p(itbah^AN;P'ޠ%ϗ!\U5׫Kv..Nm!+Vn  1v.sis6` tVpj1bQď|pC)g`Y%x$4W.ϢJE<ŵƐ5RB&.1腦 ݭ+e dl~؄5kT>Zv|ǁ:zcIo+:ŐUąZq-PH?]J, ewxLp8 hݏ!m۾4HDT-[fаLw¸swTp &VUb g@p 񰆛/kMJ*"GC+}7HH}Jo?(_3vl4?"y@duJfk:Ε!MjLQh>3!Xc~!mn9}*E6]E~+U fЯ_E %xBc|$ö O櫚^¬ *\Xb nW͹gM儯&P5Ȗds*;܃,[ÚJut;03/qyVb Ŏͱl/ r].:[%Ur})رR0MR-gL%n3y~04뙙K;V oZWyhC+426o8ėd^4j#y9=Lr-IqnY것sݰrx^ہӡ":tt_! G4=KS31HVUp˓E`Ѩ]L 򔯗TG,bҘ | ftYSNN#uh؊& L Դ}_,J٪CMKKgbi SHgeq&v )+{q7ﮥ"Q4|Yn3Es F+rgnNC-YK{L5ԩy\LD'+Ͻ8Hj!7πo$q9-:;1vK 7~@$H+/;To HR`jݖc]й”u_J#?H܌ 37Qb^{ fEX2]+ i/P^;?jWWK+cN'no/0Q7ӵe`lǓwz{jȩ?E|paO@Cb }3AM$h >=c50q_%{zGU&C80{,.=T,k'G #`΂H)ٵ߃s]ȆVi]3*V!'ر%NE_AR{u~ٷJnj {j+{ gd );Ah;C0oR[> X11ĺ$^ P"[V6ur٥,̬"g'9<'y5]n?5NU4 ^珢eګ XF+"^ 6MF{kzk\sb^&uU g%bquOFj4̥-i8z,,w Wl},~t?ky3l4>r~w^s.gm缟T 4;bdqW5 Mf2T U܌. dq;:屺Š+[uw#\PP#k龺u7 WNaItguŷ&?{^ K=x )Bәe8N2ߪT?GP:G\CFPG`gs*aڃ `]S4;mϮhᰴ^,_;ؖ'4KI!E+ײҒw G*r 3o뺾`Q45Dڃ;0 ,a־>S.^;}O ;)4(pԄ"-#_Ȧdwv3W[0Ʊ;!oiDrV ێRvρMǖz D2rpx3.+򅼧7ɵȱjOiO>1޸ uw_ar`0r@2k&9=`4 Q>zX39X_9!MH {I1mX!>Q=5_D{erI|}M9Pǁ[v*άYW ϧC-d'Gw1%ݠѨZ4<{K?wɠ gVCC.)h~zȾcn*~k#޸>j@E^|sQ8WFHo :FˆQ籙ܞ[?\8-W&Kq~WNmazb1.I\GL%y1ߤ;; > I$_/AOMְA`D4/Wd:ahtZ l(?6os#i~$.{//0BuyC=0Db:uhO# [ ͖K-Ӂ:i o6vR/v% p) ENm1'n~35 =b 6" d6oWz"{^fݨ:BVwA4[6r|&3Ҳ-F=!g"2O7G ڲRHa?MF`z3䷟7Y(}SޞC֞n>ܸ¸)ɌaJ^M9 $B, gt.Jdyy.`-BEŇl{*k~!7aZ7zv#)&v lQr8{kYQ|9 -e%9[|]PWUxŞWa "WԱ|bI/L?V F8%48r0oRZ0ȹs)bS(Rh -Qtzɹ+tjY}/!LIЫ>/`6FgJ +"ӊw]+T/Df:^ɏO 8_ѷ$*!wN;:-H uw!V~m(z$jcյ~~@qd8ZWӢbC >w`Hrǘ>)=;0(Q#h7oYX1%G)Ɛ.ܱy"~pp;w)A4a}TOtS2= zz`RI)RpΠ 9^JkgT'sm3>u6,Z WNoFcfRv|=gy !Āo=vn4ZahL1'Qrw`׵o9 w:O;iN7oFMפ1N""u$N ON?}+8F Ȉ}0C+ddIgs9sD] p frElOq=fPjQkg3blul؉; [O˖۵ .Ǘfx]:uJY۳aN-0sCpB4DC@ad`ͫ7xرد?`D4jV%sMYT6 "sS+]m-G]d+[|ɗgT}^O@C1$_kyJ` ~ "ߔ^.~nm$FӬj:?`ŜF mسm6υija=oT3V?QK܅@vIR-C~J/k?> u2E|n:}I afV(…1(5oM#:@!~^(|vӨ`C iv4!Rr~ыԽMxEÚ/\w?&)2vmqn+L+FАZKAQ]s;ڄ}+Auo(:}33ner)h@a~]^@40;c߹dJC$FUքZT4&LuT_k iV RxW;~K@G4ֵՓgUzBs#Fd:cpcLxΒAu>ǬѥkK\gWE6*TJ> E8ٲ57 QS:HۙA)JS*xGLFNb6WXX!`ꘝl #:O3-G6tAp[]܋qSuW L=U=:^-#q77,T;^1h#lwJ-5n`l4Ц[v"Kcw-\8CѠ[w3ݝM#7ͮ& ˭1K;bYt3[2i#{e klfãZ(vN[s!T79YL?{0dˬjp\_Bu_+F“AwP%>kHy`v%b;)}#+ H |-{BNoeB1JX3_AV.oŽ*ᒟl5})wa 3Lr^pi& >LPCo G e\'&+Y`㧡|IazIMh=A xYFDVgVsqybUz@c#N+ Ǟ'b._,UQ~gۖ!fFMǃqw;1+Sec=9&>eV9@5=ش[l7sI|cw^#K|PxF ceVKD/8Q P!v'ѽ{QUd[K\Cc΃xb!, "cJ:'v`ȴ偧+n0 كg#Fr-ܰj5Iʺ)z|%`2OlL 7,J=4 #§.sⶾ`˨LӐt}҃mN5A,^--bG. =J$^ 2EUg}xv,YT;NW>`$:Q©;0Nhfn/T8/׿:aN6] vKŶw )r>SϱwG6(ΌRp-g;q/}Di#l{O )}K8Nck~[!4$ͱQ^)7؀<}z3cd\n=gbp$L5CWngRDϥe_;!D.8| 3ȧ2eC?a]q4m&-WJb (ck$*^Z';H}L+FԈ$r{(a>_vyhg7_ƚʣak.`B M:d2W"Ȫ N%ˤ!U?g1$t;YEB… =Ǿ.r =mn@3ݝU2Py'M&+٨$|- E8Rip0=8059 aZB] CBOYo@{`IKʌ>Vc{TӘpNvg I&sok7LN 9g!Wق{ui= |!'>p§7.75ԭ]f3~0vq4{nj9;8vH=Y=77c0-32yl! BC[^WR ZBgdcl3NּYpX{=X1l%5  XtP>Xfmφ^4r@x]oqo$nֈ4u׻!N|n;qf^k90No5}{0 -J\@]/YJ 4Hi;Xq*l..O(E fI߭ C_`Mڞ2N3'DO:~sEUw(!o-"!krLǔc'כVGgזs9e %N?`-eM-\K_z^ \QRDZlb^YPOUL 9t}-/++f]D҃kֳ{9%-IzU9<ƒiX`wFF0( XU.;YH+5F-$ю#ܮ.jP ֆH۫6cC &+Zy`.ri@̔y"ol{8υ"ZKީFr3@x3]M9`2e2rmMK=l^@Ҳ4R}4Jޫn (8(Nӳ"Nl {p-laƗhlaD/4ݠ#8f`mSQڻH ݋%`n>ڴŃ*] " Cӷgi/*X!uV $N\\C8 -8?WyڍcIiReK5+-qhp}B}}@q>%K6(Y?`,PJNY,~EtЂJ\8jP2*BZ' ~~)3$ >r{+3gs*KWt#nR[-uOxZqF-yDgb; 0ir`2Uf(ju!7f{bH42kulOa'3_Ea$ eXneKIX* FFpf in0>ޕ0Z|n8`w"f)FyPYW_6PZYgd&W\5ß9Nou$Vdw{(4>=a T$4NV̱=Y8|b>TdZ.}GmAD~'$}I]k8B)Yc7V3?Yh,Έ70]_y˗ >v]Ko c4$QZ~,v-7mAkK.[/Iqʃ?GEXuZtiIɱks5tp5nڜH5xɹ ' CJ$-mBFa̓V8g W[(}o`Q|46^+1~}."r?? HnN~օETKx5UiDBo9 +O !THi~ۚc!K%@3[.U=' YKt~EAhfnZ+ 0-{2qMMxHZg!xۚDY:N1o;jZz維c'-Y}ޕ"\PA1>{3nŜF坖]s~3D(Ec)8Egt"rYJ[OO dZ_,AId!F6KHjs HWx^QAȰRch$ FNcx0g10؛U˥ޯkӼnnG #ھ=7h47ҕֈIYoHs׽-\5I Rt_J'9FA`$أtsWsʁ&f##v1T<ۄ~wĖb!^Qs `ז,~n!FX՟K 4]s )@}N: ϡ!}4iŭ<02,ٲ;|~B:͍>XqҘȪ[ݸoC )zn*Rx ̪:˱ޅl^<? Yb;EY߁4錝iB؊k*Nc% ק7a[Py PH~. М~!-P*Z}XSYYTMI?H9>"}{flT ā 9dB@Uz^r'̂SSK"V dhK-m.!e^?)~ӄk)y&}G ?E=-E?`9e d?y(-pl@_&6VCإ ~\ilʾ㹵)+R& aVDU)'|'86%,ۓza StO<& Hp%2Rrڇﺿ`Ŝ14ߗך-v˥E7JDӱ`˚?WG]I^ߖA9آ$8ݞ1_Ǽ㓕t.Q>_azWxM JwRPsQV1 TgG^c^]@:$Z5Yd(37%C{]l@pFӊ)ZlWF.)} @<>ػ_̟ !M^[XLm[+AkDԐV\6wd_ COθ`V3o[|D)Cv  ]rϾX8\Q4Ӷ ,OZ* 6i2OeKƐHԮ"Xq?7+P[EAFsv=9'=V|[ڭ~~I,}|klaBc7dFmf&T?X t Flw%pXq3n]V|};1b?q$f 'NW2EZ "$q%c3Ywnfw4!8{Nþ`lml"Z1MSX6_i4Qq9|/wr*{]:kaE `PQa>~ I63rM4N pu3Wtx4_^aQe_'A*>Ix9Mmil[v6E8kF&㬅;gGgF3P/M~6(QP G08)CX+F'bN1=* -H<<> 5ʟ41ᆼ됰R a)~?L{ |'*ॖ@& } v-%[6@V7xht!h?B9#`46"8cW2hؒitw:ֈtK۹dml+;0k{ˣZ~`%Pgi13 N^sa UBlLA i e"|վGAMr)>(hrffc%9}=Y57?7ŖRn^kp&W9^l0ĝ.⯬,o>+;d2fO ֌54U 4&" ״Mp=s -N|d&`W%R`Nm_\ێa CccϗnҪ`ƹ"` ] 5,18l&7|fk^bLr 7\79Bm&RBŷ4V2a>'Y!% Iql5f[78-;;]Ԅ%z7&5^,}`s`kRQP|0I"TU#&܀s F'IBM!U: ـUx د-.w~Ƽ8ʱ(kRl3}yLʁ/4 TS iL w 6o2\-Ȝ@6[ /![[u[_N!ecG#PJb 6obӮ&<8OTeu xbNc m> k&uyu hcg{zWy0dxر@HyU>f{ێ$ss`X7ne޸sA4~[)Hv80f0Chf,M 4Z>`à鉄!4b)ep{1?  H|JWwЂGD[=qEVH /=vl<3YrNXaklr~g?ybӤcҔ1[wwXx9pق5l { !jv1'i| jY1ͭ{X H")%{5jV4ej-$s^ Y 1bMHAxĎJCIcW,-Bbw+m_ao58"$T%s[x\[+V ?RԺZtk}RH+I `ŜFe골Kdp[m c1^b7_&ֈw~^+”[1EĐ/푥ptKyh;䍢2B!n|hV,`[.J$wCkh뻲?,N_NBe%2dQf+ g>dc i4+fגE3Yv-M*$zPGk=NyY换x,+}>hxMT XBjӼQ-N}ΰJҪZ(7EtQQ7Wh͇G\!_%N}?b)a#.Q!ڡiI%cEDm"cKQspWr柎aMK\ '~:m.ktv Ӥȏ8CwJM3NJ¶[nT:ʧqƿc4&d}Uc( YU"Y4PDpg3ŷº0Z٥[s e}6"e~ʜʑ{ScʠW@G"TR?[l7 (O#`L#oݛrYow˃qTmF3(~GI?iMѦ}[k s`0bPG<29ϔk%&KCJ}z`xZ\ s8fQ=MnWietmf]59'璕sI~w'A}5V-.AlZ<Է/F@ ʲ}]OYg[)*Eʈ3-9I[0Ao_oK>=TB _k|Wc_>r'ف Cgtl:+f">. n9,갋K>)I8;dM97j"0ͳ?x5({@e1xEnΎ'kυ[_!cy {{Dl{Ι3Fs5DLB`9_{mAO@6j%_^2΃C0jc4 ӘmLmm$وFat!܉ؙWT,ڦ#)ܲf~\*1gQ+8V'w&6̖xjc2; 3]h|8]㏲]e97g3w$l<"YngVOc%drR:O+C$1~ E溇 `3)6# _M|V2i(94E;Ąg4X(ҹc#|e{ǵ_bVa+/4aP1lG].SZkT^c8\iS7nǾ&pATm˨d˘_ EOM{7dXqA=[ 0j]rsuD0['rX4e t4d2ֶ7I{$ڞMNrfN:&Ժ7i ;2סN h!8c8E NH u1>5b_tZm @vHk<0ԃw ,\o (Y@\m6 &jg'b5yF)eڄiPfҳsYhi|{gLmpksѻ;HVoEMX :߯c5c% -UZQƂ<]nNCz.v92|9`F i+PR}{vyYw6#WrN.iĹ1V aܣ9N8l8(]b/6N 7|aOaj{Z쵧`:Ŝ:ˆL, '1w^Rb9Y^ \X(cǮ%Y d.vV689Wxm; C}N)#TM"v !$HqoEq=)Sc#*-|@q;Ȏ(ܲ+e1u` GD"{7:9rJz侙dq,=6J<Drryr>.bռc  Tq` u@+•BgF~Z0K2runf;rP5 p SsO{FI{?d] O Fg7^hmM+B]A})$RGˤF3ZV;`mQơ]i} 2=B#\-;+;XZ-g<kjvscMWKctlj\M g/[#>PjXewߣS.0MYWJ݉gTc~;ve\*j?!/~8kOjkp"29BWy2y/CĖf.dK0Dǽ71-ƚ*H$3& @Ä/U:Wz0PPf\@ x8ǰs ;4u$xf=??np&>4(!\OB@ u| SzR i\ &-⥩~`(NЗ4U"{prVl#pg+LsѧQ14 L)&Z5jie7 TQƟeXlweM7Luc* ^q KD ;Ǖ `iÒFdW( f+;^߬諞^Vgo%d؊ER1w蠿wfچiVV"b}shkGR(#ۚ8@=㵭m?ll \۲m~@9?LO1\Kkl0Xk[5UJq}l `Z+g#c~v{T;כu4rGܯg¾Sbz,0@nǗɸpEFfՉYhAЪʠJCAIt 'To @ 6lv9Iq9]4͠ӟ `l7rՑHz-l t&ʔ d]A0;wVIT[/*#i(ʻYRn`Ǡ '㡈-*l P>YaAWq\Ր E=ضn틽333&%}h`Ǡ sR@zyzL ^*$6 Cy-`V| Wj ǿOU(7lYѬ'eV7aMK6m[(› y_Љ+CAa|x'5ba]4U|YR]My5=>64P{А;2GΎԕbp 5YJ<77CF.Ub/L%(˖'ڐݫ>>C}QHl;A'wo>=lO9Kb"mL${S/ b(aNdO,V ji=U˜/~NCXVnhI#a,@p],9Y>GIaR {9{ wb|+XN'Gxz<5;`D< Jd^Y>yY#CloX{Kl0_2t>籵Mr n@L)5@SJQ7C?S֎@k$5W{|{u]⓸?ߖZҭR#aGFxݪ +4ߚ0ʥү\zqNHD1qgB5,JNqsh.vi4mgg⿎e*J$x9YtWI.ӗOH4_V&Qߺ瞟mt?sɈP:罃í!q&tAN 0W!CX\tP H .8OC146zq9,m9##Q>8=8r"kf@{~j}$jVPw*.,ruJ{\!JDZʲ3V{Bx-PQZi%Wp~r^.qa6"P^ZGyKڨoIjwh|)F]8QD-@]D5?X.ll.}Xתs!缔fϘq "GԼRWа^]̀Sne4FWzuoEE|* jh0\|"]#y94rV==kx-r.A5ܟEV NDڎHT?NKAs9 _{Xھ#iNN67TNDh*.Djø|=}w;+Q9/sgik 򀋗JdĒdq'9s;4k='?z\qPȦ1?O?In552>{@Դb=2صCˑDu t֟ճpz@i%}y\{+&qä8>͎!Lu1K1ߵNs$ w\jJ}T?&$-Nsi;"P:C?} .2E /`_RsmJ9UjW~HH""DLJu?12* N[x{֦|bJ ޲o@NE]P tԯUj8K5ݽat7%ޘAu OOƂ4G@MEy!om+|Aj2?.A-="y4\W݇;9ي)/~^#Lx}nfoB~Ine)ɥ\q \&WjrXۮf?*_J7;$&%v=69޲ғޡu~KpG.3ah/ A >?ŮT5\p'|T{0 =!u8f2\JKH"Z,,I[ɖ6T)3Q0멶[xtMco9TSb,}I#TY>ʝFnkK,oٶ5[*lǎ.F//rn]:<ب;ksB{D~;2zaBqtjAZի-yQ2jܢC@HrUkw pJ눜{N8Hy:yâJ49S@ !)R}/2SAAiTuHC쿲\/dva,q«U'pAct# ~O73'fw%\ ps<ћQK<_e:u|и>H܂; ZBT$`X$NzFNiF$`\`#ID ])bX~N(SG1ƲKqSlUMeS'98t(W6&Y^t7" :@chNraO4|s Tw'Fz]#!8&qw|q_+jz^x#}kR|98O`ph:wZljɜh' -:h%5X*UpFXAwAE(S'a1avYz PUHɡ4ۏW/a ī Z۱Hµi(Ȣ>-k(PSY|=>UF:ܦ8)lx=MqFM+x 9 U|0%[ "_Bs*E Y菘==)eYIgxVR˸[\߻-BSc3d`F JKn3N ϫ{p]+TW1՚T1ysh4bQ,xcw:S]=iUpERc _Ch&C xOٻ Wѫ33/|!M3U0l/2 TN6+tP)@PQzx'+Txեh޿_]eӂA [jk @CnҮLx멚@]r__)pVA@e#%~BNiv(hl#z1WMx܊E0pX= Jo!tbE__ݶ Vlh dN : m_(yh)vߙݹD?U̸0{Ljl \8c'躐rܥ=ɶ iF ئ4jPҋƵߟQ|jzLJseE3 qt!Fk*'K)Lpڐc9H)jRC$9]Th&tukL ؙqjK7ѶJ̷?b \".$iVEqLKu0h/+9 ۊ$7{+e$0̯KTJ/R[\|?6sMD4>wWsov`-*r1XYDNz͛"[U9qM0m‹ %8B,7aN Ru3g5W;6 >dGxVoo @lnOڿo=tM-RB j(k O:u.VRiiz-[y?:ڈhMDĂx`v4[Uyfw6y TkNJkCX`}^5M7^p&I_j> y IZT!Vg!oK{/f\5qؠ{Du/$:2X`mY ymwFj柤ba74lD_oʄڳ䖈b~33p  ŪsҖfm˴zsLx`/هQ^S?mqf ~E_.)K?u/ɓCJRteb<RuSqq/2+D#f$ZpЕ0I#ܸq˛CttaU Lx]p8Pr^܍NMNb@m"wFLKPBkj 3*nRCŕPy.FM@t/?Bʑ4 2 ;EL #rcܧ:5R+4jzIJY%ɰU8^MZaux5pozl([Px!J6籠real8I7"\293+̀fNd(Df:1\(8JZtz0NH` T4Of$:-{})Oo :/j4r-mEI(c:&ً2U#Nz*FT!b~2э\ x%d>!,i|0 Po(<YTآ&=okVyZ&\IQO滢O=q3C<w[` (9%O_hw^Tw|g44\J:xnd3|T{8Q/k-B .7G.xLY,A/w`"Di xd,*eҐܸ|AM8Vʑӛ/t5S+{ÊpeyOU+EI9M] 2 <'^j8~?9lXA>E:rZձȢx߳.$ &8,V.zkȎ +h a@b6&-/ք>(Amd9 *:jiH 5J'L?/~)S#& Zs;e`? oPjjZG7wA_^2>Y D[]h7p{ |އ=k QtO$nxYBMGӍu1MT[?B/5/sp*/-A2\Ov?VXQd;L]Jk?95̤v+L9n8t۝I%.-K x̂uŃ\(#10t5^0;)B4 =|B:enXͻT?{=щ1K;/թ/#gǰlǩ6] H{\d8k}r*p/R7Qgؗ3CB'=E$} {~Мt $ɏ4;xҠH-ϕW[H}>"x4]c^Q=i'%y8?` -B#)lT+;'![ptkPm_i,ѦxXw:FV5ZFE u;^ Fe/NJx>vlC1}$Jj;fK(]u]yaT{o[|w^;QJRLCܸe؂P#)1gO}z\5⠺6+N[QPͤ?-k`}Łg#O*H%΀X_2ʭ<]g.7m`}-;ـ: {R,UB9`q׌WeNQ܊k72*/0 O0eVemzZRPgvhu{!`#M7=ggn?ޛ7>w<=ظ9Y4H)SKTVе'ࠆӡ9|(UWDRJz)b!|A>Nhۑnqd峧 V_>݋WˣuϠ،Fpss$W2_m cSS&)V,Fr#};&jer4ȸs0xtS=!'Q)?H:nAAFvҁHRl'F~ ?mޣC|Je=b<h ҍLdP462V/]B{rn d(xT/ ԷST }h9x ET8I ^aoJ[_!2>2I._J*v臔 ܝ^ bUZ&Q _m|/5$>m@kR (v_zd#tc% tI.Rvr Qg2j׬zJbJϼ 7iL}[Sk )i7;J>P^,*D޹g礲O>.y8}~% @/iAe ^@Zo!4Ht*"Ѳ!o_(_>T쐃XK ?dcNlvΎG6iTzIfIx> dlzQwٴrnrKլHPyT#j=vXEϒju -RzeE$rV.Ԟ!-/gE?yN|>3es9,U 嵃zd&z,)NFh xc0M=Lcamyubu>tnE-FAaŧ(nvfa5 >#gjX]o~D> 'իz.Bo#P>T&j [7Tɛ>-y 5͖Lvjy{aLzK v(GC@y85A-ZxV6վh1hHM@`⛞Қt/{0> 4c/4foSh矫6 YYѩ^1RM],tj uqq[,V!Aّ"*1=[j5g# @ӻʙAo)+0*lYeY+n| o,졆 @xozbB TO~٣d dM뒏e7\4}*/" (J5[Q^ P8T˹jRj(3934szO h(ZG+-XF=e%؇@ BG/Vt:\LC!<;n h#cq:-*F,U<_w@|s|m_8gG}$7p|DYUQ>)1߭#Sy2)SkrzZ >$CS!hϪ$ehX˻c'uVAHkCEde/y 7 \/z#g]j={k,Xn'jk}"+o=(~O}MT- p̅*0gg'pmRrR/r{v%q? l9CBnyE]|uY3:=%/&/AmZ{ ; aU=K(/ Ew2,SO(uЍ1d#Gl8P]_Bxh'!#^UޣyVB_ϰnUr2ҿL :Ay|'ZέPZ۴R4ALޅ"; o$n )_B\jJ&iwl=5*OZޯx}W# q.K$[m@g{- ³~FL)C9${ߥEJ ^!|a9$ݔcKލҽ{X *rG4k9o@{UİT@XG սCBz9Mg0Ao%ODȕX 52/2zuzٴr{`&T GURb i ] mĘ/gfVͦKM@@Aا1 g=r@1r_:Z=p}؜y(􉄤w;=OFP%ӈɘ~{ҩo}g&=+"+1vϾ8  ";^%Q-6Uh]|ܑ́Kn?ulI4ZFm9=fBEJBծos_Ts<JWǻS5U-np/P J[B-BrK9EO"1w3sYIY+gg9KJ*ѤH0nx^r \EDF+eyKf eC5qמዹU2*ZIymz,;3;?Þ8 `tdltDKƫ/uZ5XZfDB@>=Mr!B [pSUo1zЃ-ɭ/Ix9-n^`/9?>@_oHȂ j-1әm7Y?@[INcjB4u?Eu U Ђz,`È~\tuIýeg" &`Em{0ogqv_{n'7>6ȗ0r*}%*שXBΈ<.Gg *xsS /35}UP_ 6G웿C5LI/,;G1i7bd I׫;_0V+&Wt.e}M+(䔑Ϫf &0{@[4'N}dDO՝Ƴ5LJ6#e֧WĩiT/:f뎷"F{d{[;^K$9mN0rOj:)dhi2q@Qq 6>¶⹶~Dz㫻Eސր YT6ȯ{MEmRsnF.ԖSns_XWY dM̊To߼"ӷrUε1N0ʒ5=1 N2PF!΂u4Q+<7|l4"rz`PO3{VikE 0>wq$q{ 5(Utz'I1^@g^&9aRؽ?noe]%@Iq)A a ?۷yJ*S$dB1A`: 4r;CLJ4NFQȀУ&k}'>B=o3 ]k0`g2*(~~/yAaFrkvoy[0 w#sHfov:ew"6޴^LTJxQIb|W &yLe|C53TYN3;A$$%~*(o*#PH5$acu#؎4d5@F)kVTJ!ʺC*ቡJUJokYB`b?cN'`-8^vxl&@%[`}a_Wd)X1A; AM.:-`Bk- 20 q褺"FЙwL7@_|m;Jhjǥw㚛N.H2Y/ i[ͰsU`OH=CE[\OR5^-epSH% >_T>Q0a'=6Bcn&RK&)O ;G&Қ3Q:aw<}BA2nJ󢥮P?+C U#7!"?gE)1yIP2><6:ڞ-%ctX l ͓瘣JU7B ƉRILFl?ϳ~1lΘǥ3Rr ԅ<"ZyZVQ3 㤠%щM7؄}X_q{?M!K=IS}U??1n⦤7BOi [Y:hcp#T-*l/`HYK_OD {߁-q{DU_yڃ1B(79PCL"?|A okBa'j>E_Pi } h"<w'W(j{ K%> dVlr+/w#^gZu[2-ᱭA?W=gy]{@gf2%_~9ހt+ nAC4V,R3$H'S 0 x=iFZ޴|TE$KQ'Fhҷs]"t݁\⹪fT4vanU찍=ƣYޫf^[CiB!#~Be+sQANԥi_K\}$*f#/` O7E, s<+]( R2_abAqƯP aȾY?La}v/-TirX&C~coBoq3;>U *Nwk#˦hN׼ - Iڰ7JQTV2qu cT<ޥ{?}iݚ_ǫfa+`=c#zh˞ x]j=k.j2jJpA7e|< {OqUyr_A 9 [ Ggiy( DD835øv,z1 rW'43IbXgfMRA߆:(V'me]q^'@&-Q?l*J7̮2:"4[8˙خ}^2]vJ3_ET ,rWEA#//BqrPC9Ǚ{.LK_>D`}[R̫V2IU"LX>Ƶa:n(8>Pv+2/@L[cg[ EJ._nٶ״4Z@PEFg:2n-;J.)KA%Ϥ4F*;ЗΒ!A#+{6MKchH*JYOFEZ"򽄕Ζyv l"ܖyLPZyEm G% i0W{)A2S7Ec$E=6JxG|%_}^jbr]7>+@%犁kTAx5cۉ^ bU"Wc 'zᕓяh@{ řϙ:C 9W=#c,2࠘N#Zɔ8]3}%ۂD.-oFZw^ dZ - ,S2 $,>] )̠Y߈7<2>Z]{hnnL{j\wPAt+WءV`χܭ%4@m"5z"t}]H].{$ɽ-bM#Mf="u`sF ?uݐNg%!'|iO뇭] &ۄ{"r,m2{6&9[T M#G!xD⪶:)\*D(=N}Xst?lWu9ogQZ(E,kl"/r̙A D-)q@9kl`fnX_x"ؓSznt`I, jv DBt&*xB!*y|*s҃W6Y'aPn!}BU(f5XCxO{-D*<߃SETwV"(:{@كϟj~K?TCdXFz,y^k\O\ܧ}` kpts .)Ӛ^%֠ʹa(v&5Lv!ဝء.F|6Zփns, O{X*vO5zy igP D5?mn GSD9WJ_h2:?Լ%t*P!/]ȾP8!`[^'SM֡gdQS<<-Ư 6fEBZgU("m[ahW2/u7Y:A +n7a4k͸?GWpalP '> yNJ¼0N 7i1X$  +L?`˲OM|?$)8һ?l ,)5[4]) MbO^or==ئqմ䖺RQ)QF!￟yb7 zw ͳu^so mhЇ"ى+4Buݚ/$;R`gl/A !SY6b_+°14_ A?l}*LJ{Z{̄6F5Ft7}bx-dvI.=2B ݍGnǰr!k=W1s9uArv(#^K1@',T[&u06F٩JWFL<戽!4+\נAUco+>?";$@mΗ#3e* p 䚇%tVUNV1o<03܁Cy̢e k=I7=X;I̫ϰQ>{u(A0g爿Np? s> f 25~5_ ]u 2>V?Zm&R.<нu<ҟ@b(m>Iq]Uͻ}^AVnrȂ=~ĺ+TZ#Imc[tV:2U̘(C^ڳ,I,Dl2mLK=O#@ܱEz{:ݦPaHSsp %X*ݘ#Y5Ae̾٥qĩo'96J)l^_I-nEbaZ:@oPo^z h`麺݂ cf=sk]r*&0n݈=N0;,Ö,ZJJ>fo1gppZZn/}iwo7AHkwCϣb5Onk8AJX|uKǃ_{(Hw.T`O" e;_VyTF74R?T Vy,vDMVXt4wmJt_׫ pY7T歉?wz j@`M\ZB w~ 5TjT/L"5`')=PMp^/sU{?,%UXZ4Tlk@zS9~ F'B b>ՊJ0pX !ZnQ:.dwsJ\Y< zpmr< 1SK>[sņ@&:FGO4o1DA`y xY,9d|9rk f`CNc+ (鰏íB[nDez͢3Nޝfӑ\gI_ BW18/tAzA0V}Q-y%&Vϥ H2?ȔH=װCf#j[YJ`88FsOnT}!eEϭٙŎxA2qPl,o5jtsrs =6󞶽b([̚zkI/X`wzk7|&<؈DE nU?c8(Jۥɲ-L`{aˑЧ.)BAg^{E7B2~aՐ?rhĩLe_{:o%S -`{0'8?tATL|Aߕx7_KQщEjE_$J? FDfm}:`$h{guSJc rEַa+ƨ>N)wڮi`ᒫT4d{;TFk-/YVPm*g%'k.;kwfCRz$_MrR3(L zGXV̪ 3*6W%2|r5gN.8)xV\8Wۇ3_ӾLw~>@%~]5ʑ4fw+@OO3 j&1!5+voNb B-XN%_]mn([Hׄ}"Z}gWDA]0̚wb10hRvػnyRpRs*:%m\ɡ/v=g:_ESB?r,m~ZH> nz3`q.&Ùް5TϣއGF }Cn޾߹Ζ4tW V*PQZ>Sdtg4c" ْP c3˔'Cq`iczB=ݾzg֍` 1sI">WpLr汘APs:'Gʤҝ)Ўէ[pJJ&-'DvŽMxo7!sD˨{ : iLope e|C߹RZĹґw 1BS'4?@sd4s_qvaQZy4z7=N*ib(:+S}D͸MgDL13wngnަLUxՇb g̊֋= ;}>A%۩_xUIu|԰4}i8+LSTln(K73qavݜ^F 7)(2<ÅQQ-Fb!R ¥uzH(D< ӷ48Lо{V/ R/CbAVv>@(r)z` Gg/RvAk Os`7+4cBV1隈=Vʤ<@ ՔN98{縂ۉvp mE{@hfQL/OzaK v(W|5n䬝{Xϼ[dvLQF-6W8eo1}_!i_B^4$Q쐬)ٺЁ61DS3}iO^(հK3\#D+=dWuGWE1hPnnZ6}I!6qr5ۗt"N?ٓ{WEsDOa4δϳ*RNOW<= j;*v6ʓ YŢ'fET (QE],PKuU#0<s "{Î=,{2_(d@IHWs-t&P*8:̀4Sb~k\\Fq=oDD$mPhA5 K[a*iKm˻ nRwZރU7KC !1ӏm>!m6^їhsW6YFR`:Ihc]XZ+D[#\i ADR3J.W{ {Ob R8]`|| yJ'ҙWb\i|`^ uΉcg}[[b w}ľ:QO,<b裢/d](@6* % P!z$j{! ;@ @!L!R;Z0)A6G?1X~;@6D|BK]i\mP9}WAqMA?]LKvPjG들?U?x{#?U{ @ƗtQMe@|ciw3>zaknbjV(T~gzsp(y ;} 8VH|;j o]Eq) n[ͳ XKл̫vꖫsfލ?f|NAPA0WUތc9VkM>K6mP}c~ATt(4ڿWS0X ]='uxڥRt%^0?DjK,^&jXEVin7DTLXbN كXnacQ)B䔮yPڬ[c B4ڒ MVKpC]y]9N{ ;s{ ^١Owcu,Ӭ~ݛ>^$lz6=摮9"aտخQF%?bŵRUg/l jJۓ{Yw/vHVuA>ʦ{3lddK{, #%lAI C71Ѽoe e>p,/N-Q:8z*gK^婽HDrlo=Svʃb0ERtzrN40@ǿwFKс^j=|co)Z@x0L9gET}`=x~[;"_|(>]+3X t [ք^@z#?ooﳺ=V8mkYC uU-čIQ>)tYO> +!g42"tڃ">:TC5mk?Rއ)30YDj".}P[y^07Xhs_qk m}Ifckn6Ԇ*zqҘYAǭ迏Րsq_DAq ͅvF앏Od.\.p7 |7fV Gy}wz>MԳ{)'Lx  =Tmmhߚi\&ߛxU(}Mfj0brOi?'eFgvu6P?84Ej47sd?Җ 8{yS?YեT_e&?b0vkVեUtԳA}- =2Xtr~ lQ]Nͨ=, Ϭg}@aU6 O~|2Ƴ\ ArRf}y`xnH6@O?JgyX8=6ǽJ^h;7&.~F$Q>>̯L"`9e,St#ɞETF'6mҾ`v .t1mڱ$_Yt/tχü5>9W@@tx48?h,M=U!)^=Z,+~[Oc ]:{jڧlz[ڡآ n34gTVb˯كmkvO7'0/|.XCq"ZKYèh՘ aS_28l=Ls}XnTJ\g)%bЫrPڲSO ؃5x'_eRyAޥl{}vBͿt MsxŧnjbjZϚߌ"c)U g7L{v'YQNKA ByZw[$@sšj5sZ\ Mtݞ'_gL0V%9"|Gs ߼CE|ؓM\'#j/ " I5s L"l;s8/$-`6Ba!u{~_jM[ |{*{{#ۻ7."?q"#?榾aӥ&%XB,gղ{,"mI3܁*>d&c,L@;|8mW6, ;3)'p<-0_pK>_¤.iEXsKIڤƠhuIZb1+0ȋI YU5Q@KJ-m$(tʨ<@{0Eȭ:0dɥ%Vр6hyB=Dl]*|$^N8>/95N0=8|+-%PC0yz.7(Za`0.iƏJHQ{=>1iN=d=mUDi']v d '#{ y ).G (Ol`ci'N~)Q^y,]x޶7ҭ(PX5sqs{T5 ի;6C. G>X3Bρ$K{l?X@DO*a.Rj;-b%qV%l\@'砤nY5&GA鏓6.xV2CяӀ ǙϧqgV_" zwz\D`$K/ds>\Y(Ih -K%vۃg'gl%(p *0L{cw/@:'#ԕͩPCe9f@`ڷ^V\2bcۃ(so{!PW|y_f*fMŊ=KhN5ٓ KĪ䎹@gMVD>@O9'-0Դ@YllezUIo Jnc?⸪eᡥl'lejIΜX?6<:Vgr@1?K\?xyj X~Yxvu v9B-vzђ5@j 2@GzFhI\A DDi+$Ew.2'>T;3Ӡ Ɣy1V)dg7x{l"ꔑ. Xr TF==NBC;)>n}'DCQU%^F`"bl]ǣnY뮬@(4O}(7n7*+hMTA #1˄A "z ){&Xu.r÷0&tw"I[;8mcrϕh>t.=2P ꊸ@Gj]d[ E3A`Ě>IeccRY=_ӠSȦFmH@E R,?s%R[*C)%OzP.|Jo$nH>*}Ԕ7ެNͿXGlQ쿮wԠ_.|W`}7u65Vo#!aRj_>X]5.VG y4c0U6eh?ׄpxúml Imww,m`@N Zkf'bot 92ͮS BW[5Zɰ_E{Y-w˝[7qXcH&cooi+ÎZ&AKCHQ3r͙;{[އwl D:tSZruy7€6)Wno⇏R`ox&Ϧ wΝiCb:u80$: |a@ѼgSIFsv?`S1ve%oĐR>b._CB*2x2=ϣ Ȃ6d4|]0JӨ5$(uIV ~RGJyvashr\>o_ZƦ(ؖݹTU[FqSE՘Ez*a5FRHӑj:B0cby" %r_~cG?>w3eZUM"(a\_N,}bt{!Pb1n9G/Oh~qhCQy}M~}K6F4Ap,=Ha؂%>s h5ğy#kN]ʍ͡|4zj$-g^!Zz*AZH(PGlxa(Es c; ٴp3/θ(.ExVJLij[̌ޚ|m b-zl1BAH{,zoƤMEC.z'!aFE2VXbDJ ~/J%Kh%CDNB>?$m}k~Mj7]Wi˶A1VU~ѣ;*=]DvNPdUڮ]Jrj1+~'z<#5@O<%tUd[JJrAW۔gd>luƐC)>zgJB7@+a)hX:IoӦ`-pG"&t|?|`d=V$b>]\A!дX\>2.hbl<[A.g몱nŷ}y,$FE$ȳj1jx]+:?y9q3N2lIn=q |*(Px86. 4*YUWoN ? ?ԃP~!:؝ wLd Nf9n+ ~K5K&rbN[Vꊣ)A|<6.Eֹ(D9ƥ=>ZהrcqYh5Iȸtخ5w|-r&_KkڮQa@pp eƮh(_+ *un}8 3vc#K*=+FzMBQv)`Kf]MM=OmJr~Ԍ!n[bag^?SFYRiQzC4* 8I=ŝ2)F)O6󪌩)g:N!60'kN"auCziA8tA c'elPt6b~r@ 2??%-R- 3#Q .F@QxXK~wKN mt}X"."ك/zK"|.w+i@ݩnnGյ~/{5@Uo([Vω,/4dF,zt}i X2cz^D,;Z%Gg=LXͣ505.=&To'ͷ7"#8{4aw gz2yѩ Q\1m%w{l*sYZl,ȣcz3mJM< cнg49EtQ$T,GH:;Eâ㇆nh]@Vxq=3j1@kU]sle2Tit ewzyPy1|Ԏn7/N2<:piGӚ{iBv?/xnC ')fk{N+eCeLJT@KYV%눞ؤG4Nݤ'<޴%<8]t_bA{oi;@eS ,q6FGq=%č洯 èxX,p= '%)T!noSWZ'T~uj})NG=t4Xi1zQ0+lR3ksX$CUזĎAr e/D{"[G sPƉǕY=^iA^=j_gV?r,j9 W'iH_I5SrQh#`̻=I/27&"Ht]lol #+eV&M$R66^fݮN 6؋alP~dK $D^BtoGt`kpQ EF{XYfd?mewikn<q \ݻ>d6*z ;T9dM6+SyuS2%c{gWZJO#U*z!G?e6W֥G~pzK:ঌ!yGXPk`Ώ*5,}]؀4m+KKlWag%0BMH#9 5>&[}l҉wwTkVҐT#+QkCJtܖ KƘ/>N+ϾYPx}L-:v? hƔ)o7KP\xMt/yl/ FbJfEV7祇}dK D-5U`漉{HO{M^ S0!A286iuS0Np}𷹁RIpɐ^v7Oh}N`A"o]G( RJ SM,b6`{;`Yvj"7'|͘u>ltsZ>,?s ]?^%ߴɨhn-/{!`Z8^Y=_F,;0̻Y`Կ픃HS݉j^E].[bҤYƙ\W( Յqb6yՒ5`r;M ΗʗA3]nO ҽ=`q"M>2'3T ;PJ;wm%I&ޣVK[;HEB:~ʺ*jVwJ aPxg|t&q TTrwL, O{l41 s+sv̀ܞ?24>10@̍QfVXa+D62G nd5ectE8<5QX@l~-Щ3[^D:6_ le'\n S&9hAawR2 H|) GI=y!^Vm*r)9\]A0N(-IJqX–r Mq c E#-0d1sU`x:vp xk˴.~{@%|=y|;)&DB_m`+غM4v\40 uώMgQq~@{{=ZL1 C A `9MhݏЇ ,@t]܌xA6met<̂G$ `xP#L-- ]栽+2|AF9[:` ޤt\\]A {S.7/Md'[L T' OWS],tʏ:YG+(H(l _[] +H^+zkҁ&h2+ėA~}u N8/4͍0v1c itsE?dA DU?Vfm*Co\FDQYϫè6A[_$ם#[UD(*aX֤^w ʁ*.1 '7۵h&W8e_?x3X>Kd]h@Ox.#F@c lby͛NbKw7}4bn= I7Da EZ)\ !tmP V,gv]j[ 's$GBKD0`P1<`jh|/Y oΤm|1@9uF72^cX7 *BTA Tu?V6Jn^!jqr4`Wgs1X8r˼|[CmI4 (ۅfo!+JBX;n9k}ż0sWok!Z@.!- m kaK Zep-4ʱ}@kaЭA= ` Bvm[ox/R#ch;|CZDjM;-/z3qn}2vM7X IktPmS9gfJr/'fli v:\ eAX8v*9.pNȏ"̧z[z}pb0Oϴ>P:霩xd.$t7y~ZD"sݎp65Vq >'O*.VX,,,D=K#oJnzSF(= L It)؋TSFpc;/)(ytdQբ1k֓y:VSKISyb zM7cwݟw5wǯU?u}L+x%>qW+>;^pJn 1%ve͔qv'ZIM[aƽTG C v,.4haݗHiF_0T-z){ <ȝZ NN=MTp&B-oWQueifwJT1쿏3_ k:Zd+K`\̻_V}eǪ in9PnIL +e a˧6td`Zޥ٬)^' e"|@7܂Q&ب]eڽ'tr/<-_ݬ2ohpyjz ':]7ED-~xlkq88Y&^Adh4 Ggnn _,I2?˳I>)D!'T -~*u$TN;ZiAsxy#nR 7@%;|]sAkNɶ쨲*{[I 35RڟRli1{n)k^wy,G:"$ʎzD>&i'@z^jh=>oVBB\ /\?vB5%®̺ݛf\ĥbr? 1RbΆ1 z`/S&+Ѝ3X-`fOea5JxŀT[UBzyZdY0:OkhLJSo}z{{椀^I=E#*"%>:1_V\y՟474tiȢ+{LIߦ٪fݸ.:ښooywxZɇ ~T_% "PvkrhC^/{˂UOa=Gu30'g˗|U%lE vmFܘ6 +UCv;15X[i:>=}`C[wU"kKJCp/ى%M*m);ޅʠJGZt kibLS=alop z#tͣN`odzfL WuڕP+4\>3;%oi\)zFuC_Voˤ#۩b0,2)acɳ5_C%t JS;e[AsV7:-^vjq~C=yߊQM~7ҵ;V=AXEsiSLԛQ=tϼ}ig8 A D6tiiBǿK~_@G8E֮gy~YAtEU)I%[Fva,m-K7h[Ni; t0U<;k=Ad &ym6'NWQ/[st lc( *f5hz{Xx4,sJ|Fm`\M߿ZIeVi;U4`y/RҁܢO{޺azdT?oV8}y멢qU>.?mɖ . m=&{TlBϝ\&K\P?7+ H^ŏۥ_4趣dqrzQ{|4OQ/ϽSrf pӦGMO郡  .ehzQX(z+?mn"k- ؝gWyiDq:,X,u}hB_W܋KQ]X/ ;C4\=m,t(5 ְ(vJt5E,֊Ĕ2ϴ)~PbXw6Nt?mfWm<4˝uUݱYxR*=yˮf`aإ|Hi2K0%K+wRI5V =Q$ᑊF'51m>b/ ȺqHNu_ONex,>}Nۜp-_UDU}T\"'ҏ[aP,H<5(DzoJwIir#q&f+е40u=Z ah2G9Im_V)zLzɰڪ.Tzg(ްftu@GkH_L-`dȰޱeSǐCۂF: KAS1zG .uY#9_fYk^q24\;_{$ 2oZ>S2pey yo<\;f;1X$ Qc]tov>2nڨ'w?0 ɮ~2ܵ9 RW-Y`Ow+wԳ{G.k4unEv;Iҧ\NR=4|8z\ŞMa4Ovk7Tt0+-,I&t`T ׅdEK3O']va]1#ac_?Sr9fKGNco-kMWY9_n\!_㬛ָ5w }%k97W텝a@w ӎ,uG\)/7.Fv>þ ~ As-1Ǒf=HRhê89{T>>ʀ_>Xzk`a >=TČ dMdĖ) ?}qT+Ú*J4Ɯ?NN$2O['w!E%MZOp@0 m7,b9㾖?TɠiZW0HvQ>r?T'Gپu;cEb1/o,{f|e8|֫ c˪[>e~QDxYv:+?uVW-iV?c6de&yry!#;i~*q&vqKg*ֲvVazY6B˛-p堇s }V0df@݃1ďof%{%&kum7jt/.$pՄO> o͊+1:M:SB:ZWo 0YnVg_"ZVeuø%[-nzu |:ߟZbrЍ~:f@8Jt`ն~5oX=%NBbρ_nPvevE*p iȶ"RNܨZ5ݣ&ougM6fɥԏˡf:M&Kco5NU2p٩dZ@ŝv/h˭X'jfU[3:[hHM>O|]|XCd0Tb=iB/l 64'M_ܫvF2֘UDU[<5t=]BntL^vwG*! ZⵙkR6wh>gP0OBWaw7yvOeʱɩ_6<ԤaŻ) =oZ8@OƛuJ;)E5h'eĚY5_}fTi}ugW9 :&_F0=OԐfy LI9Mۨ`RAHRek8yZethel,G:!DNskbXW—uQwsRS˪Ê'}5arejM|! A ⫟Cu~^7>=n gדAӲ=%z؞B)^7FdEO5Y(=%A ğ*%%V{{I}b)N^ZؕS1]T66[Ak~=M9~acY:>ke[5@N6teUҭ?12Tl|ٞ$ys,<]0}/ZH$m֞l}?x!zH׵^H` h?7o߮X ܆0 @z49[hqXE/| 0wn10 KL=.ɦG /à8? x!WFrS6mS6 #'4moMI~>~HX!2/*RkbY7%!i"iIx`Y52lrH;~jM~j A6[ԍ>3 k@o.dYiυ&6M@ Ns9J%_ھ<)[7%JI qqp`>U8 Z?VZf%AIRE+?vT|3ܑ: O {hTxȐ ,lRbdmWtQmůY5 ,?;BQ\Vv֥}i4ܚS[uc濨-2'NZXT& %^X@w^CV hK޻bMuOcMAkFoG~acG$t hok)!3v rgd ar;1SN(i1BE]3[s߇˱ .S?M14SJl7‡q]r+ȰwhL쭝VVofS+1[03~?"ޚ#Eo3ZR$s71O}?0wX߈Ԡ:yWwvy(nc-Rzrz_[ߛeWp;L\>׌sFLN![ߦ NƼ =FkGF79*$dfv䃆8H4#mf\}?t>H^W%!dţ@wn#B/R;Me /_?}:hZitqvFi ӻ>fU>/l أ 6`/ V ̖@'+F3}WK~Jm?{]G)f86ZU LELIjOBڵoPP':?Ak׭0&'u,35ȝ@Ywڒ/[GӤAUa:ܷhNs"Ƞ^!M쏙l0gb†^^]6YzSؐA uS4X`]S.o-kk\1rbc8s+3"VSE #R#:[Ok #94< EF 7<9ճenMZ\ui\-cŌGfOI!OcMe1~ |"OabG]QG+lކ L]G1QLvOW;3& VH[pu`1uMv*JVe,Es[~@T+5(IE~.}.RKh"mhfѢtfWm 8xYN,6'կi].sYp>^WW{dd@ԓ^f~8Rp'sEY]dh˒?~uSgQ{e'I?UdhPS}62գ_v0׬Lڸ}m@nr?uwԥ`wKMcU=¸BF[?B :5Gj.6D sLwޡ x:E M>y&jD*~W07K~R-5*-Lk4Wmo|Y1ENfۓ&yɇz$HN~W;cFOCFu7p{RZ\ aHb\׼h4ꉞ]b;6PKqkpUW챋5:5ٶ rv6F{jAOY4Vwl(Ŭ=Y2F/BNp1E܍}S gв8G"bh ^,3,:÷N.~S[XF ~~aas]S[=ҖgG :hYמ` l u0<*2]g}5sČ俈* g5FJ2@ i}w߉/Nnok+YA~32w?r6O'=&T"ǡ]7Ja.pLi2仄Z(hJʩ8)<_FcyqwQBgRCO`t2| nE7Il Þµ~~/ް=&SÞ8Hw]uk@ҭs\^5l̃Ѿ?u<^YRѐñ?uB+ ~HH5-ŢZ4ѺU)_.Z^78sk^"ԺOcА+#p" 1 (Gy|_+ٴ6FH̗hA& +]z2ھ9פޝrA6yvmPK[/mZ9BFt-Z4~1Q=t|yPHɀs> w_ipZ>! h ZMomv//;@9ņZm^w/ň!YW/:wǮ0 Mթ,Yy<1|x?3)F,g4ZӸNU|D˘xcѹdu#Ql٧ SZn_OKmfEX~Q7*ݽvCdav? T%X6^|YAR#u {33ZŠ-RʙoeeGk[Kףip2?bbn~S~0nޡvnN !FڪH=CN:s<]Q5J#uOKȍds=$qdWrW lm..d@ g u3ߨ]-vST @H:b{]'ad' wGa+Q]%r`8USX&Du"/7Yˠ_'ERxcy Wew?շҧWѠ2mGy<,kD+nޱRP։7+ڨh gOB'yS/ܴPMzL{3o #; ^`1eؗ}%b3kwbX~ΓٞaB%Gx6aȭ 'Pd'̕WS7j5w%\):RdJC2q:aL#A~)ZϘ̾41 i[EX=T R牳\='ݷeerXr=et$8gd=09ibdž0|qjr1fnLN7ܪW;"0uF֢_NU5#DϕA/$uǜ*1SJdMr,圱KɈ좔%bVgS1t6FH5bKktޱ ;g1ė@kIs8]ag#?8/Ŭ>i>jge݋Tች*d ''nzZlz2H}lh=f6FL3 jޮArdL:l*KX1LծrP͘ U2юuF-.Z2dѯzH)&m]%8Nd !;S6DvdJ6`(H0NvX/=hM\w;8NɀE9ZAjP f*\#\dA D5cu(4޸L4(u̜L]#OO \x\ђiʭ6B"lU xlCC.tvXv[x#1 䚝:`MfKb0V{셆$,!\ l]K RS_lH-tfǢQ_i@>IX{Ƣ}]27EW=ݥfdqs9yUG4@(X[4u7ӒhvwV4ܫqڃ_0 Vɹe3 rALYΔej뛤$tseV)%'׊9ζqQq7llA dX]1EHzYb A Kgj"\z^Pv}׵mA컪rYOE>oLvzݓmU Myh"fwU]n,lE`dK Ds"bC7:ٹy5?(ge]Q+׭~XAuڃҋ@r-SfXbfYwx6r0o,rii`|]h FX!eg բ}/PFcfA ~Ky3G)߅UXG-HZ=v;~VXdpA]Cw{l@qFsa}+0w̎EH!X2#a5l]*{0*?.`;ƭ(Gw :aŋ jIdgQSXA`v)۽68ت@)WDR6 *7:9LGԔN(|/_Aek^anT )xB 6"SRHxXʪu¡_ܦu]D/U#>,N*V :DqkH %74RvРj#\<8fec ]a{[7qa~}[;Je{Jv3\NOP= ޛ,+11pM yj/V WXSOYۉ5z|pƊ>뻻~ 7yPtf@RiֶM.Uif @+Cv4;c@njQn,99j5Sz,6b̷U2,|@I=<(j= 1^>`)WHus:Ԏld-cOָN915Qz=v;7cw82 *<ZC:+!i`0fqS4ELHM9L~O|hv\cf\2O|=1j@`ݙ 4>u9:Ibs2{ %sd;0"82Tk:%r|J#v/f R[tFx:+ko؞D-'Q.];^m{`KG[Ocs;v( H X1=L"ix'6= I0qN,:w زYYl_([`Qrh5eNM rZs<EcXp 1 acS9Ldu6\V tWp3bOV/bJh@H\ya v"XG\ĜK?,i=0k0*\b Z(7H\-IЕ[m,&qXƃj_4lID5{2Y[^a^G+CM8 oX [ĔX9`[2 z04}b&?=c#LOzBT,Byp~4!#bMC]uy3;e>1C4$,7{~M6]|uYѴBd8 XAL2]o: Y dєyC_wzk*S,>&  X_KۏZ38U|V:(.]K} ?3pE?I|({a:9ߤ=h|۪۲9AryowDZ&4c`p*U+|] idk$OG';a:&&4~SKe pWɽLAHQe0_0N%-g|wJ~q j) v&+BA0U5SaHuHV2HR\NMCYryUz[+~ EqYdъ{@k0~BOK3x8!&c&_*"E&c &C9NEk/; R$h]fWa:f*dnVM!ZzK-{c0(9Lw8I;tlt>F3F -"E\02 th bШ,KeE9=Z 8kcŞm>ׁdڞZZ=e&Pp>bI+g7Pgw֒ {p53wd:`Qrv^ NKxn뚎yi065)qࡠ-y YNzFAԲv7JQٙdc" Mz}!(7S[u܅-yP9! -gBgvKH5" ԓ  THH\@5[w3r|bO?o 퀮qz5p]S}tX[:91V 'y3bp?+8D׽6@/`_Ij[yCe|r ,>NoLGB$ h^S(q~VҠkT̘ٓ DkPYSܙ4ݛ~itSR =sװCB~d -TZM?q U[ٮg7c? ?ukjv* X.ɹSKb'#:EilM:"uoԑ~jg6&RtӢ!sz?z6R,3mgI GŵXnO2Ns!j[Ŕa6zw 09%c&-ȩ%d:?_2SH C` `eXK8*DV''ޔ*C<?Bv7Nl*̢ +Nl  g `9)}utiF &iZK~t]'p<~P ӪmW=չ+Vb+!6^^YzM>sg^AV$_ ,xy!hP;1Т>KFx3y !Y0"]^>r`k8SYuT!>>(uqCJ]?`0hT#,p7եTWE x^hI>ÝyĴ |tm-ukXAz7ߐÀοty+pG ^म[:+ |B`z@I{iBu<(Jt:܅hmy|rcϟ AF,'>|[c'm=&Ac|omdXV k$_B&}3uHZ=0=`2>b6~VΫd\. ,M(vR7d)26U7XeX5@19Brn=O?A%J=N<_ oth.\O9sΆ? y /|KRοW%uEć}Ȟ8> -0NǎN v퉋:`QSd{}}sH^'z ~FaӍ&vֲ_O2}Tĕ(]=vģ&k)TZ^J?0TJpo0Qҥ~ ';g42˚aB77ZI9SrF]6FL "痞;l5o0*0њH< k kߟfc~W~cH$F^&b٢B\B AHX]m}{Z`DE? ҥ3`W훛V: }'|~.`8k-oѧjƜ'`T*2I_ LT&Xo%G׸u\*a#:gwJ K ӷvP ѷI $95hsKyP 75tA-0hZ_5?}gŵ;!k@buo|f'aoU uQԊm޾|juaFI7XE.a09zQy,ǖ!G@y(Mw;MYp(+ $yq)Ͱ3(N갽>F'9K:{L3誗Jj%Z~m^u*YJ)Xt*rħ%yju;h^ZԂMˁѩfkfy$ʽ#i1 m.'|w;mA[JLCxϣ8H@<eAm/xԲ2P~9"IePJ0!}G5}pw݆Ƕb̀ᵃ{Tvsv |gX; 5 XEEɾ xX"'QXQre!n)v4L5 kIqz:NfWVqp_MGPe|lBM&`sCPAuaUӌsӀf]GzUyrA6 թO#}:Ls{duSO%F~eG?oϪ*Fn=t~6ZZq \6s-V 9dAGif+EAj Mf+jn(S)\un aXht;bwipX ɗU";s2q&WQ^G}\izSqrVSRU).hc* fH3Ϊ6NZQ.w3x~&6 ~#X[""_ ķ<$Okp\ aV*cGp{<~tRdSv븣(^?U zFz伶M,: ڐE *EUU5Ɂ鴜p8*67mb]ni|f'j I97>PQ`g7q|1Dԫ]˦j?t"yskn Ԇajv"e'J~'_Ya/H73Nn8k"v'5sI28K {KMZEBwoe7红G~oa(,(%7ln)Ƨ}jJ~߅p*QbniClI& հ׻|Աfy^0hZ[2U%0a՞ź3TZAXC/œkߟ&)#Vr1՘Lnq؏oޜe yP%\3=g@+2*оKM~շX@B_گ#do e~A n2ޗJHvH{PZgEР/a?e9|u6~\yqA+O/mfZ)DpO.֯!P YIáغ6ie^F^Smb2ToC#J.aؔPM5ʙ2TDȟ80j̍Z?^941G,+`qFc"aPӃ$пv]UZɲuFśz>e1[(~pKd϶1LDHEx[SC[q2C4,uc=5ZӱROX9g [$7a>TE._SSMۿ A̲}2)Cm]VyW=><"jxBEĝSnF23{K4|2q@tV"bͤ; $et>@,ivgf`Q }, *uոM6O&ˁ329_AIu bn:"*054ZcK:P*PP0;70>IT)HlYӚJr#B/ )Q ߊ<[uR|m>}Ѿ0A[T O|ׂ@eqZ~SJ_]83E$ Qn1e N8o4bl]5Wwťa_JO"?^6ܞyݞ+׻rٮ5}Q"vX}q^"z;3?/7J 8a8/gȇ[%~ ys[w9XT3s3IAc%~ܘ>ҥ9LJ_DH=LDlr+toi6yw=/(ƫmiRҢ4h>p(9 onňSp[vxɾ?8}gscQ,4{t|?zpQs3)D,H:}gS9;Qm;PcyD֙COHnAG,JאÂeA&VA·?9[ޮ+n#L3d6%5N'nro+CX f9 r<xAx]i=5DEqX?WR(j>P$It{p=6cZϖ|To6]_ḳWcv@ba.w  6E%Kti4#\$$5xݰ6bTnhWypr ފObun>Ŗثgv4 xSοu9 {8~ȟc{O OV=pɊus=ϒ{eYz5 ~FG\_lw"@q*;:/0 F)72Q^;1?sڥSD[3AH_:tʠ~O Y;kv&\q{qᙘo$g}*[S>* <ʹQi"Oxr;cߣHك'[uns#j[, 鷈 s$囀"LvzFvc)JN%iW%^ D{%[ 7̛Y64x1Upr~eHn ^ynK xt`p0p4/̤2`Z>jr)OW3/.ҽ" xҾꉈE9^*熤6E6_AIjf?[ ml8ٌ-D^ S/K:gic{ti~1m\i*C\%^<];E|ƫݕS!J 5.U :`&W܉ϊ2yEwǩ?]]s,7EI`4&幼Iq/ϰ8e,D`)JWQnI9ˮ4?@dD2B#ܷ]r`@;=I+џsgJP:׉۴m8$L@rzq a yT;IȮzwcb 9kIOL:s@' ֑mAMWjH+3·_3?@Ž!Tx?C`tKsʴouRs|rXiUʤ)@I203Ef@5ê:*G, g(yЯnA4NVMi7D;6lke}!k =\aFKGs oўShlpYj3 <ZT{ ąy0ԮB WQJ!wHn,# 4A*j2k~a 灸y] >DN, Wn'i·J2t'NcI &O%reT[5M,/z(SxEܿ/Cpk>&XIʛ#sVS?;zWBoԙQ6Mb6e.QF485[6qAx*%X֣cK&U<:$Q ݘo+y(/w*p$JbE헂:OiߪPQ[HmOd^fM.?nOt?@2?O>H) ~!&VvrBW*^}R3FbSǯ vi=z)s#0 SiuDؕatL2B=^x&X*toxEH$ q\9؎4/ P`Zf< F}uuV/3>t /WyJj`Ì P Kuqz$y}5_κJ?ltՃ0p`m4 Hum J_w*|59$2׶Ta=mPw0thܟոzyKZ y,6>8]tmUkgxoߡ.sH96J@/-`'1äy[Y~;=_2inſ `u}K> P|:ºm|uP{ JJeʕZx6o h2ډ9F\Z>MgQYhujP<>*]/c*,(hR'PnrxI"#Ʌ?{? vmڍiy 6ז6PCbNqEUʝ1&ԁ7zgPt=Sj%S!B\ !{z_dʋ1ONe]]sgp7u0Iɾ'82.є#pWXT]G0:#@h;~[jl!|:ZZlgg} o$xI;"\CuX}>b_ +gu-:r@d*6rI[!uN[Q{υ6bf䜸Ŕ^=nB\;7/{wa6_*~ 0y@,\͡vm'j:`ߓMuU+*Du/ dqjpq;rh6"N'Y;`ʎ;;~SYG֫~o@m"NT~> YvykY !XslT'1I:2wvވA4WF^=B&Ďa Cm3F-؝kw{ 0۩ CAD5;gt<~Q$+SNJW[e$4)MnLO47v6xÿAt=X} [I=cutҞfW]@x]ދxU8ֿxWo(>Ym=;mז.u k:!4|[4ޑΫMO=n$ q' {>m`Ɖhz03}3| 4,zu@xy֤יR.@Gg͋W)CE{^7B2~m,wXa KX^)buTk!Mai[39,u{qPlY%WO⨥τo)E#eόDY؝ }$?hr],6_Va}Vb zɟٵ~qsYv[]+L ݿ'f-̧ui(z%7()刓;@Ij_x/Jh 4cR9'1M5@7yRhqj{ H]A%B 2,$ Ku ($Z"c2)qÞ/g4 GwiJ/Jp!Mf鎖r {஝JMZ5p~3rUChBNy @uAlޗ%=i?hq"Ϛj:'0%٠I_s{q)\ֺ@oU$8ʪ(YVĈnФ+RJdlDˉA'VQIݭS@fEl,dsJ@s9C883^ň'm'/d ꢊpq_D3pRșAɆb%O1~ ,@3 釙VZ4$Jh3͇Ar f>`3;kn}i[޳K?א:kςlktpMz20B-ܣ+ܠ u땩gU^`+{ =H;IM9(aH %j[D)gͺF[/X W|"{;pI׺ꓻT*lr ܀ K 7rlɦ`q[0||qi% b6gjy/:uLC !M;Z[\5qʦCs̀*UYGݽ*8&*fT{ԛt",E9E`sl99N]Sޙr&nJT_@ymU;FUU֢K~ٍREz@1d*pC $zu{X⦙][ȑܤpՃRzhҁKŋ&d?7_hE[HZsվ4bPC#_sj!izv}i);Oy:iKj_ɦ+@}`qDZlH7EkqYܮu[n(B}KX8NiP=%2? &/fbl-w-]kT؍*W&wnЪ%)PWiHBy|5*0{p 7{ -o(YAi;c.GI꠹^b%RS⬛`J\0 1dCǚcɈ* wߔX߶?Bt(33hHRm-PMSkhlʀPP޻!GgT/1m殏z(beSS;V%x[C JU_ L~*]d̷5[qunb{~j,= xoYi6x$|2vY gʚh99eޅ\ :N&XAy’?$! JqC.XKa@yn9j׻mki"oN.YC̸4gyvoEk6Mi9eon/gX"UqEa'hxxOD݇t(Zפ;Y2v[S`h# a]0}4oݜ(~W﬉{4`N+NYē4<4`5/欑?dk: *]UL D,E]ej|Z,NV|–N~YYqG~.D؍Gș w 0㹴¬W4~ h<Sƃ04V[k=^ PNs}dz]+GFN&F 1߹7(/Mb^.) 7 ј~2 GfĔ%q+=B~kЈ֓sЇ/[ү0U#@| D8nF}}4=`ʠE.7N{usWD`V );߲sLҭ* ڳ *ST@ 5GFEJM1bRYL#@ ;wy2+dPJ"umr@wh=yT*ɻӴ;Ufx?Ȝp LR @UjҦAQ;UG5#RR1ϔ]Dvp|=Ja~4SckQ/3T׃<B9:*P-+[AdAqҎ;6v7P;I{.t> mݷm=ݘ=јL{ݩzjgȆπyrw][MFD l=0d}]p* UaA \v=CrC;<0z/`^h emPBWiRg9JNS]fnD᳃5PUbB qU.znj%@IMIozOqG^DInh)X k>W 9.;tf򥛂.`6 #rc/7$WQ(BREaf0vyN~ $PQ6e ĦS2bn/i*FR>j0t +}vhS*@wCB9mocDPOgYsU%4˄ g4N|uSU.@%"oV'qAWMg+|O0KO{Iyy0xi#ȝI8˶Bũ=j҈L j*Rj J|F%8 fttD _u " ЙTקMy".7kpqB1w⊬]v>qmz`Ϥ*`88ou̙,\[3{vVgRCAhA8fP*a^'-{2R_wPhe.,1N]hFhs,](h$ ۥMfŘ^)S.5lLWQǑoIz9V]()_t%5%c>f,y}4t _:IڋlTCDU/PN.)lY 14H@MY4Fgy7u 7KCXB,|(‚^Ǻ]-7mH ][{Ym@P*[F *Ny|~owypwzt0f5uI汿0H";nl&w=J.noȪz!TWM<2yReݱs渆HV[S3Cv1[ުܽU268zϝ#~ksf8/+@kM;!E;g\T|NgSS?S y@;">{9r^*~![^/t!v\pj@1i'z6p?<On;?X\k<↣) !Pے@ *B%R"b^5Ƚw@)SOĭDj1tB&pǨ?!B C76=i;S@^b5РɽPekMH\XHX#TR? 27N^\>ԴA՝sz#/րM.I_CkY,$2hJG u }zٷK;6vX=~ƇtM^[PSrϯ=eBAGpؚD` ,M=BO'H729h'IQt/X=&,~Kdx7^*VEީ~<Y.dGwfǸmƚUCYA0à17 qBQh ᆆ?\ncFd˚օ :`(P!c82L&@L2 . `3}Ig#'ys <;E?#z蒣Woel ms!ezb/ {_aikG`75z/R $DtN^6KOUToSw"aǶ/|n^twG=}&us͋?l |C xxM?? T=o C c(w56:K$@ƸDK9}Tw^n$%>S_ ;ҋY*ڨ3.6e踃o . &Sh@B= on:"HjUGhH#BX4&yGVt|ܿh(Sq/3ohZLS1ް2}Iչ 87lЗD.?ZG^w?ǜ9yCn_+9޿׽!C->Jv8T˽\ v|{ F,;*J $-ۋ߰yc!O[ɸ?b3^!NHIk_4KWUn8&hhzhju= mP w2E;8u1{0f`xm3mlY}Y4خ9^t  `Kֳ خˊմ0W$tR:{L-bStُdbd"q-}}hxO9z F); [}8wŕ>e5T 4Di2s}u"ҫm1g EBW[B(v]FB = Ӿ\5#q֝wIM3I{^(4Oka[s{a J"3t"`?|z@6l"Qj5:܋"9 ӪQp\RQ(c鉪UfxF2gs)k6Л,0wR)*&6  z;^bI+,;ޡjpyjʥVnk}:5An{IVfo4iWH/;prYX[H-.ίz`QUWauć?l?ŃQX.]eaO7a/YCG1gYvfh.[gE|Kk\q˂&b-ۛo6#_֍p/soD!SR^eYJ? [nU^#$)&MWAu\FSu{^ȤXU,zAޞo$jTMChyGJiЈGgޡ*]a62-*>L=.z~q(&:JOAEX:#4zmN-Jfq>Bn T:lOˋ1)Fn(ɛN=o X?auG˧ߙX[ҝ]1Q zPL h3vmc5[p;N ;zr;VnZǞ>q6bO)e_z Hz&v/sV?S?@O#$mqq;E5?Q'85qlC3"k D tƙ7Qe:3k]CP?/\ldBm;B0Ki`}q-I+r=w<q5>%N oc3} st3bt" `嵯Z"ToC'ix*oƫuwDhi {jX] a!8aտH2,<&_-["-Y*)}7i5);{?;Y l2~wl({XSV h~.> Px!PDtW}צ"z.DJQܥYOPhqX/Ԁ?$/@"b.U P!nJ]oUî8[C `PvߎUX딗뛽{ޑOGj2إ'OMĉ[tvA8CZ9KםK1~_L]ށi*Ddjl}*L@8dVeLZoTB^Bϋ|O) 4%V\d8O/GqGh@}ZɝD8 $VwܾB|}CG@`4"@lQ[ U`/PFWu)C巏ͯ}d <{B!L|u~$f(Wqfq(KlƩw!uF&oAE {LiA jIVIk՗ ~7b Ġ Է,;aKdG t(}Ii.z.^Ȟ]v{PU} IZ.et{4X %inF: 7~;Փ+B5 [$WaGCiZ hXո;_"=|6"QO}RpAAS@Kȏ4Nmv%`@[TcO ?;`Y>X{BE24K^AЅH֭ۋ.\%QJۏJ폴 SC! ksbe|J#vo>ɪB= 鑶 s5<"mp߂x| Ud*TDc ?CMq΃ 3{X<~fW؟mI(GRȇC3)` BqO :ʄ~v]*%RP[";B: ۚx,}DP7ͼL3@Tʐk܅t@b@[4Kd)BHm7+\[`6+#I,b4ûF|f||=oi'ehd?Zxj ֻ)|řwex!O#ymYzC3oЇK%H잧,jDm5Y1jc-`F\#HQAǭ&wav581Ey$5sS"' [UſW|a/' Cdɓy. < ͪ7;z"F{Lm0:F}˜ejk /,(IG''5Eͣ3vzoX{ʜS>w:AJѓB>llKհ ؖto08rH,cq.!gBb0%#`yLOCz/)jZG{xkf;,h06EQ.&{C%m}v_ d埳/o'+2Lą싵>Xx )UYr˵뎒ĝo[' }^ YBf|E p Ujf(T{FzD }+Y>N$twfB3=yݪ&q~x$2qi{g_bSȈrfFM4؆@E R{i Y[I z=Ň+eUr6 kDM P{@k@$|f= 6HSKa0cY4 0$k |ȳ!RZ: ӊ< QI,[SC  졸{}nb=&l?,ץ ؞xB2ێ, R0dORR{r69ژK%w&֪P?{$"LwnE+AV#7cKG)k [idOKglY[ӠN,\Dʻ 5>gNJd)ZS,l}^%?UR*pOX*!4oA$8Vd-oTBIU$OfK Ҳ{Su]ibɠS)ц?TIw@쨣xIO-LbnTwItT0$N"EL?Ψ;j}^gDꀎG}3'p1:t>VRsYN()$b"-ߓym MŻUt I ףSXE ܊0눫J;8oN}ϬcӁq1G8Դ_rx\2VTڞt`mPZn-o$Xv7e8{e@78!;M[^D[p]QH[/bPtYnzǕ_`PiJ ̾( ?tiBKIP=]fwW"i"޷φwE/ $esK 6Qe FWI"ru/4 zVBPU%`rA'k}N RyXbQq+(d,.X]Akt uAvUD5( ;EIop Źk9uO{X2PK<"[rk5bqS\=` B%R,~B$crxi sFAj 5Uxղ׆H>.Pm]/G~;Yk")'!sfT.GtyLFd ]a۽]Peof; }'G9,ۇ>]cf.X*ɭ_Od \(q. \{{Z.#AA.p= wAsA]?|Q7v0l20w$*.}K[J[ۅ3m~ ׹-6#w vݞЋ7h|VVf~A4zڋc/J{ V1p߻%]"J w)Dz3 Aq(֦S5 ,jgZݲæ%cƅ:z,_򆠢ҟ"b;J̇yc@U7;R/vcN  [ ݦ>9#Zz߹ h("`*ך5fOrm|I SʏտnPY -3>c+׆)+ZV5^mxtt@8N W􇢀԰ewR p_&C6lm L`_g3KD2@22q XHπH濖^ZtzmC9J9/m*fv9,b i: .܇w`_`iQ^+ 0/bn7ta|M=kv$#( }X %]{vS(J߯=J]5_72LO3YvuL*>%?Md5Ieb@J!)9O5nPA,V|=sfϥD̍0vcN_,|Sy:KÊc6$ZIyssW@aI_?tM,w%B^_Y;@\";.~L,r3-.(p= }/pyO [Q\6=4ZRuyE~#$lLSbC;c7XɗVk4ڠomY͓gw_NbF#\߰:eϠ޳?|%AGk$d_E *C*~'` mKFʻ}XՕ_C1@NT\#o7OA$,7z*FK1:K0Ww , 6#{>\?= kPm"p9WvÛյ}b#Ҡ0ǩVH?"^ s 4?w!~lF~oգ0 BɼblGpׁ!K/%[mUwUol+ (@Y? #G/N*9o04-yp=VIon 'U-EݻXv`7b[OVE7މk|泹TwB,:?*2 ӻ i";-XIRF5SU=Y\>qBn؃B;Jg*kSr3F]Oyݻ܃ @/<[MHβQM E勖򩘞E"WjtaՙYih&YmͽCJkIzZn߻0;>(,l)'6Ǫ8>xeR\)鍑) Q|VTrfG)>c[N#s^ҏIJh1P?hDTj2}Ry[_v$# =q5i0Sjht@˜%}o>w a0LI z7-5c B=K©Vu;2@ {^#ks A@zS|@MZr\ 5wϟASP12$Dsi]a5o1 {`H2L4}HG4 dg7G~vgNnm r]doǧ;Lۻ} pDEc+ )(hIw5?2YƉOF˕@RTU֋kY^$%OU7hoyn8wj(m|Pk ^KsR6e@FD^6ޭ ~k ؜3,؎{Crt>¬ݢD 24v=N,r=Nb޳9-˹ dR҂i.u"'k Đ}X@_D,D>c'27s4X:MV}M39|A(yIkaAm @ K7" Ġ'D>zx$WhO\3IB,CkOdyt ÓɢpnW2u94\8dg0Weeȭ|yC֠P*N}naД>B#>$RA7 !mwBrb 4lX䤲Pakcņphz} 6%ambOϼ]5.FJ924H> a$'Cz6:T:|`o:5pXIW:.( Y`I'K#p9e!%1Pae  ɦvewӲ0]2u `FqfvPCY|XFh(X\rt~|2 SҮWHnz2UQ;lCDtzܧ!*wga[Z;-rf\rӋ 4p|hmP2vt2 2Nf P6ړQnfվ*w+rm-KOd?KR&+=` ـs_Z|b(t4J^%k+߈5X:|=3o6NbB+-q)rXPquS/kYO) aR >pTylƤ5_$!A/'C\ݩг3뮹|TI4ؐP쿉BL-@o" x]R.-:(J|iBdAMoE \JƩXBBWQY?qӥGa8Z$oOvaj5t99L=^N:Pxb639y,a˪]ti.1 A2$ch=a@EO~@ד E@wZZ:C ٷD;7zNiܛgfQW-W'S[hG>0dGO:9mhk5XN!>h )d8a).WD/Ǽ>?Uzy<Dg(TYi%P&mb={wt3ݩeNE ,:Ҳbl?~iw  P4jQQa0;GpWlwm]cPǹE/Jhf+ hX`do,&УiEft} ;ck_gZ;Td{k FZL8vpCe\o!*гսh Հ` $g_J:.s__O+V)E~LTMBk.􅵽ktJqЉ2~QyNE=a뭵 ;߈]_BN=o@,\FgY:bfF׮)n(+'5}SI**8=zs%(@?o 8-1T8Mm >R~ZߌI:6_D8lȣxhHnjzR0cӧ4kz{8)Cܶ-k[O=ԠX=ZlF$>~^rԦ$0xOp-XՃ%+\i?D}QJ| tR]r36f|QjfeXՊ8ʠYݠ8RCXY5*_ES=gw}Ք5 FywIM^G) 'x 1v5?w]T/(1XּXQ{0k }YE?xB(u OJ7+e_,!/3q#h[}# Ms>̊0CրY5MWtIz?0Dt8 xi\EHpbL/eԤga,?<\wv1_0UgЮ8P8d~m;ޥ\0m(B!W+g7BE&Yۋ:'C_-((h xtm VA=N+Ö}k~6 rR}ߏ SniqMӇD8솰 bљo=QT ~7lt=C~3uZz%ph-c^|\n%'d{au-}+~6r[`$@g&-k!}6l޵g"B_;#zrϓj>{A{߫?P!2:UM#=;2$@"0ޱg棝f%_~}%BGWy\awaXڴr j%CȺbìCRZꃤ?5uXS8~CF>BY9tU qGɸO+{$ݏrp*>t|y#pgx{0fąQ8?X BԹ\!]'nR XiD=[⼧5j$zoxC2`HSk~R>АxAm\\}j4Rbhf0ALj"F%>/]|Gp|gZEqybl=bBб"LKv`>{7%3 !Z.psu7U/ Q2zKk|%'95AL[35Y wSFvv{@Q+󠞳@2j?7lV:TS^ELĽօeb;+tmE7N:CdVVɞd81y{yor}gm/e`ۗ/g$MHMW,ա ȣ} 5̫tyÀ޶nn(Eˎ \V"sERt6n7zQ3Zvxe20Ǐ-s P ;(8M|,j򟐇>U > O.hA5s$!WV=I٘< klmӾNOվX2y骿]YQC|wLDET籇ͧY*ؙ]6nwiw M\#fAo+ri$C-d x`Vv?Ʀ  ):eekO kG5{s$-r=(OFmbMIBH#c>wvlԠIj3N{d7pZ;2,ǵمeaʣU@,MNA{$U2vZ?؆ǽn˧HV6h=;QCyDs%kT)ՁmqV@<]΢-cP3B7T)3$fxV>wO5T̥._.>MLe#@)k81m;|M%λ=a,HɧCG\00kc-׌5[s.-׌s'4)=iκ%B}yOVCZPc %ڢ')Ƴ/vC֠x}}؆lN\t_!`55x0f8fЊsrM]&Ǐv `}:wH/./KylWLp>;^s/`[|116+/P͂5ν[ 堆@ YPo[Os˸5-ê=N.cc fmbSsdrݐ5(o;n=*A Pڻ}Xyi "?zp BUԵ7U\Q!KHzJ꒽Wϴlb?|M]RShpɪ`QǠu}>&@Zոk"Rѥ t(߾w]ܐAZ+NZ/ӊH}&d:oş ForP!`U&J+J/v]\d,iXAuCrtfK+]TclM/ZC](*}hP=B.AOxlƨtŽQc4FJPY*kc:9;X\t}0_:}y{oqbPvASEȤ|jV_٬2@k"# rHl%U !;TL~%\Y'-5@s*#2@nxa(>q ,'~,w؄<]|(QީVfb;"vBwv4@s`GxF3fQ"Tft`wi~,8Aj)> vV#wЍ`PeG("ke}!oXo2=η^nA}A%s_4K5tY(_l}:î;Va7Dħvm*_@\?q\KQp kچ]p/=M^A`yggwXdl@rl\vqKJA_OPdJHwH]k0X{VS b `k`82~5B9!G` e4x@V'oH? QY:?7/N_ wfC0hro kYww2z:;x;W} Rʼn4-  Ҍ`K>{G$P&a̤[='쁵NSZ}2E؁4LJ^˯-J̲Eܣ KPHV3?|O}=ra.%_ ֠M%g:-|Ya `i"BPC9ꝎZw<1!a"q#0,0T?^$3䩇yw#}/8Vk}{3sгZ!Na-W=8Mjb Rx$#8;k*Mo5Ρ+V$an9\[z׽Õ\8s TF,/d61S|6(Q&ޅEj2xC;L; 5> !G\Wu4(1#fn/vmZe{XkT]P6ܨ5g!~2#@_: 5,6葴?I$Oyyk:j/ h;ފnkb7 VR=w.M&XmF'Z QUǙp] dMkR_M6ſ d݆1!2x{ۚV`ojZ!ߟ0Z,S̻n"n[xD\D7ŹqͻWvέuT@=vZw4kՄ9Bws(2_9P08STLz@hco٫\zb R$Gu;!>  g_te |j/FH<'Ƿm;d'8 HW}*!|^eudsRlH4ߟc]*d$$i)˷^uˎb L ){~lON(}~ ]ǟ#:w mR+/a⬇ACoD>5?y-+ X0dRQxY|VbKb I|i?y:0( Xg-cg,^Bg<ԏ^tz{ЧZf'[ Ghk~ABya]% o)L#~%E>>̒އ(y+ht7A8|AWPu~YB:~܀d7>ЍXDԧvaZKiW<5شE Aղk#v[;AqwrhCw0ϔjo_q}<^!X>dqr~/&bBn8x9t?!s]DGUGdh>x1>X$&s׀fo0quh9^dyl<3լ\Nnyq99l<`DJgԸ"v[-$)` R$-dh\sOvqbfrǗنE))uRi<)S(-A*| Vv9`LbRq{Ym)J,JjT}hDR] PffyhEvPmޗerU}nHYR;?/vCs=uO!"en_ïi*.J9LV7AUSsP5pLq`q4ƹR1fi?Q UV!ٯ>Lz,&5Rr/-]ogi2d-,.T|:I︾Xd{̼y,Ĵz@2bOw߸n%JP c%&),2{Mm`8FKy :AG]|>星A OT !ǝՒ\e{ )Bx-ES8G@^@ D;j/ ]c⡆`PD[I~=ZBh֌+ LЭ*`VN9Z)3nXA-ue[w< vwPDz@=m6͒s4 o/f j>шNk:A*iċdZ¿CAB`};望,.lQ|9CM+;^AJG?7yoifm0SgM µ(z?Ie9 rkP$o__A1順`@Q'dvu6B N*酒(>Bdbڪ].iuE%㓘D3!֠ݐҼ3B8p?hnD)_.XihzTeRwxU5qJZ[m鲝|:'nA=/!!I FhV ߄iU]p:Ktևhj)b%@XP_GܮbY ŒMrmڵx1C:nGGw04ePpB?iuK=I\X\5q.:1N` Vxz\s!์C w;Bef"|Fۦ.y#XFz_3ͯFqj kڝY;ZŒ%6ic?5id\l}*~}AtY;@2p '³h ͒ Xf]%ϯ= # ؎`vʁѴg"خ|=Bѡx3`fs\9[~3N5~n|ZN1ꬫAl\|~¿Or'۪.͖Zv.o gUI.7/g݅zLS\$( E6 qg1mmQ>B {1!W$t>-@ :*NדOX"TXȻZCӟ]`w,6 XQV[;گ@ ClJ{\Nl+4qݏx`ʃV{MWg="ʠAM5=jVJiجԨsnvAO嶕fY}sB'`,¦Z9jva}s*ZњlW"PxA@TC!u6Y/Y*|%5a//nYnH׳]`95}:ԏh A W `J9gDl<(hS3b-IXէ`SNliıjH{T)/ k僚hHdYJ 4mZg#SM@,V@!<'c_ gt䯃.1FTV t^v>@"]&U#tmm_|ېVIzv-Wm04E6'U(\AsӆbXk\rrzz;P4Y=5u!`vլ ^sX%G|(i?QI1H_SGuȑnc X0MoHב-}]6(e]I'c^Нg3kJJrtD>TӴJsnR~z`DUb.m.kk^kň՞GG<kS4aXYkQKb}]QV} X90c[nv `|:b7" 2D£'n[BUAUycYfV"Tgv>xXCos= TsY'e f<9wذR5hmw&*b6FUC2>Eї 1K˒Qӎk"n j*euj)nGHKjW#iWҎ`%bAKm {T9`jPWٴPVڨeE|(!= +BDH"㕩 4%#^ e4/? #0+z0TiC;`-{_t璣*` hq鷍QE&=0xDyG71)'=CY>5,mbfT[L2GU޷ ]h^67Fg UXP%K^ FT`.Wλ!P&ʼ휗qYi6K_/]ήGK0P+΅{48~Bdi=Bw־BtA GPGmrNQ@5{ꤻs=QAn/b=3LZB_u#rm]d pConR ֨3f85?)#wPr,B {{4JBG50Բ'%woR HD0@R/Le۪5k0k$NO3ѭElEyK{k_"aEj}y#yJ8g_2ȗ Ь kd63/t#U *qVֺOvb,h>88oӴyg 26CV4f{طod9M1T>zPρ.>k'3"6Jći %}kMI.$@w%B7a|4]9kڢAJ(Ƈn)`PkחHhOm]=^J/T7 ^V]jQU5%oߨ5P#N;n-&˻)[216j$u&yC9x.v]Z=W uk̂ݖm.?FGRq- ;CwDL{}5@{Y_תk Sw,M¢m|LA1 Y'u}g5Dұ]T^S1z(4(yh#.#Q{ 'ykH$I` 'Jp>Z9< YuS!ނgm0h0T<8y4}'U?`a su6";2y]I2aQ᠃Hx$Cf%FƄ!_5 CN>}vnj0aSMqI Bi zx<?T,u^F5;T9uC 5r`=[f璑G$"?ӹ1Yx &Ƌ y\A TcS?Vf) jT +xs1DRas f̟I( T -,䖆E3+ɨOqTANBCnwm'E|zU6744 >FK^f-*BtrV#T[͠c|*  U+t :E8m-5x̍LP = bO472EGЃ2dK DԦPz7PݹM 88#/YA|񌟵 3s=\=aK[bVL>sG%bҨk'.-p*NUK1V< [CCc,gSMSppsTA d`7I.JKa&%-0ϻ-o24.p~wcbv#Lg??+?T4&kS}/ՉV g]g)]؅>c`YD(*9JY3oXrn'N6;]ʬe_\өBPǵdfey!{xЦ>5@jgEɰdA -?&%HB PŽ^qm`y*N~^V0I#kM6cĉ5Dw)0riM'00%@Ն[>ԬT&QQ$iZ.#zw[ahODe &1LS}:dۮ* D[Fg.m`iD Ʒze˜2b&z=i拞_h`bЌ~vv][F]od3n{CI7,P%Ho0g;8}E'+L 7ف\ ]iG^"$(ˇe1} vu3;ǠbXS:(i܀zuJĒlxs]'! ٣E?> %@1y-U|c%)養5NB/BաTd%/s8'֨Ύzxp׿uفu@LƁ-c3ʕIXK?j3vk{/Mʾ G=@ZNhIxhҰ3qyQ " %ڧqdy∥Al"=NP0Ԟ,&A|OJQfh'Qu:lg'hԚS<S&h97TX`7j@?<53> -)ej^eC^"aJT,@NJps}%Ci I٩H21 &g'?yAժ/c)ywx)A_PL Ztw4ןF5hl&*(AZ.)Rk=Cŏ7%<:E?i]_?U+܉;#nZB@wa2!sCXFRk=[Ӽ#?eLiYS+O|ۜQ¸򴳱ʇ?I.e"x@ˬЀhy2U1nb\#1 o6U$lS #O~Uuj<\Z*տUKDg1 v}),`* 6u'klje=Q4.-vDq\]al-oD:'jJhM|YƘ"\et.'j֥db)/8?/2$-بp[5FxѤvk9eC$#2l׫jAǣb3/ND1%JU &;7žu>QKݿ'fG?MN9o6F*b{vQm}B0RKEߖYs }WyZD-塏fMXBqSTÌLU`Ov|tjfgfJmwA04ԛ®GuoDM(4Έ/' p@X-Q*b=ܞu`CJp=SQu3)m3Fuҹh7 N/ ;qQwW;wyl`LA(} *2Ӱ%kr҈R,U焝?즫fy w#A`(ChaK~qKq  y_?7Dn212s⶝ kXGkȗXB13A!FVM.e'O)cI-/TL蟘N"Qj!0UF,Î56>F.厕^О/cܢw%$-H~R?E;+6;B4<ےuYt4-yeG=&^9 #UfteJPƔ.|zn7s )E^?W.ߎ1NO{~Vx!juRfl偏LЦki +t!Cj'fMqM+$إD -ߚ5Ė"xoFgp_Tr9\eGvT~#S>I]Y Név>DLr!(b8ѴcydBǗ_n?45B 0lY]ݕ!hC\cSDT6dV5ֱu^ɣ"P;>Tl/{\1t9fu JWHYgDY`na?Ȁq_-tkYPjvmXEUtC2d '|hԓp۾B4*z'h<1Mig#A퓅aw4qQIZ o>Q]˂ }ݑ129~.54.UEW#\s#;|YQA<.Mq+يYBtSuckQwlYFזhA ޅrVְ]T%nfK_h vTKzz٬P]ki?M'yn-`1Gm^-|-ͳ-^ I*f_m CJ} e/djlY<6|f^ޒQ $K35?#qfK,3xUOF>7D0T*&IJΝNj_١nhmd5ni͕Dže_f rc\ FIpK:4^z؝ =QsFd~pʳE=Jm+D{^0t|\񚰘V&ֹQѵU h)6lP? yļw:gɥkj %n(<V8jhL0]JA5"!P͔8sߓT B 2>}zWIk¡r@`mg%hn:ح-!GwĚއqYRL*?MNej$~2D+##˶3/9>WmXU%}e~K9BڿQ4&xWS!õiV/\|D}hhtZNW|xy֟ Ѩ53a2Y[ suGY=^ !e k1 =RyeRoYN1u U$pV}Y Y#B\q(etPbVI;=]q>mY|y}.'5FzK~Ϲ܈x`O~R/n MtwSz|P4*q> Ĝ*F#ɜǢڈ1p+o"*8Ҩ[/XJ[U[!eC9YtX@sG 1Yk#:~{A3_+l?7[1wɎ;(QVW!9LyϽ6AT^Oűkryv'yN͹;{'-ġ򕓸t͒用d>X!7Up#oXYsAfby;c2P¡;6T9$P=_!xKQ,VM 5or*& j5+o hōUdC/ ]mZ GaP`&N/?/[/ CEퟷcS…6#>dvk*#j{^tç2&uB9?]{&fP(c8ޡA7oQe"p$MD$/I9Qo& ĴˌeYOZ}BSU|,ف19ǫ>ߖU1!@k춟C{m~H44rN*Rq_u,i~Y/ $t}|i X9'of4=ix֐zwNܰ+s@sSBhDvy_(L4kjH;^OpCȔ +P7,JӳX yRѰhFֻ!7N;nڦI57l5n'ybǶT+ego'u?i05h/v'>F#Je;!A:ؐAyJyjJI%#)Fz7yPL}m[@BpKܟ7EWAV">@;vQc"F['"8p/7 tk!f14Z Y:vk}Y`g *_Ç7_tRUX]߾ T5f ۇtuȷ)kV fEmTJ1ȁU=3PgX rf4{G "%=I@Ic[5@(:&<xg ]OB=VmA![gso@h"]?(bkH#4t%pDžDbN$6Gs@QTȡ hWSMi_qy5VykT~xa 1r$N+~'vF1#NsYQ' ~SZE1zAҝS•|Ϻ%`Kw;/O`ZNJ k|h tcTœ&[w{ /%HB9NWdD 9՟cHEI=2gxݥ4- hٶ|{6$vŋiMV[_^XE$*9#u7ʠҦ*ڍ֡/~v3SQ ˜EATؒS8DHkkON)5ݽYr'b]l7(cdm 9teӡFT%>y[rO4pReΎ~"8v0$oL3Yν*94LbOޘkykB=m 9 'I_wN1hd:eDGLRZN)z̴3rhCs ݲ (ڦvl]:5khj㢐Ter d݌\D(ٿadok햗p:qۗ64G;{4!&iJhXuƜ|u,#LdŚd]_٪cyYLdO*5  X{S#H+qh }ۼ{H@/l u;t5U~PUʻw9/h:漥P v;.D{I ٽ)L:ӣSaM[GPZ6=dܥM;P '7,Y5+-6TZ/X!k>VM x{*g;p[|dBVE,N)*Tubitɖtv,Uń Y >Ӳk=ZUgFrEMԋK@+K4ڭ-wSC op"'bB5AXr*R8IVg>-xYGW<"k;lf9E{>ByWS8 *1ӿ=Uʷ>^+V[1ʣF~YY}L$Um_y1Yx'nyWa:&沏.n0°/]:E.Ӭ9zʺnFc5?)Ec;XN-h]y la}dqV~pX ؄'ǫ>e|6XD`d'vgltD/ x!=?6q&tlk^.U ߒe-Rd!nT_GET*֝;|;RPN!tDt`Z qr?Hԛ2!LY!RbDIC:=;t,x4PGD-uQK Τ =ohߣã0BGx>Q6q++Gl}U)u| +*7&.jO9gG՗o*/8EX3Y>.B﩮g!{k£ :0u}B*Xk԰9ԱY]@ds6hVh $ "z,D3.8*n=m^ڣk]OUPl]!F7صWDN$F5t=55N6RH5ϦN)£(|a8QM՜ɪ*dv}{)~MјfX2 ](G2f\j̨:n~!C;!.SoN 5DqZA^vhɡQ;y`-_ղ0x{oYY 7vͳq_8)LCA*okUaW}h(}YCVc-:#4Lsr6F[>MpMM<=Yp,X%Ds({m Ot׎-6" z]h' UAߠG/ZFc٧rS-W熍쟪&y{2Yg/{5ܸ@"Ϭ[_dP{O^?^d(~"KB0(rؽ)ܿߩp5[Ly# l1 ϻA5B)d1=J(<4Ɔ"g< VݣlS읾;at*=!62|fy&Cdz=Nz6[bCɈ+:ןgpFm:!璫D W)mV *FRGo='J7/fxGJ&#Q1a}-Go g:[,S.۵h#^Twr[3#~c,-x5FQB6v;njN\vdr+hlVd{Y-! ,,=I>#/lV=vj?aPɛjDQM}a4v 7aY!Uy] isyez-^&ε@Hr|{ 5 ;x/[;SUk3QWT.|lL 7i[W*)ݿ"Ugd@/H})x'-$x7m?+o;6Kѹpn4M{;U1 (2xW0l=nt@> 8HmnUMϕȕF Fz?Vz91sI3Lj.߀lҒ3^]9X{>Mn6f5`CȰ -ݡwΪI˟G>$o͢ {Rfhzޏ`]sz;P%"8\jf)gJx9*bٌbXHm?Uc4G{9Fri6%K9 RuSq,g؛>&@0FӆLf-ھ/m\!yV׈9́SiF~ /ֳtl_1d^g~1@፬˺ "Q~`CS$Y wȏAH|ruF ;(qڳcTVA6Ŏa/ ezؐ*Omkj=qY󕄃O;Y#{T6]o)DV3I/p=CZd mk^7)<βf}DrF*9%iϹcچ~N'ko67_WiʘUa.\,/3n-sm.zR,8FWj2x(E@:K :_=ؤ>}aXC{\Y>AB{E3q4M~,zt=y vlw?qǗqsp'Sby r<Ж --\[[m{`<\mJ~k8j;{ ډ:OJ2`L(Yu y;ꝭ6+ty^2S aV%:Uʼ;T8/5U4KߎjXVz9-k}fkZZ:U=(͊s UR+f@%qV_S|Z]~-xz$#]Ȭxgo>r"YBBJߢbШ贫kD=aKcp?]J(g,G$rdV'qfOQ1oD )?zyꞔ_WfLHpR~Y1^ptŮfRXp{Ԑ5%.;rEid%Ơyĵc>]!ҋTcU?oL%ܵƏ*}0Ejy?l4o ; hIH}rBj,4,uN}] 6ĶL3w.+B3D|#՚H /ՠP;>q}g"4N0nAP }S1ƨCIgUw*My?m ƋNi>FOQQn]c!! U%Wp>37B^:v{?2μ0X׾D{Ph[&R=5$6)V=[T|:rB979s.S:oFt|`ݗ1 gֶ9Bht›c̄5υW$g(|-{8^xJKE<>i֨i1/2+#񋋪C7\$u{v\x]ܑydyԳxδ1UwDZى>"Iam!>*UbN^TaG*q\4I~ $!s~;8ɍgthv)Azv[d6(<+KjjGe.f#1 MJEdH~6탮Gޡ oYsc*ʫݻ3diya$Tm).'bƬz]=m~g8j4%, tr~ach UUe{nV;k1nzy[k<<2,1%sc'3Ӡg ѵY/y%RDȟ{J}tΛzT)Gz۷?)B$ !n5=xTl4c-<08)a ǍvGwZMԣ;E0虍5,I1:_ܨ@[8$+єC5~Rw lSvԠq"xmLftgc'Ѱ,3Ic6L/:u ivsœ㓦ݯcVcR92`tC*b¤\X8ʾm^R`w1~;<9v~\|/ut(-8?gB՘&@X ,5 !$&<;*aꆙjuVcR|`ch߸v7բFZYi+[~ @`Q#ۅ*)u6v,=}K&sݛZ؄TKZ2KDYd`"ksۑUPU!I|ѮL&`2Ctc~ޔ q֗[؁<꽑$?婄uN׺Gx[iʉ3IWLHހ#g0-щZktpK~ojm8Bֽ}>1xvH)%gpL5"I{$v M`84f=7NrJ Q 5}b؝ͶDŨ<_a!kbs>Upj~؅ _-;uYus8yt #3eA&\l|Ч8&4D&O>ogYJec%:v44`w~ꜙVdFš/A[/FѨpIcpkLw+d`쵓k^nqBc]31ho<,DwJ?/+jkfK :y?V*Oy?E+kD}r·iW֊fySFX#ne?n>'oC{%ot}O?vEZ3卹%ޞqV#!9 >ulR~;OGqЖsT7|),AMS [ȤswEZQ?ov@yLt&iK|!5m"ÖbMDyw]Nȿx!^ Xz~q GX E}`cV5o? 0pt>.q{<#JS}+J2y<%viT^c>j릃7CuӐ|_@ZkӕH1W F5rzU ktvjR  (9#C燭htUFi~&OY p=s&=+NٸFO{o Ȉ$oƔ& 3 c/7E7n*%־ZđL{LwFy85bg-~[m  5})`Ӊ [D^Wʦc>T*`*h,(QzOVÇi1HkMBUq !y3jyCk:sy eQxk*)(亮8}Xk^ymBQa lB,1Ȭ#&|?CHkzhF޹w֥[ojqRbJXwtՠ;o-B %nm kn*YcxR4 }38#.0""hHOA5O Ex#kPTT@ )S2uWSEF.s{ʑ$%P[ O)c{ ցVOX!4k=rKv؉SꭄٮJt?AMC_eL AF4Mͅ5ϖg2:v/s[Cg 1;Nb+r7ta)۰F7›X{1CC|y>;m6o&J=ۈ,o at0p7mRd.j|XUyzN/k*l} |g* 8BegwI(ؾ}6f5p NwyݮhPʳbt0$ q!Tp+=Kjz-[x߿OMg()+VdgVj Kzu}>2ch[K^8 Cg\/r$ИRj.L"-16lKuogl/(_8.h(VzI}v#ښ攄 Q0F֏&~JfbjT!3F:55] Ϩ*}tSļvy)gv{h$0yǭʙ<)5kX.-|·Z Ҋx>+f ϙkzyac\ng؝8 %R^;˷NAl*^}&~T m}-55C@>&04L>04W<#v~9=3}"!q? l&e*lS̽#G=`n;Q9cߋ.BǺZLx\$ҶγhUO?"l wх6̴91.eʕ?kNy!vG3AUa*߂&zmIK#xaB!=ۻn͞#IX5GC?Ԏ0xUjh"ڂGGt>a .V[v0u<[<*% ^?a5㈽OA/ ܙ^ji9ؘ?8JLJnUudCzwk^kr+?Rnd):ᅭ_eT}gBֲpR5hKݶO !)uv^;-<1+X>~2FpQM1F}2Sq R]r~3fws\>AW>[1ۡ 3^tGuO%S^[5 S o MӨT,W7c[/VPU{m/O`3=Ѡr g9l4hlXoCJU.XzbkQEјXգ^5O'4qxrgߎ^*aHJ|աYHFō5&%HG>Vo P݁.pMR>煃襑h8>۲H/XA$ol|,8j]za$Зmou޳]%i(9O-Xܐjað5U0Mfa|{G/fZCy .;0<"`r]:Ґ̎?#|z=<-v眴G3‚RV~7J`SE i z\?O2 Y̫V U >Ďw]ұqƗ ^!^2<ѵԗ;Tb[~WLa^k/fDBZ}F,ZZj (صf+gvt7*'-ږP/ȵrHvGC}ʖ"be!bX9n\# W뜩-=n`wuT,?0l"*dG[pAkXn/՟Ms/<|{R2ͦcUB|>э½L[P" -p`dĉDVl ;6$۫NFʻj.D{/UZ&hljbwCJP!`fBX͑ f$R4!=? ѦSC=zw!u^BS-t}\0ؽ:P$H9ano;D`robY|;<1"%t|NDg}uљ4+XKY,Z52܃h4S@O}j;j=vhIZ (u#+zy!/K@8'}mn\) h5w<[.>ݳAEHo1 (VxJW^si(!oƠqXz4n g…b>%`Jz{֐l(%}*<9gAsDIAq`UBaoF r7 2%WFI8mP>J!.e=ߎ튞EPf,^ۉ3=K/ZHJ^lOٞV8.\#|,s8x3*@FeIC+[$Bᄤ4/֛X@1`1N7%fOƦwϵ&Yl"nwF:J !&Z%%7ѯ&AlΚxQ5p)ye%'p CNLaB@).ԯ?> 6 lzkbG!ZѴ7Of3UpRú~Q Jjً:B>¦5l]{;3h *ħl+A7qߋ\c4PR7rn#"n2*%τC]y}acH8V* T{uڹ q\]m.%Y4z1u}{+*p:H%*t"y֫_VqWy]'aWWN bw0%Fkz.][u8L7kǙC_ wEPO[V2{`;n0Av:2EMrjMMO9a+;UKS% [2E#^)Yr6f5i3[uҺ6!3?/̔!z]1=LQD096Gdb 3Y!4FKӱgv!oa&O:xg=H#a6*A|>ǍvƚggDv>)rp=Z⛢1ɭ/s%y{9qp Xgr؋wk aSd&Ycϲ1 4YSpiw<6@~|yVaō{6C)K`ajUwhÞJ;#*BhLzSr]jȳZCh+sb y-|E| 'voSb {G^ uM/}/`pUR Pzps;mF&V5R@7Ơuܻw¸?`\+ȼ;2׵ ϴۋ.jL[zg|lv``+ws;,FﺻVq~}`xGM~ io :pjܶUYf%yjm ʉzߵMydMw&{q42Mܱw,rqVkk[xfB-a4 e%a?OP1vJ^y>}R+d5&uK_ّIId%<CL Jn}.RI<]iOkA&RXݖ<^V7};+dm.æر$ vnT?<;r*7FV36O-ԲH6nL+`T:yb84:>r2Iek wicmٱu2KZRu'›AG5}$@Δk"^,V5_tad>؝Oh?u+yw7n+D;k2AU8]`#e dxtF5uD2lx˚t0 RFۙ}j ω Zgz=KXtow3-:9w &or?Z-[׾{uScl;@Vn;)ecz1ܒ?ǜV8T30U]U'Oɐ)̀\_ =M%^d(%85‰Uc?*]*C/Bz3^vY#[OҎAꨆ n7)jovEj=r7J~3 bK+V,~ R!H|7AօRܬe+錔m0Mg'NQOOk^GZ?vfMiqF|EV%wTQ?]Y&+0Ax)Xm l )zOO)^a Z_6qֳOr$֋bMT󛯵gƊ{J|RAqi1w&5 dϴ,kL׻ݚ~԰1m+.j^ۿժ\-^1C !ș|͈ܾ՚s&3 a)،/퉦mh^v^[)g?>ϙ8E9HAS뎗h":Ej)vp*!s rE @BKeDY*T@'r6\LW?^*e7'7#FTyO~9M}nАI M} ɑϋXl孝ᣓx үgV|qXf0æ)z,L`n! A8aG˾jו  $/u~~L0k$+ L{y85=I$4u{מ'tɾɻ)sZs1;!-y^f[&XC>+G)_L:hRbCF$v :A2فe#U*o)^]۾gK rN@;Na/B#2F@)߸c;T]#߳Mlw & Q'Rk%vzoꔮÀ+q}D斁} V6 Hn >.M=41x䮇\C8R^Z?8s;]<@B!u}~#]2vRZsŐA [_yL>Fy.t#k{^_G!Omң}npR9o@z uxk)b깃z}} \U"wG>3.V͎/ħ ޒU>~^<ګ|y<-~&Pԫblu=f֌pkqkuRfYsVt]ޙاD9R}%)1pujuf!R"^u`%cb՞Iu-IxxOtziPL+:%T=ipR熪/V 􁳊9t i#loj4R Iڒxp=¿HFtB<\[5P;\`IgzkŒJ=e8NGmFδVvE{tnYEd߳@ۗCjI֤ýJ܍}Q92uk*j,w\>O3*ݿ_ | *JQ<"\wlπy}t/V)dԁ[}n W̦+[R>QCҚVsrDYt07y޽?KRQm긊RuĻſmV^JUNP;]'(sw~|}L/h`l7˗kx,׿*~k'kQr.T w2μF~(m9^_ WSCmtǺj.nV\[ ICɤ0orυyflIQy@De3r 6+wgD%+abD(N^k-n`[QA}w[x")ihvMW8 10B^kX!֧Љ<#ڃ\҄GlRko%D9tY } PzwIBKba}"Hɥܙ0w%41ȢKT}%sQʹ"T.W6:S<={v_'y]b>GODLDȚwм™|OqI`҃[]" s<iȿ(Yin=U΃d+':,?ǺBAG^@Cg 2uX歊+N%p'X^nW['0J[ .sEH4twrd'¿H"3rg'pU%)'^O?sܟǒPYfͦ;>ޕL@`El };^3ղڃMx9Ĺ|I_s(U(N wz$ 8F4,6tcoח@x+s3H _N6bxgÙrU#{&! b"=؉8曛B>#{ ̫yPpG^{3=!!P :NqKƀ=ԧE#a:7hqZN.ZNlߪ.謟e)aP'Y &#ua&u>7RHX E4 3x^&܆fJhc4%H;m|/1PUkqNamǎwiL u_'ȝ;;́u'@'~ |sNsǃω_$7wv~*f+y{@*գ־5C7OgDEpz,eűUa gKȌnܤ1QK(JMrl#WUPt?p49/ `3Z. uis}EpQ#^:,l;ꥍso?>`H&gvO֯/hiPgB*9hF)}"O;n׿wCedɕqa[+:rg)g3p)GR%}`08Uy'/.H{Ğ]ө%؛jBf㳞#-"וl?%9}PԒ?Uٗ+԰N! 32cYΡBPX0fΡbh Oh3UZ[q.ɖ|,.thkC]}Dpή}@L~ӤU:(pNU_zU3ʦ;)yU jr[kw-\+KL>,HvZTF"x=Lف2m/Ӈi&=$[Oo”MleP-Pkm p( xsbZZUR5'Ꭻ0;l[u$F{k޳~"kx@(2aṘZZ3뜌A<'~ xoUsY & `n"w+%;FL;ӑh5mbgT+ gY{΁Btdʈ$̿KN?&Cj/O'2.yQL}" x_1]v;Ϧ.ʴ}-P49v{D?ڜ#.L/W;֥"q>=ʘVI>9YD21)pWViVPir iaׄσKUXW;JsvVRwYpmԆ)7$fFV)Bg;:[Zy F$){ir^UU"+=xNHܻye%N%JW{4`,s=oǑ}̈́.)V׳ޱNyp3X/FEpƀz':}mkC Yf`K,>}Xwr1oB8cb<+:Țd"$Êi9%jU+e ӎ6HSӤА6MuR[(&BDJ'x'`@Sʈ.ө1mՃЎͮkŷdN as ",3N4Dhc( ](Q0S( {FyA2]kᔠlLNJZ>:g>,q\w>Ü&&mY6fq"V估tgϽ6c&Ix s8n^sJ~h=-<;ɿ("xl J5DpcJsVy[}V7}k{o;qŬwj5PP rIy!QŎR5`Q&:ڇ99'(ͮ"&_pMPc'.&3 ދkLPcaIyi/lZ]$4TP?Zi|g%\;}7kӠh^ϙލw}8]x{ՔbFisA8~/B3޻ Lb1Zc'#$ fN74HTk䓧~D +NO{ZKMh=*x6MMpJaX}K vtAҮUEpWߏ8D|omvKr]x;X򰲨TMʑ;ƞ>h'#^-ܽZh&$yJo~镠!ɘ-xd&Izpes}kgp '}m<7+ wk>>pW?/eʴԅ 9[DT)AYaqӴ}7~4)-z=:J4C!g-90ۥ@wu,|f?m[]dz; S;rm.z7S#mTy)N)l*3F!NąZ& Ȩ^[8{L Q=.)BfUb(?^k+31n]~5Uni}5}]ڴP=;Lܚϥ+ ߉hWXcTs) '_f}(g&M{YІcvֳ ;.!ZKjVX̳LJ5 sǨoq iukvTKVc+`srVc*+ Lю5#?cӱ$q|>~P!Oޛɣ쟯SbV^*מ1o2a ix) q_i1iu,hsם*Fw6AMXcUn8$HIy/ʶLc&ϓKm"Thd}sbLf#g^L%+/"'ڑI*γ0o67;!,B bX A2NДZI^&nl[rDw[Nīs,ЬmxF!g0@Ye~ݵZ4Pr6ˮAJ`VF#a r)M-oҿO/;B1jω69> Zrum+j)=v9Mf@;TA2lE?zPpdKMa-D$0Y DwwNnX%抌[㞻ov(7Q1no=13B!~ɤ)@cϤ@nKr\=&Tt4A^]o}u/9<_l02=F-V;dUqv "`$%My>%{P8,N >JU/Y HPÊgu=SzC͘o 299Qp|D.e[8ZBIxYk(䵺Vujg(kv4&FM w}f? Vd`Hus뵱 }lPaP9ˣ_?H15pyt&%j1%7NHu\B}PI)uR0مI7~т)>b4ߧXVIu$FL=995>p kdt8@-DM, ::t/@jF|d>inC:A1b:oj:^FO0y8n)'ޘb' $ál.V]97 (!vGٲԣb2Lyr('@ c`)4bA9$򏈽ŏLHDٚU<@/17mݼ?k-@ۥ'R2Vj(#@=b'ӸNh=eQ#52핥? kΏ{zD#l`k"ŜR{F$q(y!Cn/=P:M*!kۮ~'u 4F^\=A;Sò8,-; ߶~΄ *+ FNVb9}*y1?/(y-!c旣K˂h7FdR+ʉѤ_1T81>T `+Cζ"r*)PqW3Ud^,$qzuZo[}9BT}n^3C%{-;3'٬[e$Fj*hf~ /A$e@u윦{2L' gQ,/PC DW$3fיwK+%|h>GTYiIV[Od@0t7{[^vTZdC~NH @"ԺXMxa]}l ck0K(:,*YԵ/1/3'~t#!̎&ehnA]eώ =o9o耠ڙtVoKǐz ,羽_L禯)s t(\y|yEM:G͘g֣]UpQN}_5NQ~Iaq+FA.iYj **oȜ#WD:BFyFywG!`y<_ TUׁ,kAŕ}nFwJ |7s~D)0O~B7e;Zggo3V !~:/AJT$Q+c' sr==вznVUY$jvQA(L;V̆X|7~܈\}Qj߇L5햗BgR$1ϓw |,ïݠ c)]ݷ~b_ &򌾵N97/b0fULg?pl.VlK7N0u7"}8P q=Pw 304m E[kSؠB 3y4&" YS X5_M Ѝ+Y7vN 8͂2rVwJ^4C7k-u77BaɿBe0 0z: 3t< x_A:"b#! }COUi7e^=XHkJzgÎ\( ;(?V19-ND; ʯÇKG\RvP5q&L6"ؚ:O`@SMhD'$ھx+N ,Tף(|I kUG; AAsVۣjŪl@zv<߻v*Q_9?oK^ SzQ60W+j#QdWK#EYb^o_,j5@|@hܾwN{jpc͹ˈ'T7lfc*%3v k$chJ« lZpV Ps-6˗ko{HD#lP̈́7rfFnhWl(G]eM߯( :hP6}5j. 6QCzvDƫmJv>p;GyZdkh0+̉EvAo-ʫ!i?uvᵎ J̆,.}rg#rcў7LRu<(,rILmn񼯽BEm,HP@eh7[@J$]ˌdeRtbT &V+Ͷ?l%SQ}i7%oiyM6z<@%:ξHؠuܳa{t +=Aa~ =\,l\0t *p~S\_tWLF\*YKOM'Tّf˷Hl[vF/<}2yfrXJ%eHq՗*b̎['}r\\Gߊn4niZ6JokFh-Rdpg4qVRq6qA JhVzxHfߺ 5Z^?Jn3Y ߮\~MɒX5O?w ѼҺP鵢7 tè ui]x|canj2PO(Rp+?E<(臂'Cʹȣ{ Y66Ny7N%@C.9(ĕ ;(WVÑPH76Ł&X3TUWi~?(yцo%OZT<[r•vwRfDB6•x<uVۊ,<t'?dShARtsV̘#s7\Bi /vF&k\عW@bvF8|\yu+8ӫ/l0Dw%E.n—w֍oWxG3$~Do){pB^[>pPT w2|G;].].Rp3j}ڢѡۅ16]j #J2E_;n8vR2ykg⸕SP#a*e8u~(A%)Vߛ6kp ʣ :CDWt2UTӲ}4QׯPG\]N4wV@&j\jkyϕO]_(U{Ev`Gd7b8R mo~WP΁X $mQhܳw;0vd73q$소譓_yMmm6j0i{/Yh `b\s[M+^Lznp?vmRQx?AC#ѼO5w1[~6p{fq%=Fb{yٖ }NVO(zzG/+*XNkЛ Xi<™:;L`YӘ\BR{|/cnr~c?@A˰1ѝM6LL"vΛ:#XR.,} x2rKʀ?S'^5w"~)6j!*XC?ܙvQnK5l4U]*uJf(ELuT*_RY/tJКFcS>J QY^CS.3T}=3L$;@Z( $g [蜛qhas^^ ?֙5. " ?- p3rayЪ@i7t#~Rb8/yj5ใtakϽzw Y7\̕|S` UD7wEtwoV1t*V˦)2s򫍽4ƀ:\U%al "|"?Cho*_ ٲ*j ݥMMKZ]5aW +1 VGnlMWJ,JHbR =׷oXtU}t_)nkkStf '&(zQ,+/N/N)IPCj 27\} *쒁ss `hGSxQUX{u鲈wM6$luGKpheL*)"5u{+MÙǫBXj jzC2}mCP󎝜l!j-mf63q/5bLSǚ$'p/Q6@Sg %qQÌ*4NkC^u4' 3@Ԇ.5&a6{Ӌ_eG[5I`Ebe;;ۯs>(46k,r>?nبۢ.75*>J \qpGP˓)R{}ڥc?4K~ #+9#@+Cjl^>PG2"I/~na!ewXD5-)S$=-TtMQyz~KhH4 :c(E,-+CcMY;V-.UҬ,H׀;Hwd [/:IQnKe%eCNp4kUg}W0t'>p؎=5'>f6TM;3tw$mT!P6F*t$JyC G1`GHw+%uط)uWSkQ\zv2;+zGA[7o9^/a Y B}{R Ĺ[Rli2B*e4T2shͭQRhoz8Tf{gg6u,:|' >ӺQN#@;a άا v*66fZ:xS1s f/)G~GɆ{N)D:LaoX`a^1 5ރoxd3bf^ % QR3ơ~I4-kTguبBWQ[ ]zԹ"scإm -P^!qGǖb5[5&Ya6ηOOZ 17~R/e'v6YҀ wJwuǥewfoVDcKa_%r;9/*T1{G/i%%cą|'C71yG.et>/.tX5<$2Ÿ' U l7xZ^ T6NG`8zGJj3Zًr$pWY0Ps*I[O}SԽݾCoQEkk]EYb ];e?h1x.O}=ܔmR*U f1|7Y* cO9[~.J/  &+w{#b;i `ݙ¼x#w{ :L~/)0 pn\zˡ]1C*l|QECs$}X4m ؝~-KuRD1 r1W@ t=4ݑ+Mh{~]Ж.mLPG_;T$Ϸ>x#pP0So"\o2Nc\F~j힯!.QlFK5WyĶx'@혥\rOe}d禘JٷA7SG O^payk7Ed c~XNJVjeqG b10OѴI C<\y!07'ؽ-bBM!wLㆧ&Ƨ/7 !doXdi7KX)WDXB/cgJÉ.fBb(tz;A`0*wbSXN ϠwL-/10_ v]i0: _AVsn2ԏRgjGU8 XGc]u~w^F$8p۶OH'a ͬdhZq~B Br *zxPg̟u@O `:|SCPBH#qԟQfS_O!%$eg;/.Fq[7dޑm$Dž`0MIcJ >b$BIf))DowQhJ\uk$f`t+yYND!',TpFuFjxc3}bِ U.) GOuӊ.++$VFc9uRטgƿVUڞ`J{MCe87bМ^דԌpG So[\2\pYE /᧮+ͧOGgyWp2x$%\ k2PɠޡCC6k6i\bzDݙY:CT/On*&+k#д7uzzBn G hkY"c5<3ϓmw@RxmG2Gr!*b0/j᚝2M*C à f [td;ؖP hv}nGN/CWObgc X3zIx]+.jVmm5(aW}8xT^̮X (OY_#_|z[?TX83vPo)jD;ǏYQzi7e)FOUTx[rִžN|)^DW m@ִiGsoo L@tϘy[L02ac ]|? 0 TF2zRpGQe[%$nXty<3IC O$9T%蓡 C;-Qފ$rK`DJYՠn@_˹i#xbwAlH\W*woV:N<[9qRU 40;Ze :@ KFita\?uM0m#Ii?\iSBSm?lE A{BW=9!⯠䡷["K!$ gp]쪈hgx?HD쒈"G߆_~}j-SɫbQfF0"Hm1ˬjkǖ %jLK+/)ѻF]MlV;k߃[<"B F4i.-P3 װ168v s"{(6Kv>1?0P<(鯼Օc@b!yb#q9'HFOE)mC~En~>a/9B _\9_l!)>3o ]1vA2$$bUe=E/"&<^>xLN*)*IM$! 8]a?{=;uMuLbͫ1 r>"%uu#Gh0Erk`?Ã- Ia!6Ye صܿXGxCp3vwdǮpYK250]ٟeґ=~NF9}WŊd$_@v(1-3|8Ռ@Ч($nIN= b{ۿx^-vdv+ׄڈsO@ Io4…` hzt ,i .x̺`ZvC bO- i[Hn4٨\tDBѡ5_U4`c㕞J37P,4 IAQxQĨ4h{侦8|7!60]m ,KE̊/!vI26Q%f kat~o6o%"xc*ٔX#0ym\%znej,C6PA R Fe)8=B:uQ՚_(QuQ'6&Əʒu긢D .➧>lUFq|GR4nz۾]|0qQ$fcUՙX^""됊@{toה= vկ昀_;P+oyvKrtmXd[娒Ds,e}MakhGXP6BOwGf< 4hA9ۛm5ۃm#:FȾÎB,[빿fו`rm$5l- UzÀuR|!ktbA'",Zb,4(Z]Qtz1و|o{dD,"jc.*R]T|] j^{V|/]Zu}&\ y뫟eW</d8m{`91B#sm=7^hY&+(i:.z'LL~KְPFԣD7B4+}:Cht 8XQmYWj/)<#L\ȡꫀBEnD#ZL;s`q M>=gr^қ &id=A @q /iU[X15M!#}m6N3)5jPVtS0C+3=WyC>I璞X$LwVRKA*Ϸ̔pۤWכI-+WvN7B+df}=RA Ǝl{ y2$B@ +]BI"b> _W|PոF+`T<'vEI.,Cgw׎0w:͙K_tEK8|,)T3̧WYE1NAzq߶Y*D1@dY,1 DBtFDVj}J[(f4y2YhZg}s9oEW778%N=OcA 0I S/7e< xhE|w~zJ'$$eT?VNtsyDAL!BI0Ԇu9O|nݐeX)R,/m6tZ(iט ó^ħnA L ش -+P!_R{=v:tYv$>m I՝[TKO^xh> iE݌G;WΖAo:t+G:})h<#u }tO}\MTi+e:`7'lp%QPTY`M *'>|$G{y):_B4 ~tP{^5l-@d}^g6sL#S+-;9@<qB;|0h+>qlc"_Dx'A.4, U*xЩvpC1u$gZmkH VM.-7-ֲ$T<2ha*RBSD3b[MaUty{ŗH5]0 52s[(Z1-DUYΦٞd<~X&c3PR@{9HTDB.D*Wne;dɗD# (38}^154_ER(B6$mVwZKCw7eSt gncȸ۷AfG_eȨq`٫eo$[@OӶ^T"Tᣦ{ӎAZ'K08yS,oᆂtHwy")| KR.f%KB< %%SPV3D-jL1eN%U=~X"L]E\J?kE2=H硋 ''zdU\ssy| *5aޖvh-V2:J_"3ϙG,A@z4$S7YI4q: 3Y|n"JǞwpCkaxWO^D%>tȋ#p2?SKׁ3u;z-޷Gu5贼'/%J'[)|ĦsXAP|2+0m !1,6bC>[ :]uހt .2/ Z^,I qq*~XlbrX6XbvXaA C;bO(bb|$2PHk/ mkɗ/gS>-&4؎ ,`@WexiD\Y=jgdu2 ,ٕL}BN( j^y"ikk!v+*iA}y[{`xUy0Z2鶡r?&;\;ibu{eS^IEA8%`|hs\޿g&lo;lESm߃7Mhg6v*I_ ( #^QWM%wus?[](v>h.q Xx9Tƽ쟪bzwmHxD6vEW> #,Z.ew2^yDPG V{4SM,Jd>LFNIZVl__Is s)b7(Q+=9 na7E^aj_+Bef?ӟ kTG9H˟/~$byA354P_?lkyS}WKy޹Tdb3bJ#vCjA'H:=7< o/S]nW8u竂dPr׀=la{N78ّdb=r8=Avi5p< H:͔UK]gES ʝkͺ:^R ! e0yyU'::sPG\Eߵ̸ޛ= raΓ;+VҭjCQݫe@D /'YXsIqsOvQiJڻzG_P`mf}qkaxO iDD??PXf.p!<>lkGǥ>1S61G׸>u[{Usv>K/0xvXb'j݂+=jfjȏIfs(j\;k %k4;]=/{(J~٬hFh+|&B@}^#EhĽ)~BSzp"_I'3)SiWrI,Pް|Dr'y+_=$?nZ F^wؓ՟A}>I>Bo-|5+IǴE;Syn6~ ƻv~so) k (8|_$%;'b!€PJz|5EM=7!nF?I ׿pC1 1S_OK/*aGǝOgf?{~"db3BtBewwJTQ4HMjV - Vx+]b0//3_+)K&B(pNtHnN}Qܾ+v@ z˽ ȳ.`bqܦnG@A3o :gwƀ+FmuE>٨fz>Il.q隢>=@} Ncy,P kgN75{|.Г7UQEO{M=1t'<:``vn}séHzV.=:[R_H6W':qS F*;#aw}-PCsgs++P \3٧?I~N%XR\AHɻ0PtY#*S=E}!%"uþ.7oasRژ^8i#&bO{fQ63MYM,өA P% J S٘ӒZ+\L o7$ Z K2sMOlӉ`a :R {=|,"P" 6 sTA9$ΨP%p` S\>$K$naĹMO#lf5L(&{2Ń7 mm "vIvH=]L#sٺQWMYz~y7O4OtKԼGcW)Q$,eJs(yϩIm=^ZwwUt_ʶ!^'a~b 6uR,Pb `L>#Vʷ̂<J3e޴ i/~N,d'ybqZI8pua{0H_S%'TW7խd {Ҵ2~@~PdJ*'fmQ J7vFE&~AS3!JO=>"ɻW+` j]Fy{!`lwP>CQ$~RĮj׎V:^(rsI:nk]m*+amTH}7fzUM4` Bʏa>)s< :|L9fc>eIQώ{ gsO Ġ>l9@{@G}]>,*&><GHU=j}騂~ xhGo澇O0Aaj ` b98S^ ͥ2)2#kJm K\^Wu?,%>N Ycc*95h|tDi{iB U^1trGfUS8 Y&>yK#kued̊;Mt+m{ϕ "\v PF:훈k~SAdvCυtR= *J(.pNJiT"{0&*6EoEJX:oB |RmU Jy'}6/^KcbFYʊ RH@ҟ^y F|"t#p [9>=vN}>[!xvNނJ\3@p< 9et%^s}`{0WK*W(=v4vtBZ~eM](=A 7hk2/ 9=Bk~9RcOv!W ۜp 3}+$SeXbCk3V M)o;CH'W}Υ$@hFg m~O+.yho{ n o)F+bOQ5 ?HuO~hdo4t6QQ_}ⓄFalקEr*'a 9}ڃ |Ʒ  kKR`1vyS+/40]%>;X|lTnMJ%S4S[Hc7d4H.U#b=ݚ<ϟ%vRN_? .sɻ, \b@Gdg u2Z#[˼pv3]ec*rpgZƭ,HnptpgKK~a[BY>vpd#+y d=]MDq%lȹB#ib^´X ` fճ{xp_|4i(=ߊT:cEVf>\ n.U#yYE3z)o#CnE9z43o_{ad Wi3FvNܿq+Fjx$GFyX'Ҽh` }c18h(uJؽB4P:u{>yHΪ⓸` ڋaKXFY\/}=Q,˟Q1?, >,O2LBkƒGjh!;)8h1؏-c$0CHF4 C#N\oC>etaPi8D Eu gjѰxǖ|~Q; O3 CXdO}+ckod%}',ۦ WH,!\ܾK{iؚ_"ƋDOJj4`psKX6yڃu^'4E4z(8SpCi0d8yߞ&\u+ыH4 { [RE:H %EY[}A[{SJmfW9AzM._i-%&4&Joz&9,mMKu;Xna&B3hlRdI( D-517VFŘFMGQU W[j R[1cdggvh/ht2 zEe?PD`cBL!2nGfN,>P-+I~~{I^?J_Q~O&[ DŽy7 EW*?_c"?3'KuYB/"թUջYn,Q.jNư^X?gb]>CZ2x6={e ltA L,8Z3{}4cit>؞YSg @Kmn`T MSdFP#v4k#FU}/ٞ W7RXPҸz> ףژQ{Gj͗7L hf{-m5?pUEXGE*=Z▻](%!5G4X3H#~;ɤ_㝶:%^(p_BƋ)cf4Y"Po!=^L׃^XFtKwcF}L1 *l F{~StqYnLޟJzbԙĶr-rgKcH8%T~goG=b$Pb@PA/y0tWY۟_Ss4#HfORK8 i_dz>|^ߦQk ry'OYVxfdwR!Y ] !O*'ާnMgfTQET aROr(i|1Pp~m ۵%)nT3RGYN5j֚~)T8ut,w -/KmGujnݾk_u>Cud~'Q#楠:'w^̱X\Cz.T*ъm*J=59FF? $TZAWF=7mi4* `u#SA8]G?PERg\W И~edqyEgվ/nT(&ỵDElw#I +d9EQ.a|O1\_S\-{>[M}ic~g7wLp=@wO&7 (ԘyXe SF~sZiS S%sCD\q)GXutnQC5n^wzϣ1-a$شyMtoXq[eʷS*g|ĥ;wzZ<1P"@ kYЫ, ){No-1y S3sxhMd#RAƺFcQRgExZ@gFOF 0>x?$&b,.}eٍ+[ͺ?S]`+ iͅv}ٴ>|J ۍht&tRZ]SzUGk?lj r|6ut5Lo."Xk+2]*-Ekn ÛJJLZgY B5TXDFogS|؍ r҇]s;~M^V"I`ݠ"#}Ǵ}Pr4o/бHݏ | ܙcOAoaǧ_#*SI/U`7r;RZf9w3He+gfE^YY>Z1׋E+k%]!yPjO)V|~ !j|E/)'<b? j+dҍM;b**MO1k+ 8Nu2xOBN4XׯBIwu,JU"H%ԅDܯպ |XCv+KU뉥 lz~o*t9g pl33tXA; ~ٽL>F^Up]G)gurtgTHc #_Y樂UsP ]Ok5wGa U4P-Sy;4cwq|:oɽ'\WEQ!JVdM/~v >OWQ^%<4;ڰJcJk5۩*QkYR?̑W> $C63_dV # 7}ظ5Mu~^NؘKA̠-6Љ "CKHo:BDK}{Z*vڱJchQoJӷ!8+"*ɓ~̵KӵQh"+YԵ_  cc|Z,\g[#bS6D۞vF~kq|TiҀ́7>#ies_OMQ+FXKKHwU{3hS'W&-5`o&DEhd9?kHU2bڼrWVwκR_?m7Sy ') JGFO*B3:툺Sy4&zCxUa).OS%0]iSY?*?a{ebD~.E ,b4mo${*$*mHiS8ZVe (dI?O>%MS!!PJ~dW~Rh*y~p^MT$P-pOds/PN_ pܙmVܿ v)2T/IIe\<``W܌q|Ϧe@@ 9hpV' SEÎTfhr]z4qRzL-'v=K&vqutϗ݈u;Th Xc\UdͰ>cV AH d[R.lQQE{}؍셪9 Ffeϸt|eS^ݣr ǀmAΧy];]~B-bKFT*86\bvmae$M: h,֕rl j $1W.ַc*9@Srq]rppgR+C][ڰ _; cmHe.'+;; >~INW]m ˆhY N;{ٙ {/ԳORkHU*|qʠ)a z/>r[ݻʄ.T(,^IEo/ovF npL͏}n_gAx[ .#)$knL4/ݤߏm|nÈE4C} .lgZw8n(pOOpn<Hoƛu%73,i}}q|٣@Howz9}ud7ҥ''CoL!v?hdDcP3:aO.¡rB[u:4 tFA4fun~z{=cUd~/&,L@5ȣ _r^J(S1pZv{ݩ)UR rHx' rKzIwJyb7T}|E)TZ_ ? A*E*6 ]c};6F&YOYɻc]AL_u9܍&F#wIr|4*@}VMb<ǩT97Sdv?K5(q&u3u`Ex18@7^xYQ5cp"ANt { eaJ~7/;LRɒ A9/!>ı${ L]vXdF0X&ϴ&]IN]u~v< R,cj2QK6d,ߤ42 B.Ze`!}'!l\LTrg_ݬ30xGɃץHao$^I)#ÞPKlWX c}̆YCho~ej%;"E%ۚK®J ʈ^~УS~ك PS$kP勏9 /#Oя]O IGۂ=*S'eW: dES#ϹM`UըF]&}ecQpT`9J?(uvp[IOđ¿;p\#w! q/'u(6ā'&&&3!"Xnj]e bX5F6hX 4\jaʐ TH!W[A1&d] {i Lv@@LP(?Vx HDCG*OAXY) JT"i'`}4VڱBSjCMfc|wx \x(CYq8װ3S}U1Uu#  k dK(Dǽ:Uc0hkn$A>BX#1Ȕ8:eCt'H juTT~q+#mUNg UpGA{-tdPg2Az؅XK3eV ;$>eQykQGOS3oG˒=kڑW5RuHƊ)@M5aw*Ab Ǒ*ՠ@Z :!.\yyE6ԻH]K*e]k^R79̘vw(lHɺ ^gxp\)8fC;, I4]*iXfvocG[_r!J_+cm٬$;԰ct̛9xF4K$fykUtkek Q[.I H+魏|RQ~į֥?w/@))U*1vРO {,s=3 l83!FvoAIoJuDn]5aߏ\8e5Xܘj m͓N W}=t59ʹΘ@;l:F lĈTI/'ZS~c rɔMdS-Pw(HtX53b~a›kUX5[}oQPT:jOUҍekR5/I믪bB*h*1r݅ JݙR4E)5i2B(^y^4HGqJNJ*/Ȳ/fA~qn}'wEtzEc+>Φ~4L/FW^z-U{o2^+ X0 $Iz"{+Nru%_zB3=BJ(4 ?m^WѪT䊤D󝩏"7ݵ"G^7?z{2T-Ι^齇]uFZDwzyް& =N*UP"35T!kI=*~١@$0 YR)86N 0 )9=Z#D`7BcկLWq'K Z;垹] `OӸ2~M5 |2v&Bj1A-Z"1; [}m! t/l5֪B/]]Sv,ƚ%{ط[Ghu HRxwm,eQN +Z~N*pG~T\Fr]C}+br|5z) ۼfݵ.'N k-s)Wڑ5p㨔}:asN%?Pٽp︌v;C:dƍ9&A{ RdG&5Sd{Z~S B.1YP9^ΗHCadȎ#ݫV%dž12%kUa>g#]`%lбiS차d\Q C_l"ObBk<ڥs8Gv "t*(:QLx⭘h`{u TYͥ pC1! ~|s_j&T\C$k ^I[4~]Q'?dI( D,aek^ lɵc`ДYH\@,lSdǙxS/XXFz T:m"r5wUEl' FCnwy?M:% \G8@*A׈_ eẃ<-mLCÈ q,\ ̫_Њx|RL67Ƿo%,R>ls!i09\纨|haqk5"qjL[U㊎&>8ѡvj4JDj6)K$(94n̉+,[,n_d9/H*Ɨ"0~ ɎDLRsMpG8!Sr$oo8 a%̄a8߈@'ߣd0 e=R$6vIOPG̷Af9+b@8 ,߯B͙!sHmhvQX~ FhhOx1 3aa\YŤ xx旳/Q'/s=rFt!U/ȁlʼnf=Ǟ &Ba *b@m~K3yϒtl.1xgx2T6hg!8m3~:b6ʌ }QGz 0&mFS)11`O'{|BU.E]9 5|BЏE)LˡFMrUbQ؄#w|k"GB=1OKq4 qH/Z_F“!.Rgkul e~5ubE: C~le; ~`=Z ~򆼸b좮%YYc~ _0^n/xܭ^=Wq'%WĿ`w90$-]V#nt)nw| |v:@KNjƍOpisu95A7*F(v!D-5xl= x!fcEf[ͳ\-a'DǞ]b|Dn}`?,A|J92tKр;N $ssmRuE>WH22ҿݼRcHЉQFXk6Pv*&h l%Ɠ ʜUym4+B 6v{^),BoIՠO!+W~P aPg,3D,Oh{vC4I3tmEVC[jSJ&&CW_-_[3#t8?e%nۃᏆd~~>3~2#!|kH=cTB_ QiM|wS"'32[Lqi}XbsJ?tǙS `> %lǕbzCF)kI=za`掙 { PNhaKfKqPO`G2]}\& ^YW$ጵǵIa1%!;ylk@DP'@Q;X:tλ^ ůQD78"xS}p6n(5XDKIwL])#:n5'~edp| &ƫ.lW ! ;SY_Ļ߹8_x{A yjvdcX|U*hny4D/wH=kbunt;@!<-I *VSx/ iPO6z?]/A 42( ^XfT+)`~`PIR*,cُm;饍;D:z}?|` rj'v&llnKwL${,V6WUA葱*E`)AUa5">z`}3Vt'DOJ_B:EE-Ā9i xƜDANZ,KC0;;o.?`Ij/xRKxp"fRk[@հr 74G(P\kuʹR= Q*wz,ai*­% (A&,{( Ox Zp Tqsiln=解ܭ7L j IjGL/qtxSgiWvF'݀!N[YC;'lx#-LJ2XsGhihݺo9FOZ{*qnRZsiݨyO"?̬&Mlf9/RG]aw qkp`ݺujᎌ[`lNZGd*%c9պ=v"QgJ!ZِiQ\]T.cOCÐjA.M~\z]{n~k4ë=~ b`hN=IkYPZ< R!zA~hOL6S;{O$T?)`XY ەL`ZQ2f5{[Z [ <%=} ¼;VvӬz}` Z/uMw_$:l CIzŭhj] wc)W`nxҏU2ؗkZT%ԑ b6:`h/ގGmZShPWif>`6z խEmguT-)7- Q,!aʵ ż>,jG+|])`u3}T}T*oьEa)a4¾n}h=4`.ke|C:ޣ;CTMXJݦFL 0u-uv- lY2i^v<=utm>AnhH3iAjzzBykCK|~)gT 6K>Rc} AXvzR5_ì4WIj!-_LXb.zt9=>W^R"n4e(,x!t{? CMV{^0 QXߡEGԽaV[i覔2{wl(EaKUe&,1$9c׌=od;a+'H t,W~(0?c;CNO^檥 ?}YsLKQk1 4>;IUc(O?Tp֊к]Z|j=cp[8*A{<\;gW5RC ?S7\R]K4nۜEw{N@IR6w'vh#5Mٿ0]i#o "(KuhelTۍ0 S8n@MUPJp ؖI@y@~Ez=1ܫ\Q0a30uzfjrmpy {x,k{b$HDd=i{*p4C%1_5<3F֯\M7av0/FZfKxn(pC ~ߟG6Q5CkM*zvLumņ', JN$ozV iz 9RAE^M7}1U/c|غfMMfO;7>. 'xG;I D& o){b($ ꊹ8>0``kאC֥u"^)7F7?rCd?5w]>]]VGIi$3DR^_K~͂ /Kx`.X+~B< C-֢1Жɕ+|]zVZVCWRk{XRb&T KpіcdY-tPKl=Q1D9 wG(D*d`}W 9=vsw aY{[cU)@毽DžuK鵞nvm|o0Xw}敟CƢ#Dkta~ 2Q"fEHH%? ~p"t ;ngp||~pp6j0899<񔂿 $7\qo$V'Ǯ[0cgb;Ly,rkO$`lA> Zt Maa|ɇ֗0UEӟz NSӛad\9Ǹn( ѡk8?Mb c[H=mkIjv vbnM#td/Zw:WTkpb >`SA'iDe&YTB΁rYoyd~},GL/.[`tJ(io)J^9܋Xς AŞq0"vIs>X>AZU`([kc`¡5t=ܭY _)O[ iQHVg ݥ߾?8-`Џ (`{\7d'G8ECk.Rvr;g2'I=*Du'X6= 3;ۣш^kYX,96-cJ1bK3.Z)sﺑ[0# %'X o\؅G jNvl{47" -\#%ABSImP8ݞ\OKEp:?ֲ냥a ҫuza'$u'i<&~ isB;'yO<^lRU⊊= ZYе{:9e[v,z#RXV "ܗ}cD6uּ5X3n( UU)g:duVzg~}dڧR,c\wΔ;9myO#?B>Tؼ[s :kcIy+tA'#׶B_*A1¤8ZӲl/vR6m5_kj~H ϮZ+eQ\cpC!ΣSi!;VҹiB%KvվCC=xEQᇼ5m/Hg k0{+2kx)Np73)o?_; ,:/쎠Cόx|hs;;{Ew3~9c<~`%h:b{kmtg~7͍G6MBh==J \/rTv=@*zLj ӠiVAB*#` z.N~&డ42zŠʨQP\~?@RtGaD܍s<N*!on37l=p3jd)yTˏ6 J0Swn@q",u1ǖyt{V*D_-iX֧jAvS=, 63v ]5cD t)hzG ԇ9rTyw@i_R/1yPH HWJwmiP|F2صqI"0zKd>-0Nn>ijUN鲞]r"]Mg'!}"UȠ[bx\cκ]kI~d\:x\i&p7}|Z .`)D>p*'m=sEpU&4^>c8+>`ÈcIe l#+D9h:UE^\]W}PFKt*.ex@5D{,*O# G?z[j+X*,MrN`ME4_933a)'A>a5 <0iW^aLxҹݱ_m`nr+9P|)⑫zH2NJĎ(qq=M KC34# AcNN|CZMї+#dJJNSƊ~q[I jQwbM0U{ ʍA&bn ||'픦Ea#a  p"0x<3ssV&`\9aAcDUkV#\I\yl! !ͣ_G_5 +zcn{zS rY(+"wN lrqV  l*aUc'=$-m :zy*Q]G Lp ؗoNiu`OpE#vG+s˷G@B4[/$%ƏޚȃԿvfk1E Ryja2 Cu}?w{O@}щ!fXl{CMλ)zLwmf/(Ű!v~Q<3e\1Mơ;H+zxSg-fu=jE̒%N]{Ϝe@R5U*{NNtUsDh3%c1nӍFah fs{,bL@+`äq?~ܠIVW$ |v}َi:NBW5X h>c D7.E' ̈́kYتC_< (+qd~@AЫe*g't︆B+]u_`oGpӦ(6pquWPx7 أOkf'~caQAD+`w ǒ1ԁWF+ml0900YwwÉ0->ӡ]Fw7ron: 8ƈ@ek6 K%xWɮVU3ZV4~CX8mE.QvBf O6yڮ\X`+2>M܀G>O(kTvb|ѭi>npRCHz+Ȟ_M1zFCGyNZ8NU2s~X0]Xټ/n=jxgU:Bʘtx\ڇ)\\:./4?Un; uDuZd'ԏkkS^ #% >U ^)?0JRj<2-6`jT>0bgW=pǠ,a| .sP6EEOўq!3E}%(\-׽/ #AQ^]ǣ UaqaN\lhۂmsb&91vv4n;i&\laZ7upEw7ʪTwms.` n%Rꎙwj7 Agpࡿ2zq7icDRqk^ք0 ؆BoYB6ⶴxw#^4'3`"&ԻmS"b)X֎]6v4XtJWԀ{McvwAviՓx}*?`㍄x* ^e `n>N쬽b{m\wע| L{՞'iifZd>yj12/Dтm9#)quW3ki?'A֚&,T-!z 2udk(sx*Zy"A;S]m$A^#xWŃ àJayoOޏcADj#]xa:RNYDq>|]JT8gҀwN` ԩiMKK걂(Ȳн) k` c?}Gf7%f..B.i\,H 64φl%JH-yƪBɪZfoKSC;K_ҢO eHt0wxP_9 FA&"(fIQQ>z vGo]fq ڷQ8?P<@vT{_:"XvB0О$ڈu8VO7U~{"θ/QJF=;7]]mU{_b|oZ H<)iV?y):J'  2=gN6by|b;X'Z3hw5^C U~lj?оzp,&m ْk\U*CuK@Gb*1ضϪz[isA!K\B+A?# K|^4鬐;ӚM8smpǨeW+7ZM~Ubo˩'XΖ|R"i$gu&`]D-G @ (A@ gnGCB"R q`*&tM=i t=N)D(J+!MF@cyiqNP']Ș>O~Pp;'Wo[ČV_mrf+"G7 9k+G}zHzi'@g/#/$ǁ#l(hGTBl]$bl_Rm;Aiv yIېBf k t۸QI'U#\gD/7bL:]e˷o.1"H$8.O.£r35M,@pSQ7+dv5, fe\nz;F{D53xMC_@GLZrjr}QUf_5||fy,y`Cf0U(:$,+^Q+q$JNKdeV.%nQCe}fc=옃IroG]0nҮOW\h4ӯfٳ^`Ke:]Da&PSOJ.e뒯L_yLȨkEx$a;/!m|tTBd`ӳ┇EU$8"B?fD_Mu֏B&۔ryKC=TYpޣ[)Ϫ(ÎE1hvRhGd6-iB?bw|#!ϵ8ןrqv=&Xwii`?>ۍ0|AM}t[<"DN9;̖ `\A8x1hpFNQF ۣؗtAA$ OwggF,#1~^m{6 lPR@faV HaW/R֓"˫ZdX KF'kIC%!=^ϋkoH@T$*HVkH?GO_vl;G |qQ-yw؉䫪!# | RDʴJvJo[zn^emR8_F*|NG =gQꀗTmlXLgkZeĘMt-ՈҠC8xBsJF/O6OBsy$b/`0Y8خxn(v{,rgjfTn?;n 8WӉF|L+>k=8勳담R>&I W%6.cPe"Lݻ'~rAX1n`DGe)E#t|z }^lR.?k|eϾ{4o֔pzU&N!?(> Q*t n'R_ QY}ك9@UPfjfcI$Lp"uwUH_y Ty/P>z2lQː B_zf!ZkjDKuPY]:Y?s۹琄EPDz"{qz>vsWKs/'8}U9˔fL/0sٻ~nPj_g?FVn`뎷ʓTgwP쿝d.PJ>e˼9vSGWZe;?,+Nw+%~}˲5mޫɸ}OCF~="dq=. 7 _gH'펎-bM&9pM3j\R.x+$ Xn\.Ō+deH C^v1~.k>/SQNc8j/#SAKL4/ %ͬף_Q\]h Uګ{iVa]/dxqq̿ u,UnQ{JmmoXw7káC|yt <+Hܿrso)¶OHlvo,9_JB>*eZw.{Kg-5+/'_'= ;tԈ^XA/q6SoW5lb]fWwvVr7cX^lUm{]PxWz;ɧtvwly9.[V I|%?0]^y`A7 8o r.A}0q, .$s v 6j:uم ^Kpbs|syI,xaӓluU|މ<-)Jє&3^ !}[c}+6mo[4Tʮr'*z[xI9B/Hʌk'r1sӞ_ڝO<|}홟W0=fR;_n$-GZ#]Vm0oi]-~@elΈ %SJ/&'eI]gqL ڈ>=Vwp>X2D Z"H=a'R80Iz3ryX{mvI`,kӧgF]$*)b.:[-t 1(`ji!ߪJ<Ȏ#TצXy%):>N薿5H0n@-^obQiX79b 0Ry>狈UV K >ރu/,M -=W=rẩ+oWADMޅ 9u*zY~UZ@wlo].KcvtyJLo,[wB.+pXaE1ﹾHd,;D_~%)@,.`;-H2f(/GjhO<~DJm;WCB znZ#|tGˋ[Xbű UnITYYJqk(}^+1jw53.Rld_x.#5R%?7$њyM~i?fcm)swٗ]ĆKMqI}t0vPm.-d ЛC-e>gݬ|"^(2-mkT> W3U޵7=q~@F:oo)}UI2YT6nJlg]ɍn޼!ߩw%<}_؄ *vhuR9, sm<%S5$~)FQO~Bblֳ_ڞ\c%,mo!ZK] dq+Pѳu#gRLE-ʽ C|+}֎H:J|E 游&GNV: L;3y*_ܹ>kh-E]>Fsrui^# HU@nD:jN6@MK wy̥ZE׮FN k" bJiv2cHN]~a'MۉҬ(+03 %Xyq+YbϋIH| ~0:XxQ&55u2~?.ߛz߈ޞg6Pz5NwfaK j8 S^}(\mgS\^M}{e QILMk镀<&zanZq=YB5 8='JԕA4C0j6/88(׽8~7spm.̷]jRWQl(h1/^yX݂C6P}E,K4Et쏺^!dԿTP`*煩^cob :?+,Bl֢?!D"F~/FKMeBP_FA41K!t&v z;iQ=SzA%=TV vy88~®5N+1R'qWصDؾAG#uE 8~ hZׯ%fnSJŠGO"TpэWRL2"<X#Nw;yKN*XRCA .('cm:,O3cWƻd~0?l \/wA|;ٗA 4dMhk;W,Cd\JG]mL4H W4-#"~bFS"65Ș;$}9T.iY~W>8Omޕz\֬D;EURZIs`ފF ȍ`h<aQ2~s_Mbpi;YPW׿+P!o V )E^~0sTeǔ62%j-%7UYR1<y$}}L'SAQ ؃ogN.rDʣMm- OEGɖ>Cد˄!+nCI>: לiul?.aUZt_hyHE&H9oćT}-L 'd}V΋TQTYEӟxnoV9íJg*N௤'wJ^(06'/XLbT}]eUC?.KaVYĩ("+̤QK`-K`g RH^Yҷp(G/{+ވ6>/9q1?%@D]7)+З4/`&Lb$ qmnn}ez}ʩ.mRQ<,nO4_%J?: <\?;|Ѵ:ڻ2)(|q)jMWXd?Nv/,6.u:ilwzE+E‚wf}r=ձیjQn_O.ͻFoi2ÂO?ܾ]m7]Eƨ.}z\j#ꮊFT.:-Ԉn9!$e B({fEۺl "QYEXع|ʮdPԢT5̝@jwP^<'KfӤ$Fs[)$0+M-Rurf=u"ji!`Ó8."wFU,~W<3c\nև]]7YOp;.ZdCFpQ{`GQR7B .jtNdVv9E)Xvͥg/X|h%Yt "/AƤY2vIICvNIks'⳸' 86=L t6q5GXh:p"V BSսuK3Zf,l-0fX[Oa M~q=l :*$Vt>n_GC f헉T^N`4t!YJҜ)8ே-i,. RF'p|E]K^,EKIwmm zLyM?K.E C}y-K4,ܻ$u[{V>Om|W *}ַ($&6Ay:EjDUB{٤/r[upҜAb'EvOeW%&>T~4Žc_qeOTV―w)/ G6XH}gxYƅ` *̾[n*=pdUS|ʑ)X)O6P2:zYAy yduokoй:4_Q bXryA WF( Y,|gnu Q tTzoxM~Dx|fڡXCKw(:*|և<ۉ&$(K냦iLSo o0wXz \9)k"J6Ksx'JńCӈ[Юg(VB m X(j/"N96!K|%& %x@{ [ܶU!2/B?k{ۓ-5ဃ`2rp\۳w|<^aYJDz]BbA@ZGP/VG^CrQznUF@+Gsqu|iC]TMQ#ojr ?vP _<:ސnF4I>IK!v}U`~0,1 jﰁn#.FOf֠kS> ˟CH1w fx$ $z$#qzS>5@@^j5C53ӑ8+2!t옐 ćHyz`j?PDZw]EooeR/\dՆsJ߄ǻ whqPAfq5$&%Hj F6 #ݦxW-M ;A ̈́LBHAGَr۽Z櫻ttR=f-[Jz ^Or܉XW7Al}ON{c_ڵ7MAjx´us: :Ys3 = yG9ұTBߖȬE vd:0P6ھ2zɶ57~YVhe}!ɈB)_KpHCİK w);,Vw[cHIJcս8tf6lh܄r}K$u{t *6Hgo$xKkg:~J:o</)u=Z`>)2C"MkѲbd*yq3177}*:AҦxDzztӎQ>tanURG57-X sZbzܯh?@]ϛHMMՌB#P,a$2iqɼ$5ʭ%} {0zhyLoz/Z4äurL"^c=iy),*)]<de6>7>, ̂b5XM "33ŖK_m3 N ݟ0 SV3Jot T5^i¡R-yi68d3+Pgַjڊ-#-TՈw!gG .U^O^ }~ ? w \eE`05/b0}6.C" :,Y56>qJy(O* R^3Wx\& q Ioz9RdO\N郕6t&J.j~AȓFczߙ)y%V@ 0uŝfœ/gf?C@̡YF-I:Xy,BjZu=϶)VޒF'>$A-Kl{ÑȢyE$6u=.w@d1uè#vM*#vb}JMRsȗf$.|*yi%LhXoz ojOϘV2l/(XT5"Ӎ0OZM/ջ3~8asy:@ڽ>D3j8|9b_xA){TN6A8,ֺFHQ;L=nrdRfKy]`JC Us7i,j*_dZ㙧7'A=؆~i fxs|)l@Vh]0M_ ]  ngaez 7}^:ے$r75o'pd5H?0T>O^-뱂ЛaAfVA,ޢHfOh_gX/9 2{Ǩ4^@}Áv?So7&7A3ǾoR \ͳ@RX0}\$۴A^CZ}8`N LL49:MWM0 MO޸nX~My$mQ)UW(}t]=@_ɛ@$e۳n˅zjDBGD OݻW )]bv ֍Ǚ_$E w'590,ҒHa-ncCRG']O5HPZ Q5@H|04Gy;\(wLY#);O.] Ʒ|Nie#M:d55}/N3A.!Hhg-R-nY>_paf]َWŘ UDWqs:P~H*BHoZcG0~1@\qηc ?dM\]˳^>˜^xp Y'q8'(P<\nK-Y xP\Lԕ6 ,u8uJg0Æu޺1Ҹϓ7f?dTޟѝ}8%bl{g|CwB^Nύ?7x^)!`H,J3IBjN ,rnU?J]Es 5L/&5b|E*6r: q\h3Q#&6wD:i 5z W*W:Z57{} HJnTqu }ϻF8oA"53JBΙ#n-z*+y5SҶ@*֩.A~A{@_Ļ2 ! 9b0qS<@Fı)EOnT4_ /ľ M{#@~)Bdխso- HWjpZbeU:*Ħ.23߯ܗ@eP(o+B#<-yi^L.JKB`d_x)yD(T ҲDoёS[7AEbatg[> t I?y# (Z+\6:#trp1w5f0vUDDIP_l9}И*8`6rY3 S%Py:uЋhă>Fmq}0@mۮ^tnm0ƶ ȉ\}zZ*"59z.Ҫ^ A40oaQQy!~j{L5_){fL vKf\̥mN`[3@B"Ej)[4;?0#'}/b:p/g S^V}I) FGӲE s*z{k*< 1ʟq8Pkg ve0vb,)}30XEz ]Ws?sBAb~%qI' z8ЉqRD4;|gNF}ZM=؞ZjJWhn&`'ZϙCn@ꔉ\g!mWsi|.\IɭCӤ#Nz8t) U}F܉j_n{h2kA!.lCFَ_RÈ1ԕXWi?݃ՉXA^i,K/@zwzF*^WŌ2&, q9}CmUYW7Ba ?LMg˨{({ 7j%SMe+ֵC%rCF #J1OB2C!XгEkܰ`Kn/n&8.$ U΀P'^Z|.HSYd"t/ޔIt[2]jlX*2Ĥ,;,~KnO/h-oq2drc%-Z+ASfѰw 0ܼ2/iHvB&MYL%Y0# ,zi:;l_TO} տ)bx䶿8'GCH*z ;Z8\-̾so-x>ɉzӱ],U%;:*@uL r:.wSmt,S]Wz{nr,%K }; Zs3_2pHQMsdx_ e(oOvH_{ d4*xbiMտ/hrP.3J|_[EŜHƼ'Z =u OVܯbys'zGug۾ ںd^im[nǕ^$|1w[/zPv؃p%VU.ɌF~M>[G7zzJfsjVn< *v<-n>3n5ˊZ9 5t9@X!O6Ѕiec~P ެH﷣DhY0(V) e$m<׶ ۝NE27H%BJ`GT:Մ9Eh2Ɖ̞"wmׇ%*VB8/^BZBtpVKA L@ pŶ`Fz FIPi Ŷm^JS#ث$HS8qnԊH$y'N ԷϢԎb&݇E=J3:\Yk!#'m{n0?Pf}Jշ@_Y$I:A@ʗ<V:N5hU_fj/jد7#7?aygoZ@afʊT-u ~];e8#hҪ[ ZHEhnx ~>s@$uT}/j}DR[QӥHq$`ҥK#'{/UY \/!  +n m,|v@YfGnvЮDEE%KsPv-ʲw'W܀aNY|kt,c7zTRY\[0ťS/wGMIUG *ԧӳUO 0N=9G  Fd>ӿ>oz j^Kut+:j~h2rG]$ʼnKԔ _`B%9}^bddS}6߯)u|&/!Ǡ4Ӡ9+}BpQmD})k_VtEm)p17;#j]%{9MSCJzZXN*#'t `['9R,,_<*ҊP7mip)@EPpxIOm-Xv,V*bqiCu6fl@6*RX\MȽapw1x %Ptj@r37qX\#\am 5"_=\YL62.B77^SSM;\%>V ƒmӒ%j&Pm,v֛8T@f ;Ľ+So'nH;,հIt4 (1l 8TU&B ޛhDVV0Ks)$s)%wzE%Zqk?VPCdB2w'dؒ;ADG伥/fQEۀ[ڃTX7'1P{/*S꫒$ R\ (ƃhoLH'zt5u0i]B!ppMȔb.TQZFr'V,bЇ@\5Po͞Fs#Πj~QF#7ޅ4g%;ȞќxRk^_o86 h})M©/jE)|7HB`䢲%sRBea"y8'D"t@D bUlb?  zj"jA'\Xk >̼#vk}~P"F&sf M/ ?DhQMc,MqJ7V ËR,)q]D5/Xds  ˼·U/@-`~mtHجnJR-3+a/ ww1]y6%Jն-n(ʬz=O;!Z'X99Ȧ 8ONo \Ϡn£_E[4d)BA]YZtO2͜y̪muĒSMnEҦ2Qz:߯dt[0 2E{Xy\(tAjyLRJ[ Y}/6 cPC쁎*9N4Y}< QҒO Tf!/`pETqZ ]*^1r,5}_}}TK5";&j$x aRBdqv`kwibi *b{cۨ Ibگ9Vkǡ} `:6mK{U?|!((Zή:ZM_SC?ֲ0`߆~{A|C')Vh>j?, ʛ¹EB ;+bNgNrX׋?VET?BonY"kѼ '56NTA o.8}p{@Ob\{k3VxӘ(H"+5l9cn WE( >V5"C[f UU2F1#YD ﵘw|,sId:|S#e/ j{ @$0L|@{@K,m'v bGD=0Y$5.>=dqVlQ|җioZPҵ;&{ᓾ@VPg֍ N泾ϫ^yD *aƌțL36tvG3<_ 5{#Xk۔7YS@E Rǫ,0^5(S r)rX9PR]4| 綗hJ&"A3BO"38PyJL7;~<8#Q.o7@E;~P6y ?YيvCˬ'\ت`:tbj>s Tn2Mf2-$,dXA~y󥭷n\g+׾~%nИ4>ܷJöC Fښ賂3\Pc5KS,(S]TXw (X}A~ԏ Rz-JQ> UҶ3}pj A +7GQEIFyg0M 0y>={Eyۃ!FzD_j"y^?Scic<??(~C.b+G#1& tu[4(EHAK0jwVz^"BMݷnJcu]OfCHYG|bzr?AAK|A׾ꙹСKr4?֛K\Uq/~;~ەA?z!dq$$5'<OdwdKYR:k`ꇌ3@ѭ #[ZM>;/AUwUŸc'YdWKHk퀒3NyG8PjPVhv}^SZTYslL DN`8!`ou"ۭ񡤫|?zlE޽eϜv}f#gQyҼ. /@i^#tJ̚5t%_ïݹ/5vq S=ݻsLcnB.(gmWgӲZ׸=ضjD)c*t%;~hW?vO\j<1>qVȢjmO49Ddd-!_G&~?y=A\[vv$9GOY2  ^t#zҾ> v4wЍNhZ wVꀈB.ϪB1_*7 J6hfmeHs"v!I/ctL{1X"uYO&x|TG{e@ [A.F/[MyOlT/Q=xh[27G;HyF>ѺPAĤnDNQ{WkTQĞ6?pCA'3 hdlHG7h5]?mYo} {JQ<˸Bsuuԣ->S5D&XA@^yE(Qb5_Xٚv74yuvv3HDPrWeȠd(M,&|y\vު1 j -1v73q˔Pc)/^BݑK}M Yo"2UHÈƽ3ůY`t+YED*}H&zM)Hs_iIL`{// Sx[ `~,]f(+FpxK{g [SWX+yNw&4,N DN)_˜ʋ 5Y?qoY6$uCZ(/0{=Q^ɄU{#YPM,3bb`= PꞦ孽GJfy<@Ssb=` 2m}m->d Lk+"J`c_*xM؋h+fzOsEë Eh]\!tz8A큅av>MN034PX&1amDwN/@Md?]U3D'G*B"N"" |ZvzGy$E5[мZk|+vlܛU`!msi]wn@ MM8iz V2NIVS1l;-zD(<4ڻ,{7:#E]vJ|{5$戽A+u{VjUr3;SxBPCE>@E,'#Xnbo:Sab8qi^2О.ٺHΈ)0~c%Jt@*m4>XAc0w#YaT4NMfBfpKL+g# >V> a/hD gg[xZ0Sx-\jY&PxAW o1! 7G llMq\x!4XHs ,H }mLwEI"yC.V__Aha_|rh/2㜗GkUDGAj? ;ەW6JaUS_K)i6 h.D?}Y\-GizڭϜHm~)rtXvl0ukO_ <髷An^sv߅s" tɏH=y=5&p,C2,^≟zCV0补LKڣ|/6Pm3Myc yrRc/6";L(gV0h"`NJZRk kDړ9O{p / (tV_߫~f0*g h@*l`+VbsսwjSQʜqmZ3 SG "(қ4rPBռlOSF4"{C"~ŀ>%Vw~VXV?:R ,y' ڤn8Tr:ElE h0iهة)͌5\f>⤦(Aa?6U7`hP1wxfΉe,[!9G bR{{ޟUٗAJr/asO~N%.gGid @T/`6Q EEgIǔ:uZvuU#'q^V>w\iк~k ,*T@a"Y*d*D.tl@ODKO\#cr3~7qzke5"nk~ =l}U#.R$ړ?4 ui/_bl4V?zw ɵ]ƽgR |9JYv_N)⟥ty7R{̳rPZ[xm[PEoȟ Uh~ =x+o^(mzh_=sv={YI;0%ӊ^)O(޴>)9|mB׫Si Uj4=SM:ZJN||q5řKLT3ԘXh΢WPS&YTXP>7=_X YFrƙϾ7C(P͇IJ'>G}aCqHї?/w7yL읰}o!EX6[Ľ*<ZYj-j&u|%}i/dZ:us ڃ%T QdBDQ0ctP \ ]e? EkWj[q` ӭ=|Pɷ$WԔ봇WV|VT,&=ʉzm^1Vc:i{1B 3k$f"! MO8NmCV[Sޟ - XIFC=IO7Tx{2(yX%~P{AU,ήɂ.nuߋ*t@9PŵP'FV %)u{f=-,)93H>e+ge?AaOs%'\@7iR҄Bv*ԡ |JaHWvXj\DL*'?b0 +懦!=ғ{K&.D}13^ T{jlyի<{+#gցDO=GPp!f=;rPC"( &֖P6P=d(4uI^ ۫ 5Ҥ{?+ Ea4Ur>c;?V7`*zN./.jԞDfky(PYG=>Rr:? B gx{3!tjs^&U>w ѵ=x- N3 }JҶ|f-o q2yTځARe n˅~6 /b$2mڕhGA!yOz0ϣY#=*)GOV5i Ҕ[q9d Ѝ`RXSog%gi]?]Pлpl!?(AYQg Φvo{ɒ3jsY Ւ.]x Io,zȼOw}8QT7TbsZd<iRMdsނ!j6DQ\@^h:^ʀ(ߒiDڎIz1#VQ- _@74w -㣷5[ p& F5޳Q10(3oޱuR! к~aޡ!3")5$R5猿:]50,QY~t8PC@a+gm.Q[b ?62 `?UA˩KLD)"1'X$Ghlx(z67>3QA7k@sw}#ɺρBi=gM;^꒬* U+rD^/?Hj'г0&yzI4{7!ѱw+ ڈEЛ)]?N:(Y z2v,"d#3*&9BMRڴП gU^q]eQ.EE>Hܡ ĠI$'Nle> 1ǩOyoQ}!/1Mkf==.-=1\b ;e@}OvtA2|mI 'Ѩҿ|"­k <,E`T%&SWECq㢬#pT`!pD"-=G'$.}؏MLْW!1 Ʀ"ws~WG|.`+]ɗ| TibBЖJg_5mf}؈BRphOY7L #.6[)/]+,BA4хdloڛy roޒHO& }";$Y͉,Ԟ}g|>BQIewbE'wɗ?kJvI 5hs(y9PPdHס:=DxOg?eD_s6R?,]cB`{fdQmVӘR$-/Q 4DS X nq DNkBV>ٗ3Ɇ {Ma9h/Ƽ@dO{eRr4ht2@k2pIzfUGOkoUA֥t}a0WXVFۙ}:J+f5nuHj=S7S2Z_d_UOz%CnWCcr_Ni{GK`+"׍8PJ !ұ<*a,.Bj~MSbycO0\ 1I|ljc=WE~a} 8On8P|&K/:Ü\% ,uy؃mI&;p[K=nG8Qvx&Ht5b\O5ːzP[nsSA7HCsA-uKZez$`WGeZ3O"@M+5B}ЦYdN,*BT=Hz|ͦA;=҅5jDÅSz:|蕌99U]'mIɦVCkA~&/_>6شsF!nׁ1l}PCNi)fIp(H)(B޽960(4s"-"rqfː{^'T*@(׍po堆E qf^J~@rl]&-$jT6Vl+bbLPDW# ]܊Bݰ%7Gq>Mڴ>J5+L˧1w&*}}7 im})w8*#tmOmWpj۹xa0yaaGC`H fk'eUa㣣1$SfvFQ_”r~t@^jjB(^/3?J>LyAId%mCJ}'t pA(;B7ZT=h=RBtE/[^ֈ3P3otp -)2J=ܝUCC9&iU5EB"%tJCwBU} Jp+F4[ x>}Y3]-*q햺3ˬq櫿Cze=@[Z\ 4=- wT.:Hh%# S{56_~L(%=2Dw]7$V <G lrнQnXR-{@o@=ۦK=E4tغjŠOz8֬ǺeSRʅ@T{QR)q6?^Qڡ[Vȭr޻ݺ>>kM.]GϦq)_׆阮.chy;ԭԡ 7XX_#csfŅXT>+"OZ?W?(N(~M)ByP B[#fM%Bo}+N)bWGW^8hqH)FhA3 ) id:vpC5-H'.}0emV"Yqj!V\ `N{)F1liRP$(5RY瓕> H ݧ0S{\[fϯv~2#~ ],ZwxL0T>6-3d cg< =0TH.N| #ż`Eu_D^E pHݼ˨6jpGJMұ@!N?QŖٿ@_z_؃O~&ȅƏjscɰ U1z><Y!GI xǔ{E  _y?Ț!Qep2A(/tm6\}F+>LA)Ȓ\Jgg=/#-J4@كN}#xIQ{K5.As"-lNI`R^im5bxE`v+Jx+Wgӧ{V[%!hQ Iu ~jäJVR'TjԊSst+:B@O6շSMDQUJ9q4 *-Rm v$UM1k8 Oֈd%N{0, V9:5;>B:zo&ۭ#AY /Jf^Tj͛b޶fj #5\",c2 F!rݹ̫8<{'dk.Js u}+QgQAA!q[:@ZN;=mqMW$%nj̴I Y{>i)UUNSNꡆ`0(퉵pSևZV5@c).XeSn^0 <ǂ^Cκ+/-ݢ=3?HORCaғ6iC.j=XÑ_lкLX4@~ 8NH0 k)z1I4}[+tSgy2+i^8 lz[DO`\Yj9T2>[$9objs:7$+\RQp~6 ~ӛnn^ީsh&hB QI6=[W\AF#[I)=SWiøcP1T 3-v@ꚗ|e;w|yZL|-2ɏy =ГK7p=6UIh=oE PCTZ՛.^E*2 d vgP_Gc(3j 1y8 nk)قݵNʖe_[B*]\ hcA(ݛz5j) Г«/RQ֦y }O04NתzuVd>4xb0|@(VJ'ґ32wGKCfy-UA ֞x"23h3 B`XL0 Zgԯ y4Uɡ3*Z=t.*K˺e|`P HiGƇ R2]|n jg7xϛbMjNQ~3T{R-@t;*n(Xd! V"!K"plxˬPg=_gc~nEUFs U<#kx g}j|JUs(D_u׆ =~L٣,qR#^8>d5"0p7O=g8ʭ['gA' huFD`uDnET4~R|nd*^2pH&]׋a unM ~zX<;8~LrAMӉ.BȻ[%=xTZ+m{b; UfR^ j?;Djظe' ԉ" y2hCrג7#dHKdVq;߉ UNFc"/m h<$#&Ldm8KN5E]$$iU}CflT,L+=qQTJ/@t6ܻ/_ɩĬB⡾0w3rn{* :/qȖԟZUm=oAGFz㉳x)9Km;Ḇ>6x*@ҋ_!*~}k;`>to.ܽ%'Y?HJUHG#$BvJ)*ϔ@/]V !mˍF?~}Ƹ VRvEYvUuyM懄kP3e5g@F+[>.O%;O>7 k)9P <Tآn;f#h*홻wqPB  CT;lET1{|z!̺>}@ z}J[ǿ30XIW宐?/rAWwm&rHYo Y"ԉ'Ю> < ,}+@~H$FZ]df}6x/xFd~3`>1&h] ZO z 2Uk v|3Zm?uPC9@ Wv[ؖ Gn8ϵK4LWdsa6-:Pn#KH_tE!0D_MjS>შ_T:BU2vN%)#wOݗB<Ɵ@ZEUN/˜Wu]t::g@ co9_EsB_EՄg?=xYwΈ˾vI.j6ӠiFȺBeo"ԸP98eAR{:g*AH?#WLT\|.q#{D%r>ffR(={@ |יATS ղ|{@\qÏ*({u$+E5+FoD5 ϤiDX-"OFzoIBZܦ'zZxyTw7;4)\pkˑ~$%V`&xP!U i ࠝbNCVX~z{I,9q@_Z/~Fy\20?wZ/q2qރ٧P)(¼1z]5İ_jm:ɪ t#{U2<$WSC"VzDAA=8vu$_{@ myzy$n[eCn[Pg6'w+&7g"|H#yTvI@jk"Oì[DvNqmeeXz Hf6_aWzXOmlTSn-W M)f"rZp{+Ww\<=Xiʉ9?䎮x%r%TqPNvoܚ<m4B5C4 &TE~9OcbŠ(۞Q@{P(Sĥ:>t9!YWW'б~Tl0 뉫|e]e=LAԤqoP;J%Gves}/F{EAElI*;(ʽV q"ƭfaU%?6?^_;D?w9玈UdWZ:m=P{4 y>.41Bp•z_W)[F [ Y)0wR=4 _y:C@Q_ᩪRi|82ozy}^L%!U*@D$H49/1]7j)Oj|>0|Tҷ?=0~PeF{Qzxu*PMv k3 ? V,H/+BRQ^efyTnS_Lsberlo&vHZoI}LS5@x{@*Srd}\K Cכ7c#-Lg򈕱h{?{f)c̢uXu3'Ft70_FRFyá<,G@FxᰩbsVqÄ~:xJ3 kk6dOUڍ)>>XzSӇ0Ӻ-vxRvEYݮ<~/ބ{URy.Q|yZ-uMB,)i!>ϝKݨvN?رXiksf܍,LK\*ϝi~Tp9l]["I* >YFU-"ڪ<:K ~ Z "@K]X9)Fi :e# 1oi7QQILFWv^sV:0P?"fG.tYbR5,Ԃ m$D)g{Fjo$J|uq Iy]ro[S jd<8՞tXYFJI!GܨKo{3H8B(1ݻ`lf19k?np뢎>Y%NH#hXܨKջB +n{nh7 ,bTr4tyڟ IS.K:QC0ݤϫ6sN/h{6KovvӪSEhl48)4b~L%_6=JAI5oԴlȜEA=EL S H-gyb|1:%Ϩ(~٠=$`M ؉Ȅq?}eexoՔxm=qǧՏ.*M(7ZH@P+"Gx~/T=q\>\y&&uFͽ*۾Wͩ 6m*c!qk{l='=o9'ݨ}+'jzE@抝9E>:Nw!v`ba:U֊pe2R 2Q S+,8ڍ9&;}q=8w k'H4k;(X_̍tY]Myn?A ]4w#c u)X=n'Sf%h^p7Sr'")b"!ݩ !{\)4,1xqa;Y4Y,r>GfNx`nW@qAecz|!kjNĈΆ0ُH :~P-`m(Y"6RR-7*0j "jieeW?wXנ=s>wZ2ݸKJ%oxH ?%m(zǤV SNMLSjwO?9[96"4 UΡxS3>hPh~S oRGt&Q_gnTCɦtdcfv) 5w'<ۄ @IE&7f)\wcQ[LnPKqCz .&HQ:UЯ>1<vCڊ<1*'#)] Zwnf dBW >4>Ct4,bT﬉Pwr{BqǽSCM =t*6#~,EREv<4ntwc.Sێ=>WvcCKľtYkki8 zJ?CL -1hũvƬWdvB(QWj@&oDՐsrwli&Pj +%_9\ЋKCkVS9rЅ{ӫU 3N/~ۇRJ_@at=4( .x\c%~ti\A~WTj?<垺/AFAҧxO,QeFllM MHEiM9oڠV$,zRZ tcBZe/:&VIӤ(֯jACElxs?GRڵL]:tѝrYiLdhQV%FE=I"^c*ө4L9z)x#NMy 15leV~0ښJtCp^ҀsjjD \4&vL ~m",f7;h/yr1KGKl7%G%waw+B{< {`m?W*>u>xqZfA!-盕b&FhhP!ݳ46YӈnhZu~y_h. #[fr?vRI{01\l&&MF-!%e؍kb47=Uk*ca ?4c0B8OFgReTG ~h:HUAizwbgE0ԑVQ%t{cH/ɭptU m $a΄<#e^ɾCY?O(K{Ȝ؍2í۱5Jj$ީ+&&W n_ \'xf%6a]u\]ӓ{E!KbEkKyaM:˄s] ]c#΋E4-W=?qa~7uZ]|XX^Qkk mAˇZ7zBL1 }xVTT٢d7a %n^]X﩮P\sz7aiZ>6"ET/%8Le$Jc]j6ɨx @7ޜ^J.%^yFczz!:3r6d@ۍ۝*j:g3Mt-ѭ іT" C2W *.cT4N6ry5jKݒ¼*!y&^ѤD작:I +F)PqRDt9و?0ȗҥgFr̽ {nt ]m0'PN+kOӴ.֐_oMy`Bm S#FXӯ*D !|RϨdRer7iȜPjo GW}UJk,[FKԗwGDT.St#$-o#MJPH1%0Kc"ō.K)GLkh fuoSYe) ^YY8uHY|$.n؍Y|?NmɸR ^7eKYtʼ$Sž̄`O_+1w*SA>ĞWNޱz< ēǞFd;庱qެ+4ҥ Q|E%Oݢ_;oGݐxyAv@KPud72QW#yu;9+Qɦxzcח5d7c ]>!`TS˗5Di+GU!hQ=D'+GwG>J_-K`}3]FP=O||m, hQ+5:|/ZѪє:W\[R; Mv}\vcP_pqk+jT~R@{Z1Fpvcnp%XrgmAVfW-$zk));PO2Un$/V1sp"(tнFaZ,K'vh"`[GU ]Cn8FQBxoL'~N窧^7e2d[yM`ۍ}IW͠^u;_֐>_2Ji|pj8C;pR.\s6<`nAEkhؓ=Et+S=Q-zF>ՁP|D{rNmUؾւ>(^}îOlWKg7j.MRzN<Ҕ; ,JbRKͺMHsj$ER \گp+YTi=;p"u_)~n$_B¸Myԏ5w-oo`XIMF'h,Gxu=4V5D1h߬-T (5OEa,ŭ^^O&[i;Cƾrd8WO$ZRzۙ4ưhy~Novq9'rQ} ЂmU0u;?S4GU 1sS$}&XlIGC-?~#N5Rkӱ+L߾OUFYZa{达 MP f` S }yz\![-x#_0ryՉAY7vb8NVwE ݞrrCKg)/w(N3x4tN)рA7=}TF(.0s?OLh40pFEHZ89h-s e i{Ǭ o 鍛t @y?.npn ln+N}T{F(b29d7Kyr1B>b9c]Nj!PZp'hy_ܨ~{{??|<转#A*qK?/ 2 &»?,INu7UYFRPQMqzIO/w.gOЅIzBxIU7Tݟۣқ푇H6`XF|SJT9ҮrO99k:GY"&[Ev#QSRj҂vC8HtA~8#ldvF&6 xI;ĹmoXj쿯Bseyb#:r2:V5"y~峚Zaz`CSr@ _w쿕@eG6NK:^?dد|Yfj/ֳREE!?UFO,;XlDH MԞnF:H8rqbXwcj K&;M>Nc)G< <2K##D7-lR^m:{Y§5Wl%hPr޿1۩+Vo? Mw'yf#h,<ߨ_L~3^yaY6>A|&,Zcjb]u1MCРdX2p,]ULqiFa oD`驙 ~ocGSmX`GC [8.y3fMY:$pVb-/Md0U?7ne2-feKھa4TuNn4хp7XTyV9.j)[풢b/&AFn,.:!~cٍ_ 6:Kn|qˊMJ=F~J ~d ܌e'q*2?˄"Uw7~bFfKZ(ff hv-=GRRfA0MxTDiZ▥qPd#˟n2:vc"g\MP.0#gN7pjdB M II aNfohP\2|R,Jǩf3nX%YpWrlk^"㹟ٿÿ+uHf\#ݮS+!/%w)4Ɗݠ)vn_ ,NfDq`? e4e~Ex6@phtަ##*b訢B2j:8k\3d~(=o d'*?5_78CMb{ 0pSťc"UxQӭLv'fR|-vsݬlz}4K G SEy hr77XGh,XzLV&LYYeĬ/ j0h6أ\Tź>׆tn}㙁 d&5@ى'L|5s/_d s<<2~Wΐ?qOiy0©1w{'dP S*k~IYB^RKo&4FagFnDUr2A 5qIJǭъ*#%{_)Iu h}tO)*BۍRo݄Fx8"tܨs wsHr\g4%ޙS:YxZwRbDAAIm~\wݫIPD*py;!z '/J̢Q4FJ%|?Z>A#^h`1TeynɞцXwKzd|RK72J<:+͏5Ŵrr=&']sOA>+x2}.q  B+Wx:]X`:{zMQG#^xbvb>OwQc5+/1%4iv˳) ۍ2P|յF(gN&e`WV7t߸V[ظ" jiB _yzUkb91EKXqx4{ARA/|NʬQ<=R4#%+h#کq>{D~V1@ܬ#H2-p#)a (TbE"k~ꈑ7~]3s;_d"7(5aYMWJPBmo>,cRNU:wR~3a޼2z!}Q|,Uƫ׻c҈*=cV]PW(vV$GkJi.5%{wDɁze7>իv&BF#h;f>3iLgC\TgDFTnbƸDqLMNP7WḩZ([=G Y5dP{t9=eŮ)}Яw^S SBevc2Ƕxmr\k؋ۀO_z#DيnۧoGHH* 7fwgҽҮl/q. n#zCyr;U?Q$ws[/#CR6 ܞ$X጖fڱN˂]Te;^'ۛZݖuj pU7|'{?3 4MԪ_}d^߈nUG~nMDժKت*uC7ܼar,\G ܻ~.Z|dpeVm%˂ .0̫ =ck} gߗ>yUMfp=q=q(V3zM sa~m+J8X#s34lB7n̏QV=vCr?Ϭt6KAȳlVf;$j7c3jD'otk*ժJ~qXoH0Ze _($g3^hBL Eˌi𞠶?~]ELO:+,֩qXϱp4b *3qլ8}eqK&_S%h)o"\NE!J`FcUky2:Îx/ۛGawѦAb֏6'qZ=KvJ$;|6\hQEvU;j}ٍ,.GfM 9Տ7O1?DX rYqjgT#'?Zf <5h)&_dWJ3 %;uGtQ^ԉG5D򖷬'E|^5d7[Vd=Yh:1.Y_E&ՀNli@!:j jn4zF֑yTSeFcEwP9kpuV-4vg3:O2ݷa Y9l΅6!B)Y]~wИ39kn,|7n}^x.3*ڸEuf0 Om!*] 3^,p#O! v4bNEBCngu@(xwt\'^"(.S{$ דٯb+o'O>QAruۋ6Eg4Qt`D%Fti/H)~!eEϨvܿeg:YQkuOĜU|dԐɼXFm!.qTiWDRZuXUc:EY4G𑡠}0w&>:䬋4TmC #3y|3K 7}[)пSd*>Ǘ6spgy9nd+}sQqp7T<02ڙ@qTZI` ٍz5ՅO!䖏dlg̻)VOJgJNI4ߣՆY2;t6c oT^N,?j~pEY7hhitŜ{#N}͐ rf@RS©$FqY4^:^݀Kf$DH~dA-IthuM-w61A^ov#] jx"bݺru ˀ rG)OYiH.fW|Q?i]r䔤򪂵SQd Ks>_鲔SeGNl'udVGІj@#:+̾)Jud콾ՉQ 躄vG-N|;9rfyWRtf?\%QOVV`2k> 3!8psVf9w "mxL2\-$Y'دoZ*MJ`TQgN=Nz1j%+=$GNYD*WH8fQ7݇rflEhQ`s;΅vdr&`C~җu9Q%1GZRׅոIuGYXt6RuWˋ?KX/)3lB۹mM O}c]YGx  wi~LfBEP5xz>h]7.ߔ"*FE{ŀ8ג߳+#-HLcYCK*v~MiŌ_G9yA53sKzP8{C&2@rm&SiB (ڍF;LM~-5 +gEyuЧ*DGcE/++8 +RL/UNݯ~^$߉#aVϹi4IQ?# ,W߽6'"o~4shd'}^|XQ[pQ%<\6"]ο귱$baajSO#oqZ{ eXV"}uD b/<!St3SW5ttJ iGQo+r}.snjEXGD#3вwl9iۍ>"^PفHsA7{*L"F==H[ְ#za}L=}6FMSXlAŕ?Ez-MG9'EG v]AF6F}Ѧ˂`PZvcZ+Hc۰FxDϯto4"|n|ud7]`)Cp{gfKϝ݉L)@_} Q%[v 3*>BIAe 鋏hoV6[xjD8U}e<AOWv۰(Sq>aLIA^t(qh7%yK;LD49{'^؞\uXGv|Ve/Ǟq?!4]5+^ה9ʣ |~caU@Usb|ōڍetc/jHuj9NYx1/?縷^:9EG!Kr^_ U6iT>)D#z^rI5_BWAs­K`ZQf}}.2\x~jGeD߬Z֦4'V!AøXv\J4 1%xLdO͒ǖ[%^?]7GC+x\h2~mRՁwpU'a٣"nT0hݟHrݠT`M4kjlo߆uL m*zt7-@욮իB ZI7Ż}'uPC55]մw[wi%Fw63 VFէf5YŬ@ro5+(o0Xa Hy[z.Y|T\)'d.֑H>cS۵SCF>69?=1Py\R O?HnIc릺 Rݡ8ҷjbQruqAE -Zx`sGx/7G6FC'Mގ2vhRj%; 8q"*b7Tc(J{PL5zw v.UDsBꬦ, *(*#q}}h }asVS;.?tqjK=/dS_7l7:ެtHnA a[DB-j:r%]1_n tYc^IAV?1Cgtӓfm1] 97IATB&glXRyW<#}{5ӰݰN9Q:l9j =Є|#;xs/}80x6C垟NG~cFkh^_. o${eA?=-V2Wp-0gM(}ww[vdnjP2vo?!0Z b( Rև5d_)R"7ƶM5]R;ޯrZ]r9q[8q;,5=)q=u>sʏ|r~~,ڇ Po?-Է_RPgKSJ`? &$eFj=G`cÂĔ&R]MrGoK^ 8#27{z.׆K·y'F^#k]=GY)4wm8Tjy({0P$'xJk*Ma]V=7s99LRԪiuBpIVq *6\w>Tx@ ԴО݁3B=%_r}gY+sO]\ͭ]\)kÜ4岄#޿BHњF©;[ZC9Ө,vՄ)yPV_"[L)W\扯n !4:n¨jT?TpQr57VA]wc;)zoBʏD# g/l(l?)rFm{Wʶ,=_Kk(-?~DEoNAjNm4"v{9}SK&|ZbZˑ-`c@*c(%]8D]q` ]U|OC1.5yxzv'Q0*D~'GT>t%1L}~4٫DJsz=&Ȟ, u+fݻn#=71C\I`ް5Rf,ا|6d1wMK&^ocgj팶-r1?7;E*g}g?B#߸&y X*q^>M<.A1h "XN3Q/pD3l.H'/j{Vkc<)O`:S5[斂I~VF17mYca9 ۧ Kx[U?7nX\@d鿲%E3^OR*Ȍb?7j;T jPqkWls^eŠwC:et13cLbdK9FYnN3fCΐ?"5Ljz9.k,ya ZEC)"M!;UkfsEv_G`P'yG~1T?]oWURM"IJӮ%M \TH=D(kAh)_h5\@ȣQa5b7q ^C#0wt}>JsWk1otKZqq(kR?J}[ "q@yOYZE R⽞xkE=/щ>F*O y5ʦB,~71_e!~?$_fIQN$j#[UN<&V;V`㠁иzET Ez Y;@XNrQlKGݛRgjᛎ]}Ƨ[Gvc(ɗP޴ϬpɇWBxI}kIl$~9P̉&9 rS+*޺AfNo LK |-|ќo'FƔ-hMcQ_BcUn6?% qPcZKL੧l@H< x8ʑ2Fԣz1#Z`$aJ;D%2YpSmʠW]F _^=c .NK%Z"xn=E 9̷oh3(642*ϻ::HdF5@KuMsmDw}m7qXzT`-Q{c)Ԡʍ{~lb.޵oy򳑿KWHUKt*ΥU?QgF6sѝ;:Bc.Mh ౵^Cu)YcV58?q:=cME E6߬_{8?}5d*S@ c!EUM~Ɵ`O|.Bt؟+%>0ݽ^nJSnm_ HPGJ֖*/\c \Nkߋ@k~F\/ƪ>dًFнdzFV23tQ}k9X3Zzi[yo߶~#,]\Jq lF]2ɬ%[nDCP1r1ʕaPMwJex$V:Bk 8c6{etj0 pb+WEbB_=qbDT)S{m[`/l405O];D` …n-Wm"͒jaD:UT'Ɲ1YU} x90B/o1% Pja/pNEwȆ녝ٍlMNCc1wasy`W ͿsS:F ;x[ϻ~X D6v\QKTCZ %+XyKK(Tq")FW~SX ]~pJݏݵA f'jyeǐ)5jHP\9Mӟ6LzEX~n2<#iQvL@86)+F {_r;MkuaV%ѝY=*cG|&Oy:NaH:؋.xVY]uz+N!@Tˊqnht4,egHTҪϯ2yt=7?\w]U#lr 4]'?|nSD=XC(7öܺXC()Vke}3x FB6L5w("c`mkF'B<\؛@%X՝aAe bE&:,C0u_i?p#xV("*YsULEmg~*b`El[/k[ÎS[4(ab}^uK%7HekcI9v# gZ>xY{ꕚ0Qap5EfžOŢ_|[ݽ%/c (4(YVjo`<>Z?ް`LM'xϏudb1`929%~SPյdҩ'2R+TFA7)k>g;=]|ҰqL^CTb'o߆^r]uVkȠ>,jWI)Ƙ l鋎l"%^ 8"2hHjd#%p)omc6ht2WݯIuϼrhPF $9S// Nq5dw󒔢H(~UZ?! G7~ 4!h \5tn?gY;ե5-)t@uYzY~H(GIk2<}(Cv}S(|Y*0TT!Z H I04cޚX^ŎUXAm1E#gBH+1PáPͦ/?XZ(JmQԭ^o$bܗ1!z&eR#ُʧd?>|:Ʉ(6}-z[WVUv_-+8t -gV2ȇiQ-ީX|M:RIJJqm)Z/d^&MzIwGX o|Aw|H;4PS| _/7ʦ0X^2l^=_;_0=kZuQ$`_q&DFݽX▐\R,ByX}ATZ6kV6X]kQɏ?v# ,Y˛u5=~_eW=z 0~(+] @&|S9nCP+?`S)bt$1Fc>%Jhv7Eг߹~l#WRwO+HOi7*ŦasWL{akW@ɀK}qƀ6 vߍ`VсhWY|ծxr~A 4SUB$2 1_$G59LfuzE.m)vJ,C>G8e4V!Ȇb͖sj2ƩV[ 7zT$5 Ģ'#Ω*rd 4Sڃ0]w'zY#Bņ̽]q(bJ Sڍ=t!z 7W.5|t` ssw3"ض$U[6'Z)\{LǾUDjF=q=tj n"սvϓ0[^A.iܧf%?Tڋ>m4/b^7;;k dI } &%߱4:or&_Tb2bK,5v8 Č?㈗{]F^վ k>Gw&n,EX&L?^-y7[Ke{L5=kSW}QiO/5c=ys7ʹ~^S8۟weV8(hY\8qB~Y5b)î: "{%*qJBJ]_@o‹Q=%w| ~JrIr%bA#`^> 3:o; ռeխUC-QZ-_̀)e1PenϩC GO;})lEs=[}т2-2U7-#ך^%C¾޲[Y>aGÇe"˖2e&ZV#{$1~ٍ[ƸgUm q~S)x +w}nL^`Ϩ둞CEieԨ*'P|,J#2z'q&-0zXYBAC ͣ )X5ϸ Nq2 jۻ0,[0E|+;$Vjj\6K1#g9hzDu;%E_4+v_?8~C %ABeYl/(1)qkaƞMĵZ]s!_d7.4R8jʠ٥WTKdKV9.v#ACG.5}e0$N`DV]e8Am/`L[VT l7n9~ H,9uרPbᣠhܣqwxlo k-;R@jˑJ:8k%38-3;f{jV=v-&9fAC;Yn Q59z ,|xafؙXc`MqP $cg׍kI|&{5?33+v Ϸ'\FVߥO~F@}: ڏ}׻q d-" [[$־_er֙@ݔ1G|tr0c(}M|"عOiJn=)"$cEΎCks$$z9=yi-3_?U s<]_(xP/W:$Dvv)D}34\b;M"m8 g VŨK Q u-߱"i=[aWj9~XG,6} Inn3qBUެ2W؀26Fes=kYGĢX01mo;cg55P};LߙLۮÔ-o5ܘ% u@iW{Ӫ^y#]C+ *@WugZgqNc8$WGw ֞4(-;׏oێQ ED(N*yus)3_i}q{ eotIJ@;B/%u`L!P;9>1mD͓3P^Ъ,_?dۮE׷$?VnaJURj3$u;5) B?Yb(=Zvo^$ˌ"['eUTYPdŝ"B !xN192fZ&wU=F<:0Q?,`'F$[lGl>^4{Ƒ{vVXol7mNkO;P8'_|٦ÿ*(8蒳d1}3\90 .E zlPoӍfnqYգh2d r`O: m/E؅yDȗͧ*/:PZcq)O5vވiӣ?@rOv"k6ub9k82~7~u5iS|k^M.bffc8NLj59ytVxJo8(M1z|!\lxӧj?Cݧ{$V@rLgdut1n-#=|P@*σ^,95,mprԎـ^'>ۭջv>3[<6#^D~ uǪ8lyAlY/ uk{,](>Ks*2dVQfdw*u <@sKbgV' zw'@"2) G5,Jz0(kvA:P=h98`1 gSz߫vRyTân٩9pQϗ8;92ԣ ]:N4f0@_6EϘ Jt+-E1:hCl[A9y[yx#fkaBw}3xIVMڃZL- AΩFqX .H9^ wAJ#_ؗ&WguZwN1/zdؙ\Z13K;8 Oѹts( 7àwO#z.7:P4>s~~G= LvZ<3Ѳf{ Hm׻+[-T!y4 wl*zt2;{  h:Ks}>AƵ }4Y. [[I.(p$y:F_j_֑(\{!$_B_8<:6Z87=e ^ιG \geɋ$<]";t E_{_qy5CAA QWA2?~^ALD)ung5ܫ#A݌Ҷj V3Bu$Kmv,T=#=f%<3{j"@)+X+mس$DKeD`6Q:!Ȓ]Gny,!g8,?S;FIASfݎhT:i{LrsPv;SfO/[S?o bCďs #x4(1{}Pn>ѩw ڊ~ktUaXef Qoh&O<+k#"ϗȤ 3 BvA\`{7V Ke#>n9=ƤǓY>eu5 ubV:Ӭ#gy; [9;ݺ~1)E3m^G&L7vģJ.+1u)1bz{yI@ƒb09SC?ĤFWGՕ] P-tG]ڱI?Mxޅ:;P$G>yP(>ٱFw|'l<#w9ԙK6'Ya/6O;I|BDۻD;dy ٛ]T>d#>shb#N6[iwWL. (J! 6wķ0hBoeMѺ}!r,usMʳ"w*߹a =R>χ9<Fk?OJ.~Ee5s˼aAn}g+< 9fqU3#<G-%G3cnԞA1J/I*'9W iA;=_ P}{ŁXZۺtFWg+ WsNFxrjѢl|p ـ.Ƽ٩̻shߋH8E)яDB3;58_ٱ)h 0]&~-{Z|>6ⶏ FbUg6-j-Շweu+ߏ =4dە;(2^u/Aq?"E_sֲa5&Od{GZ3ծll`NeM~ r_;#z+;60CAV'Hb*4Ԯ4Ӯ@TzΏQ(vʺcKw3[Q׌VP?㜊q3ݰhWNE6T3 2|pѡBt2 wKKVP׶:2Q4.I+#0rF (G""lۼrQ>ďecɽ΀xedwc{}.ۈq t'y)!nQ7@|C"a۪7d(/@a+}rfz`"ޮ>yr11qn ؿ!%P^fw&|hs jծ~,^r+ 딮-mldON;;YG9jև]d/h d N> N7:~@!8uȯ&Z8b,J{ۊԩ:2s^qŮ0qS`6Rmm5:l  \H=vfv+mBIfFO ӀBN|{Ȼ|"E%7!B+wь`b9@ݺ@T4U˛7B븅y9a}7y>~ ,#$歾pG&hP0ߜN ,Wa v%\+oѮlrjG*x1yS :-uDk^hp| ?L0XE'l*ʃ"**zuDg,|aI> cC9nhC%&m 1I|gviʭت&ci?y3Riz)n'm [8NQ?uŹ^#~!I~ag4@}HǼdKbD@gjk~!Rsn̎tUtl}&})l؎!HZ5t<*鯻Y{C[a 3*Phg^Z&T/=ϣCkF@B״6$|EYmբޑ`W&}|Y_*nwKx)<@ʏTYBr[9B0JЭ 6y%lS D҂&N5ϵrqk?7} :=R4m ylj[rpȟⶻ`3ࢗα^= u2EYA+9=۶w|XG(mUTBQ[Je~e0K4F_wl䃷`z.lUλscX9יJ̭xwALȪj34:*k=v=l¾O?i=UtʦmoEiYud⇧m D}Np~Rg8Ӌelz>&= T|h>^;eKLi_,Gd52vr bWqr6'qߵn%O}yZGxȡX|;$1JXo9| ʼn'ZT hBI$#I>D>O06N1krfI1bȑן+wbJ~}* mׂ G*mP#W$yȱ خe>qj Q"zзj;b9{\UqlT[.ܩI 4#{禾O aEfWsX}E~Fiuʠ)JyX܀bn3YisRgSSFK*-ގ}#A tkq)R?ԏwvz'fKw>P0yб'ȱ3_IVm D&Ah9F[޾Z%k@,8ޜ(e !F8"O- =()Q)a%|^IїqPu9oEzx1Rk  ?#6h҈ s曊G*!ϮZnh9 }/:l|5WaCʯd: T45*7Pަk(; ۾mSDe(v5|!ʁ͑U\ΓnmNd|ܫDKVB];8w:!~GIKWFk+dͥtǚMxnxgĶ?ꋪ TN8}qcA<`@7zQ"Q+>uʵQ:By"iG4{ZȸS6PyG%},MFCJ3V**~Xφa*V=\$[(N?#6v5Z(@dcA/eiT2xPԖAi7:tL%{žd_GkFE`d+=gH?-uN~jyL*|VB.@C+CBh^tzّ>aj`;$`>~#ۢ&%!v{|= ,Z<(vѕFG׫l@ :HĻKF7ǡd ?;Kcz}YCE"[Н&a&x7Jt R,})h&͗H3 Ð}xZA,=*'[ܱ| 9%xǖWMSw߷]k1]kuY$&RzA/RE%]Fn  ^h15s|3:^);ӱ=xQr,d}Zd%t~A$U:J|ls };9ǂp  ϓmqr(sj/˹Ѥ(-kmДVOoQ8[-ؙM{g<3{^UQ7u{Z~RTooii)E{(V+U~(obR^ŠW1$EFl8[϶xֵuOMNc꭯^Qy=2rũs(\dȧ=G5\aI'cuDvwk,~>TAY-wBtZ)Cuݾ1s՗wN2OEFշdA0 Vx4lwCu&ؠiaB;CfOĖA"a;o0K(:=GnWmČ`@h9ݕHɨEAeʞBvW%#Og`zxNOGKd# PX=b{$]KSr̀^Ҭֹb ~-#h 'l<`MEKV(ia,KV2,Q#KoL9W-O``npbo Ι#*?f?'^ޏ,jaY;+ZF3lArA~yyꢼ;f!-r>m{z:`I$.;Dt^_SotY1㸴\LkpY.C۲5Xr̺ގO8)ѱeVXG MvVN p6j#~~hxgrNA(guA 2ڙʋ;x(AxG{.},,H`2](!pLg7D[; sBilX0|dQ&[JGV#b4Leǒ9ebN33a)<=ߩb@MuN}/,}L KZ~/DZlCn2:qmFlP; Y笿rV EB0 (z-fgBdi?Җ߾C#,>r8/9@X??>g5(tߓfxV_#٬m: )i֓ݙu3S>ɥm%^_R!Y<2y4j+H\jf 6K5~ة2!YۛPH&vAQeyfط*m [Ho\uj-^R=3wlB?gW<B\_#5Wh=Ńh_vyF~s@qo}Z?֌GFJsq\{uv6ڑ]kU݁с*khȊ'1A vQ(>oV{㒈ƶdGvu%e"g[Vei2آ]oK+Lٳ&/K| նg{'- %?nyd{Uv˰nP3є;Ga>]^5SۯD3.Lnd(:C#hw \dfZiX5V^E6Ҧ.;Vܔ0aS6/%]b?bu`tV%IQȷ58ӏZu-ɞi m-`6iLif rb & d&W iv7,_nL"r\+]ɬ# Ý{IoϿbĝ{8zo^:XhPml 'k_X@~^vDݻ!"~N"Zgl 6?8T#i ;8SS?`:v.7O1ɴCTgrLO轿@fYixu#'$`ю)].ۑęzOa1=?R 6-qV2͐u=aXVUx^3.ŃZwmԔwqf{vhFTCc6ܱ 7;ӰLDOݶN= pƅNHr'>rJ}⋚ښXFS cn=YG6r:\\FdS\;c60#< ja/v G6mnmqSd;&Jz޴(*̈́3lVI]S;Ơsatվw+q '_G'Љ0xbb ֭8,R#lϬ!4hRWi>.o;:McGKju'?϶8L"ʶ13KI]v=}.W_V \36;ÚwNG@85H @m{o>g͠H$ U@(+Zf!Hf{~¤_>c 鎳ּ9.nԎCP=Yk^5l Q}2[w˫4&]ud@hq!Տ^jnL$fxw[^BB.e0x>Щ;P[Jy%WUwFufU;W]nۙmj8~-<\ כLǗnf;v7*Y߿Ēr"=~鑭sHй_QJ$f;uQ!&t*Wh=':b5m<[3/~)ZK|ZJ x̘' "hR[䞎qƈMNmf'Ȱud[ ETdX4h1eم6OO{V~s~4'fx#29{7Z\3ͤ u±]G 1ܺ"0(GVT?do2jNVֽV!*ɛD 3WCl;{2@ӀR@ahl #5b'-Bk;=Lۀ`B>:z'"uj2,(@t/п T][ F[ t?~ h|œgPHS rʼ`G/"Cy[6X[d)k(2/XEMC}P̬<3+7 /O.``BGRAm$J娶r6S~+WG+R vkx}xJ4LFim&zѡa]U䚮%@|dXdI DE#؁zC9.$ 0xU-Ĕl 鮌8wU75۞Y͗C-^c6,9Κ/a˦Ukq.:MǨ|$8IÓ'e A^֐v$77oÅF7K]%Cq'%F ssZ`ֈk<TYSUj- `P}| 5Vw4_%ZWjx4F"/ݙAE%az7>4HagrA4k[Z \>xdbo=>̞] 6Rh8[$G'xxYd[ EuT@'v6A+>PIhbD=B+sU=zA}VnNv:dlsSjCT9ۓTtv V+8gc1*a5]ME;Fei\FDFcsP^N:|Ƴ#9/;SSe8fMeh6۾,w2$$̊ewlo5]"~Ge' xLs3*Υ{2muL A_آrlG[;KCPWuˍ56GAhёѕU766V5l/:fCy3W jv+%r~ 1aWDqA g~x 9v|"]S/v"撥Bp̮X,%sԒ)^xRA;D;DJ.7:J[{W/x*Ojg쉹X(|cPq-nČguUGtA{0򬴉b{<%E¯K*j2g;[WA{SC؆}݃ZF+qtvج!=IZD|GnЁ^湖! HYj]bU%ۜ^C!cL4<|/M̟72f5ߠ4Qu|O2$6Gw)6>YgxUC#{%<7x)^hk^ QÚzٙz:ZN ϽgfYQ0Vz˧Nll,'M[G|G[e}--I{R8|mC, [ (͝/glNLt} *ak9Ϥ&cy,6(°.ñj=!YFi/ Aƿărc(xNz)kGeAѠPd[wsKVknN:\^y2X6J5lAXGc7Bggde/} v)8e8qt}/VPnXUS.Syp:] ck9YRuu!!}P6>W:{ѓUtƾH]a "X<б/WPsZ,cg:rhlYO܍nMd"@툌>9Emnģ㐵Ra\fv櫶rȃPPS%/TEceCOLp1O|KK{i]m-:(V%fZ 3`mm֦!^#吷,ʹ>/,b ouޅ<vݯϮ\Kt-iY m6\|&DpDR8& *GOYGjJR4]wH2.Pd'QF~% "??\xKꆒ4#^[l[$bub7[0P4 d-~‚@BUs\zGa6\!뫓zȿ "RWXS.r?H2,>]?:?ZZn 6pH&A}NB;"~ :Ŏ{s7Ш`HR sp7ᔄ/!F+{Pr?'˩S91.?A0t]o^wZ +ݠ!y'8dx]\~3E EW?Uc˃^Jp7'w )+#]gP=)OLo H$`ˠ>ـji|h emJծe0vv d3]e^F$خ`)^TSNqHIh"k_ӍY濗߈%-"iÊ8YPvE͕nMB֪ւ9 5[BDtE?|+I N|MI-UYg݋{薚@(M 9  &F< (a[l/"}V?[[/<(hooiWuk8 )ݶ_Vy\?tVIjvE? }JKUǒz;Z/mwJּv;h&g'S 7j.8g?NotIk]LN&k;=mB$q, (nINQdiB~x4Er hHۮ]1^.\ញ2zUbzu9юAꄮ@m=MoPyƯI\Om?El5#3z|E)y{{TA*D@G N14`H QɵyX̸,@GČc:'#9ltXR_ohbb?"Z뭇Z'N5<.o7JLa x4<Р9r(oӛajkmH)Á#֚N꿞h;& D/_QD}6 ԠONKWvH=$ }4#_NiR9G J)n#ޠ)0`HB>Zo=n`<^K]. 3 uO6G Q&^ LZ=xMM]gjx!+Ev K+ꆮ}!mwt(`:ojqDuܱYRUY W,R~kmn9/cEhI,>mT(?D)rS׳==Fmc{'f`H" wg9=>ii s3yw R31BхͣGbs_ySp+11}(nw)NHeE`R swpZidQlIZvGg_[z9c% a; N(O[9éА9q$k&WݑnB eˬ0n RTK Ax+ޥ>eBMHH6 /^ceizƣd:l'V #)vuw?EHiO=c^'ȯ/*VweWIQLʸé;f12X+hL_6'2:h0$);쇞֏wicx<' #I-07S@0t&UXOԌ6y~wR$>Z]~~Z }ڔ5vځ~I,\AkA|%}ІAJ.>v=ԃ?]{쭕i%_D/}^sR (q̩k>`H1y1ap]R~FF,uG`ؙ>{!~fzt9]?; VI-9I jx0$nU P V C1˚=[;YDsؒuixI܁'zܰ-$8s}ﲁ\|Sx?zWcqC`JKSz=Q2܁Pf7tdEoe.HZ;2o1^eqa M' ͣ,mI`T#]1Z%oElͅ'ڕ{̍v>txUN*6 fSt$T'3-խ8N|ᐖROђF7;Ho2\qN`t>f9] x=J zeyێ[n:d֛eUI1U}j ƅQ,Oل}vG0E^ZB`я OD1,׌C&|ƫ'CFR9uA-V'"RaY$3vU1#m)ĀVYݡʭ,ZĀ]W絹 55~پm\zk)Ťωn:QR>Gqkz:  }ӫ,`%5r!9L'ݪ$BS^^@q7'Ii*њKF-ҊN 22Y&Eʲ(?/9RMJnn?1HN%jX_jگ G',M_i[b⡖>Y -a$ҝ܌z6 YZ[Ԉ`8ep+7s-L$0T|qRֿx7N-!fՉGDw;\$}o۲ywG6KnKe\r)p U|l)r1syYA95d A Us⒯ʴe)^IC*2$UX'CXy/ #B1%h*];b \KZ:']J%~h0 Zh],hUst?yD^ww " bR5p;1?Hn6m8RDwO$Go*Sįclݎ//  I Gܲp˨R^gv+NIF\ הncm% .zhU,RߜmMIg o*"N)v̒Y=H.}L֟ alx 4a{þIsE+Z4lUhHru( FLaLY֨7}<_ AY~CRx;HDSe\hւ%hպjh e% rl¾λ][i8peuHi4+\Ƈ%pe0:Vp29ݮ6Gg0$90x@;YU+khT\cymc䘗y߁*WeR{ VN**WnIKߖ{:޲ri%K 8ܣ&:7v,բ89Sgs'o |5zDܶe4nwЌ0$|[<=Es1lM쌖{L[F(xG -{Jo$|c`F͵9[dاl=4AG< W/')*bD2s`oq;wFahɪaeK?4\#|,A~9LR7/ݣy>ݔbCK`΍`HG6s>n== #!FIܫFW J6`0tL );ҩ[a!'#%yKDY8Z~kwjDa$u[B'-7I 4 vst,0s]$Tr&}7v 8RMs*㍦HZI<9{P(}¥zlyqUGqI7}h۟ucKJ*qi%搏kI|V$H[ב\²,ׯ c-KamŽIe{񽽌S }N0yqH$j'x7Λ岤r]Jd--3= CZ@b9:Qq`naBnȕ٘s|~?Vi1M=:z=I}[%u+Zހ}鮯o$- V#J8>#'I9@Do[a*ͤFU!s{9e[+@ ezBHDӎuv j,Jn'zm;1HcZSi>K+/ qxn3($5*(tP*,@KЂJRsx!y:8dI#ߌr Y sz>X()G|;GaN[!VZ6X9XH;"}BjޟVJ̎]׳H^X&jt~ H6J؝jXm-_L9`8n<{ka [m*ՒTи?< IcycTe歩b=zaT_VެVvit^=-SBZEDD;[_˂\^I^oJus*a8>F,SE׮h>v #X1ݵ F/} +A[CZ>QnxMw0t8>^Jb'KE94R36r@]Vi!tб:okG% -IRhL"ݞ'ZXg4*㵕>/x\b! SC)71f_+ѐE>`Ah~{nmgFL$C:H;Gv[No9z=q{pƼtw𔓮^p4uFe|UD0^|/pnJx$Z)?zI"Ty2 A Lkhj) ۆbe>N'NIsR1E 4Tx\'-Vsy8 V@x{.&p>-ӆ2 R#6_\ {`LksC/L&-Ы5;y=TyS9e;Jp'xi<ڛF3.NQ~WrK!Z6$!Z͜-'X$#;UΨFܬ?=fn< XDt[KøV~'4>_{@&Iv1tAjl;,NN0ֽH^cbyz@K'vL;U!` X1G9W+͓N9;e]ɱ+ΚKQ %zw;e~tDK9%GtF_6u"5>| KdtA&G)öBȧ~lRZzir豓e.i,zsw\z-nV<pʳܝAW%KU 5Wf=&2kV@"Ց=42G Oφu] H(^Uc96+20-h_qH _៾u'9jKVI5cP_aS_Dم aKgHְp(2%lKm\ pHwȝwh .G_bm9DNRC-^[9lw)$usxb%C}8& >ډމ5 ,=& ~4IB䔘׉;\W}aQE2cfh^c #Ot8=IN2>Y! /&eU6pKpzۣNioJq-!J~,u8l9'^%qYpH஬''\hQ6Xi~η[9l-8YSoml)6at\mȤ2@7MRXЉvÐ:G|8`h#a}~ Ca^бvXwX- FIR6T ϡ4s!U $x@ S_i:!uJ&yAamK! -)$|`RCp4 o(<]3M [kugxغP])1K$>ѿJzs SߍL1L} u'fS~.a6E~5^XK->qHBhѯV^O{ 0Rz@ԜaׅYGO;ִUSک c/f-a]zsf$+yϊqPD61@N (J3imYy3˺pBF賜;mo>h0v *B(ãչj[0*i1Jv3^a~-z/Hך,2 ([cxmg>^[6x{t,,C#;T uI5N$/b[QIa=`X墶[ic$uTͅҰt[dd:KTҼ= wX1|4LS<6 #>$<ޠ,!6SU){(h=eԗ1)n*>;;=&v\9X@>H\X֌9Lf:~nƁ;C}XaM"r!i86tJ l$:Bk~EҊݘe^o%QG)?z-k "dt208FDb:iv7}o@(s\-ֹY<[ЃB?i@-zwU2 xG!͇4_5:;9Ҥ)FG 4b^Fvi<>=0/&)sMX1\d@޴?[8/ڽ(^nU^1B^Oo.@ʂG˔z݉J\/PO_h'Zr#g}^yz,‡e{NoOϭ^8лop'ci^ibn0O]KTCAvQոr8I&c <0W)ʃ6 RUbѠ2zAZjeJ궤Α$.@ECu$v-Vm)VU{D*twUL[<[,YNH.%ZX}'/WoRc h7QEkzR%qwþ~rv!I.'o7k# 8Ez-E2?v.OiV [?[ X1΁d"Axۏ=Idtb/WLR-Խ1 u$僷Zny{tq(~՝u3D!'?hi|tXl-_-rc d<,$A9F0xꐪr1 RdRs! iYշٓ#\ۼ%&vu\D:Ԥ:Xkֽ#!HbC[vRå!16/[?D Bd0zUbHm4 CEcתʕJݍTT9<ʎx&Tu]wf6 RUGghSQuq  Ԭ¸c^6_ޙ^a{IoC۝ | m꯯&qXR\1N;fnJMKibՙKyo8jqivXbû@Ha&pi=z?c [G)I5vO@]'}[1Fc249HrFWYPqT ,tR~TfE+6BC (d-VaMcSמfiD6QݱɾsAjUtڰ683i6 P5|pZ.s.7yC!g膠(|WԄ!-#eD'eS$:PNFgxO V~"i*3b=˟fMaHE KMoɔupzYwstO$;\o^p7L]IU!:eb0̩h*fY7ЀҵGۺkzZkDQ",|֟@CSg spGpG!y?dn;_.&3D@Fjo#د^hho _.6O@=,l$[ 'ء㵹yIz n;)o#:CZ;2m :~|џkܲE Uz7r9[6yeFk/m ; 6B+5:`~Z N~[:IrNޮXyňlZGz_t}9gܨ,Yiv5Х[x2MEAFynݬ?^Dkt7hyRig*1 /%9P_6%Oަhf5TQͣ 9ž Yu1Ֆh]q).҈)5hɋ=G$y`ԕ`e<r*цAw9n2XOkuSBDwd3O'q{6e?4ݦTՊО䶬=4)!:u=>C6%,0hǑ-iI#_;]@S'cӆw#ovC$UE`fZZ1F\>-<,F 2^WCI7Ygy#h,h zAc*-:fCj7-CیDt (u|%I/DkLI6ezu @3v2FtĖʬT"}MID@i1!ks"m%uQ|>T]G Fkʠpw8ܣG^{!ɬx3w-xn[04]ѦB hpRů>RS& t=>6mZ?腱M'!AtN8l`H_Lr} z])'=E zLOh h*d-vF7О\6K)z~$q~#uЬ+hdYX{IJүg4JI(͒+`\B'T( GFyۦNI?Qڌw[3,Lj3ҿnfa0I vh˂l$ EaLyHG:k_l6e ^9gpF>aGaIt<׶.@`?W5i*[{\cnRcc5vilJ}:(O{h#5~ HYOρh,[6X; nuyX[E\zz: IebX$GI D99ZN,Ko? 9=޽8oE֫aÒ]俼ϬӒ"AoZ Esl?4^8ȟ$rw`!یЇMqʶ|2G!5׭ܡ04^v?0ݚH9mᛛm6O`R?)׊/D]5CM%,~Er˻=y~ܞxK /OhZ:' (tLx'֒iEϕwe_< #it #םH I+ibj0~}ٹt[LJf‘󃚩]p4gdq6h_/yVY0bY|NXvǁoe*Br+fğg6}ehƵU F-dF=ϡ:'Ry)h8c6gTEAIÙ[~д&{%G+Zrdn O33( 6)}Ow `,zK?vLQ$hQmOxQ`|k\2_+ڜcy,/hRz|=dWzuyÅz.*׉0Iz\(x}*=j\0NhL#_( f18{F#Wd.5mIBNjoʔ81y[/t%I7@x@#Yڴ-PfR_PtPݬrQw]P1pKXǼfAo+)q汢9\a3kRAͭpQ.=|_nT1TR W_N ;CCz"HmcnCFS~Evh6Cv^ M\j=zIDWv=Aܚotod>NŖA'+'=BI& |:G\gIW1]Uб"Kk$>`jttOteZl %ϲ_epm2O2>$Qs{֋y v }|u Cqo i$~@B=vR/=`Ywys"uVe9v.$_; vk_p T1 LvzP{Ax i(_rϻEDYqZ^L*tN3[WQs7Q SĖ(tA]OMZ/WpQ$6+ڽj-TRSv/X^}}4"079 $G=6iL'ZQ6 CZ]cG뙷!7WsR+C{Sd# ZT,t=лI5UlܭCH- 0lgG]3 NP0,ko($;;dw1 4x>&מ^K9v ]N4˽Ǡ+aH_Gglݭ4k}z!+x0Z﫟躽L<qSRFyw-Mv"4QXM(U !ew!׵  TWD٦T; ~A9P/YҲфmytqEC; +5URsnto]( #Aɩ+AV?PV ݒQzlGd&-w |0_F >Z|@% f6cў&aD 04ׁ.սH(EQqM<  ;H,b (o :腑?HtG6x^|Al_eDd7?A[n$}#8L$ !Hс(Yx(_EI9礢l$x4t^a9f<i省*O_0S}I%QN|Bq{_(E3q&4lV.ƳBp3)&x"Մ=|OQU26Kc]ߟ#z;Ռ@{חs B"HQMiO+\)IkI$ӽ.%b6sL> R!*/}f"E,+.V;-k-;WIiJ"SjZy>c}0\\Z.ݶOe%lO͈  0\yD~k'{A*ʓij7)]N3|*U} o{~mQii(?x7xFRO7OC. $`ޱZ~/DAH(A6vrk0 =oMiVGر笡`>,ԷRkOsU(,29:h_9 -thuD*vXղ H-^-b~_Swa!ej[)< #F Р9 W߽K `0&j=.yQ{pY6Rvqs}@:hH ]M¯vȝ9)NWcدN:ܔ.t:94\&b.'/wh}>vup)z4`vt0dDo2^/H_R]Q?Ӯ$qдI+8zhtx:SB2IS`{Oko4?%ƚ];mo F?vuXWy jlrUD]).oEv\N?>Hk9J'[k9$,Jwd'\[jL e\IS:'M^Ϛ ځrYnU4oZ03wzV<*xXP=E+,@‹JjIӑ>6coA$Q'cpe* ':tJycɺywTG잎ksY$b2{@>jmdLKy0'X$:<,VU=t|'T3*^_i@R$f5Yf0&u3ѡz1ϞOvFFvXKk#TY6)&kƿkY]`%jX1&/>`Vޜ{N[fnBz>{¤LHݱX腛EpN7K2PC~47:,2tR bo`j3@A]՜G7CLL/@D^3殇{/.J/vf{+,DjRmS'v@^~@*½2<JR7~ye]9THw6:)o-sr/sEr_N3xINpuHs`H+AM|GI*: `F[˵ DR>3J7`S T !{0cP9D\C9f8X!d,2\ze݌A6CBؒ V_`x#4jfq7%&PIƅ'z\'C 5)k"^mI4ϡcUu z(= &0pIyZ.@ {yE-O^W6;jēoтɤaؿ@Rr4a'ek?4۟'-ǢN xρ^.Z 1TGp_mRb O@qQ31]n&x49ڠk=m#x) kbGa2vvaMi&(zɼK MG"4,u#&dRPI ut;Z腙bl)譙yomhhrw*WPZa gޏɿ1H">bpzˮY`0urNsx=a㐠W#AX47:sY}X0s4ш?+=&)7RkU`KL0α':?\`5)Px@ww}Yvn{0}}k""RU㑤Y:'^ SsIl:ߞ۔Ds Ti >໾ilҳ1r'f I]L/`ow/Ft=ITg;q Z:N𠐆?b|t#TlQkIEdca}N2v^W3kۼdzy-ϬkRb״{׼&S$fvo3)CFaRQO)Ӝ',.I4%ﹽVKW B޽Er[VH ƼQ HuL]k-GޯM <Vx7$T{nME3jsԭ 9!>rnC§VLM4p8 V&녏u4 yÛtD}0H^Bkuk1 p}6bn& ߄7b|=fEN^*t4TmKJhp=G}.I*x+4Ff$,h3֥~lOmL+I4 _`O#WamSYўgm:ف6Jxbc3ae57aX<^-o4j9vKAo;}^/ft!j>]vSA'JqZ@D1 RD8@D49)Ϝ6~;L J6xԤ+@P^Lr~\Ɉ0~k^Ԃ /KyQP+Bj2Kzy)jhh+ MIX%uD;P(vĕ٥֫Î2yuC!) |?rAOx>MKLgtw~Ÿ8^+\ngI󇊜f+LtwVwq/2.cr~_ w31oܕ~6w/:R8_Oɗ"KQ/6g:hKmֵNPC]a7fƗ7}LʀhTmv`ӏ(Gz9^vB@;I9% \U蝉:qUӕ^[scVVz鲺%*G#)+>?tgS7̪1Y5z_{tG!UQ!唹{!YΈY9HMiZ%ZiD׼/$yGDÚ=&Q F5ЁG>e|5+CyjD˜[i6,y7mizMixpVvÏ⾠[)!:7#%!'a3Dz.,ev`^/HWIA'd4OȺMQKBҀnqrFqOT-댍o<Eԧ#0uFBGRޞAe.CJz-[ˁ6 250J4E;\t} & ~Eʼn{}FO7%f~ZDs Dݞ %uSf$]%\t< NҤ1oI"6J ~/׼ߊ0 CMéu) @ T&{[Ad(8S ]ëQib#[Lp[d,_e۾Ի4wng|ԬkEDW})c(o^qymSb޽Ƌ5OO܅itS0(Dh?ޫ+DBȥZZp1Z4]hÐϲ4B1S`{~5N,e7C=AB-f4ߏ1Hk)*_Ʃ )πo($l^= ,JW^g;O ql)ƶowY=]ۛTf|o09- @uyN Gn44ܸ:aެCw"Kz/6>zapZ^t=Ƀ'VՕHEɰ50]c^9#qh"Sw!JC*L$QnvxTik;ԩkt(V* ˳|'MUBƔu>7[$^n $s)}MY~6=z0Cr&c{tDFCAڡ-}sh~Qa$рGڌ֙v[ V.%~ O8w_yZEj̘m7]e_PTX I9$5Io de,,r}8XrI/Yo?죭֨1݁ixцAJVݪ1a Qg[, zsOqgt ͬnʣOT*am"=ceC <ލvxDR09:2hIhB|ܞ%4:~/1!UcKm KKJ/^6hqgU_܉ɯbx! ^us(@VHLPyI]'&Z%㸈O] UvE7A.͝u/H՝4Ҫzp?~(049h?`JB$/'#ayXmS6P`b?=\gU U5 ЍvmL^;겻t%ࡧbB³Tޔ^c&viQ:_7-׶6-t?U"rJTZo'1 #Ik{^aZx)kC_~>_^t*p+OFF25, c)y?'Aw.dxl B:gtRmoF!bRJl"@n8wB-nJTIf %$n82,K^ͽt&ת#؛lf<رR|ЎA [0bZ+=Kye[HGչe[bjpShO~+I/;k1-z~!1ІA"wI?ץ́*#0&MLњgl(xትxTϦw)ʸmT{'lFRm`5#z$/Hqgû>uh0vR܂~ui] M/ђ_O{LPҟMLl$J/roU~׷ɆC=nfSᆣle}٩'DVYMѷt7R2uo[̈6 Ri;a mYcvHg#eu'LrI@!:&GyĴ2@~ѯnEU-yJ!)eE/EІA} ҲNRbTMI 'v}Av_GNDsEo"A}Zw'8mFFlTk^kwƆcYo^=:J{'B^7Y_Ҕ<_?49Ć! >$d&^\DFa{tJ1ejv> ݒlԝ0:hY*_xq;1k݄,p<''o@o {\q˶.extX WL`3 풎梖pɏkI* ɮ:ѷwKHx}l|gnpBV~]ce#nd{dՂ㬾z8pގ@Q3p |e~hońU7"޺+wZN^R8 ^8Mz!HiGJ'z WzEaNH3V:)5?aHk`9&Ά0@tJoOuyaLr> c(fΣbY>nCMs56JmƒGP~7'2/PҷGL<00t|#$QG>'eIMCfyiv RRr@~g8^1vK^'x ^h u TDB@dlBw% й F(at[=B$_$)ej0~ԊMȼF~rXEJz5Բ1.m !hywpڛ6=V7Q+ 3*/$5k:Guzv*m wrc$;PeDn_(m#w` ,',z`gx\/Z%ۅm) -ĵQ%M#e#ht063 ^Y l`<aR<CMW(PihO=P;@{L8ta8;9?z7HX탾m06y_$_[!ǿpv?/hJMs>ug 19=[Z `~4_0#>/,s#vm4U4CnƑCzPLɟ2W SI υo#t*϶S=FS?qͫ&\/dެڟT  u)S:n`hD+`=my48}$R[m׈yz;#5Q^~g /Fxd%oŃ:#N>gg/<<q{fC}r#h;EqAbltfx(3t.SZ_熬:d0^)Ta]Zx^jowCDKqMцYq!,/V̴QVtRީ3W)֨kr';H՞ Dn~`: L ߩ qNh?3oeM) C/z?nzrG359bu$Q[ǣi(qV s}pT;Ja)bu"xp.Y# xl;tdXG#@ֈRHf0[.^8o+d6h m/C?AkFCM}9C_lw\7zgH-:X;-i6kmiΗwbwzctnUDV+aUN]Ƶd} P hϴ|i QS8fj.G5w{qŠM=4 4@JQNZ{gzʏ͚ѠqL`_?tO1f뛱ǁ }i 6]&Kd"Y퍄Ie'Z#zSp˴k)zxuOi\ۍTo~x_`hRC]{h>8`:t؛;pEdsF :.D'ȗ\fz.Fj5 '腡8n톰ũmkZ+/ dNH*#xM혫%T%(hq];?~`(dНjTO0:O8 4M{Y;['nd}j5Z|:EHx/soEΠOЬ _۴ OmrtiіJgѶ^Z7ѱ{C(C6)bC F貀MkNpW$s4 Lj[/x/Y9ɡ})i΢m:4yz٣ ׅ^o1C*g"pU3XmM{HsS޷JE 71Qgh)[TMS_m렮=c#obr+v/NsP y<{]Ɯya[@ȥ'bS81 k%n DtUW} Me<xZwmQ->#:s boq},5VnL yHB>qڶ G$>iu:s-{ i{7;7ٗItl&D@fՙ=#!GWCHw~pM685ΆߴE&i3t ٭ Fl27O  Q+vxv4@'aA`8h`ѥ8ʵeX?p`寶3ւ@Alw%ޥ;[!>,Y F)e:Vˮ LjOde݈;v~[Ϻj):O8} a0k.wߙGOcO-eC4J`4/h#Km lTfTjmO7D_:.-cd9uWD}Um7k/zalp*>?n_ vߵCCP i(X'E>]Sʣ>~*GJ~`6.mg> -jJ6;>8L$*X>wy)T]ze/uoK/zc-'p4Sg Ҩ VSSp-TCHmӯ-\z!٦Q2^~gEMyCbzӃ]6kLc⁀}޷bimD(*\v~ 6M>Gut]FCv8ŇD􉨭o{[O!-*{Jq+pOjْ0kZPlne1 >BPq}^OhPc`71n@EY/sR" 쫠h=MSwuSxF+߀:͜dYhTh>{=L/z 0.6'ā eo{f"X#c ?kնh?5Iz ?*:^#9#7XŤɶk;RH rXT0Ͼ|3S?E3F'uW+ìGla$_諎s'@XەtƦx!rpE{@F$BxjD]PJ+q]0-һ9]/?t=ԛgqQfRj~fz.1c҇9ݳCgQ3Z[r b Tۅ;4F1>_״hM<-ؘQץ Xmc ir䢐x0Hl2^h^?MI6=z2t +k]Iv4#ʬ!Ehu[MK(FzxL_lFU~C0MH}Eź>@[X~TaΟ%GoFFx) b4 "[ lf8ÅP>]u=bOmĘITJQ.~@ֆ0r;WeSƵGitw0kT:Rc^%Y;p9[#eFրv,thl%;TMW蚈} ɰu;}[ "6YL~e[,{w!kn=d$KXç\b4(7P|S6Krz9T[U[wA`h ̵XR8ɚ*kQޓasixC1ZoԖ;:u_lV>pJ>&mf8#BF%uFjfX@bdS+NNb4}3z ,|&gaIղlأ Ètwڽslm|E%-Õezԅ8Wwo[izo a)E_3E/-eg3)#dAD#<+4jCT#Wk.rTj~H} Ay\$i4]%Yc'|b W~gc_#@)W7ɗLm̺$Yz]{̧ /#ӾN)3ʀy.nCs| ≔\^3 u`&đFnaͿ׿1j Ufܠ#~/@fV }{;n[+i{gV,B*s*?SKuמJٙwl)qũD[z(;N"^J拮ŪI)+QjH,6 b0*dV*DƿqTx_pq̯]yʸYh>y'1<Nj#XQOĬ|LC0ZH&=ezcZt =]L㋦QVj@[r|A5*%m\}dͳ:_#Ya 5bO|؅1Ox :}z>=00>#;>}m#٣I>m]z n6kkw5I9F}˭IaJІa.ũIRL{.9 Fd?4SoSm#5=h.+_'!6t{7c; ~a1OT @9>SpWn}`%y[C%qkW_>yG;ݲ= t-{l۱&FI(EgU{2GYy)Q9>0 3-|/z6̃ FT}EW|MqJ#XM]")vAQY<;k>cko%A&itl,kTɇZEo *FD3+:K] _*H}5'Ko+ OiG^kF# .DyA 8ǙU|I6Lu$ؾy]ϲiXFzGx}z!11Jk~zNJq]A74Dgfxxm~4^a]=(ײe"߲HuZqGb݉CtN}w˃Ď2tCtoZzXn~Bյ/Wӏ^s0!"Q|3߸Qa Ѥ%f(t|\<{v9ŝ}|,bw2vn F|}K?idkyE3DJBG硉)yVL Z՜3<-76A1-xRhyu,R=m<ȧzPǡ55!Uq% 4Ҷ:NoFy :a.@d$]B,p3,]P^qhtBV<4HQA? ̕sH|gN|Іi;TP};0:/^"5Ա a}N&6ei>ͶkogFUe<ߥ+,#Xw;?j2@s6k3r5sI=::'S3{ 3m)5#lpOŮ= `AA੩gZb`hFA٦^6&WWvt h'58!-K]ՋS1PwY^zD?;YܪKv#EphlB5e1`h00JFDZB_'>SFAx[` CC{hmd'_^]c'K/XpA?YJ-C9(Fv' GTõ/UeǪ>.EzCЄhT $X k;ѐw豧TW BRDoF㚺Gk=08% 㔂1T0z|eN NT)H.>I @&IM6FfíQKU>f m4)qAXeg497vVF\t[ޭL; D ~ +-b4"۵$@ǀVU2^0yV]#EP%28=K!׷ʾDA''T Ik$"&Ga&~=x"py @q)yU& ΉiD *O!" J7 SF*r{^;}Jsv}3 ΙKD?a _U9)d-)KӶ *]{,ő5@O/U?kAxy Np=" *d38"CFh) UX ::;j{ _zRg@DEkBy' ˌ6)0f;M_9424<+IO@D(ָ,u}H ۷,^ 2Q( YZ|C׮gFt|H8vln?(YYlq%P iWG'@Մ?kZ׋{Se͟ Ȏu~N'-7u9YHbn/l~dZ8H,y~MwE3Ε5l-q AZv}ٞ3zXN8~7yVcyC!g1nT!#0=.R4?M\ݙo19HV-4cs-iYˢ;t(K[~=j&Nԯ&5="ٷ($~ .cjU\9 ]Oћ&VPd#1<Ts8~_UHz.)KlþjFؾf;IfV> 8 q'vy;~-.u㞙(dtǭЌ0OND!JV_C}ĝy2F ^Oi_Xņa{J*{J(@QF4L̿nE:xLD#k_i٤~볤'32[7`Jb8 ԅkݮQl/- #9aZHҶ}ǝ([g]SͺOm'P5m[Ӭq_qB4[oz$Ua^Q(S|B'pmq|_Q=ނ3ksG x|d^^q?KS{g?~P­:C>S̄run}:Z Td-"&z%pꩺQ۞苣 EBqS>09/oi,N<3&2:N̸\3=ϔ2yq>[:<8In=vz1EeWs.CS)8~N/X"?Uv8HCA `JK76s9A@[U!s{_]Rhh҉+#tϓ/Y~e]6_mGv u$=DpjOwTo]Yn9'/urO$k#x2wXţ}}Ja(CmDzÏjz~hT: رN{\'!#s;ntTR]ω  )`G i&vb$ӻԋCGʲwza?_6m'd>s$P^: Q= ;.uy&+U eH)>;J`> Hs:M:7+ǃ*]v%_I6N!^wqL.=v׃а5λJe&vĨpo|6+p%W;qe5;:nNWۗw)[O2 O~ntcDS.SEhpXݿGf;pS@CRBN[(Ea^؛ϕ8=Tu<#_=Ǡ֕|JK[ȋbKq5FfcE#̇&$ڿ>NE{4yM=pr+`:3U|`LY}Y1âZAܠiewqkz'7`wR1:~O4yo w]͈A3y~Anp?R~`|A) ,L~C nӯݫv&v|Gx$)ۃke!i8F<] lzDEO HI / "S+s^z,wxgM ,cI׃5LidGIz+~߸ޟ{|jĿw2\EȨf_K'nNzq vyh|ºWU^*uwP:&ڲWToXaڄRZq(l8Z:V^4*読yys:q*at,c g,a͌ʈE$f-]0q{`ϱ<8-AYJn*m 1w}d Nd"M9=X4Nq67YS l97JN\'5@:4sRm7S7<>cIVЂ>^rT/7.eHT*7ːJPlI3S| /=z ˺GvCuS%@\FR~y`)زGo\6!Jd8^ TɰP81jP:X=_&,.9J ܦo}(w'n,lJɯ.C5})HC$糚L(.Բv5GzZ|Mx8 4P^&qs::E6JtrY<} %IPeo"zƱu^$u?zKFkpW+6T$_F8Q$ [2-MO)ٻi-:kzw {ph͢:j]sx>5x啭o0UOþ_4@oX@Yޥ ̛P#KL%3YYEI_êE#lSmm a-w:{ZRRQa\;M dQu[9H!_UsYT:eםP__ hw%P9qVRu;mח:Op9n6);,-;p̧do+.H3d ikck49]QW8 =hI'QbI ĢJw8U];oe/U -`7/U:NK81?.?@7D4P'FARnؽñ\V5DhRg(̯Svy-Cq{;bř; ټ +!w!>г\G 1`]R göc}"\M uڋJ\k ;%*#K8',o <ն_ 5R DiȐ#ъ3>09;OyJpSFF U9^V|(sZ-Rįu-Зb'O<X Y3ЩyA2yV6 e9D:^8\&7ɿg >=U}|q/*`] DzQ8M6OJ[qlqi@'&s'N'}Ξq"ۅ@ J! 1 LʺmV>⬝"uY6_ ]τb_:VrGD.EJ6ky|*N 5$ݹY߮iEU'ߤz+=bl:gq7Yh*#:/6RE[%4jU.o\6[#$exWM0a[l}^;(}! ?|B\U!NߦҳfUDjB=FJ9U]'uںF`t;OC-qPS%5=_~?-ȑ}"rzq{i.50gePA.sSR/XI5%hP㐺cTQ&vlgwJ zZlٰS4qB }1^7W^R_-lXsnWp',`|g{ؓgƩ dkBufzwƬI;y-()_5 # U5{a<>@veZ✚Ic]mY+脞< Wv|0*ȫ:qNZ]"X (L; ;N#9+eb6J>ػ  ħbHݗ=@ s>P^5k}-券5ˍfT+L5G܂TC" g_w9(4rJe:YG(]`Y:* uy}?5d$&f[O/p21>wCgpn7GKwN*3糵oб8~j/ 7-gfiRFsdeZI<@H jPӞfP(J =P(,;@b/t!AՀzROȰ{Tj&["J?wljyj=t""^pSPgHG&AM$׻pmn`Z,TO+.A.…RۙGK JYRq CR+/7DwF7vDڹPUji4Zb#ג5 i;=2K/pԘ2Oim"H{m& _r V_A.8t8gyEa> Uh'_ݟݿ_ey~4< yMzҩm@_^{9ZA:@8'){LF@`fPiz:5j0~i;w[GCnqR2 ^# ڥ9`C|m@KGjb 64j֍6Mn^{Ay,^nhʪe)#lLA gWV<@092yu_>6pan@|ilm|wX% 3ՐEt5s)".'T}Y;+kp`w[ str387'^f~I {;zYcЅT0fl>vb rT݉dݭHӭ "wCݪΕe![?.9xPX~RgOy{ͧO̢PC@ lξMm^jNôb(ɤϿ2 *:~KbD~Z5{%bRh:hvwyjZ.]snE(T մCgdͳ9X.d-RuHi$3{Odv]9tw%ZlQjVzlZ` 5bvd=#y'z}aҷfi?x~X1_y LCyU я;DB iN=ke@ io__}B9HN9hg,RxߊZiU5>j"O AniõQP/>䠍c[9-xf&@Kz'(q}A[02sUE`h `.tZ肦-BA4_jOoeúk' v؇Uw' 'T/ {TKM~oH,w"nyt]ɳoMױL<†: iE_~½Z{ G;{"V'!%ygޠ&=^0\dт]-o"=$t<!LMx!|&ul<$} a${`/zFI `b5Ϗ"GHP:Q9 Âk|Evީ[ )rKt҈ovnkHDWϙɋk}))x.e{$+=8ɧ751u}* ߊnʘ㜇 wi7S~Z蠆I "U=0bf% <݇.{Α҆{8H|%}4mpN ]6c(p}8V1鳈be@FL7LZ" fs)NnUC5AAkiܯ<=vImF2R)[=bQm\|1_|#`"A_+64܋ԟur_~6odL1"G٩}Gn4Oj3C VŶSq5Là* *2vŶG@N6IuI`ZU@'v} DMf#'"]  ?{pS}[|N-5(H9uO ~#EO5O0hvV7,4uʺ}ǽG ]jЁ@q}I=7S>&Cqy J) Ǹήٳ>Ar(wNw&Ý1fIP,4t}6_歏B4B Ӈ8İmrMZ̻Ok3aQI{u_(6:>}y?5b'вjHzx݌ ^]d5ҒۜnyUw@T ĘlJE6n1JJ%Yz9 +N"uI{`a\EJ.!USet]vЍ`0b}&MLnt>ew}5z%|@"< ;FJ~!#}Byf'Svˑ4i% *FO2y/lsͧh`䟋^p0=!6=׹:b bG &{l0Kli~7#! k_= Ce _ $j?i$ML &E4 .H.VߵIG^R4J$.v@_Y/OY\Oڭ]nzv7ET˺#')oh t2e2+u`˶8hFT1`mYgiRYOZ G{&}8y$!JL!J-=RFj5@j"ѿ|#^P 'Gщc`RfJ~F"BwۦIzJ10b]J5WD2}H&Fz)@yaD( %BB2JY]o{cIEYiIejEz\7ʛh`eWp)cdGaVZ@$:VqRI`Ɓ s;#r%N{G : U j5boPf/Q, m@>IA Aq@ ={.]>WԯHշRYy(= "U,tm VrMS@xYj?ITI ų̆ C72D6q*<)c}! !B =>Sc0@ q ^IV"H9Lw *#!{j,|Ϭ}SM5~s!!q 2Cԧu3 iN[nS=n 3k[kmc} H NY{ӚH)B|:{xOȞDi&)c.ht.;'%_5PkRmUZ5hUM6O})JQyvaDƦ[_@`',eժ(I3/<㴷&z!kx`t6#̻+/_BTA[aכ5wU `H+M{yL 7 w>n7uE:M/ٞZRV׋w'Ox`$uBc}Iy}p9RQ\3]{>[ɤ'sa47a(EhIސ}c;EfG{j}ECDFG]I RNɦ/`~H6R#WAӺ<8AlVo-r.}hn`Sh4հtwԖxC1ۼms}b thuM5I7` hҸ &Bh]M6.ę-Dns ~೩.0]aЍX e-aKle(j|`nbUUIXygPE/gfNP\־Wl zꥩ(ӎXNn͠S݄~{!-+$OO 'ĝn,f)8q57h ʴַpQsa`'Z`m=DXvS b),).>!CZ4^RD}}y`yKjR jдNOwjK @*s|ގA~UI%;qCuFaS]{vɎ:M?%q.l _(؍iȧ/p/ 3rgp;59 N|!'.}KeJ_HmYnN*}Ƀa0誣ߝkQD/sN˗y3>Ӻ}$5ޝ,1b|8r~zF]M*κsĺ?<+qy.Dp9@iZo-}r,B;@Wԓ 첲6RSQu%Q&*U 1v68L.g}<?u:byXEi34Ak;8m*;h4tal\>P\]rK%O;dt/UW23nyO7fKD5uƉO29p1nNj*ywLEA3iAPb+(ЖڎRDM1Sv+h6C7b@IwS\Ѷ^-c32UZA>!낧caoC k㽲Q(/QEj@_ }Z $A]Mz7uYOr+{C KVݖ7Nx1/!3/ Q\)ϫ싃vd12Aљ8|#&w@-Wt%πfo  R*` FcDA 06V Q(Ѿɠ!)6x]'!8 ߧI { S\b-ID:v7Zf|c<_Y4@ 1Qk/~@CJ>O”-{:ZͺuFUWCF} 22u$*Gg Y_55WץrUQ^,۔7wCRǜOJ=n]V$ЪvqgC??I]kݏnr65DIKtӚipE^+ ~Mqne~Mo_2yq&bbmǒJunKWj_snȤf[9Xi47Dl052Alr6y^b=K :eAȑwL4&Wy )c~[N,5p7h B01\̏)=d 4٠gBr롆0ŊO( I;F,bΟ ef;( ;6; xžRQO v=bw/New1އiϬ1 fq>NL!9.#~b :ׇYO<:i/bx{bّCvogjCVH_iT,~Ö qz};,Vl‘""8)da AxIG BZ1k3ԣcy_`Ǜ>ٴ 5Om v@$Bo"1rXwr^N^j!q^D==y>veOz D5YvE]`تŗvtYnDվZnOOizA9󢷻85$6?]dh^O Gp (1]F~lD Nasrfj V:8y;^NU$3{adAGQW]Br>ESB˂بԬp{~A!+66@٥Y'z@{҆[wktaIQvfY>Fm[V3z_KuLkbqrK (G0Ll`>~[أ˾< .E8&|P?)ÑqoVH6/鷎sVE[0h@Y|rWDikn.;Sw A]p:zڭ,$.8領:U*vW9vbxs%E>NY~?@ }hc_qU+ RuR" @.=I؍nnˁ&pZs/vCLZhPJ*u hh橒TgH$nҕGꁠD·";zLs3/PYN bv>>J)AUyMx vC~t=~gu[BH,n5w:W\c)r0YoLRy4CW;QPhdf+1goGIݬ7jYP1Ng7ۮG&Z~pm "e9wFP@_s[nT^lNߔHmJd_ ]2pFJ۬wRď!K$9#"0ǢRw&*Lޡ[-_R%o|I>oX UqR!=ȾBPt5dnCf{8vvAt@!Mc%Fdr SY)4s-VvEt kЬ<z֑ pCC10N۵4Xn(F򸋜V2sPyvCր:h^-kZ.Us٤@qY0OM/$] b@)!ʨѨL=獁/t5`OW>otub!lt=.ٮLdc1}BsCu!e4jY1drI}/vAm^sUWȜi+vz|Y#Ĕm1:P AꮱnI*Ju$K.3Ưl(KO>. ?Bg;EK!r%Y}>0o9]t}_W2:,Z#d^T 'Bʽ&$#j s a|=]q&jVﱥM]jH)Cjot{c344O:z}mY:('{`>)Qx(g@܊dvX}<sŠJ>QS ]Ջqo][6!RcK0.n*x}J9q=w}TvN,:tfkfR.Cru#^u- K0Ҡw]NOIܗKՠ `Sѕȗ*A`fy_7ze4ɺeۨUއz)=0Ek!;`9i觫Ϳa8[YdJs/~MfO>QNf. "L (y zq!xOxuZc[B"S`>qI% cNI*yg=o ?,_2c~ /Cպ^r̍#&n" ޻5lœ:fhk[OsJ߱éxg?&LcUm\7ij&d[l̂@9kjY~(j"eT7mFq\:wuv7$$ &TSJa Y=1WO*/ĩU/їP }F*u9WwSNhDl-|o0.8̌RZ#N}pQdaUh#vWYyl9eN^/u}җHsDC 7@qV}P$Z5N(j$dUnձzAR֪ EVy_iīr#_ѽM/q t5 }c֠i&5<1h|if/t=8b?Bb ?OhO'KI-bwd4T"jqs^8f+8P*u l~v F2ӔJ> lisՠI;rr8@t^7eo_xܖn@[%O+pC%:K\gC9 @]qf{{.Ci>!/3"%i> "o:мVE|ɍ"1ƄuajHbɀ[wb-O Id{$beX&ZqBZ:Z.6cDoDP(þ]ܯV)o0dmRj 6-c_0(,p ߰XXB# Tŗ[8x@]/CHԝβ5xcLcaeCd%53d>$g>J@)h2U94.w 5u=o}5/"Mz=\k/ mi>Ի0o6!5H#YbXwW1۠5@w3}OƶT:aWkrQb8!d*L}]az!'>!Ff;%rʱOhъ|Z-部G>|h};r3z>ЮDB2jVoC #s .odǐ@pF/ρɀ UI:Z!>F6ޝH3˅+%ؿ7[9pz=6̠HוֹN "ֳ5i dZ08zIvx]hҬ=u߯2wm֟*h.c|)="9Ft_u?No`"9Ϧ\N;yt0-֚7Ɛiȡ6*YIb('NVϾ'^Ji]GhrZꑠv61-370*3z6yawH]LA:dXϣeڭ V1G g3sa7D=}>yw5X,YzesicI[> lߋ ͒< 'Խ!,ywqZyyK`0qOK#)huHw}:٩\16ȾIw5Ta_U_#9lB 5T0 <$Uɭp&XUV|>ot>C Dڝ8¨FJỳdgU= פ\!^ΛYJ@Ҩ`-- yĸZl ()/xLĠw~ƠH^+! [3.~:Wixe(DU@6цO`W",LBQ[~C2o 25]}U x%E)/9Lۜ~ &0ޝO@QlJn6*! !!VNX"C``dK`:}ۖmZ5t >tqMA C:zcBvCjSKqyK\8|T3ey: B2N!}=" 䃯,yqPy$Sӱ16׼! xwN~Jtt"T5ڈ%3-2"t=^%LR3@AеlSw!G4\vy(^r8nRԱԥt$(GE{z+o~֠4%@6Mpl*+n5DmY82Z_A[+K\)C솬گqKWQͰG&.(I<(Nqjt?CS?􆒘ժ*SayEdo0cn PagJW*UFA.Z[ߴ xDzh{㮔; D4RB޽b@oR5@ S2]‰_Kț ֛{Rm`>@Зkр,'4]* ƈ:`iV\|8u~b= k­ys~JQ:q 0ڳsFjmU'> xnjIP P.z54\bzJ7Zl4\%Mݮu6d4t<,!n^{Q$= ą>lS~-U^C͢j 60 cik⾗Yh1Ӣz}6\"ZU!>틨x`dD&/b^5]xdyPCP4n\T dIŖ dx֠g1Us  j5gV48;VP(=-?!h4MeTQdpXdIr;EO Itw"Q|\>ɖ*݄b4,g$Sl$=6@Vk `a֠HDJF 6HAC13}J=M{)0f?پ@kP7!^A s6:]W[AI!Ξ6# U{$ D걧o;B%EOC5] 4hr5W[]d hH$}%*MznLoT tDBSze㑛2.H:%b%GbxpD `R0qvCu|'69 LRI6!׀&~)yAi[35x,q WWD ҡo-BC?<-"?5Ϩ(S+PCA7zTX]&'5MԐY cZ!Cmj5Xf+K.=NT@ujijg.<\ODeۥ eoGJ\;`OrmqZ-sU-)t jT%t_>Srx!Ca;=|'wm㑪z` &+xNqNM2X&Uu\+B 횲C,Dof;61k,7݁}KDErߩ W&!a.3|f ЬL ]ٹkޒɜL}^ͱKsĐt 3"v"_/; p|0DnN {<`Pàwp wãb>L F(DEh}'̽U-Ӄ=D1#-{\~aPb!0vS曧ūnPјsIEYaKvTY5S,'헊l:_t/|,A&WU %<] jKGq\:PM%!;λ!$-tx3¡>'w_Ɓ ؆^e+V]>Nj7KǓ&}dX *@ AbC[&Ȑ} ru0^ž&nNV0m!c'}\-k%(k4"vlBKސ% |pJ qjx OU(%kڑ<ƠAVfy{?xg*/$O&Q}Qݖ>`Bs"UD5k}?7l ъ:cVURAo0̂fqfmHax}C&勻o$*i[Aq;,ʶMP;(AQ[Yr2 Fw}[tl>Sl4% iG[k=v6Q.-Au/ ŬG[*K5szbbIu {hP\kqrAkx?$iTa rb{1AHw48V(Br( V=×81 V?뼟Qk%C*ޫT ޫ-/ju@Om6LyRE .L7c2 Ex@ƆyŽ'ȋ8:X8T;@mP.8Kex4q;;C(UTzQXG`\Dl.}WO =+la]{X:kѮϱxa{""3_EEh}y}aUҜ4̚'̖P!Hni9F؎7T9|끹cR&o/O)Ե=n2JTz欦I9&-0eu<|Ko&>rQ]i!%fWxkSQHB}$Yi,/8i(^ؽ f X.WwyYвf %bza0EG*$os.T卆u|B*j=ܠe'Ñ 2_P[mϰaSגk EahG6MЭ``|ERA *?^z^UKDT+Zt= 2i>)۾X%ikP_wW]#HyRWRwqTQjR1*] mhE:ZtfEhAV`"i|WJѐl M7C}$v$|XZ>"05>e(no6d1}!똮sSi a$v}ઇ"|U5T{_3^fF=)AVhbL(e?h.t=w_&{!S8_!vATLwkcJa4WQr۳R/l +W0rOum9.{B>vA˽}uU!a7#@ HW%i;%خ+Df>]AiAecB1oLu~bhݪz9#OWKsԜ! 7 G?k@%eoL]|qnK·Fi%Y_2&`d`tO={m="5Wu#]7*'9Fr> ݝ1dfUPAb0A/[ND Iݽ8eh ZDJ Ԋ$"MC!:G5vy4Kd=N1-_b]{RP[]eJG}֩>y)9t րH]}@ka:_Qf4NJ"?a6H03ЂSLARDyif$*"f`S R,i臘LW ńh=]-Ѳ%`b0$p1?|' dJm!M k xT\6Nbm(+ǷD0V,S#(QOj8څ\t(曆RN:,b{l0S?)b~wW%b%^)H{ B Vb޷O AR!\2R-˔wm!9{YX_⸮_r qjGh9 %4s@:/4#'Ul_2H-y}~@1(.#vWkAA\XgȐ<;}@"bP:#ҥm(ia膝&bOJ؜ îRB çw-(QlmZ#4쀭xIb4?t P!hI Ͻ$Yv/0 m4K6RW¬Ha]&GBQVr_䢷$u8m杪UG쎃^b `bs:ᶾWSapׂU}vϛ!C̮Bs.>imj] xg6zwX#Tazii23`(L|fʹ,Js)r}=NE_lҬAMާ*ФKQ7)]6 bPs~-!C?-s \YjڮSzWP$P>oZj{E߼jY\_#x/ɨ#FyZF{(;?XN1`*Ew=#v[ŷ!kCc 'Mo7~7N{:y#n}.4w؇hlMDV txiRhT<0n}pk֡jdrh|X&L0M4eD6fٷ]N蓼Ux0C~21.ZPo0v==t=&\F1nw'A|Α zfzz[2a; 6Ccؗ9^@dg{pEnNy]zC%6z!(N ==I5A7ABuL.GYV0KGŠOZwĶb)z3~Ž=|c߯R5*EmO3@`@MZΓbݩA2m4.X5,)̚m|o$ˤ|"̻ X`"OJhujuG_{م X扩j PUK@:=@Kx (6ePxE ,k) p#+ȏ`1`R5݅~fRΌbdLMo vL} J%XNlh#/OGP%7(dD| kRs a3np6aG< |TQiJ5^Hu! 2^.2J"TlSBD/F*,;c}DKph)N[EkNQ!eZۚ~aZ{۹Muel `];Lɲ.z8_yX$]])al )Wc;̈́%#vhb ^P`ȴe_^OfIz ͣB.wƹio/Vb ѧNڶA °i?P!2gi4#] oKsEmjz5jd8㲁D(_9>CY [x̟G϶n'܀F(#t{fAQwS Ӡ`fAg= fACMzX ]eB;v1|`/mzTzx"$Y)*E' 1!w¦utPC0([ s?o;hsB 5@6עڎixFdjldįY.03-YVGF>o3@ux ~Rm_ S)#*ݞٰ61`sv7]i)g,,sw;?20U+4s PC0<#Pի6l}bB5ȲYZZlӏK z*YdlR 5H\|IY Ik䫬xxXdX vP ŭUܰ-#9S勓^[^Q} A X=xBkwͨ`${ӕ }$nᠪ e%ps{WQxm ѹ KpJs"\an* 4~3ʿ{QCD,5#vT,C%DZ'xozAO21ʷ.AS KETS`pƱz.K>j[tTsjša(Q]uk0ir(49챓Q@H!'la9P@\G ];@oΣ;A֠f5v Z kuZ3̖DE~p9,]c~{mQ36KI5Aրv:]H8ݦ%߽khɿ͒5xOvI=bLʣ// 4iF3dn;UjJkPw;bw4}xn@T褥XЃn~,2&1qj#򏄘=q7&;LOmѮO#^5X~Ƕ $e;dd27jp"mS5yF,LjAdzjcˆ#9րZ!RC3E㫆o0Jw;o7PyH~^#/\b E%f Z]Gj>&3FXSr]&MY6څpVnnNnһnߑ޺n".S}~=uNN#Uʞ>a˄]F_)&/TT-[oGf c~ i\nCp^Ƭz ӬSI+zÁ"͡Wi*4Uj]nꦗO9$=~i f:00ݍU}KV>5ۇ Xo qԕ es}⽑i7cЅ`7|!d66y*; 1o{SJk!8#V=ux7IҕwD4lt z,4J%}y9CW); WLTM JT3֥`8IR)S/_oT\o}c '45w.3*k;ԪW%|jcWJ)Sb`;= 4sQe}tUʎ,\0ߘ̴ZbcB+F{R~`=@׏gE3T(~S ./x~D+;ڋ]65hvXx}.7cO!A"t><ˎ MoљCvD/ځR2i,aJ:A( jtWÅZD+n}I^@=X{v͎{kzEO=o^*Y =2H>~yBRpوiֵ`RC/:Vk@6=t=iN/vCdAjNߔk hJW;'2cǑ> ODD%J pwXdJasRP'Caw)` ] :hM>I*?˰.|f=HԪ-'ˆZOCTuެlT.[ |"3`Q:ѼUzA UDw#s{ D;w|4`/]kr-U/xc0E@4 }Z֣@P%%|)n?̕:sr]^d 2׵?kAYu-`OgU:QO m)(3yxCUM)a7-5ݙTFH]u>#X urGOc۠ڥ_Yp2o덒(o[]}TDTz? ] Jّg8NH $C &/T=xDbJfCA*K՗.pg.DSCZ$ŋ>=^NF2~)w՞Oǯc3ʕfģ* I{LzuovGWͻ^ ]Js=dO솬 kR]~^#U VRfqww\D6$swC){w ! gJ c)FB塴U)=CS}ntӮ'̩@a"5)tݏ|I&( ̠d?$X~J/3kg!v6ĺu< ;+rZc B_ |{] }J`7zɤDa8߰"ya[kVzTgjC1vϞW.S:dsDP(L8+R)%Jc] UԕSB%mAR=@%۫/B%m܊ֹÁ{ۃtm{x! b~UKR: hp̖uo'y0O06">ˍ4BNP|x?0HK=L9#VD" F1P lQ޵}e~z#p̚b [3~yR[itK±fXJ[U6GX͸M lwL:.M9D#s!N*dɾ\sTRS!{`hqTx0vfc;^eK Ra` t͋9oH>AZ܊K͹qRB4 "|_$ aP$o w1x^mE  Z5_hT LmW6sqp UUFۦu-`׮sA%z;*H9~PīJ9oly#[z7U_ ePiFj5@?ՉkC|( T.lЗ>0nC5*)kH; V &m>.`~ 6Ebtg 7Q6eK4K덪/ i& },0^uk!LNЮyJdh=`Pd==_lktbC@rgB 9zqɚDW./Ty|$yBM$~7T_..@~ l/PkYnvPC,3,KY4Cil;'T~ hZE^f^߀߰5Hb[cQ&HHN 6)dU˙}d+#r~_S$r  }Evubog J@xfhWZn7TA#Ȕ}[ù8@ )k8e`]Y=;:=~"t$%^&v|n1*s :q|!V#u!(1[ ζ\V 5fz cjHd.c b50Ζ;vx~ 6hكuWc Xl4 }>0Mqq`; U9-l|}1HC A;fæ8>C_* hbMsW3F_!F +EM,/` n2` f>Ͷ M^-N{e>fUud:,V(a=L;>6q/K"e_LxEpLenj Nay@NA> =LNjP>,n;B4]::pBWQ6F(~&h MSIHvlA4w }Ce@ 8PǪp1 WýR|H`܇eJb3al{03D{QQoygnna{2IA,C)eauzfR]dK(KZ Ěn9,^EJ8pq^u)Fm5XV&>[J4o[65HaOCܛYD[c:"t 'Ra( "b/)cGD]2whﴆ`0dN|>8B'lpEJ<$b2ꂀ7Xvi (β%I/VU PPl5 ^{Bw>Xѵv- b6NM%ej^&XCoL磴W~Pٿ6SLP0FQ>o>K !mQ|(VA_*bImc}M:ׂ0. "IVb>2{@TP)U\4s6])@Vƿb`mMjô-\쎁VbD,ۊ5W eyp'Ձ4e .tLQ *guPyŒBEGɻt By 6xfW$@ʾ,L{( ̩1%9Jr PFX~ł;ƽXA'UJ,t#t}`&.U>| %R9OqJP(BJQ`|l}g3+d\Xb=c M'@#\Ǹ4m\'eym?3jmG;ȡRU#bVUJ&5N2 +y:w^wZvdN GA fuPbDi,جZW\J~uf0he$ sC>d^r(좝h{>v\}ΘiՕwM fWq*ߙe<;x l 0Y: ?[Z+u[ܿԂ2+ٴ*#4RE& ?Z<]ޥA$zN~}i: jSI[_TCښEiwр:VwօЇJhsi ,KRgYVA߇G Tz64&>NG"ܭ<"ljvs0 avltSy?KkJ@X@uG->MĖ V}pgE0kZz Il+жF\/m{֠\eBb qAǍzڮ]N`nv%s:Z6h[}} MwT\>buYMJ~C͂ nϬ΅TD$O!o&niŖߧ՜xA`y]+kRoCΩ{7dRn7bX73N/ȃX<`ղ:I "Cm\mDwtրUcc֡ -+lQ08lД ?ҦL1r@j۰qnu@ )בsB=Wv[ăWpJǵtm6.C~d#om`ӚIca sR5īت2l> nj j5{CXz?Pb'/״ /r jh^.Am^ڹN>T?X C=Qk~ڴqoލ~3AK6:}L``)M,)m MEuŞawui0{:ć3gjj󊳞JiWI~O={:?kK k76veݵ5]m q`a}8wߗ] -K+O'5im- ,6U0x&TEj>>EӠY5'~E5VAQ#YCU%P5i@XBj]l?k D5u*xbdE! , Jr -U)n!S7EZpŇ:L:΄ǵzi;!'pD"16_|OzP! m$'>Mw5tbԠyy}@kn3hAOzo␀~;)ڒF.MfVf͜a0o[51/VkiѠ۷43TB bЩ^n!n*D!;Љrlje–_Pi3Y *{+夕MAP}]ZV/W˲S¢IpvxE).7eAlYZwk͛_A jt\滣)"*'1I8&$ׂ~B)> {:%@sjo1Xb@g;QjfP.vܕ1jBaT1:=qn~v{f;\.2Ѕ _۶6L> WskZ I]vMCߙ)FZ|F;3|}tN ڥ]gTA68 LM\AptRG}9|tʁ?e=ͅB%;Ѐ$iQ@K"ԎԽ;T.;%^)8\ Q::ntn0P@{EF)q }:➊? k괊\5HymNn*(*]U-49z ^Ze&"m˦{8>QHEX|=p\n;qI0Pէ/&FG obusn\;FlWm2`uψ=$JnlI ܫPʼhER+z sk_!qܽ?3V9}5[5b 퓅aS,oQ.jj\'bnCA,H˱Qj96|n4n([%y72rډnejj SOjX m#ʥq4 b>Xw]B0TJܴkM5h`bCmᎏZ|-& W&4l2\j2Jz+[ؓTw^W1F!5zkX23b(0ԩԨ{2Z} aP4mqIX$ideEykP>YQS/*-o<n{!E]T7l#5_ 5QS=?n(C =ȇ-K']wy_KGs;}*kZ{Ub G5mWJX~!er@|`}"U'bbm &qɟΛDcz *v<V4y{k50k wbEkSo頝5RrT0@Y|E SOiߪ{vͫmǎ<ӯ8t?֋z6<ok̏XbW@7S!@;_B0W-.xT5@sEф2U![5A[|D'];.0@\MhFZoԪ"6jjS?~Y϶@n+K'}}`E k>owY)ZM\=6Ny"r_ezg"fguϓ5-O;e_OŒk RWU1pi ,Psha3kf_B nl @ uOx(a Ap`\L6`;2Fݝ/;2=2c iVmm/ k2\ri\ Xȸn/Ijĝ"Oy 9vA_FD\0⴪W30 Flˮs?b-zKD#A\z͈ paj~C6>k G]z|[E/ :g–xb -Kj9☞⠆ !ȜLIk{Rޟ?O&Ej֏4|5t^ENE^XbTm}v <ljbCk6qY@3ɢI= OD*d~C QmAg6*3P?gSU\dtr§\1t>gMr3-kY"C0HGR7(!fՙQ{nnc4|j̻\K DԨ$XAbw% X̝ 2]wylش1dQ0CMxI ?~^ܢq vqfT+-}͎``l9| l Oāi6~1 8|6uZ\`"ɱ]SD,c_^:YeZ dUjRX"

f1Pʩpc ktvx:fQ|H \Up׎ ;Fq)-mz$tv*+uЀƮO0{QTRIQR %a@[斱b1X[ZKr\bךTS.UzĐo#͗"#Q>S-Mug볥O_dCRt7?Owޤܼm z:B-^&e䐴@+I4Pe[НDD_=nmzuaEkSZʙ!]?EǢOcߏmwvp*⥘=$vKtv@䇧"9ӹHB'fjȖH! kC1iԪ7z'$[B|Ċ&JuNaq._*˳6zI~}~Ů-\= b]aB<ׇ֯Tvż=bϞ> k 3y}ZXit_mR^~44NԎB G~㶅yL;a5QHb=[O/05^gd 'x.N@h?؝ٝb`Ŕdq4i߾B$8iٴTalymikkڦ4']. Xyx\jrJMOb*# z4ҒeiPı>u2RpX;cuz!* 0)p7e 3[n(j}<,Nc׸d"{ëLğj{2MrW08+<>[ _>ˌ=e!WA68O`/ m\S&ic6b "V%(91d>4׭!*ePK˧e>xjH9`H2> ~Lu/Ma__-=aP6DJ/Z^F{sKߡ/_"YBT޲fg8,y^/v(@VYM`Rǂ*BwaB QYQ| :t5'T(ЁKf5}w.[ ?iyl?|[c t2⮥ y2ohvv)rH46tV F\#e6H\Ui; o*I,UaٔۮNpCPcbi4A׍?1^賰uB B9;Bg,EprRwĥ^Ggc C>+;%C5BO~y?XTTjKvCU/ɛ.I 5ψ07ֲ }̳n {U,[/1%.R8`GPb詗 l;}q[vS<GLj%3.BhGsP 'Q)k=pӛ2k@EVE8 0So|s2+c G⨋}3a5Rܽ86J.ndcpd64AUL1ֵF#4ܚY2 }̰b6GYXTy _tY*$k3lU vN߇Մ|䗾94tX<Ƭ2OBw KT~ن ;ϛ%Ma?샪MTͽ{]9,ΖB.D:mƑtcN+5#VY Gշct΍Y'~;C#{(1m9q;솠=l5#܁?El6 ʥVظ  dm6l^JAOS}uG~ZyǮexp%ޯQ2l djYӃO~ N;f.5z1۝?J\~BPor8-PC*iT-{|~{5À%BՊj48S&5*p0$[_jR *T0r%P?뉹l1UZ>c+OrJ"\Jt*s0Hp0O"{vP1oldНĊ:Tg X/†t)j́K 󶟼c) `b:,ޭ>y]G>Lu*J)֋=sV0A5춚;=<0eI6Q]H~W' }`' PƽNZXS>@m{|ٰ~}<?;P./ .F=qŭu&T9 ;"Ďmk՘"]Ǽx(q"v*+VxNTgJa`$œ:zw'w+ՄD3>V֬cbRb>cpqjuh1+1r-َ՜EZەSŵJۜГ@ge# r#k=b5{= `K4XJ&6v…Z~Is=)+ ]R=>|60zJoΩVpcy"L+;VI\kbKt} wO?`ìF%p|YB zp4Ĵg:ӹAeD'ozoVk_/2Hwnu^?n`1aMx[WPA {ǭD6jG,Y![N7j}C!>o軦l5^rv$mp7X'y]ڿHn`hHM)Y՛mq'&m 49 l'e_dԡID[#*ہ7"5^`Ol6f?`@K;B{WY_^g7"zy0XuiEylR p5J6Wmq)v ^އ>neL5ʹϮ1RGlOcS@w `g%`4k6a0s[g1śC.zջbYu6aNhξ`/Sjjܭ8ڐ YC0qy*/C4hLh̡x\M&n:NWkM4`'jղ)b#arMS#EtV-.:3bۅ#\ a+97P\ݧ{{Ɂ9Dy;8YHw/x h4r.5k #'T˦ _q4c cN\=N-঺WJ)qT*6 WJ9K=0- 7 $r!O "m\)9Qfgޕy4"9ҨgyF;>'20³On hyZ}>|n;P{bTb9SԘY9N˞6̺ R헹LJ饮_^9tuƂ_5`42N fu}g7XAV C[_ϤiF=5nv鿠 VTdVdS|Dnlbmm5 <&8U9m=ռC2=1U\EM{{Jr FG94z/rKחRNA>ٿ%ɛz֟*GgUa.PT ٩igGۄ$z^qO4˯U?~Nଂ3\2?/lK]iE<#ZBgOzKւ]KڛP9 ylꙛKśƹm])E(SP'=@׿ʡV^5s8"xpU;W"7eH6}LJmM |"0˦cN&Db{Vc.<8gJb Z~ı ~ >4vaͺX3 gkY [K>y>TaX݈ь% E-~wB&N:UyƵ+yjFWzMuY ] EQWI}hF+L0T:Jd WP.!X~ 6Z&F+l-9η7HK+{Wk2pE;Ѽ0iLZ߮*7l#\~vT~p]9LQ>-=vA֢蒐 ɻHb.o0Ҟ24Ee0Nz*2i:~<=ZA6\7A-_`~Vհgzz,}9_ \0ggЀvu{l5jDI:B|?ύ.Uн3u7L?־\85auT~<=wV{oztZֿwH-6/xcVHvA9-m;`<`An) .$NJ{KȺk! z@W҈ PsCm_`fbX۰ #.Ż%mC7ơNBA.90W4ܭy7Խ)k}I|R<]Q3uD#n3w; ըxR6Eٓ_3'5x[pm'Wu:Dx__/xcV$Au J:_@:vWx?KM's;hḙaךD:cyA[y.:p\?`ҘSBQaKѳiJ)X4ՄB=Ĭi_X.>88i”:I]> B˹Z})6rxa]9F|[|UVQ+R(?ޅg#PL`p trY]q?!A6n5tK|[>646B*<*Imp{sP7^m#c9<ȱԻ%^8VJwe]Grx"VՀeK;(D&;scޮҴxaI幕}UP%7j5[lқR eHQ9xܻ$}5(͇pF=]AlH=(?Jh:>6/ I" h:Vs+*Yl; ъޕӐS\~wF]7|T gfZ#mZ5:LVɆ*1G3 > 6 99 R8ǽ?@|5r-uGq}{/XVkA&wv(Aq;֝PUculވ|ʓg1KXF$Zy}:;OBw\K/ Ba+SXh01$=Plo[]*EI}XF2Y.8=v}U)/0m `G|sf#j;.8ωLLQvNy~VC.:H08]Ж=9bk_4$8א^}>O^ƬF.r 8ra BC\C|9jKyl3%`Y !jBjguYrN.h*R’qq~VQPWQ#vJ ~ZwCk׶u"I_}(kRJ? 1A*YVw YyS{bw`)7ajlVˡs/ղGߩn5_`dK;Y ($`{C>WLPF"}EckeP81B4O AB( P g~?`Հʝ}{Ziy3*%ݨ5pDK)cLESs>et#EgZB,gsq(3 fu"XM CD5!N?ʺj>B~_Ag6F 9r9$h<*0[uR YՁ'm-]^ 9 >a7hg^C;1̻*$oY5FB#3J.ds*wUkTnOĽmLMQ 2{6'<_bgJm C#).|>`6Ȍ)c. r|)' k2Kj;࢘E,ѧ6VxIL&^$Fمփ Lcޱo]hoXI ?d%oD򃕘)OH~P٬E[lG<; kwқEX?;Yo;2#cBj':}x4Rl8leWphCN~PZybTz^P;?Vru }N܍qY '8]ˋ7E> -ĶcSR @h4 O7ޘ@M܋kníFNzOs]HwHty DG3;t4/L=|gmyPoD91;:ԬlA)V񱃀.Kao-[m6q]aAs%F>*0W1APŊ"a]NѠ}>[ gY^Erw*^8 f#xߟIik~2Հ!zX ;j[# ۔vq{PET.8OviFT֮4CBGvo#ρ ViZޖjrT7Q#>ma:?DyS~_.ė nFUˆ%PqspJEkLU=H- ;jeeU6 ft^00f-+:w=]eÁa?;M>~n]u ḤPolr'[$SAe{;v?TI;~Ah۫ߓ06^huu\hgD=8Lڎ8]X " b`?f>Ob>Lfx*^)#?1t\M>:ENy{ &G~^eȔ!0ON>0"V&2W._:s'&yPZ,DWw'v)11!ÅaYu^pqZt  +-p0v HwC<^Fh?Gz#v۷uDv>r.W>,KG+7Vkw$~-)M/#8b2?.aBcLίa0/)E#oH+ܦȧ얙_ٓ-jtpWdϙf={*WL8v ב!JzAkXo0([9Ct 2%p-ÄPV/\.݄H1D> VT>_+͖8oJiTAY I;l o73ϕr=/vҭãy8w 5Hvߛ7)` Pcy+{ΎB >t=۱aV{3l=㽁S S]#q:FObK9v.C4g3R^{_b'> j@+xe3;^y[ Jyo?TKc,ngPZ"|'cԠh$UۥFBe+sg]Q7xL8O­ƀ?0br)[}"xU7l]VO[IL~4oIuQbQRg;v8a5GxЄ~)| 6r ϫJq0+ŁJ́譑A R(vn^K;Q:)/V].\%BV3_]IPy:b{_&{`WLo[{G±H6n5.ʃ^vƓ[ 6%VLݣwƲa[`-ye/l;X S&+N5ĥs*II$4dWP U =JIǼSYS>/|`4 !NY=Յ(bnT@Zgއ){G| Cu!O>TΝlaǞY(t޲ TCt[}oj+WߛuC"j_p%Oj=aL$5Nx5aY?oHm0tf8{;RZbgl"4hy1ԶPc~Ɇ>/}!H܍L4lY$3[v w\nF"kE6~(Jv`ì\UznomNstb EmoTjtW=ls* gۙ{~[ .*88|SO IqD 9{Z,Sk?. yi!j^>sZY:?۟E o64[z؏"|.x| .}MϚK}haWRM}Hnply<@$Bm/709O?fܩشK!I6Ctlrjw<a0^}N豷"b% ]Sl/F98nc4 Fc :]Rݵ7$쪊]Aj^4e;/vdgkdgLASG~v6W:ʙ9C6żNR 8!ҧISle^A5MMϼOoXnE}#,Saq70 kESR3+Iιm %CA.L[ay>J0j|8OdwC].,uݹt+za>ӽj젆hds.WC?X w* E٨17fOkp~j~P^IC#}r.K -2r8FSE6v^Mht5OrmR=Q\A#mt~;^*ZiP F]ˤ{ ZNM=l/l b{ $J'chtZ{f Ja`5Ec|n{ċҮu p$U%,ry~Nt !ǛycU@Q `4ҟ溺}ڪiXT~z7\fhyɱp}{j|=sػV&a0 y:16x8`èvi|7s~P4*}zjFr,/!lu~Bqh-Cr,.,OxVC.e,켿XAg|:yulTDZʝaRBј媟OS 딻~ǝT EUX(ԷoѸx)W[Yx wqPL?^HA<p|YOj7*mdweǶBMw]/x΢4 #ץ/=~7FiCg@=g(!#6=,Ȝ֧|(W>3wri )JRBW}sdDm# !Rd˪Mb7X#)wh1ӗ,Hd6> ,<2X/AmW~S!ԭ4s='W)).$x𦉓;gAx /Wu~ƒ7f5Hgw=Us#i[a#e[cw 8{l!u5(xjgΥIZfƢqN9|Gn^0T˴}}rZbC#t~GfW6ᵝ˸*eFe(\ޙ@zջ} v`5R \i"ହ[;b"V6++ $n;4;[`Ԣ}T% @[IC0;g9cBW$?N)K JX7lj4ck:8I)1/58rgOv ⬧1t.>0cE-ۧ\W?iJߺPgW.RؿF N*ۧ5_xhLrq^C S$w>q]Ge_l֕uvnf:YY7ֽXADܷ?斄xGz@ 3ǻy9ߵo +tUgnT.pUV{Mcڧt{},C0]k'(|x%`υ{R{3zS:Ɓ+pS(f&ͻ CxA}AztIJ; =Znpۻυ឴>1:I"^þ1P/t1D@iq…Z _l~ sX&l>sJ:AV$3 ;~-Ft7XHW`qr^8:)*;}Ț˲0#tv]*S7EcS~ƭ0(XvpoO_2d9b '  %T|̗,a5/|˲{ܸ~;n5C e՝ɆW&)jn#?*@;xAB17>-[ +dCY& il%9BqW ,􌒎6j  Ѭ&I' 7~i-.<5[\3̛Ƚ=l*u1S˻d~q{k)CԶ[ͭ [qL!|dڮ.k?Mnb]@e5Rh '}8lܰ7b5`Wռ nlUjQH=D5q}Jk $qF{#ɣoFRQR/jVR9g î5HV_ߣ´FBVNcӴ3hIQ׫*S ;Uu NX}Mմ C{aC-otw[0?(]"xёdHdڊ5Kyj]k1ɈjJ|ostzP;ڱ%4pd6PٝDui7;VESt-Tv$ j#NL ?l\980}m[]ԩ*ڧ}ڲsy󎫲qkzK<\xmVp8wW K_ߏ(PK9Qb h Ns\TۀY_$*;Nj{KX~fk" 04w?3]Q!Ѡe.e"Us]/ C [V";=׵oLG/WS>Xps Fub[FkoC -k6)^ҭ~`{.&ں6bfoJauc__ĥNm$]N [, MޤkʞxM4>6JiLi<0$ռyw%fBotd\heoǕl90%F9=|Z~eVX*c[}ewf괜##q wϷt4vlɆ9O45zO\gx%<Gejצ=ie\79L] g9M02ŐJjrvTV*>՘ do¨~OSGF$޾ K{9 0;~rQ?3vHvLt4P'gZB9Ϸy>ƭJ+doܮ5+hG›/&$Ļr0atx!XPkI?`:y dM䔎ttbPOz/^]w& @_ɞO{>Nn aQ807_븀~ ℺l*}W@=9Qt1_juLeOLy9u]y˚~0ˀ5>u]AD 5|[ h ylMߧ<0+ߺeMԣ F/>47mx}}CkCMҀp\&d%m nB9:B[HӴklZjM!hJ59B BaS9 FC%`(}۱1EەCҩY7ogVYI"""8VH*df3[ʉ_[˹p[?2uªBOjVDѻm ꣊qU۱cW(_~q xERzzi;*\A-ύ\9֮l5;+媡#b[6_k ^rC΁Kʄ=RV&vRyوOr^E=O%8|6}@lK+,<\˵ngRX&X? 95ӹ&߱5H,cNH6PWTU.U,\?PB,۴}D\"Fc6o\>ii=0=sVfݿခ%ި܏i+z0 .]%;c v )FDЦo lMѡ Ec7%o`6xPT7G_jZ0ް~6LGYpjK+9>,9bKPm )%B# Y=`33/{R]~#cM~=4: >҉ y0Y`Ѷ-*W k]@|SޞL3{UC_Ϣ6!SĊa5`eqi+45_ۮ؊<QXǽln! XAKЛ++WBamѷ7oq!ۡM8:/]jLEGJ(tNg}@UaBqYJ(SFtOك Xo_fU\/'@i1O d_xYC?BS<5֖)JCiJKhР _Z뼯Y]"~D=itDn&uL6y鸪 Ʞkg ~*śH-sEe&hȟ?p WO?N݄6<*@C {,sg|0|oZ`ɒ mdLaਗ਼L6ylܠoq[`2AԊ3|;Y0EUF%8f's=KcuZl6\ 7AP!zABӅilz5akH\EAC2À%ư)bwFTͿF8gi ߥürz46s0 6ߓ/] Ӌ2'𲠓^$p=oҾ}﷐yEG)AQCJĨW}.E#hhÊs-VN$*|Ga<0H i$}]Uɮuq$ |SXH ;տ&eU#$dgbܑ@#8_' ہ{%s0p)5}&lo}=V|>MF>%od76#*rikT\k-p=:mXOڋt˸* o 0᷑XAVP vƾ}Y7LIޡl<> 9ϰ DCA6ߵ1~,idʂb!]F xZPhLaO6s9,hYl#M6\23·cZ1Sm^'?|w5tW_7 V`t!Ƞ?[v׷Iju ѢTmzl2azl>ꓶߑU_0&PcvmcA VϽu_n,q~#x aP;Egy"S m{#TIPMdot1S~=k- vGα;?c BڦǰvXAhzdD ѯG>װjsNV.RڈNJje^=3F%B|PDx/?Qpjs2f P3y'nMxlOc#uMcà Cc(~V -lpnye'q3yL1oO'!&_7'ɸùK߬w*(5c#} ro-u _+%gzOXUvDDP+ovXrhusu=~Rz^XyK~_c.XU6ؒn+XG4:X6s|D d;QQ ߪۓʽuXh *9x>[ǮC_ص;N,ͮѨdsus;ؠ%7|dVvhcF{uOO5=v@!(#j%0\+兽*l&}5`l`l!xԛ1 II~:vXhQ:(2+rs|`42Υynb߾MRt?Q,/ MQ;zx׻-KUEAJ`GyrOH֙D,#!CPXجXGА{+\ORaEi\/'ojũ,ߞ ,Jkw?+/# !߈=oyoF9Pi9uL|[cuoMafpЃa)Tσ`߻OQ9A^/NqeU,y95YE6`aVSA/~ u(𘆀3N컈+m3k0 }<˛mGIa2w͖YA{LĎX4tYZ6V>X1KMWt8xᮣ5}P2D WlJ$w%c˱Mdx 8*`:;]4^PB'lߦ/) j3HKVRH8JI 4v YD@ӲQkGHhS{2(j ~^D6M_7OB~P]=>RzPl h[:d^\/V?ʳ-.kΧ%}6fRQ2h]umJx"(I58sWF̟7̵Rg YrWo+ n튏6З|8$'K(7ݲ ŃW>3K u+bϯa>9격[(^Fz7:-%j,Ȼd޵njIU 6;=XWꙏk>W]14z|*IO;λÜGBPif9%F"d-kYy߮(CW:yBIک'C :&ChY].5( a5PnT̚}-7sff+~MΊPՍMd1 V}=JA {S~zo!m:dJ%PL}A1"5LHd*n "4j3uX\6n tkޞcYF(3E ~{-\֒> uic8wZ葸j! F5_ 8HsW,JԚx./^t*1d_gs }tWD9 V&U:Y4$,} -z?>r2 >+Gל>v7J_BÏ2gѧ;c3S.9ʱq=<*b2X3=^>Jw<&|Wse˹}@>g{쒦[O_}2]=tC`z;Oڿgul"ž:DZp j-ct E)k q]!M<l >ʐ1k}*j㱆hlq}&wxW>Do;c`woT<P 3xa2p cfjh3<<0_DpnV\6L& *zyQouBi5J\E<SɒcYQ|Jw}_9SDŽʏn/`$Ye#pXD#nl>{&S7̲S׿ pݽāñәȳ$=00'[L]f S+PJXL)h/lC~"9Kr]\N I~h!lw\Mc  )AYb;ʧY'\:_:[C ]޴`kiI:_swrظ%@&'Di-G~YFD:<єVl@BT:<Bǥ,8Ȋ8#𰩘pK_# NHu.x nYJw~O4ui }>DAHź3~B:ADep8_YOܤV;H =^'ڎT!;e GHD'y {$IG" ϢBg+̺"zoG@{w~rHRTꎼ:ĥ/VХ`e,Տ_r3T3;|H-cf5s*c"7r#ʸ.먨/:̬}@6ZN!Q{opO ̃{ԥz3~t>P&CC.Jm)=@\<&T\1<%Oq t!{ > M:dW ^CA3/KWq@L&_"]cT7< M7;<>{qF#}j?Bn/IS*@Jie TQ܇na]}˼8.<@k1IeԳ%qQ Eg>U_nyfݘB[NrKyu$։AA!N2Z̳A7,! uxPD#.JL( uyPx.Hq.d L\S)cl:LG<#p@H6 ~ !< @5=#z61|j@ 6zk\>)QD.8hֿ+++?be/ݵئ3P;@iH5Qpwf[kP#rGl-Ʋ7'$e潍,ͿYqD$6bۄitX0m}W Mt۵J)% @&tv*Md`=Ph)99\IU #{Xk%yvRyR20> S u/h8y=x\Ko}}1E/NopVk]!ijc MS'GWzu)u{ZazMe#xq2ߩݿ_[XKI$8|9#pڄ ЬomL[_CSn-*@ WI˖oP~1%k

̊{:  *>>UüH |)Iӳ kGeyk0-+(y|@In-V5DZf8S_ 9hz.͍aGwS:4Įz`<͝?+ _ѹ2mf97@T{ Ȭ=,V^[jʤ4+; h|!(]n{KVl[Y89GB蝜eR-ݴq<}Jy x .d8{]HdXF˧TQܘVZ5${ӻܞ,!̿@s@,+^׵Q}/ٹgou yH_ emXZfǿ"v*E>ca4@YDٞt_\ח4 <.K\:Ǹc;=$/0GuWcj9'1a{_NjWXOq) PAֿ;Nln2'oAV_T@^G&WzR0+Q7~6qKmhmzB4gy6~OI 튎KS |[(OqnR<勻Hq;u&'3_ 2/3JyđT}7΁~O{K߱vM-KOxu2(?suQ#pr;9]t L!CO0{#IEN`?i+%)*6Xg4ZCě2A lt:ܘ#8A։Jo 4 "[ȓޯwz/\{RRct0pgip/׹P_$uAg."eE/0.q^*uh9M Sz HT(g~@O=jh"p; *)Rat|K>aˢj-:vJ)=dG 슙z,b'W-4x]/R|z~ᣩbPC;^W[Vƌ)Xg& ͷh H{W}8x6`]bm&[3dQuUЈP׺ ۽a 3XwhMV!jxsS]ДL,4](_47NːL*5HeayK7ɜ5k-c  3X+[ag~(dsP.ӫWK`*:5t P=,A5ʬ49iVq8NRSHtL{b%pdUQ+g %cZ}k ֏%$IJ&:|*jV[M܀A`t)䇺DihJ\_y`q+ZdksR dy!!iYpk%w"d^D@8}T>ke[/[r WB1߉CկQkOqEi=^}@ >3Z6~ua@]DN|x6fRTԫuvDlTaMb:jԚOf-mN~dRVmVF`Z.3Xa!hA^:ܫN sMsavITaLCtH-U`f'POz{y M0d4OYS& $Z? N/H8k5AQ^."2p }SUs hqCpݫ텂AL GasJ%tBaw-M8/cߔJ (ݷTYCkS3z߼-s !5N1&䁕_F5SA4Zn##ÌȁOn5[yB9'BWDuŐo=Ĕ )% >dgCspox;sh~[S$ld%E:Dk E:Af$B@Tj _^D،PwwkO]قj\)|ˊw &AYBmN5aTkFZ;tctJ,-.molE eqLCT>uVi5n@#t;v# &fYf Do.:rQ#yY Xw.-a_LF,xbo oyZ^l{qO.(SPR7OF?np ͽqC%x'%oK/'B}SMRCXw>[{Bdq?Hx\NCZ`6GXJ'DᖴeÝx7=rx֓/ !v4"1=wvaր#i CcKv/mrܿ{y5{/ЗdIKIVEnj$$zn773Y7FF=1#0[אpω^qOsHYy[*I(r[No_ m!{RCPMYmvPωq/ y7LRw!lۥQgXǩ_oA4ݧW$U R17şr$ĴH\m$EU~wX-_CnD9>ZG6JPHJ̬,87́Iw>ݹ)vo{#n;ABw$IZ *IDrӻ7P悘)EWjrPqƺ !$زsLuZ"t[[[NnO!%EINn v"&wF9.ɱ{3)04>u6DK[3]rB"QNj6z?0Lixlh>LR8!@;C aFSUmT+ --ͣe<޼~:59 Oq[`7|tC(NRN+rom8ڽ|oLZA x w 8-.I8:=C ᓢ|j@,#:u%<<7\!xLX7Qopj18Bk6)\jN@uYo-W~HITSr^þzT9ȃp}-[Qd)ˤ:з̪lp5ZP +ǎNTKP_ sCr/2^X? NوpnѷY, eXz)<9l wr鑫pjBuD8_.J-Ҙfɦ=6`5֍E~CkEimJO:nZ4 eVc-@̷ȩ=6HMANcۭ oN!a㨵nvht(ϣ[!ՃP&|cb2+ )oYf{Cpz|L KXRݿ{q"65=ֿbR3a$:{g޹eC ? cTuA!' ECnaϵ#RhP`nD+52yk* ;bАv|Z7͹׉  5u$jZF!¼[DnkLw#"aɗ&B56dm c/쌓l7:rA?VAFLW|:uMG+ă}*7vhM*^Yj 5B>^XɾHn$:#5q^ "=<y{<.nrЅPFGAS92cLJ;rCͭ`4;#B(׷2speLJk߀`5(U%Nq9wI֖Dqf0x\MqsjevD_\PDNdWwбXXK{J&̐=L[VQ( mZC%n "S|UMVdZIjTLY.G( b4 `ah4tm` Ok7I<#[$YOv1o[# 䓻3U>AQ3JЅb.dߌdVPt K,ߓPC-0N_aNj:<#_߇Iɑ\ 2BOWGuX:y{t-,]y$sπb5zMzv7UE(wkψ2sF6JHqؓiv3X1%IBָ6aZ y2nֲnj"LmOP=`M YEUvGhɇwV(׾ ZUI+ 1(˲QMԯN@#۩f/EQ=alIynͼ#=$tY*WR,sAA@Ǧu5?KICv&K3ɂ@/NٰXu5Kܙr X(ˬjޜ@CbQϹSo ӭF}yە[Xa D/UzT,A!BjcTi$U(ԉ|ꭡ[drt!Ie! };j]l)݈PYU"€RO{XTEkb|^)$CŁMi<ƌ7ޡDIb7Z᣼׮ăB(Q7O}Sۭܲ)m|6-޹o;/4 5@,Y1Br.W]wS!v}'^E㞘xnN:,vtޗ|0d+:}68q뭖:ZA: E*|:8X xaTPm J3MgacGQl[MrF|8ל0}Pz6|O, 7knXYUuمp{Fa](kMm&; aЂPo{jYZD?ЦDYsݧp.?ЍeC+)Ay2ݪujxD{KsE |Hfo*-tV@ UP6S йTd!7.S8mAi :}}x Bb6>p{Jwʷj7޲vyӗi .; I)Nqv)v[zBiQũ7d!^R-a֫An{r2I:,2*s:nEhŮS6UѵV³tӱ>goFz$c_JS+#jHlΓj"1i vxZ7"xOp5`3gi"K\Q*UU}`MoeNGT0E Z.)SP ЍsrQ _N?Ѝ ƯGu?p5 —˱>wǑo $`%bYH?nDT`A)Ld .kPA 9j '3sxp#&z>,aMA߰! g\btn6Rrmטi;8#| >SH:?;aۧ߳BV4RYg'{#V=TDh0޷'gЖDMkWwsvP1bΏ3rW{ZzF*tz(Xjپ]M8Վ.g X`Pmʀ;vj,`I˪r+0iq_$|@Ʋ0IH;b_5a_kU9|n_[n0Xw^!Z<`G|dlI4l7x h}&-k i/ %W~j3cI+r#ް)7[1\DAŘhj\;%B{oEgkH6( |m`T-!⦊/|ݧz ۹b7d̫xxO5z8cjtGmU0[7G2C '>+y(`h8>3}~ =]P}Ϲ'z~W#zI`4[ OhpBTli|bo‘ F4>˚r' 4R )o3}]`7dia30 ۷,$ "s~|.V@ϨwԚ|xK1=^]K=;삐=NWcorPC\w'O&NW!Aq ROSX(@CU/Tby6WCЗ^7NY=tOGVNqQb,^쁬T\ y6݇xivP"s8v@(1BrЦV^m:SnjN"y6*u {&DR$ cw+c^X*UJwd:_?@ÇF{\V&lf" [کe*s>@7U=Y6)8mU7Sǰp K6: ;,_]A| @5BQ1yp3MψJ%yCjf H6l5ZPvZ^v4Psb;!bY5>L!5A$TYVb7fצqz?+rNL#е{V58A EGtN!,ԪJ#-\ 0;RjrZrG9/qF%NH A+Oˢwﳦq!q[QfAFQZ1㞉dz/vCج3B[{ru[rc{a=vC`G擐{Ik0mc7d5SZW~jL:ƼF)(J7RK Őȧݒt]x؉"k8R~Zct\ӭ\·F^ MDfpOO1I-9',Z'ɋpC=U%no4%c oo ">~E.=}^"Yp^}ן'MI͸}Ά@>@7 )?T~(۵#2+[۽:aǮa:Z{r8BF8ʾ:@m5FE>pM۷<%$o,\}w>T`M[<ѶhIwfףZ1X4^pVkSTm6xԍXc^-L6IU ɄM2#$0!{7jncߦ@507 Eq;qڣd_4 tb +5tyۇ6-5ݪ4gU-k6b5lY]Wp>itWi5[jL7j5jb<#~eAv]d=|PA f3]5v!EzhI;{., hdD90Se~FBSDPG(]{͘GjFVL,}wC%I7DTk}fzc` p˙ԋ E4$֟QbGX BbU=S Ӑ k{kp0ؔK>mhҏr;52?1zH#zmv#ZoZ wn;N "w=dz>%;镌6ϯ)c>`];5 FSx%p \>|]/= XV&#wIISHttva-1mRqr_/~ȼb¸_al$h wW*6Pu;,+ZU!}C {#Ɉ,?ߵMsBYIL#=E* EoN |hç{73ͧx1q}%VY*^y+]>Ib]s٣'B$*zA+~$)ACu-)דf[T6 F 8.B7MçbS:Zh]A۫w7b:}K6X*BZ: .尦=.MݎNV}Ζ(?bR;{"#fUn8o (#3\deG PC1(]VC9`kd?(. cfy_%Z8\L1XF>;z9 FêtQ5HiƊxCo "z[Xk: xAFk,_({sˡLz{j7TdT1R%]1p"Fgr4z Pi#1!!*>9DBbX?T#Z7T4g]CgoIbVZ[@qCOzzj&L> ~6⠫c"w )b Bsd1d$EE~sinH2HEO>"Иr+!'O(a FfMֱCeU͚ŦFL%nuVࡆ`Mc2 x'xAX#̔7w@>m%@B)JD% mٿ=m=>Jݰ:tC>_ZM 9"7R:u?bwj8_Gq v+=>6LJWNڡgE.A1-G4QxBmqK7uȃGVuu]z.j*/0Ƙe:~A/T|83XF3^* Ly6v,uX  -MeZ]w"w,>aN44 xªt-ƴvGɕtF3pb JQ$ 5)~wJ@|y'a(nHRzQm&W돂mn J%k Q, PC,l͠=¬b̟+.EIݳb7d5Lfu0R.^eQA 3ӻ[sl} 3GȪdsoT&kgɖq}|;EDp3&w@'o=vû#`O165nU_hO_{=\q>PL2I?s^z)' F-Egqp}La[Lz KgѨcJ1(pcrتj!א Oēy= |H}RR+pMk,{6^hʵђq0YTDH Vo3۱@ /^o `C"IP/XҎY9bC!őb|5h*sĞ;8t~ 'ƈ=Ƀr >9LJZoo$vwU_gSk cejpFIl+i0w"d-"e ILylO1ܺY~Gl$6{5jsvx%x+%.^/n.q3M[&#xU$Zo]{U>(o?9׸c.Qxu,wj E; "n:Y]@ءI8qsǍ@)K$>|OCd58 735[Ub1]km떺o'턭%KVHFwbp]dx A#I׫z{~-XKIF۵'L[wUoSwMTՠ_D-BwLo2y(ڢ4.2AG(u>zV#[ s tl u\" E Sڻ_yA[U+* mE`\, Âzoy,eYgEly.!;h*pS7NoÈ5&  o"%M)P}PH-( #b"b'Y;YU2E 4\gy5E|t5pQPDo;S LBKK%4?[-p#`LVۺ+y'}R.]G6iMjV|x3mslJ$.6dDJNcP 2YHSҠ[Za^xY@&_4RJ`wl?P]J> #w, &s==RD4n{m5nGW(qܖp[<]!"5bV3*]V*ՠWѕS4މ/غ>#[R*1 ѐĮۦOxf!ϖLې2F-]W=`(t>JN21=vtU2P G0 4,TK`?ӽI6|9|5ԝq3]$yAh V|%m6X);؁ "ըY4^j:(ϷmF` UWQȽ`gbxZ{esx(LpPٶ=TcU^Hhy^C3^'h|4_ ׎8|V{Ec־,8^Q`_ȠGA-R ind!Yu[$W:Ѩ5TQ@{-lM_rzMxw 4Bzb+Υu=y!84jU,~do[=|Hcmr7XB_[-}=ѩ7TR̙siʯT,L}ƹƗ\t_ʄNnV#"J M!,l5$r\oC^{8ҳW Bv,H`?BN[0mH-;ʚ^bY Ya2[czr2rd2훜_XCWLc`$Xg|&*dLCԿ}Od!Ъ`>c)b[!"s:ctbGZEX9bOJ5Q*xMrIxwR(UC]) w@Og2GNaQЃ9b6" h_/RWn!ݦK&&ދ8 h?P4HEyhֽBgDcB VhJи~6LBNuŭ*kgܷ3NJ1ŚHfe.u՘Ԫ_섿r8='Xn5Z|vPC@FRfmk^q PLjvq7C;"C7lg}GtR ^egz f{lbAc%ž2۬4*#\U"t'_9)b7D K7NE0)=ӶwNͅ4S7AoDZ+-Wz.+Z@d>4Cq5`OdX5@!pTf5ekci>MCj@zG6ޜ=S* lKn}E[bYX/59,-&$7(aTQ,_!Vz(f{E w'&)k١~x,h3+g4ڸlakI7JӐ瞗j˹m0jOw6W/b[c>+l6>b1 SDJ Y޲#^4)R(sj6wn@-% k~Am<%H_$Dc`yN"!u]]>BځF_!pCh뱷}spX Uu? khE.ct>zPGN]DDw]{q%ޕܽ5YßV.̺ˬud(&߽5 $]nq1`7'?!S+ | kddyH.aKݒԆj$AQ>H$^H\>Jɬ$s%zX~ޮ뉓iKX48W+a>Z6Pv`}ESMaiPA񠾏Tt̷РDzvpC%{&TMDAFZ(+K1( hjb rz R]{(Jo,LpИ߰<{bC AbOWCjl+b5AQ+i$}z^gü;`q5Ш[ztVc;MH+;V2<fAH^q^>) Iʴ%H+j/7f[bIJ"4oT$}^#XVxA}XaN"J3e Mv7aKľ{ޘ<5] }ogͶBƺ̩[=S1)j7, ML\6[ ۆK҇rLւHo$=mCҬ 7-ZTΉ0uؖչxRK"tڃ${x9ï^WT׏BT%[4ѨY#T&a8űU6EBJ\ u7u-Fnd;:1 xxQ'wBLz{YcSb; cmt]7 }x$wH(_hL폿k|8fOZtQ>3?{(zj(qvE2 JPB8'BU!ef!mՋEV7Mkˢ||61%aʹ(*i fS_Ž]'!Q{>E*n7"vb~Iqno$W17%kA)?Y7lu\'}oϷAYnHh,/ct.S P(g`ݢ,@-g@0WxgwO ڀՀrFlo8uMz4'܊[v<Ė^B&bG1qPC MẊyh u.Z/^%W:V$p *S?1P{Ah X^D+|!>(7߄7 %<Ւm Z! է_9?1|} 3T210å}wD"9u!(|&낞eY< +Qf:dsWf `!~ʨA {@˙R(zIO7ʬ{DZ=tU#6ūI+ڄ]UFIRI$ Rɵq51ߏos6%3S?'v~dȲĮ*za)=ܩ5a{/El=rXY9I,y|Zltקgz+oDžFi7wuvOc,H/l/0рu={h特៪ALZD 늿,!(u*!erG%3A`JJ^:66 1$f(/yKfi5iNrV{&M+_ 4$Rmq!I"KtGRQLU)s+Bwexv2V`ASnYG_(J fW)',<|ێSx: AguѪvp$!6Q8\XEVR-q4dxl52JU={eEcﻲCœۤ۴9ۡ Y8=ɨq_{OA˸>P(bid ы]7"N9 &yt#6రTtUKHn:iBaqwf4-fC-'I-/vA 7Rd^05HT>3/}Kʠ_wkk<=Nh &ZRB5#)EN>Ff>mLjR(sd=m {Tq7/>Z<Ak*ZŢ/j( >IDJQL3{`&,bm|X¶J# -A:KȘgZh )-wqj,.|SEͲ]&(>z79Cɽwdf'N?OgRb)AVܲ R ,֎B! =9ϲX=J$IbRkٗ4^ڨU"T_*D&tQ%顎y~%leHu&TZQp/V\39ofgdlM*b۴ #q@Hn5A-/_Af-#& ʚJB[}lO 2SgRhS~FSynRJ<Л"IMZ{>8"ǣ@hߨI_ cM^ )?_ 6,y;Xh߾ atjKY9^3z| |HV U\pݺb(F1QQFYWĥ ,6cW yTHߑ/^e-E @p;9c@koTrf#>dxPi8'}U0r`!PNɄvO& ;ъgmcghyA2\\( UO.bgk( tץ$cL:)gy6׏G6[/|(o]"ƋP 9ҧ T@J&\XX8Rtw fA%n *m k ɱ6x6ӽAGU/]Xd|a.Nn_BʴQ;씄D2(I?/Rᱣ`ր-=WSSRf3!b9/~]$ HWR t)s]+f>x, !٩MS򨗾C78QںEz =UmBwQZ(XPd0֥Z7X&^ֵY!<ʌ7Lt{縬[m=^,m&[ >7\BZX [»Rtȇtx!$S7v-Sq)اִݖ^Gbn;_672#Ĵ\e}or,$`߷_7U|r O@+֦Av؁[ަyADW)Pr 8|}(-,E} Qs$WhV#ON)2cׇ۔ZvA˽9>)*XШuJ:L7UGhE0}&;Fm(XdnoWrAf`4Lrg\{|Wio  j;qz"UllDI"-gSO)VKoNEOpʧQK 2Śf29o<$9؀*nkvNakJJk4l=^0K5*_;Rq.6ן gHd5`aey_De1 Eo%WxV"q}7a 8sơfO[ĞbÔOe%9 }M7{>ug0fߺ}$͋P㹕&}*ؽ@RA`=6%wpC嶶Yl0Fcm> $ Aׇ=P"t_+_lBrInY-Y14FtpTL~ Dt\vaxFjUkWש k<:5دq$'RrF5\~ۧ)mg *9~B{O'-,>$-}.&dU‚TA~`:IXg. \zIy2m5HV}6O0MR¬Qͨs—N`5/nڵX0 L&_r1eOp(V%R}{SC-C=B^F:qZn(iQz6jJ̗gHJh}2--J~ ո%~[ W^y] F%|;>ag5P-bOQ۪.Ps"n tHZӷ&'v/-*TSł5ۈ d*j̙M܇LUѐAZu V-˧KEGܬ@3gx+9$i~?(ft9 EOlUh@!|Qf/hF7w t`)*D&ϕkۂ75U d5ٍ bi~PmLmAcZ|1LmEC`=3PK0`oj@+]=YЅo3:y\.!I߾d8q~ed+Ӟ6OU삐a -)=b<("is*=zmq7XEUYT>=ְvԩU4H^$4\Hg}vJ8iX7O9|? ;le.0֥|f[YLH֙ֆelx]ƾ`f +]});2MV)4}]I> >LlF-_jLdo&jɝmxH`Sܭ~(x:cBm23fD=L Ԍy*'d J99^Lf{29kSdWnJ=~dJ9]rte5;;2ز'rO"*"Cfʑ يHE]>yȦrZ>YY#E5ņ1oe|{k~@ I%ma B#3nuQȡzKěcZ%q[ x53u]nvK%#@ ;ޚݏϳoޘKLNe`/EA6e_L'4loj<-_?oJ>c]ժp]"N;i14x~$^0h0}/$W|k.# /4Or>'n-AP!hTћn>s6~BИJZk+?wI"i{M<̬PCQ\*`l>)X@zqI4Єl :aPXO SEv&T])ml3AhjP+g9XZ,֨(/.|Kd abU;#TDd*.=/'\gEm0G^7/s 곺kHv˛]J* Xs<`sGY,X9G~˅}4j}MӨ{Npy=Fҙ_|V6qVoyC#o>!L -IR1bnw%(Jk*bg@p ,m*yǶfޔ&gtt0ز9L`ʾ-c&1eR: UwZz i$hBȁVH˞-Pfɚ9&(l@6iXޔuUeqv_*ވz$.ᡝ5 ųiʟ?ha"Ug ]ڿJ Eym% G[w3;v*G#jA Rgm_ !D^xeVӜ(^!-of|XP'~+VZBT+-{|2R,ǀ.J@~|m*_VJ݄_Q=I2g1A^ 7qBa: `wt%\xlF WՖmƠ$W Od[( D{-762$6u\0v$sP b^WuӾJi=Ij4He7ݲZQ:/=vIӰG{|BxzOK5S'{̙kj,m6+5N}ZiΕr12y5㯭\)]hdB0;mQXqZAwhEs'8))^I6[RƁ! ηM? Vr.{ud9>v!YN]}ú+mHRԦdzdHaNDJȝ~Rʏ-O*b6.;n h$OD!o};dg;Nd.*eKJF):5Q)=m R`]& >0#t:NLxBxT#M2:>/ I3f3ZFW.~CM*xul|ZMA>Ni-=;5ĠL"M4԰} hC*R69{;O/TO=j̅tUL?V.n/6xu񋽜[/:g ѐ꟬ki&PYU>IW{N.i4˰?yO͘t]qR/Qe^ t.9 d(+ZoM|`j+_%ٕ͡@֑k-+b(P\-\ce-OVv4zznz Þgn4vgWAc=,W*a;e2~.|bϾFpG .ę5V Œw+i4[/ ȏ;b~ 8FcʓmcX5_ Tsmk eN_lC*wLjg}U؅Ɲ>T.o;{mp5[Q@EZUSyG^u=#刈{M xQY"nޤPny/InYIek 3.ec 1VN) R k:q-jV)W2*Tr._Jv4ݡxl1wOLwtKy!%Kǖ]I4zK`OW%t߻\66bͳcSsv~ r= 34jwiKR^[@Yf5̠?][U!|J]rnDބDuuo[RijQ/=߅O#=XsŖxlA's]{gq>M IG %5s ʨK!^#˟2VSEf;kJ]F;QgsB뿕=g'B$7yo]shkے4-K^~QFDS}'%>d+ \Yc”<6J~r(;\]4V|O Bb Uys,ʐrXqo-&#܄S$8q2]|ۛܯ^aHr}=o `Z$XCu3<"ewiAԃKck :Wa-$ݭg?51LG)_()svtmd#؛k ͳg+SjngѨT8hN??وEViիsz'X3oawn: JhTe?T-vui:@pː.]s:ܨM$~gXI\m, UWqׁB@*g)Wǖ7yWrfUk78ͅ9 ?ubG8^Xvnq9BR?74Q{lMԴKo9é{K/oDW5*Yb6 *M6N|32lu;^r]{?6uU#Oi֢ 4jNJ>ճ$w4QfMABzmYZqܢ(1=k YHjn=0aORdW@M:zJU#gMvkMr^"2zPkއkٳiǫVf QxӟQ+|ocAZx6dN~Ѕ9reL?oSDvpFeb%Ak !2pkFӹ]97ȵJQ#wWxHok8m ']jzܩA?^4sU*S u-wZ@F+Z-1gXuckތLid7p-*lV+٣+J[B}+_lkӭztc\HI|B4RS~'05nG!'Rda I]d0I BH+tN{DQmNYqpןX[c.2:F jw<bQ 2 sH.[C/IQt3k4K֮oF|= Fk~]ǣʙN8jdp^e86<"w d]Er1b 'bRw^g_yAP  O4^ԝ jsG sMR`,Sq;사FW#`Y)b'ۡ)%O]Bfd6%{&юKуY p.eõU'>TȦcɊmYܭakdMz/98Fz١ +R ,3bbv9CX;z%iP_h~)ȱ_!i; ގI{!<ܺw]gj_xfy]V5~9JNfDXC|! KΆtfI@A+Yf Wp\#D >bۭ6 N&xǦ7^ENI'RGzk4+9|!Qѽ߰Ov-nڔut $vaTl̷o;oX]@ 쮄yRhĎ5_7;á3/)9y*z^лgYuF],\ϱZD)A}+zEp>b:-ZG9ٗ:Ө3 ǖ@r yyl^]#5,P[a<:NF I(/"Ñ7,cCXoEDc(}VQ>fO׻ltEW"S%cX+[jFZt ĵHwlҕ(Rŏ^8#|wv ϟ'k)KpEUH]9XChteuMΪZq MA_M$dTOvvz۰ң٨Rݸ]Oj'ZT 7[|Ϙ`'{9*+J@>QFh l*5\O?#'Gզ\#/VE24>׮\T[uc s joyζs,棟{ܥpK$%ctuK}'|4ML9a։܊J9X ԄJt-HνQj'tE5Jjφ`kTl& A"8oaW(c` Iǐ[U]}gã"ntqOxkn樌b17Y'QfzڛK}`feպ?YεX|ެ1phY3س[#2Ay:x1` ˕F OΞ $)|M_l6椪edq]B@ű!C!ot!QLǽvD?D܇/~J3dzzvTyMF<}n7VѬ"n~$q̼zhBEnYG{D]~qQx7x[Xvg#mKږ"5G׸)ֳĚp?{_,Kǹq'{ŸpkU^@SBuc&f]Ӗv}zmYFzKEն8϶6 ވPP_7HH(0u`5WQX p|XCr\< kqMSt{*`Pl+xx&<Xw%Tz\1`fiEEҴdUv=m<_J,W,Ү,QyوC9vek*zJX\.kh1@aep,KqӨgVPD`0C8%Gy?P!4KAWi#@ @ tUxg?Kle{bu9+֬5o)jAh[e\M=S[{Ye= uJX7<#Fa?λ!mIImZF~œ?ؼ\g"AK=#SRN,x*kjK?1Q&'}ѥV*C!n}T\a|{~=TrOkHv[Hh<=6j紡n' ].:^@ S{Y>Z?v־!Aǻ"c- "2*8"d7k2+ݫo?iGe9l?'s dj[kd8y k} 9XS)E{0Mi=>g?>YZKgI+YX~s18x`e!$B,;Bu[w .~87#Q9ZgX1r/Rzxz¼*Vaa0fh5bO\7!%ΖKDOp70U a*b=7~Cyr$ϬYS{P5J9h"6ТKO,"5nBIkֱe^R(xi(Q.1sgGh3 ?@%#T=>Yi'"}`{&CGpKYS?&~=!c/zҡt}E Y*6:%c`xa[?\&9SbA1P%2voYj1j(g(eދYbΥANBz#QB=,D7\$Q5_eF†{^r9 Fç0O2u1-=TՔ_dJt- w+.Pu/Jz4]qW|j|GW<0,=ѪlIԇQc;-/raVaz?m0C + !->Q|@`{0lX)Ǖ.qك'!+B1nN> 5I EEΩEL$j/H2]IE˗/Ph}}5=~^upP7sn@Vi4Q5^qُ Ձ3(ھ2ciǩMΣ"ֵ|"u=̭|oQbP `"ݳj$ ={zI%*Yux/"UbD (a%݃m6G<ѓ,k=[O>m!2+Yo^j<{ݼ$_ ZE~I ` ?f{A &Z'n4Nk=SVk"T۠0M`yD.hڗ*\\v{ᠩi *򚤅|-hr]蹨_t4|3OަgIjj>Y Y3*o5XpTb8af"= K9÷1屪?5?] yh크t=|}JDdx5NxHOW*K7m֝zM_Qj7Ѳ? 7TCi)LF2%Iϓ:60:*Pi@P h\˓şKZ!}Z)iy̑XdVyJ`vƕ6bYՓR&ewkYؾ*J[f EBǫFEpх|0 %zF{=ni%z\z?[X siOG 7؊=d9U?%ǥ 5d/w̙V#cD'{pQ2K7}knЌjЈ)ƭ+"P 2IGc$XR{0+'SI_m^^[ ?2Q `s,ݤ(I9 aJ)cy_XF|Ǔ V2Nw`u+PC0P;a8+좄'%sr#\=@U]MSﱝ MS}tpdY;6C"1N)Af` De35HKǓwZ9 n/EO|58Sz^'T$zMuUЪc~ K(M :diۖ˒` (^$i7,qEy 'U;퀗Ҽ{^IӨJT7u?s"|L+G.%!Ok6is%1.[m|MAl˺<Ij׮M=2Vm4‡I{O(gd< an@g@40%кI# ; 罵V2½P3WS!JZh JGC=Ep6ѿ{ IFߕJ}tLx)/#+"{l[({7ߐ/cdd+EʃcJrKU$.mWxȢcotѳ3XH?%r?=PW|lnvj=0a`p/ӔLkS-Q!@zI/M&+3@ l3}GzQX]8h0@oy.a;A¢]J[*V>(BcKיFTipK-Ï|j1w KtP*Vŗ^vhth4%_'#^Ix@*=LH(H"T,eoy) P!}n8qԍ%a7dVH]Rhlel pț-O2R)AoL8@^Ժczi@ܕIxS1 ڇpΣrqHdx紼 ґ%j#Hd/X#( _SlL̽v,*NJ9bU5by zqy+y&1/xV:Q&71j`o X0z您y>n"ֻ,[+=/R^/-X^GO5 \l 8VQm9\bsՈˍ(;f3mnl2L,R酈s RZpڬj*/Se5^+RWq?X5@C{םEebjƒE=ӿPX:lnZNB ;lB.!@ǍN}U[`ʿJxwhѼe/ͨt[r!ZMT4{ ݻ6IJ٦oqW>{ rR:G `Tٷ>˅ZOy ce{}"diÎ^6 (\I\)QKKcD@n6+mpa2B~1x{ #7K )#MGGr[5m {R|b=t[=zƙՓE BΦхɀ1>zʖ؊v &}J+#>͔Cf4q;Ge/j{Lovr%5~- a`7H#MwU{+[=HIhp%+^ i9{6Oۙ(G؍"#wuPp7)!v6I2.>e ֒Nu?.N㷵:>4lTo::`Wo4tFy3 z0d**lA빽wPyà2w>}|.O"VjP{0SdF0۠Y\8 AWMAujT\sEP4:lkoOwVÂQ"Jp~B.P; %IUCh(n_LTMbkY!?Sdmk<>ݧɰlH¯:okaj$1e_64D `Q ū"ns? R͆W}[>nR%~W/udNxJM+nB4TէYtrY duϟ>$L{G@աN ӵ]!fz>jQ_sp<8T[m:{\v+H!tzgU K--D/>ItKIu2yNү6 :x&a:#xZz1%)Q;u_aPuqE7y9a^RC~R('ۦ`8Ѫ>PxyA74~=iԾsԖ[7%6=}9_@ct ,ډVyĨi{DS}*0lcƑWF_N s;-EM㳣\XýExg1hpkLHhm1#P]Mwoߦz1hY'f ҭk(~gVf[[kڻGiz |)n|}HRU 'ZMf:B|U_V5*F c0s! oqs>mF #a5'ITex~PG!A?O)sO?Qjq6n^Ex*QPO@㲥nULu/([w ߥ 241i)]ϵFϵsr7;%02 (3= UUC^ yw elWMY좃QAƬ:>u&tDc~ P>Ka} 8+/?Xq]4>)T rɧG0_`PZ eITzE௮? "$K[B '/[)6j F@dื"/ #7UԓUܙz*ܳd7Xy'ڛ>o&NM8V)0,W|-N7#b~}IxctǕBboy[R(-^=HͥJli7g|&+={N}Iw{v XZpg"r{cCF\67^D.R {6aoӽ5yMF5>l=`UXrp{0͢cd6sV3U |ʞ+?%Owfb#RZ~⥟7ESjڌ`Jxi-XlIdt]f ^1$o?12ZvOs?#1Cg(8irܔYN"O Vփ *e"JQe>BCIRYf~^J~B{y+IQfF[jz [Hy%^1S6يhak9'U.>wu69 ?#+ra9L/Cjߒ*\^q"n.Gp1.ݤx׬X'AoE_N8`ك}]`5h;Nn=XOQZ}=O߃ @!҂` ?mb0D75< $ԌE Dޡ덞jy}wb3{Vk4#3h$ρ8m'Z"NGB0|,#UY-4oK6`U l=q{>m'7$F+B)*$0J!X\eTZ9\`H7'eȭl>skʱ~LЀa6ԣ56`}u'E^9Y U2] i}@$Ks` VL&h/vG ;%b~xN DN}7elEDtï[%|/ W >) M)CllnةsN] ) ؗvIv#bfJhKUޓ.ndS5e^1d,5'(lTrb:E|z9iy~7 mKSqޖU=xa)S)laÞ*=^k o`|A sq`Dy@U4'p2@qhCx%OfeBkPIXP ZoގydU{w.OR(;$[/pO|:d('?0CysFBl痙Zgzmy_ m{:( 9 `؄NCm Z|0 f<Kﱓvjp9|H p c!; ~CttH7 Y _m kpS07DhgO&_[3T vw,r_X[uĊ"B?{t ~ ̫Vm֢nx~ (51I(%\\|`Q5:a6k?Fhb'Qvǵ@a~ؖ^ߕj*<޷`)n}qPqYm!>\TX`w'd*ӑVwpCcgݪ@sFu͋WY&0M71IzA`DG1im/xB`>0??Dyeac4k<\nKqL=  FwWFkx*s) 9)[G*nkǺX'뱣Qa B^'0&QMFiњ]%@blM<W >k5.'?pB&p}Z;':ALKˈt;빩NԍuL8,_.|uq n~ ǎ"~v.b?r|{xq-v?@bEc=`_:{{L' ?S6BxE,:Flx~a.T dz pzY7pR5CŭH3bdp<\#y!`[Y<5߸1!G|6aQmfչ Dtj'F?5MbL c@ N*>g6>P>̻!w lE)U\q.=x>`u@:їGF:i8=t`#ߎC^sG>b}~Smgfdgb+L;RՄU5 EN0@U@T+R?7qM y96FHfWX unZqtgEccP[~ ]K'-(dkw=&Ua_ T8m.~J`t37qn|9oa{@+j |jXl +RO _]u?I[ F>E`8.E>|Zu?`N5*rl48ŪYJ:F\:/ejwbNãԲxH ~˻ϳm@2>C%QU; mx,hj">s5=x !jx?l;\ ()"v6Ut=#޷{*΁$K Eľ7 K74JZJgU^l֒5kMttP7k[k޵,mml$:ꇞr $|Zs{|C,VZ<09:σ P9?:8t@{P NgG +D:o!h7墙'5wZ&,c<;ư &E%wC&uR'[^2e&IJ0[6cХ!8o$G+3Oq{:?!`ۓ#3O;~?^k0r,AfLbg)'Pu±MI2zBk=}Xr#xͶ`iB GgiZzE(;pe>t9z\ U~1-qf_Xi-* U0|x_1V9kaP9[ɦ{rm3qz%_L7щ h:wb] تxVO(܃ņAR G%f-o҆Ў'51u"&&aW}jsfM>YԀ \4/^{rM μ}{zgn1=v 4ȴqb5OsZ,KLm~G>1#E艠|p^i_a촚4nz\lBwoA|r,0-%hkb$}˿ +f@ C"YU-/Wd.)yAJ?qϚpe9ux)ç1ׅ88T(xpE4˴2pg C6 'F,C5GI//=Ao#G@ ^yk'[i)p"4$f_-9OwBMԫ޻"z3u'X/2&qs&%N5^}oc=-*[@O<畒58g,kۦ C 6Lt͸k_lHZ"5f7哉jR ]6 %E=Z?D?~ JΞ`|~\Wt.; lYe_iゔ7R+tc]Ot]|Wu=^NpǑN%aݕD*m/INP ќp WȲ9Pft t re'x؉L(*1Lsvה?M>0-w jp,I%PMqm-IeiXsA 9H_boTVP pVRJx=KD ]*kPt}d]`F L?U;b8_ HܩM&E]cpԑ`/;`H.s'O7wbP}_:T$!)ٛ!-|p|n|0{PՐP"S_ x鳥Ήn̍?o86n_p ?cd)ŏTHV`ۖm9)k-Z}_IHkXݭ{^3K<ߥVLEK4BһpsVxzC}Z+IN~pǨ?Pt*=x,_8bxt1t=?l0y_|ؽ/`ow7yi'JG/qw-7 coEI?k</vq :͐e7y򐎕RP-l\v?\`Ԑ4Otqæj (=$u厮d@ȌO?`=*]uẂl3J&~('|SN4j) f-/bZSs \^ک} w1#WYͼ/s>ekJnyھ fi*CB>_:6(?=]jSRGS2$nV )*9/?KM}K4-C5_pO|`E;0&tq+<pWݱ*iL[z10t2ކ>b!gpt7ؿ]==L> \=&YUc{{0\UEe; NBtVS y!a,y]j} {34Hĉّ"͊O: tǻ=)xM7l{O*q`tu5^h>op;+*+=81?F #,ye\~ -ҽ0A;F: Ẫ߿wTE-´$XNjwT OP ؤ`@]^3-\'R (*of2z\[>.yĻ9ܟSFjcԧ̈.ttկ b :QU&WG!pU}j DIz >5ONgCrX ծ2!JΧy;܊:{< CVd{|˺Mî׽mFGb BWu>ީebɬ]*i"QxXrN&?- 9tj0֝ҪFd`iqY[?@ 1SSx9 %`g à>ڿ[L=Y,t <ݬ.d%IQOuarGQ+&5.:Tr2 ltǝF&?a4X:g}{ѻWT.f^2"Uio\-OEEr[, (,zN_+#󦌷6+~~hhBUo8w;$|Uq,LxH*ƃO¶Z_ F(>ޫMy7C^ yt8p3ϧ:SKBc7FPfHA6Aatk~^A? {j -OZ;u&ӧY릥g&#S3`OԦ>؋љWY d׼~`_\%BĐVTKD' :BMO9S36Mhط"ڟˮMrϵ{9~xĽ'SW~nC155%KX)Nm=؟óJ瀭ߏ Dc#pjS;O!緍!@NIڟCM)Rj6 J;vֶ `ԚF)oը)Rw7+8yTu%â<ӿBB4.p0~7L{p{'MޯVϟVrJYhWs3N BZg'Rɘ{3C b{vqBD`"9iH}#9ۤh-Iwҫbnf ndh,"G|(Kqy#T<\=M{ydƟ^Ap[3aW|S1ԯ&@?z*kZ|:a(jsd;aTIMGVNU?3֪P]!x}?R)_0J\v&L3>/ɘa|&ߍ b{8J"\#!}W@vrVR{5F̩6v-Sn??cϜ /_M!8ڳ7 U>/Ois?/+Ջ '* ].5'sc &`6[5\IJ2b]{dpݯ`9]pBv _D,̋` ny 2[9 & (,@ 5,Ȅ`'2#<̚Brv2\sQ8yOsg^ #ظ`Lxc i饸EL^6/\4@yXē8ic@X`,_Ϲf+gBHXΗgQͳz|&WPk_wAзC\xIQT#Ukۭ٠aЇ3 ' 4&~$bpDo)>), @ ~ /!H fEK}w}a:.kI9(īC 5$x:]rѕ,4A [7EY2|S}g&2P-{|l=ؿ  NE'aw7]Bexw i 8 >(i}̈́\~pKj2z_}/^Q WK/G@凂 uZ#ߝK^y)bijEPocR}D' TnN \Nu:@zHQe;5%V3Ӏɧf ]|yP\݁(N%!!p|EM#RKMMHCYKZd⽋ίO틔ABpqAt/XSZmGo~ądQEʼn;;yQ|:b㠉1 3#ܮBxwAK]>32L]E8v$@ݪ wLThAYq;%Y?f%>=T3+ 0E%^⭳O-D3yC3"EPH+ש@-YjR߾/՛:^(9OQp uiO mA\T?JgRH!ļIIo-3i8GW@Jq'?*E TS⎔>G)s{FL߸ ο'swm|$5Ľ҆fIŰ84ze!T(OK-/V},:%|1sL*^װCċ6*`j(=n(T ۶jW`$*i|ɕ&QteXf]dހ4 h͋yJ IGY:|lj}ny; ]o-^sgւ;4Km!.*g|p{#2KV)ƙԥ_[5LB+sy,9H lX$vҌͤo 29U=Q7@~Sb mdl ymq|>Rʰ~6UdF+XQkPW:Vxl+iد3ɝMkc'?>M YbN,:x{"7 TMR>s%ZdEF"@/.X]I:bDlhz} 4YY[7XSh>n,cbW^ĭk1/ו޽wD'Nxus8K?84 daKJB' T=4;z"$휣?"/)>4|;zc+e^0xM[V"Ť2tyG8PA o|\bѕ9PD&zV^} Р/$zNs] ^s&Ls,z '+DdS B^Hs|'u||ea|3n$9WjXdW3k86ލ+vZZz0V?Kh/ Oa.U Qu8 I_;0-]X՛+W8#xi (- {>UiǏ"mL3@R$?+ wƒ&oN*n+VT*6\Hd(Xn 7A}Ma av^C^D(daD, 1yDʿjrK!64?V,YiK@˶qRt!ْ`۾meXU|ؓDEnqjxϽY=C>4-I !Ki>7AiAn܀%X)pŧr O_\'ir+"Ġ9f+_:]^ aCsOlg{Pv|y%w4Y. h?qBEJ<۱>Ȧ>qv >:ǭ2}d~"/3ȟ4٥}vc[IA%#²śC=ϥ­2 B Valb?xeVv&hBV/`h 䴙Y?˜""luUM!3vuh1mG+[~!Mͳ>ek$!<\w*w ^) 3!U7y ٵP'9}"VsJp܂ʝ$+%90Qn'~_* xa'2"J^sdSx JifqWn&/sս機>*\tg, (3# :nUIhT%tR[Cǯ(rBB!}VW/?JoH<S90/?1C&/,4 ^6$*C5 *$'T%ol4!`ϢqF{b/'HCDS kbc*ޫ{Ks"ćʫv ;p|h _Ѕ՚C:h9,hj#{Ud9+~Evvqz{$t*q=ս u[2$|-7]I",ϵ\/`oz8llY:2:VUILKQN4 7Pاcol 003|f5'ig-U[=D"3m/5@т,sR=ҮD[ a{#p{+Y6DXKu_^j  DĴ?G2ٗi<4x[Yݽ6 O][h>BuepdDYϿ~#^6Q0K&bm<}҅ k;I2m =q(.yT-`b>-f7EhViGxrjJy]2/oؖQ WB bu\CgecIL,e m!~.]HI/[IqM.~^rŹo؏0I>8ieYfh Љվt'I|ƛu8^|y h4/v6R5p!qxgUwvg r )JANCXpSCѫ+7x4RYD[?n~ i.$e ]}^-j%?NG K[fvsgyboNj <*|EDԵLJ@Sm.Y>S1KMܨE%k-5*iz^ P/DVȕC:u%)E+$ ԔS%֙^)eO Yy^ EZ= Yyh +Dv_ ,9.τ5nϋ:I!>s{j\/SL,exFPkOndTAkx7I:2@$֛^Az5QDn@/[FMrILtP `'UB^| C5Lx9K;Lz0|Rn5qI/ZJVPMpoUw66IttN[f䕷 *Y.?b=4\ֽ]V: );E3KR>kIz :/mϣcpuk7J(5Ui{5xL:n$'Fn ]wۑc_)eJE!n$27(fxg:?Sd;牜vm$g锑R}E4[iQBeo}>C3n >8ם=I-3jfh%QC-2?.e<|UB!g>:Q:-p{WR a oҠdʽ?~w <|X5J8( 3jzeatz!6`:bxrÁ 4`N S$˰0pI{>kX 0PA1fobwѩ>Rފ^d7`o݃BM޾+KehmsMO.߷جy@Ċs4o1=B3 hя G\u8gRMۼj4h"HNR Оyw&@G7K qȞ3V[yA>Y$^y8 u*:=+C?8s8QY[srX^pfVХî+K5R6-ڸValWccIMMt39mHyWdŒAR3`{#Ct. _meĿ g-6n[<7k <Ì-"ck؃٦,j~k$T$? 4hʡD3!^|Р W&|+sCSz a%z#u=}rP > 7Nagf:r`t !'/awG4%xH3N82@j+aWE\a:~*8qN wN#b:#='qTqʬό)ϟ9 #=&灞%?` hM8&}/ؤQHZo5[kO`!h~:dJq-Ⱦ ja>U_%Rk_Ĥ[u>cE m\-לxKݿKne+և5/`R z,R,  Xv?Be*{r;J~+e*/j|:5VݏSB\Nr6@O.#Y$.\r/W80-|;yFy=:mzY:~؃잀'Nz{+[& )G 8;u`NXRkm%.ԧƸexb<tBւ<{w/Yӌw%/ZB r$8T,8-)%.S$kĩ7kz  I9t[ݫ6=t5STgUo[ qֈ3wLԎP۫H-Hc٦> :V4ɭRfB13-M(ᙜeS2N BO7sho=CID-tjZ U@j: (5[,V\q]k/PԤ<<)ʍ2;iI^9*_>vo*TQI:ku`BNe}zDn2 d\W6_ѹ ko{WsٛxF9E*.I|.m_= 9 Qz[D]i9iq^=h7[u;HװRJm|s u:g[ɴ^|UXb^iT^MC\Rx ^f@.}:(@5q@S@qò>. L|̗íAžp"V"2ƒ,.t@F/ᵴu;N)P]5Guh5 O=v8|@ohGRX LD'F\qBVgBz\}rt. QH œ ئɢ\]K snۼ~0@T_[ƼH>Kx="(nh,㡆ڣ'B `^*\Th?lr8q=,@h1R .uAUa0 >tf]~Xo\qrF蚸ck@h>)ݓh+xOCy}.}BA#}nLmCO33Ey=<*zv}0IJ_ɢ_혬na 퉟&f=qE)[Ւ$w{>9_$=EHT!;kyuZN2@立|#>hD% ݻ@OAԲZ  >#~2 >p4,4h7},a:id3dyE!_9~Ο:mKӳJʘX?BAt 6m̡ۗ#pHTANg)Ey-~&=kRbq¨JfFh&g6>6n\4ɟe;;ku0/v{8ߗaI \މ&g?(4S~6m 0^ ^Bg?4'.|3^KAY'RL, K[R%yr4 m`5 fge#HX/5Gʃg˲cBm 4ʿ-EB8$mbE_߄lв1mFKq]U]6'!0Vt>P%b#I 6`辺Ȟ->.MflA3#$!{O  4ᩞSM )ZEw u|@Jz$pF1&K_qЃ@Lfj6fo{^yd}Oy5f/bJSZn,8,]V7u>O w';S^*C`JiЃN#}̶==Y"qP0JDQ<0 *1+\w=EgV0xlH #Qjc"FASyx+VDE{!N t5ʌ/("- 4_B?u2}#rVI/sq{!hZ, *[FQӟS$vc}dK#d$ TF~X}Nr9ٖaCh\4 D3FNCGG 1qwA^K H_X t7o7>S;c; W,{AhrBU lzpilދzoۢ&̠9ˎ ].]?ȇ  S2_ := TGZ@B4 0hLcc:Ghӯ]&@/BjKOU+Rާ{ :gє5D{_!ٔu*=$6r芈^jӺa=;ef\P*V ڡ^)*#E H͒i&|-A":9Ɗ[PCtK^3P%/P{0@8Ś#²NbDl!?ԪX6A`CKj GѤ#}6)Nz+=ړVuz)ࡆHt SH0h0 tsT96{>, }r>ǰJ󅖘#X.sy۽c| +ZˆuT <  ǣ 'q$5Ɣ66{[Tѡ߂ҽJ]'BJ({g6Y5<@;< '^Ԯ[a8DTD^Ajj DK TB&I33 S$޿ȒETȅȗlIY! HG!vNMI괊H`N(ϒN@hz[I&rjo_C3ہϜIuРO9LO?! uPpW>}NB8^`zSF^~xU;+ԣ}+7}x^Ǎ#ď@`{B5~gI &_xo%}kG@O{#*3(/ N (z"=! jgVg^+$?oTQD.jb7{ dtUa˽MpvxFs6ؿ)L>7ZwwqnfV Gڀ;pC%Q̠1L,CMPg>|q `:RtS& wAk=v"haEA 3CW`" fOyx2zJNxI~P{j=^QIa3F j{S  TӫQ'4o\XЍŅA%=WW|&]d@diU# VF@.)Kq=" RI$=}57)<žT8%=Vn[r()ݍ\>9iȘuuX˧Y֛gP, wHϳ䠆пhpϣgOvЍ`#}3c-j)쀴y?)XE=Kz+S<Wl5[>] Y =4E(J}n2]Mb ᓽ彭\^Y1AuESb57Ns7O{69:%]τaO2Bo_RI!OZp^=$S99*42:UO^tܝ"ʊYμhw}9^l\/"Ă/mybJ&>\!w:K- 1 ƦM?HQvbW>-E`^Ll#@V%BS  bosKzC <iou1V`#3Rڬ.kMjcmcO*e ASUZECA|JBI"̈Z?tsy*bU OSjwvZgV]rO.xe^;^f/g ˶[8-GTx.d+>y : *zps_Hi[D*9϶~>G0 {7}nI<['N h4z90DwNۙA5ɠ"6y(8|m 'Q7z(WKW*nJ1-㊜:V _NDH>Ѷŏ3S3vbx͕cQ,iT^#Ck | [hPR^*p_TZ%)Ϻ$- Xw lw$5wzROuZ.j! I ɬ DËL~B}@ o9eDA|@{ zk/ qT,V U ))қ VƐ]"Lٲmo,39"MH8Dıhve*n4]?<"}^j>YC]GkeSg-{r .*C]Xifv oytTU%ň!0%j4X z7r6Wbs>5@W/˴=r[  uyI/)>>*C bϼ``PWj#h?o`zT7 鍼ٮem3'Yf~`O+y>|.GE\w sW Tfzr?w;~2~jS*_o*&x#QΚdy<>.0sQ8Vo$|!PAG3EPoT~^'-̩w+Ȩ?pە~F@}7z`,* ]/ Ij_z򡮈ɷjqdAm/c(z<_my>Hs?An 01y솨iѯb֓fݭlh`Ѷf=Ȏ+vm4ϣzjM/b@UwoEL}H<=BuOߧ,^*"߻ƠDCy%Ho9OןVǡzBڝ&}@0m;_8iŠz⓾(%M"\s[<+}C7Q`% -q ~| O %8 &}V$E@ݙ; F@<^58>+Ui/bAV*2-0-=.W.U,@VR! ;II ?ogwiyؚ^d{.Ok=&l&zsb;G3+VtOU~OUËeR?mSE1澐'L5b\$?B-S KwrNlMDK4ON$5=Y_Iyt{bl/q){VS s`.ŇiPFg|SNrs*YkO 7pCO%0p_=8kQK@O2)g!ة#"@rfL}i>pѧ{&o'Aφ}h$Ϯ{h`khAg[u۱Ҵ[4S7`ֱRxF{>zvjrծVM{|d EgC;پba*OĦ-6R#;Y]X}>gIQcy~6X]ԧ:/5< hRX F-bf2.]DZHWOAeBjuJk ݬ(U6ƳQoVJ4(ANm8= #ú~ͬ-؋U@t3WIθ7/b4>IxRAhPRGG\EIqG70r>(ֈ=N Dnc p|ugC@7k1lɊ3۳⼧3a,{tĬ~!83Q캑<3_:R( E*x1~XQz8Ho5)ljyUѠ=~)ey_oK8,OPÈu$LnM蟺֓H|){srpC10F;joY".tej\TO=IYi T9^abK6Nr o=@K2+K/ a{$uьƵzh^% AX "Bӝ@iI8?fm; *DHi5'@=XJsP!gJߛ5DF\.O(|3CJm`@ޮ   5W&@B ez  X0ܱ2-T#,Îx%e<ľyk+vc{KgzZǮuC4O{=Lk} +:#T9&Fz tY,_i4gH]obj1F1%'4 D=u3 ' (FIYXɍF٥? I }^H#I"vLfTĝJ Gr)rlVe#R|Bڡ&=/w9xpOE&yzm9@d% `4Pfm`uV0{OvtL:9,dC^fb/F5zQ{!g3ȗnNx5{ E1ʙ5/ AZWvGKU[}nfa @ 1]!4 }9㬧Nr -e☡KX0D [}byD"/_Ƀ!s)R7/`la=׭MF6-ր{ĉ9H H%{~ =?P! QSp.y +O Ё"QkbPpzEnՕGrk,_ F}Fv\E1Xڲzm5 9>! 9z!`CD5MKkY:u,]TɡD~BON$$=^hxիr؆i^>Z(=J_XH謈 }X02'K(?f]b+g.~/sYHg3$ZQ`6ߏX)ԘO|j@bf%̏ռP/-t`S+m^9lLcL|hHL dE i#W2Sc9 E)@5M*wG9/=H=d* -~eDxų6ׇc:l/R CbPZ[N:j J53OIݾ䕇EqY_;V*Qyc*eUTJ(G\Zv8^GXTֲ# v>s >v-9 dxJpFCVڎ18ZQK)BII .Vo BHQFǩ VRpCA#Ą>^1C"ZWpCGTHL #@Wj3|-Drix.&f@ŕ$^ɲFiTl=9A,ЩSjM}rwjC10W Њc`<;]yfY(QǙ|a Dn(D bv?u|{,mE"{HZ3mA}@MԖbh*2T]fKXi}'6"L)m\nCybiUT19;P!`茯f>;G`/[}.Ƥ6;U`3񃐗ؐÚWÅ^nE8rq)"@`ygڃ(W|q>`bU6rf|ZW> rH$D!poN$~[0RQm@XUwZS{EcܕR>T /|!tRO{0jJ6XtTc6aй[=*ݮ :ox 53I7ayNH ۻ~b0EZUS5ʘ5է_H<4)Ec#jOP0#x"S?Յi6xiVz ǣvTأT^X+Y\MUT}^s|` ).qۃ8d-\\C Ӓt#>=dJﴏbiT HG6n>dYzK҆&奄ڱ;۞,7XF7 M$K1AeR$jw,\) Aq-'l0258__B`R#+R[m"eXkVpϕU!|Q˓ZkCaN#Y?PgD8էعb(/q(O=bO'ކkZ0W.MGOM9WUXuR"ݺʘۘ]c 3KЪz?yd9*[hU"ƷnN¼Y{)#7Ѥ%p#a `|ϳg>(@}>EL찳e} H{t^(5~sW&ğ[M8IQz!g'8i '=AQzudnٟTDw ?tIm=Z {ֳ1&9#BQk{>K|jD[VAN~DR^3KV E_X 8!FF;0pEBN{ֹYSONU={:{_!rIPC _"zvx(Mb˘e* \9Kݝ,!89EV@"iԢ #S}R=B˟t@rmtY:'Z<\vn #<%jo)qd,~3_жoPseΥؑXX8#* π!kn]nt4)MƯ'.$* St=6VѸ}n˶;~S:'ÉvOmF VO}:ixBk.?!"I6}j/lj_lG,PUM DžZC;< POC{ Á5G[jl>XF7EHK FTb y?pښ9ͽK !I v!D+if xo&i/}_Zd>܌Rein9/jJ3jm匏qb/di> P625CEO=~^ ! IBf?8Ww$MY.5}{˫81.qS-bc#{zvLld/=9X |{PTڽ,Sl bKGwQS,5 @f>旱%qf{ggEJ}WwߏoRGC)ҺU{QW^L`7"Pcm]?{d;" dqte^5I;`5C>L "jj#؈a VPKRkBjO76jbj0`)WReD8W0Oޏn!1)jeũ"J!BfHr6fzSVT9(0_,g|Hj -u zQ||Ob#K0/ƀ-<)|E0r bkN 0OIyyBx8ހxɷFm+} ypXY I# ]7̏"y$d7Qr'D3k@ ,)M厧yM=XrX>2%j\<9nH  x͗.;!~e %ja5l5ˀ5zMQ?| x.bL4(Kr'ӾryDN3ɒrli5|Cy d׈BObs'~9ԫ{VOn"tb(yxB!Tzt0y(ˠdO{pZ!?K/bgCƩ1kC;_B$2U&{1e(BpTQE`Fip T+{tdĬ[T/Q*:}ddLߚ,5F8dfZW$:ۧ#d_h'}p:ꪼcPC rZg;og V[3Ԧ?|M7az{_Dmٖ_qd1R!*&hnOz嫐7\2WCZ%O9z$ƎzALM㪏Z0g{Z?8wdt$EU7b!kԓrL[Dԭ-|*b#ѽumz\k]Đ@WrBVcmw_~y%@vѴ뢧Yw׾g 4fh0ݪjSP!xcYޱ\n݂[] jg8Il6]ؓ"Ӂp ͽ2Jm=?iI|clR@+, mu?`)qfWI]!7Π}eRDi,%io%I`\9x¾iY:ኒ]; Z\Y _A& c1˝,Bx>Pà&Mk_֙fˎ]iz}@a+j͐z뱞%u/PH&1NyUd:wd&a&rjך0ŨȀA3`iYo=g:.&o(RFb>.=MKÍ;%*:}0HTk A_@S0}bA N=8ZUtkV{>&ȶ%J%^8}ei6{]?͠.G րL2szѣJ%,0^K>,onW(+M>@U(af6DK]wo]CыHt%t# #}O z4tb:}P,xEoh&gHF"a "u͙#:nۤZz:]Bg;/vvT0γs8_OZad ߷n*'q&DحrA~q fbkF0`W g -6smzϼ@$~_GzKb{#bUFWD=g,0`ሺwai.~ЃkѥKvXTxJ6mgOul!EJrqpPcM+@o!zwW] B_=`~߷h?na(``6Gl9Zs^9 Yr݊jF6Ԁ2@pTźB$ ;q\0U5o#h&w0Xj{ Gx1 LpyV "ЀbŜ:ToA+n˶N\/j4~gUO;AP|=]{=#]5j:iT2>" EEI,aaK@TYFyHd}ZޏܶQ=VU a)tVVÅ3%}{i.`!D@#jgaL`oF|mbc0 K~?Gj "_67C8aj3 DO4E(R PK%ݴ_uΧ c9y7 |UvNX703Jh7,ś PUgȡ D23N^TyNa6[bQSo|k3i ohm*Ѵ-xiڑmmL{jlD?S޺=boi%Ig~^63kP.kq? xCG AkW/X!X5,-ˉ;l%eWZٹ㐾_${"{TgO vB `/et!H7 [?,ꡋl7px>=?or#l=tAi>͂xC A݈!h^/ baLvTnBN;=t`"X9>SІB2:XZ5~4)??Wno SXydxHS-rX. 7K2=I>VGtX]|<#'Mjâ<ٶDաm6v- } ;#fЀЇ[ısOt౔몑+`l-n JA}G5tjh؂;6Ѓia*a;fGQƽS]m1 ]za Rc;͍7s?BI?DžyρgaPKxL3Bs~hԊs1x2:0vI#z2Z֫D!XQړSF,)9pC1U֑wmLbjupF uAaW#a c[eoEiwQ.( `>RB@Gm.phg폵xV mAQwϳOYf 0ݤp HxKL숬"?pp{0}GUj?#JK.؋r]m͡H>3M&}ѯ0K& w;Cm@HٚAFzPÉ+}L~z=vݞ)bwZtp@ed$O'Wwd*? Mω&+=|oK.xeQPWB0xBǘu, 1م !g^!wmH0sY/C`Oz"@IxB4㬗Ϥ؃ HgGpPCݻ\ `һYf5lݦ E++Jiq3Sfp( #;=2 m p:u Rf9\$k= E7@JC^^{BʯfOCUJzZߜL6Kch҂8i'B74EN)Et hQj.aqQ l˔)+0nS8Y!mw= |x_?Vd: 9>MTF@G艐5z<-h̊_ѿE3’c`aC%L[ڃm]Pr n*7n ju${7wC 6XoD6V!B=JΪ[8l3ulkpXtS X)o0a+ve~M"dȢ"|Ѱ}TJޔ`lWD- D"ZM93(fW 5*_ 7bՁ@U=uHB/d9 -8^?0la+Lkۡ2]t1yj7jhl Q!b qzH!b3\^zWE=S(8eQ 9K*"[O@vs=q`v[~X(F gayA|A-2x"%N{P30mlK%bZ $`R]j 7bQgJU9ua5#@[QĪ(v{Rw|`u#G~65n\ֺ-zm?`}JסYXjS-`z֦8cM>_"~Z߃ǬOxs S"Z}v> ly}Erl[:ԇs{e#Tavb8qn7{qh)U!=d~pCP&'`M1whWA;5'\"B{ zhcsJ:e@|zdfϦ`Ow_~WlR;k _=]ӞWH Q_eё PCޝgZ14dv #@)ٟK˓&7"0mJ+L>@;Vb8⤷fԖo=WDtZ(IJ* BrAʠA<=6*<îҷa Swh`QOl:w $=gsOb%) D[--PQ~fJekyBtpCN!8oưJ+6@{%;S7Vx?u폟伒/ U4r,M &_/gHM5s4N=PaI“C 6Ʈ= VcI27M ;5H%fkh&U䛈gςX%0M/X=^:7v49` ^,4W4T,*򞺏w[$BĺpɇB65mݔ#ӽYrt[E98R}/JpAptކ1@l;l^oIQʫ{@4Ť{@WL!mUzQ=1YGH))6]TK3{S9D%݁*_`RQ{,^jPJFJT"#*^Z^r*y XY4ܯi ?t&T\95#ϭ5!Bl;P~톞(VX:g57RW/`A)izz 8LļXӡSe}fQ'W%%kڻ@Q 8q*Q5Ifzb} ::s\2`g ! > ?Wg n |c{GAF4,qL%a N(tj"yC]<{B`cWK*52gI'^`^|OrXCAݥT[|=U(ΔPhP`V#)zc 8Uŭya*I-Y=w) &U*j 3EA 7Б_p/z GT U'/n0AM**f4)_ CRB>̗vny}& j6s`&%[. 淟nWPkDD0W+"oN1}Hz{PEG%_U$Pw7!9gOX u=RpbvJ`tuB'gux2 6]HYB~d*jtPCwRzXnVW@ncVa[RT-W}b*Gv0s֊/|ܠYծ**=ķ(V"pCiެW! auͱO?Xtⴷ)Ԧ=LY}N =nVοJr\BQW'}fLFTJnR|UC9ʦ(̢@"epCЗoUӥ"F q۔P!*KX_2X|{h?r`Q)x,`O$cJ֨%) H׹Awbkk$[3@U6ҷ2M*"P6r['c.ȒG2tvm# bJ@̌x-jk?Pg$tt)~0?qj\ ֗o4騲Iroӯ%(_Au >U|A*{ޒQW7E]~U,AOdk݌wD*5辠?+Ja X?7ݢ*X´Wt `g¼'QtX ݞ3* q;o7 G%<5MO.C Pdq+7B't,-a]N\/ ch.5ϖnPJi^dy? iV(T=Eߦ|oW2(SWqUkkRZ)Q "ՌDsCVkQALDagb,//>svTi :5U&jtNڟ#h).1?l|0` . :\}msy 왟o Nb%}rGj/7%fngy:0xv/u=@vh۪#]8.?JEנ sL{*90)j`M :hzl`Dl:fD(ȟ;:6'߼ T[?ky{+Ec/{8_n5'0E g]`RELiѭC7C7D%\='@>_ы{z4h0\-%&{PVT:s5HeΆBVh_f4MjH[/qnN*:zNtap.ЄU:l ϔj?X3@HLnDɸ~-LFIpY=T_ObΪ =AIawT>/s&T-Dw{<1{= [~FeI݈ƶG 8MjYKx<7vi^þR/ft3N}{=Fo0e};y"hHnz 3 q=tojvLZ;ts+oû%< {Yi2eكmoJo(<1Z^ATPncŹ-9֕g4odU9,QeTxK*o< )[`S٪VCrPq#F_v;}\ڊf9fl;n*gN+2.3_*=_m i#:,_߷}3}_L%Wy-^rD2{B:>Ѝnvg3x:`T+ǂRfMȔ;O`-"2VFhbţ+ ֻ\o@@~?Aoho Z eBAx,jRK 1W=ٱlz!0R6s}(xufOmА@^KFƒ@m>׽_]~Xx.^+bOku;TnfcSG>DJ]{*q^Zn|,*v]C`@µ} G@P .Sd -qwr)4'~}-jjfɫ#lI:lϟBF3%scJ,54_Eo= ARJ.;ۋP-D೛>N@EDԊŕA+l1K%v7,K>>$27}1X#bC}ްKw`ߵe䣔c ɶb7,)Q9dv~@ ?;iD3H突mAbqɀfw#a^ALxhqp|7`x Sv:>$zu[#vcKT_|;C6H사zYm@Tnc6ϼ7 w}B5t]Ҝ8z+>@|Kwrʈ\{ZI. 4X>^;pL9Sh\:;0_l}}~=7Ь:!ִ\LO$-`$CqǴ!•K^LN7kn~晰nbR!hNm{X]fڮUlͿh&I] Iky1eDZ$z)sٝظ hJ-2aͣP~ 1[O*"װD7RT{G0Mg3ݐԺK%dF~<MqI>9["j M!kyR,.s׽`EODoQj%@Nrl&:p4|~Ϡ1f(1sz `fZt'-xӑ3-n/vCTZt&I*){L-I톹6n/vA47M7l z,! r޽J+¹H#|_?h8FRhZ7"e_Ο[(G_-.6BI :hyRԅA!}=6{' =v&z1%j4TNs" o?{]I t>뎷3Re̩؃T}*iFb4 ԧhQ@d/״0tY݀uZd-ћu )S@ {J[(Gnӟ ءBn9iw; ]aF0j,1V^[H.< |MrCT8~XEE鵨tv H Y ?TeuKSO UiZ~|{C*#0؉"z?Tއ %qԽĈ'ۋ]•QL9``TqՑC6<,k5e۪J{.!xwohp#u ~A9kH&QNq Yf`Cfٖ)kT?ٮϷ2K-?,RcT*Ii\ޛsT`k@F w 7 4.3F$ۏfoNMOZi,{Zv{bOT^Dbdg"~w/toV׷~*d$eէ`{%G=|22hm~g!K"z&YshE?|.莎{~Ѥ/g :oػ5_lNkuS:ȩE]_,JX:vmdTcT_ f*“Ց86JM@`IO(][Ӧj5X~4iU>%UxYA/+k^93u43];`S(@uVbu=o:˞Bx8b5mIɜETxmH{io'@Nl4Y]0LS딴d]Qd4~^V?9h#ng~Ů?l xF͢S'=zA-/T&BRd#{h\V v絢x.4uPC0(j5F!S4 25(TtQ()bP5T7܂ =vv(Xe}^LlMԐ3X&h])mn\X%oꉎ/b > ͼw(o o0޳4gO}k&F twx8t[mGw`x l#z+\\ėx9nvޣ0#ehkuou fj f5"S$S-VZ/^yV UAZqAGY[􀖡] A8}kawѻ댧|x[JDV`AHuA'\ λ#L* |~e[ ö _>1tڨp,nh0y2 " R-#) P!qhؘ)f*J߇ DѰlhߝʴ;a[D6q;?Kao*6np5pguU]߆:[b Ք5GhMPq FHBi3^áwYkvzz?{=-L`̔|KN?}_%n'/vC*eu 䎭5؂e 0a[hE}A7jEd4M_˼'Օ#6vLts@M*TN&vT2]/0ҪQuޮȦc?`Tx:y#B>"Bc6=>:0(L5К{oK/|Ykk Nu;,Iq|'ސ5(`GX ]YmT-85Ҽg[[[_Ĥă=܋`(흚ƲO{`^ Kdm`N]sP\t==p-h^MOJ[C6 F99Mer@Rp qWO V.v ݻeN񺬯^`3θ{`n2ة-%.,hqVȉN泥F k/38AT?.;Qo9̾g}&;pE`݁Ie9*P}ќԮ瀾0!)KMH[A! N?D(oۤvo54x_<_`v5L7J)I W͗DݥA? *s{JlR]7̪Ys oEa ~ov~8Z:ގ<&} RkہIy|/xab &4}A>{X<YR* miY\| Hc or߉ j7} k4$xy)Y`]c(R:->%Iw'T-#l ^G#%J#¦migS+ލȴA;櫧q! i|1}7FЀ-^Zd( nh5[ER$n .1;B'KU-ւ|:JXk,|8ViOrf'u̻k@T#):}db`n6N x;y?8KB\iD? h\lljO>= rM>!>0m6S$أuUZ9'ᤠ?ٌGHR PSe1/ʼnRH/~pkPVxekf̢K_+KuN/4ݛ b 1gxRоk|[nJ&f|Ts̋MF8\|yϼqr톓>Lр ׷9~7kJ3(~W>eG} qʯ?;Rt;1W0:N TX:E؁1p#7tc=w00I2 2ޏ؁* &<xS}50K`6bq@j0 ZB{߶vvm]`'jr-LҦ>xCrן (&eG =^hT2d)'cnJOIƢ=!,{.ìݦj]J#Tג,P, sZz(F\#M&OgG!Gq(ݵ7sdgfCpiDa ayc]*dق]:x`3zSspF,MEX*t],:; M0]va ] aѝ|8*$}>Luʷހ'NS{9bh.-raZϟ{*,wj˲}a$̺yq#3=.@̛<fQ㐹Нh6u^8׽c-&R{_ot}(Aϕ4}{]=M4w*0#'>?B;dqW|  ug]imi>};}=~ivR~ym+HE݌26xH⼊M ?w,i0e$9ξF8c*r+ 9H@"GN|ς^ϼ\'d¨Lhd55SlX<pPUGy :ni~[cj"^)7FKl_SІ ~UjT7=F`pQ:}8S#&2}م'׈!y:ޯ{F]jY~b 'ʺ3[6XH{vB!$#Oe(/ 9i`Ki׭OYV`^ hIycyR=HO}ѳBN󋂕A [jJKޥcP#l`u|`ì4|;BOpQT0ܺ| |KM[lHI0Xli_l~-'};,$gYIRW5BStLG4WYEؓ0ORs?ib˵05H"](1 ԰N,!՘6"{Tcy.*. E8]x0J4pN"?Rϟfҵ ~uxOC|tvkt}8EcT*Or|c'+H:tkqݢjaIHq 䋘 voͫ&7X]$W9֧ J Atp/hqA9NDh0zɒ/:_>awWCka}$3r(z3GJ3;A4xa[<4x:?nꦽk2!rfK6m LX)(p=ˆO]U; T9k8&'`ـ+,(aKܴ07U(YN>㒗jKo߭lԛa=νpڱq=ˆ3*梽,L F{ـ/*3|dޭ~W?`5+R}|ǭ<`9.r z©Ah`k+c+3`y=wu2y=Mپ@|M=3*GAk1f *]]qvYNAʼn[υ-۪Ar#`k0Hz|'l܏l/zM\^U,x~܆AD3|7! er5CVw*"i2pp d~&7qvoD#tznO뻆QUrny7Yg{AFK`'v[!T)_N>_̴òjk?T]@9}ʘO1dR vk, s9_8vx1(T|}V˫WpTp+>K_{Atvo>F?XAJIfpPF)LۿnzE4r9nۭwaEK[3_oݏBl*w| jT/0 %x mc`0EI+^}h*=s3Tտ, xUח5< շL/3 jBJ;J-āgwlȈXjVv~5tzV ַ#rW$Z㋢gΡxG0` q4Y,t׼d&day=6Fhri^D@DHf-͟Y?P>Q*mRCM<E{ǴA/.db5ZVr9 䍟53'CY3OT &_#ηNs#v/ rk۔s<MUf9f{,{y!T]S?I 1jo)vF[CLSeze= A?˭gJ1$igݹK9TnmYg 10_aF#>ڽ<3: ͿSe"b WdZ}.۽1$35 9{o*u Bb0LCL seg%6f/gK~S`T]ϳW*pI}6Xu(vUχ}X4zNI7.'^D4U|0fwU5>W~pXtCN8/" n~pd!GԘ޷ 5-i k|ՈN>w[8kvbK緕7K nr@:X*IM]zrCֆM{j0CAЗs)1,YA *C sxAx É qeC$^gt{qna3_#oJ{wͨJD~A3uJ9iJ;-5N_+Sk[cO2TrllBd1 8fl9-ș}.Dև~p%CMRZǦ*/"vt|GKɔ5L:%kt%Nl9LW $DԌAAٝZ{;>[tf{Zu^qLb&Wa< 7MXh3^(##[}jAR^.`g}Ԁq:?!l`tNk?|$+Pz)zYL$*@Hj|gAO(ۄ偡%kI*3+p7zH&%<0|yÓw~$aT$}} 4%XkW_!| AD:W+phY_aESQ13se^U+x늖n?ZU$3mvLuCڅkB Ɍ]Sʢ8_!p(H9i&XlqA i>BŪn~x.#fkz+L?G>Z߇K=g1Ux`zĩ 7uCx^p79C+h4,#r o/`7fT~]I7ށDy_eSNxTDo.t9tޓf'τ"t{wԣ)CΩqV|K!/NKsbM7HI)Ѓ n=q$ #u V算72S"8YQt?lq$neB:)MRzNZzuxϬJ#SN:Bw܀oOcrłr| 6htĿ_vzX<=}>ߧ,? {`!K.0"+5{\i]ߣUG %,!ӫ|=Seu$\v?@ UwV!MG'LD Ab!򟵯cyU{Ot}c <+N MB)׵n*n:8~R9kϦOݟ55ASWRv+K 62. tv-#5=cy zJy'< >}ʕNRdm@I&7jcbUB{`O#%;|hM#ru8 8mSGo)5-P144\nֻUXq2 6w`:90-2Gf)ޚ!Bb EpElr%XfZi <"& i3=Szy^tLVx1/.{oK/[԰^wtLX=;n#Kuq{/ivjNS,xUpd1ֿI>^)x'5 ͫ\> !Yբ*"vJ|qy/_ F|1]sN'PYQ5 -Y4]ga_h/eʶ7cuk&z-aO;KY=R9z BdU*X;vIbT &: R0tpF^Lj?Z}->+&irich(LXް\ێbai>Z&^?@)ٜk: |.u@,Uj|em`0-ka8 t;ߡ/ԷAr!UQ-)4,{īwnwYfw?8=1kGI҃Efq(^2~sGv"4B7%G>Zv^D/J=;Cĝ̌}@ 04;L}~\,q'~EzLUQS\#p;@dn3'ZVӍ Qzīym/j=k EC93-#s+f Wuk 5͏' |xa1j[p܅GAoy ]sB/{90}֗j-ΧaE;$6hX{^,qM*gaQ\>V;Xz 9@KoƷi}9WGnsPdy6v@WcXB\o5C3m[1:2?w#|qy̷~ߩF+ cX6N8_SLi+P:Xp^%F9]٩G6⥧K!5!KO.f|.0#vg)LGa^I ŧ|O'U8~}\)ww1ۛJ?k讻"9ΩeĴSК4wJqP"DD=op@U0/Vw.;Oq%N?K"2tE7BN@wx?@FЮY䤶cvhfRIauM2lz dOfmߋ߳?[rsQ {8tlq m6jM{ށ44|^\&9 {M0 5BANta\jNuu58 XоMu\ggm~6H%ˇyܬTr^\gyja8JA|C  ֒覄0~Nn,T!6!I鰆Yq,Ci+dq!4{aPHxޏpA߯%7UBu' D1/R VJ|wg>Ce25}=8(l/Up{˓:f|+(['8:688pwxw9a²5:,ׄ'q[{ԮE$8J^U׉~ Z ?kyu}ֵ@^v*fxqs/nm>nmTu&XeJ,鎑lR^\#IC1ϒ>#Sg]v>aCl(E5k.l4i+z7J OɈu{m&zv8}Wt;ȹ(b[|)p@M}f>,+u,Q0h6-Uv> k%߬#vZ"#)#6f?6]CD s !.]FCmhsҕ͢o=&,햟`Odyu~굻bӸ]{CdW7(VM;a*_`_n. IN͇nBq Y\B庵#K]a YaXGb~Bl n`{=U|%(2vC2Gγ5@3PV4^쩐ڿ^TD3N\6 Аݞ?}34g f `mV_^̃F'Ug&2ߩ7ʟc½ҥEi @#Lx @~aj5 2 |jZlWI&8ͿLÇq'hl:Ce%J;\ʾyS\v ߟ'[geE:{&eVIrI삓!/-pgNoW5H@Cds)$zG9@le^zp͢zwwNpZQG,iu%K>8~ϒF..c7X^}S 5νek mK;ZDӜ.QuXt˾G=O>PA:YB7!;|9wu'sJv^9Et_qr,u7@z0B϶>쪲B*uHxi$ U>GʭP8" *@.nU,q5w Gp_N @g, 睌Cӈs CKD'l'5!!ZIpmZfP yH);گ) ;ⶀ[&|8s6jw(tkz'_~I44ؽQ \9b u4<.pﴷUaI:=L 鷥3a]C*%n7JR 8_d>&~َ A[kIڼ 3ݽt|fBwfm䈜sVNOz0ٶo\j^炆wC ={4f!m!$, ׿눬 wm:dj"m%P;g1M(V<1)tC쾍[6#|~R_^kE\fTզwA )|M-R/XBJ=J}(lz<ʘw dd릔Q|(ȓ#ܾ^4} mUH>o6{Y59a n(h>}̊)e1VO|kK<LY1q݄ݧC[?I2+t-ܡJQ//$K#"4 PVQF?>Θ )^eiF\G}Oѻ*-o#G;M$)8 +<1lUKXleH$z4+,w,zJ_* ?8`ln#X'_a:~%QkzoVMᡂP1C[mwR7lB]P׿6}biw{ܒZoǜYVV@Y[;Ml^3p x\MX29a9&dfF@D#oeYSl>U6*KegiwZM'q&ԯ'WvR:@Od\!Gv~~0K1pC?N.^fuT?h }{z f68ozʌ- pnDoy MOVH^ƤBLmꞑ?=ez$7F[ = Ћ 2Gy7ǐh6xw[}c%\& *^!rț&^!YjhwЋkΠtoGf8B jqR#pJDRjJdI{8VUt({eJSaVqEgVzZ/DD{wo<})H77;McP$o^54\Sxn_zQ]a^hr .6ԈKtnma':q{<h݉&BjNbV r5$Zޝ IR}M$ C{Stz' Jd̖Hv VOCC`/0\%rAE)>j~9Fh@H׸I2 . _w൉^B  C:\yo)-Zh2y܍9iч{+S e^mc _VOH5&BnuQkPa2Mr- VMZ.h]PMդ!täk4Y'n2r?cˣ Ġ!gyY`|PZ E5CAy{w>T1XUy^:TwfT-Zq*&aF¨Ӏn~vW۩<N͋?M&EXiIkK! tAJUqҍ`#ק *<"l۫c2 Lb::%W{ص%EWx~܌,B%TvA]H@ljiO!$"4Ȅ;Am?HIwmIWac԰`SkF.zB5QS ~%ζD&UD%TEu|l.O|w Ġ)*?)1Mq)d{C?sg|^&jXO=~5L)vx{+\2-]U|lL7)N_bU(iD^2YO73 x*RPRD]e ӻ@O2o舭LoěoĽvF6|}$Q %">qm*`Dˍ63c% w[D:aX̴T;=BsN>^Ԅ=iG.f]VEF5E.M<@(oSY>+"OI 〞VHjQ[l i5XzѧO{R{7n# \ !,;G`nt> `nxRlN;=rrt׽]GE(\%RkvAvkxy$ "mM_ a4»ԷM\s19q HMOä>-PxM_˔'iCn̹?Cr MZuF0'L_-LX0F-W|gKE*C FFGԠ~kCTƛ c=f 'ޖp:ŅeڵX@w3zkLBmeNdz|j%$[\ƛ5vK507j&~4Cz&<ݡ%a~ࠈ!&g>dy~BzVWCW%HN_y݃@"*D]AAp<\z! RFgj^jy0M9[d8$1;>vȁ"IlҠYzc[kWJ }~E0Yg^~$C5}\^;Rv*Xх^7; cF|눻#~,l.HS_zbg Puwɨs€ٗ_?d~/{ #~/˵2.y>æ<` Ԁ 7D^}ݱgh3ѭT lw#H4o]<o1Kq}qڽK_솴Z2sҥ&{(CF? ۫ď @`54IUi8S`)+ U"uc;p 9r<]F=o(\6TCQ$)zP>; (v0ˇ_>}ڤ?oMjLf$9K,wBu-$I `إHOZtH4HI/!g#0|zɏG @E/n8론_"HQ4hJiPX.U_ Fz!l[ވ 0]>bta$2x>BH2EAfrbB}$W\Qic`}y6e6N`) TqnV-u/Z $duXݙ?w #rn=P=<%#{__8il"b=N:Z 5t.SV@8(ڮytx˜sŐ\jnnbܙ[ Bv렴kޭDzv7?58νdA4uI*zJMdGF)Qy9 =ìN{M$tݥDoĞNVϼ˷"" }~5ĩ*A:+?:%kZUqPw'4B{P/sL' r;ѥ} WZ-E@=?Z+$YDwkaݨB*uN.8;s FK./b;>+:0{D}_3]M9ReԪ> 3"vW/R4n9<Lwzk<ϴ0AV&zypk i^ϼ0v)jS2DkxȐ/Z'J4Y*%JW\9z2b TF_iQţ!3{`x.ǃN]BqZsV'EJA jX ߨ5MܗMRR{!߲֒oW2!}:[~ː&D羽[ tW͌t9Dmt]; -{&&㞨a4RP *B>e  i /NeV}k(YPfWwj5>[2%&;bOAUfLrN}Ci5GJ_mSyHqՖ v<浧;慨X\.1}moh/^K 1`bk[O3powL1y_;-¾4T8;[DBC!q%55NiG@jEQ4|Qcmrz=]"j=HՀF= 5xגjzyS|ϧqU6ڴ0"5c)zVP}9jL_tYůn"&cb諡dcLys(Y54?XRc}`S{0Cbc]b<ڈ|2yvʮ}Alכ4Hq4K =n/lNIZm/kij[0̜ eOc^<|:"@o *onFbD]|Qoڣ 4`u&en"̛` 2IY'6xQ*2/""֯~B+>Js@hb RšN "ԝs'R{~3eׇޭ1%Q^0{^6Ib4ЦdP=b=ñJX1a\cй5w42EKxaHh)$G,uXCRlv `]?Yf9ZQ!;̵Uu]{oPoθ&w #Nh d}uIxV 7w!RjF?/‹Gn[{P@e)5%neͿ$(h^쳾 qbzP*r/u$:F̞SVq{ݐu$-YToThs)^R~-EDnzդR6;h~Dz* ݬ.9}<!ڷ#ԫ[&=hFSWNުb "r#wTjX~`Z39Q r98JH#|<--{{BriZgN?kd|)ȇ ܾ),0vBɽݾP4][no9Rnx@(אr|o/xYlCbqS64SXj#ɺH%ߢFRߢZ鏐σ,ur75-Vuj@42;y;}Ue>1DCgmbIZMJ{ﴴfYkɧDLil!O.HU S\E([#7*6uڙc݈ͯ59&nn"gݰ*Q{lQ"VKD=yϞi:U硍͐?*;(@{o H;{xЄg!N9CBϴY7g bu _<$U.O|ʛ*x ؚy6lx,H/%„;κ҄`O3tŜުv{TW?`;Ld.fQmH-îř<(bjrO7օ2g9O7ʾSɊ}pCAB∏my:|Qo #$}[?$ "Uu)p ޒ<,Y6'7XFn(XA`n@ibO]2V?T: :~f HwssU.K>k"n{HD t7ۻ5H٣>ʹۼVk?VOvCZ5ҜŷS$$-/ kWs;gJOJ' 7P`\W+7~* Z)wr,"qf uFG2hFxD2˦/`&wRM 1xU_9k{-" A.x}lB0Kg5DLRpA#u IVM1;(lߔ 2+% ?S}a,6PMCml?Y<"r͡~yޗh[݆[p<ѿz&,⡆X9y}3nUD*AGHV9},NjJzkZ>"voͿXؿ GՔCjЕ)f8$d_5ߡ8u[^{7BRlN5[|tV-6`HنjF~\ TFW(`H9ⲳ@~Ri sT:̘HnxhRnR쭒[|T"}=>6z=|( i̢1d{lG)%b16m5Xr MψAQxxaRshiv XBM9埖>zӊ//PbrYKVKH0Jc7D g*6Le 'd` :zȊՎ j:=kŖpD)3"wM.V߷kC F ""~ރxu[[mf (U\8ƹDC\x_D @havf'RO]"ݦY4I'!muQ /֏Us=vTEZ" \;ٞj3v(%e35Nc*ls I4 I8m3DI At5xF[ S%?F8x Coq10AK4U$K0h1~9Pr!jI74qWPߥIAU+(ݻs Vьʹ#k_>29ɕiNT4P+r>]瓏'~)]Fh%TT 4Fj߆M`Toz%nNFY׻d2X~VWzSقJ<䗎G_!r:40S`X j@vSՅM[ u^6;UCmnj9r&u~%,aвcAS:.@X- Ռ!Td&t>}|˗:/;Ja<y1k d-*3ZUX"{q6 <岣b3@ -^^ qCa6 Xн_1}ևaimYM1xr'|848 !#~;_Y'<vdU,MPyy5|X?؊&FX柖-dTL{6p4> /ۑQy;J/|2\uDJ#Rҩ>R0tY#v5i@>JfU͚>?x`4$_Cr4,؜6CBHվXQ= &bAʼn16"-2SLQW0akPhw?ϛeoÂw6*0SXx, )iԡSQL~JJ'-@ ,aab5mwcN]qr~ۡ6Sd|хY/*6|Àg]^wErT%zaw׵}It\b.A|Hjx uABCh(;e ;F0h -Nκ* yYO"D"ޟWWU XV/V!"| ׾[]`6hXo6r6Pj"taQ3Rp٧9˓y 6T1[&n䩉~[w27T"DX\۝GTJ=vCDžj׌[0 B 1eP=`IM-ν=Rj5Vт\f'EBo [pU7WP<0%5^U"ㇵrNm>x H (-eЊ YeMk2B 1|=Gö*n"^ ꜤH}DGe;/nqS, ]Tp(u-B0I k0G3PoNݼLX۟q zb> cuZ %IuΧ #4[,u x;ӭR }G~J'2 ,jkpC1w ]Wڬ\PO*Q<{|$ܓJA8PFd6κ3#U<-/Q!'A/X=^ꂚ|Nڄu/BIw-XL^Xn(|R%_CwVh+-?+ odnnޥ}&>uV=R^HoIVѝ.yh .m C.Y,vhFsE)qh?i5*UMG3!!P@L%xz'5툗OB:%pa4J";J>,ToxlQրA݃?uv] SWܠY:F\SoE]my}wc aOj7ԪX`U^[tT#q"N|Aqӊ)8?ah_Si&Y{H<@X7bq '7_TU&il瓃*AA]Y 0)vrl݈5XN;7pGhkg< bҏ5 L{a7A~tk3+ g|7` F0r:NW56$IE6(TQV_6:N41Bώ5;u~O>Mo>^S:a >ju հ,3bdA0ژ$h$mznr+AF l͛ZC!A}8cZc ,e;YY$꼦Y?k|FFǣ(:TKVx3z7my >'UL]c @&‚fd'jSzs>im,y3PM i2ҍ:}ma)z+u&{FD.QH TmF< Ǡno`e1S_8E$zM銓[BtMoLUZm[,gAݪU0.1tX JѶ8yKS{vd pճبR;i XI (_zI{75GZ{tc<>],9 ЅmTzBZ6̞oXzH~k9A >翠=Rb!v ,*'#T5(^ FO տ.-7$Wi *WASn' I ~wVAW`OӐVag2TS|`xeo3VtuRZOX/.q7 FI1qM'>l*/ X:{--U_Ahh]"D.Tq;yaYiK;`]sɆ``OG*SP!,s\ɦKy\K6 #6V 14P͝~k0 {S(S{bDG (Ҩ*qV[(m?POR'dT\k}0Ӕk,R'Z"o).ַ!q$ 0u}Z_ ϊQwqFcĜLOyoZG}sީϴlZy*=;+=]38P9֙")[&GXA. jdmcnK 歧>Nj9~BAڞ\ ߈9]1(|poF lی.OLcA,BJt73,6M 0:(.`|{F]N'CWV52Rl T?}5@uz?G>9%hP ـ=;E:T;GeQooվyiK f]?PQiRZQ%"|W&z&mRтZ;/X?`$xoƊ4h𤩪&ޘ4, { h ,\Vc-Üճ iG+'Dp6G0*ކ[ [x7g}kYj LsQ25__*e^PZo d*'=| J(~%ۈ$ Ht ׹7e Edi|GlAr27ۤX0Ȓm?^THK$qjä8y>sC:FbU jvѵ?B_<=9IGn[iҠM×x0)fvzhG14{kh:k¨GDf֓EIɏ]ӵb< l\AHHO+2fq(; :z; /r#fɎwXSo㩆,KÂ} X@T9T(55$vfj ~ V#aw xyh FZ'%W)(U8Aj`~wbVI)$=PQTv /B "I in*$ĘfZY Q^sE`=%UgS{@HQ|lj.['< dX3+xI-BM8uy YJ%݂{WAi uf(5~\Zl\ :S!Uy1I .Tt9X3uU%xR8>;9J!M|b,u?htNxO'} *>k%>~ =`vatOca_ztti?:"#,HyDpF[\d%n^ u kVDFbj>`㨉l:+,/F>K##,,!}J?J`}-;ؚn@WiVҡSeZjjc(S͝E|0w? bY\ ǩ̻ 炗u|EmZκkX4Bۥ#x=) Nm1`0%&1|@?T5xcCXh6{:0 7X|2|uFG|)"+JzKOja M{RX] ymDA#|%5\g`]8sU! ʣ6,h^*D=zK6 e_fX-oqĻ8Ɠ`MKAHK>w\6 G[goaIh]Jw%϶#'"q'_V%o?hX3~ں 7qlaNݺ!Б'+ŨȾƉOs/[ܐE%I 2:kA(uȄ>n " p@"x&Z.e`[Vg-`;l(Uu{*^Ny-i.)2(U·(-t:1hJ;wop :w(./iJMqjkL cSd<2Bb[.{f(j pCA}ӜN_(ZB!)ks1壸hMkQgDdCzgGTNÀV{Fv2zh44BCt 9@P] )RГBydG5 m>`GI k{fSxEB(7+ !6fލ=$ Di" G| ,D,fz-}Э8,:Š%Kx k)Zs l~GUMt?U/,Y6 ? Kbzk`DԆZt٤/^S?xA+Vlgdnoenzl_02Ю86qK~@Ԑ"ˑK!sie;q(lǣ&.(Č[#v={|!JdxK|m>#`(f0~Ռh2њ"DžΦ]LDxR?){Kz 'm:av~kҿM+:i֮y&^\ gE8asD'l7^]f;`m`gw. 2RI!3:ڜfI :u&U뙗A#9Af6C<왍W vjd92ZFT%D#7jtrWjxMA BQYN]]P+8ldi*Dfu]%B|p"VGwjw6®R+P\m=VϚ)  >bCs҂ @ރq0\!ꖋv1/d5їqUX UTѣ+X_,ENӭCH'L? %4ǶчB͡޷oܛϴ@tj9.ړҁZd#I޶ #̞[I#q-4jY}?\77l~gV&S}7D^> ѱxPܰz_[xPRq}>hFX ߧ G>;/S}]A)b+ދ]:EVZp1ӕk>s*ę8E&31 JyD P!֠qCya{߭V2ȐLpxiȨ?Wl J.rPCPz cm:G@Cb]0s9k-'kugءj6Ԑ/_)* ݐ5@ûx3n%z0zlPfQKUܦ׺Ƭj6˕?jyd뗔^e9=xc$@l>`]T#Tϳw=E䀗w)B3YAcu[6+ּzY!6[SL3]/w;~sy(q۴Z6{T!/b heSjC׹}]w>}ݚa x|[uoӧ(y''U EoO∣:8'Fd٣{}y2Eȕ n/Io2϶f?d }i]{IWu2P'{|[͌҅]Ia=-TO/1'9]Wa˙K~,Ij¼0^̻!P8.ϼM1%h׃~$ҝB2(]}~U9n(,x,9iXLRŖ]q%(@ +2kʹ'|KW_X WEJXXf29>5(`S6? nt GZ4!@I&Y*4TT6-eެX2)__>ĻuK!JW퍑@"'>>":{WM?9ܠg6%$=? !y~xY%1U7Y P|=k]AQY/H{S.Kxl!vɡ}_nOkh{~:S!0I %9=0( P |_1DŬVN2F}B|}2kuMX mm`('[ ^sAe~PUsA]됬 @ȍ@ݭZ41h}+kEq=IvkqAYϜ;膨.7&7}VmٜGXTPS8l> :@MLYNFKCrnm Dn!`G:YeTx \.}+aujn{Neh>+1뜺Tn_Y2u{vGo \&7/5żíXJ?d vqX5[ΡNkZyD%O9/PFFA]pBs*-Ezm(a.ֹ?4A4 sxԭ_;lQtoCի9׶ui^ixeXX0又sQa Efm e~I9eeN]',h=Xx/3e f˚ymb涗 n߄' BVNwv'm;m<㑁$ m2 ,㹾L=`YC B߱<iz*e=M^HO?jVT-`\j0@YVQ,4Ye _f?Tx[[Y0>1S5? Un^P_B*,RQ33nU`.,.[yt}@~*/,rRGgh 5m:(Mg\B,BsHA5n#i1.djLyw`Aʲ#J,چdľQNy ]2o :a8vuo܂onZ 5u>-0׼!Ʈ˦pAl=#߃?LߦF B`kҼJ[p/jwԻ)Vrv^wpp#g KrUnC=7|{GPϣq@$3M&>஧[_enbɠZ}=qD a5jLqvL@ T>,chP߯a2,@-SCﰃ=nL.a<H<*r5L}V[;5(vrmvTxAP)]/ /SgNCצOGxiv;A#).K /h2Kn9i]s}R]̳'}KyO-mh;;KDQW1V\jD|B> <L 1oJ,+ӪTB`YFM X1tSy;ANL]6RB PM"Z´`jS~ PN%b<%pj m|36N&m} %ۛRx#R Cڃ *z(lc R"Jqx˱ߛ)2cU>HBGq^fSW1Zw7XD엥+!0#ͦ@Y$i,qI- ĠLilP\j袯+.zAUSԲ[ [, vȼ(BTNA֛} "vH P KU 2P_rKv x֠N'f q`i=]c Jk!)t=c2,ԶK/#sC5O^G?~ԆA46)[]w} y=(r[s?f\{< ;n=,y ̈́@r-9H١c&t0:d>NJ\-y e2}Nɼu!`kDBLn'au1u8uehFkm1 XOF~1`6^`ACl˾Fkc :t K^iL[+k,)"ZsPIqp<`l$Z=}.#E;0Fhca{Ğz=vYty SUǨ9 \lo.0AW^?5.6jakkA,7D({U|m6-|F%$fP5i3\FfXRq\YoDkZ.ča~6H]rL^7sȗj,=Xj̹6y` ޤ\٩ y䂿 +jrpwF"N]I"죧]>4j27< uË V`2ːf_5%ϒm޼bANd{@Df;r{[닥M W3fYsׂ2WOt ŽTAR*M !ٻ`/d \pC!M;F[I Xq]6hz?}83˥v"wCЭ} hEʜ߉i 3l"JJ"TN6F׈En1̆E<̬rbx6~(0딊GcV/@?bf(w!ޯ)9σ3' DsoY{5-b%nxĥ>uCP/ DTЗr}Gs>Pb]U"͌웫cZYŎˠJ`YRNEaP6iwpYfxȖGd9x`̀x~wm;}`"_(JwTy_%^Z=9.f׼ULR0/功}hM|Ki2oGȀ..[J`?w@{ՠ(O%p*BU)O6vA!s*V߲J,dtB&~mQkfF@ UŇO,  d1|*fkjE7QnGJUk8 ߡ"2ʔUؑϬBM3ZR3(m|!w+5Qs +._X)>KԢE W>+jcXэͧ -I,䎊.˧Dgwcy7*P jUk'~L1ܨGYiǮ8QDfY L3=,,l襺u{KrɁza@r( U]!K1b+$P`/>K5t?z#^ݐ;0q޹OC(7|#I?7R`(9Vz]4krxDZ䙊t.ޮzJjz IޔvH.r )8pMVjTA2:;ߨ;⒟!*뒃sRp Xn&_zanLv-8@G=MU̾7|EE咔z,Q-殖daZ,aIk}h,5wEb=Kr*|ad#8YZEgbM PC2kǴY@w)?3С^ di3 PC ~6)kzgVgp jZ&5` ͓!]'vQgi^6UKw:SU;al&l STj'8!`y_gԎoê6՛ohMbɰ:*Z[r`n0ʸ"Pi Qa =D! q]ԽXX/i٪#`"J0! a ʣ[ ͐k{~Du#p d5:_yv2ȝ/F*.m=-bS Xb8GipP"m:f!5Ͳɥ J#q#{^0z /UY7e_v>BAE}2=b7dmYo-u3¥n.3zh/+A5B7T71^/JŚ ɝTjmzWO`{ k@fv?<$JlZ> f%:l&"i@6׈="EZ=`iګa@_^* d NwAn%*>&51.kp|p .HӇQ!Pԣ?ˁYXda  OϼEb+2N s 59H6x!{L+ON` A*z<_aN7נC>#C?Bwd\ 56:nZSQv J{"Z? ɽkߚW _A Wd⼒|]A>婁A{чu 4uP~]z%/.H-Sy耱-zU!\nWO0:}gEYQOy\#r گ`2~.lCA4~ݭB?bO᳕۪#Bh Fjݫs]֋vfӐd10rx>i"6=zK*&3bw]E+1_ǏFZ/RMi >I`Zdq#:R7Xvux >8O֖ҫ -3b  zkT血x KXw/z2k`VߔoXAI+ڕ;{ U hHڄZ5oؘmO3V0tظB 3}?8\dCC #b/Ү* jSj#i0b7M`.4iHibӀa1X;·JDr!d@Ե:UM%OCɢnC"0E͒"ͳA yֶXaS htU)ŦXϋae]T/Lkr)mhf-زo3_;4;`[# 3գӊ^JiWנBZ~Ee :Lͦ07wk=:= .\5XK7;"ЇA6'jb!#5);oצX-B$>k# P"M8!"蚸x>}SwЎ6FJ. ڸFi8ƄicbJn|Z9R!:u45X "6= kn y7s^A:–8AŒ/zwT3>$xɩ6¹+W>^Q$Iשl dFhv}(wAE^y>jik@!ooTդy+6=9[ Zb=C">V5N]7iVt˝.ӈ߬__nesev53FijQq݇MN:0떣<'f=511>6 ÈX^1B2z߬יt"o{O<v1o> #ɃX.,k9o=ԛ Z?bRk>ʴYϻ2Xgh&]MJWjO;(#=$+ L3>+uDyA`%t08]zpD}d%;u,[R5)C`OC@O@!IW, u]^L7tD JOR}jz@^m yf*>#dm7%`}joGʲ*{>pX%/̘PiGCFNO)_ӑ=T?w0i]V14ڥOu0[cKQuh ?tR-4=={,֎]G^uhoXݣ*lLQY/'<-谅 rNL~ǥGD*@!?'0)F+l4,ޱfn7d ISYݐ%":NZb*/;}2O<>N^䅠xR,L0iOhnHXv=86I q{p8尘#@Jj^F!b48< /lS+_\*?:VP[M8XCT %^Hk\,R=GnQG-q#n Ұ5Ě|*b~7AZXтdGUm< .-ydm@/V,bx=>n#A dAxo Kuje*눻+\aOʮ9h? K ]'J!&^UJKݺtZ}`WTDWS{^gRiW6Hr}HN!AѲۻmN Q-e/՟CSˉ\XNJAMlC.;]˝5S7OT\Z}xFyɼ"j,U GmZd<* Ok+RFYOno赶*`d:]'bw{Pib4#D}Pǔ,}<j{edtZ߬ˣ $+B={hM7Spzml;1 ["| o: |{}%nqX0Hî9ƺPƱLeS+wv{/jqĻhe`u<>\;2Rai̾5JbQ=_h'dЏHU,׮f$.Ղ6r?F\J(zguXPH*Cp@"Fd Ztks6Ӻ=F1CwE1w--mfi(b=Xe3%g;9 F1 %mM+zrͶIfu^20q]/Ή)塮O6![ݶ"6;^%3L{m/`;$1Ҹ>u< # R[ 0AQK0Wk F'IM0U۴b rՔ>t[p %f)Zy@Rg>ffQ&yS)1?%hOs_`7M)ZKN5`9"3^q$ 0$  Tv#)6A z*F:2&!6C Qxm1[N}olk rF@sI{ h@ @G^^O6uT3h iE[Ovˌ|)փ`9g|%G)!Ɲ{ m'>y{3ilIJBos4Xj49{oXA~n %AܱO9< NUBědpq1C UF\5eԣ}+:*dx7ͯs(SJZ-lQyY U(P9U:j12eFeaGX@#BFB e6 >!4 fh 9- (p [AKj6Ch15/%RнƖpdK҄c74ʬ?֖eZA< ˾]bzmS2l}_&c`||j?hI*ܰkoE)Æa|B<F#.TA쟙R&۩?N+:gE̐T̓F.D#'0D =xjnQEoͺ< \ {K,ICrbBt$(3zN Dc5T~Y>3H09 T}Q*wy~ԋoƬgtآx.Dx\"#f;q'?ZFPCp-6pxL QŠ6/oպ; h-<JTȆ^3}˾c1Hw,- 3>A$O.t_(]{{4\=ߏNX\g%S;4yU Y)!+?_5:P >Z0B?Jܬ'ŁnMY?.`h"Vmj&E/[$_]Քf=6^U*dU7E9~;΁NL:۹ا^wގ:6@' [b2Deq2 ]"bP7b)=ɵX^.@e)f-_̨NJ#Ծ^q gퟡB?_COHY}o3r>.:Ţy2h+"d|0U#>rM ;eZ۱q.!nb7dۜZY>Ͱ{lJM]^ލ~U^_  M>8*i\2jXa~J&%5z(*Fo@Q >D$ГC"4ET*hFUתe h|z#!l8._(uKiF 1C6@;+b -w;9MSTiԧ"ڨ;.k3nbB*6-}G },{ )ݮ=6KzI1'*+N|^y<9{ҸEsPɥqkĞ i*=e섉X+kw*d`S^yj ڧq #KcŌ `GB z;@X4`^fi*.8$}Ȥ# >0P-O`Dk:(doqx^\ ~AAxHxܢ%[cIYL],L}ؐ"qIj?(V̊mcoK봒jl j?K9[BMQ)7癳U#Q i Кo4]eߧh:<;xnjJ;0c7vy{߼mEr7!L 2{/y"|ZPҾ/a SD{/hB V ig̔^ؽa B*O 7ogS"E.$ V? iE`yh)牧 @S?|jED&.]QP8Y"E3ekh,O=|)~4a=!WMhW~}?ץqjlD|;[iH@ l a!!PzIP1D4F}qm,VXX0u:XS.0*S>0"9{\_@/^J S B' ||'fkQSԿ+8PQa r/F힕zmnϱ>AtKC-LlW"'>iGoEﵭr j}WU3Ҏ1݌\:nk Y8< {YjSKr!ݜasWϟ9w]\}>?6UAQ"P'kw&^u6g~AXYqxBvPҥGb)- zzX YFtU/NN׺@C.1puE ,[o'X?l3JfmlE+jKR eu{jw&G_(@uX2[vjF}qC 7o}AڟLvdt7df'x2B4Ȁ )yd=wOXܼm[j;ީB3ַ\V:OI|S$s:\xTgo\8M 7^ؕ~BNJG)0Fܹ?1]x0bK9Tu}!?@YMoKR L^tahh/ Eb&Uk/,Sz##N*&@PSL#>8xP[LL37 8Kgr)oj 8JDSZG=?Pm3Ҹ2T"PO K̏G= 1r@( Y敞a\*꾳>C #sՉ"E IK}Oͩ3Er?[݃ z еv>t]x0ݞrGLό4D) %ޤ 6HHl t3aLۣj ycʏ3t0b!'_NճH)i-{v<j0E!q#mK|<<vZY` 1 ˔=n@5԰cR6J`K*˜4_3(5`5QtLyR--~%:io8m影X䞚ɜt\LE*Hi,^cfS-c=t09qH`e{IֈŨe £Vq?E[- Ew8(1^ 2i킒v d-[Y¨|£J 9}( [Z:/0a4Q ތ??A ME89Rf `}H;0,mkXmhCA~zO)*M}^RΔ2b1?.Oy/N(z5כ&ɟ3JYws9! XayT=+IsoJq"ƣWs?0G;{`']qtТO"jf} i]aO,pw@" 0 m$ЫsgKB:PZ+n:8e5,媳-V@<jAj,ۋ?Xl~gOfҗe^>'OfC]ՒZu+9-{=IpZC64-^,|0d*Q<>@٧0{o*}cy,GV]sM,o{LK8gn4˸8 ;1vplM}y]V{PIZ$xA5P_%>݌?sE5dFgOwQ9X$_G];wquo%D;gS+mzgF?t;0t?S Mޔ'V}BPgԣbom%>e83Ap 2\xۤ/nH–NX30 MF7<{mXWw kW} p}Iqvnҳ>C=jgṖƲ~X_ hKr "Q$gruVR($DK"gZ4{AQPZޑ[[yw0Q3:XlbL=3 G!h 8QHhnlNlv@LU]qc@ZwQP%*Mٚf*HLK0 ]v[0 ӹ f.,,in3@P +j*36LED֭/@%9ː/nJxN#ks͸Y'b^8.5~#%?_n xZbS,28ݿmLE)uWKa-kj})$L/Lj.^Y!/WXք:X lLMh e~`*,}?'9pXqWuX 8E .}8bN (=UVieTDJ?Ǧ6PKCŧOA3oZSszBt4c*&nKV\*1\ZhOo#Vy0퓜8BMm aq3P|^ _'Qm3?h6^AdU<2Ml%:\'J<ZGu8*%R>3o5SW|b?yH)h廙2jtغߋa@р'^4Rs.7ܿ-@q{G -F`uhS[ehd\űfumflJHmᮀO5&{7(zelkH{bp>Mˈ\4 C[f@)BS{隞cױQsQ&ƴQ0h|~8<0~i/!5}~&j ^0¦ Ekh+e9A,!A<Lt`mz6}ߥ!4x~Ds#rS5o.qOƉs6q R>yFgӍ8!tqaU  Ո{U,QކBE@}F5ͥOT `NSlbNL%3}jJc*?`H(8Ԍ)G vjٙyk$\ DV} c:`F z_5ۦIuڷc" \)5ʲboԃ}]q[^U \w!p^C{Hn P9?Ӛ=Po/"TO(u(oZ:ٛSF|NCγR HCNՐ&_֪Ic@Q ӡx?2EY؃L5:b6AS;5QUZ}![Y^ @ K{<9` o%{|{0hBSۈcG؋nT8{ N6PnI ?>PŠ\͞ճ%0M-/r#hv9Y,0uƶNq #ĒIf+7dq':az}^`!>=OJp. ddy6ZE2q0#euyo+΂8 Yl lN#*oX~"XEӟGGi zhZEj$vczE0R|Þ3Uvzk/)b1.,Te/BJO p|O\~jM{D}Ok)Cr|pv+:>KY=Q :](Bx}} 7VG;vUy\t{O^:|2m/7ko?D]::}lWڂQ7FǻVp$*<Ė܇[OõMzOֲĚYJME(mvZ8?pyax wzTu]9aDY8R] JGϛ'I^s`hoO|) Zeǡ_)D\wմ"φJ|{> Pqk]JJ3 *8q>7oR&EƟqzږtEdБ(&ٚ 8zIqGx۠{$Gm_n¤9^DENB_ͳN8 (\Ϡ uAl')!$L [X,qpϘ3`ֻD4Y"5>;:ݲh1[/jEZSZ27Vy'7 };w t׼úvtZxH7FY=E6x:V"OuT4K;98S( Z}beX\luK{Xj]@%ʌs>{?~*G-hmҳ o"3UB{!DE<0H'mT÷^ꈃ1z8Gl"&YFlȘ?6wi :e/I;q;tGD"Gs`cRs?Ep&DABof+9nv&QkyKٛ%yiٿ'y3'b;ȝ[`\?OzUkM'3Hx+x␭[w z7#%HϢڟ^s yabH.!ݫ ?k'msc~0ARI='d|֘V-9将FBD՗b B gCq*U@:]sCr8*c^'t3Яy!e˩p_Cd*?[á,_Ji¹ lWc%|HGcf8EGQO&)Ys J}qA4_j?c`OPA?=7Do<{)T9B h/Y.q}>5wzp%-MGP"P6!>:\h OR_dV3f\ _մU66"ZۮMc}`"tIFrYo $z7?<וv%z`GA?=p\l6ڞݾXa8la{ޣ{JYxBk+~Z䶼N ,%M E? 'xl,چ? mw,[G YҼ_r_(-qiu19]E/c>aa}Fu18 ZHk.Z)E:eyJr ☆FӘ<;F|ƴՃHGU;^`6!FPc۔ӈOd}DLߖw@ᆰnJQ"aZ6n(zYOp #Jй8*gCp0*dJbV|gᅤ=iX)c-0N']8}IBe}(Qӄ%[pUX#bmM{A7ie%$1Rv18"AMOjomdSeCF`K*4.sJji dc ʀ= Vffyzj}✒bjFп6wCQ8dIGOAMQT䋬Vbs2Ԥ@b%BoMj%}D V2`ؗt)GhJ16uȌSr3|u/P<l$#cwoYnϿH)pA ͽy bR. HYjV!=|֒FOEy൑3qJ0WtXV#z~~gH ;Pp=ƕ|02F{ /'#Vyl|"\l ?Z݂1+ bBԋ" q ;ٕ'ä)2ת~錃5/B+\pLy"f#}|3:!zȟQAپ s Y1~(+qJѤ3LJAQ Ţ[fxQFTJBj>pX6i^Ƥ߭_|0--N_Jn )W Jt 7cW? 5Y@,0`kA")":1B R|*GU7*k2m0U濭mbNj8z{@#D:(l ]jc H: v|TE*[ͣ h"5gUxMkuQϟ@ӡNcYTfe;1 JH5@^PH/pnHw$_Ejxmw4f*{]4?RR?j|\~'7bH <a qyi]IWVmELn!n;|k)z6?SL:|n3+陵cίt+Q2fjmg"/\(llOf[-t i,jLWD[Gl@ E=o7Yy}@"Ŷ9   R8<+EZ'1Z^ah{輐} 2p="7эY ykp~PZ[̉0妖pȂXLi Ru_{\K ,+E=餿 m9UU:C\(`S%]p`fyɺ)TPU0-<ͦʉR,; iNs (ny1B4(AT`=f59Bը3GrG618x9)$<}90c)l=eMOoV[GÂ<5p)MOl|> TL[U^fUşѕe%S}Q9>g%|^o}u?H^ͪxIPBJd z6?N2Cq`Admw2LB?|5hz\, ֪S+Dz'"tz7H[S mZ0qi=@H/2y~f(Gu ѕڿj 4ݧmVht],O vE~) k}h`.jE֢SHjC tSQvS=/s,2OJ !m妯A]LX֯4EqoSPnwXAR|,}Anp @Um~O}@p \ȕ]d/" @Pd,q\ɢ/蜊}0@ ;ÚQκs^D6]O|;+ {O2X/i!`>T´5;-^SN=GM_hGR2 b\9 B{bR6gP2v̺/:xB"7`L)hl `aE/o|躠ygOts%Uj'Ԕ4<*?!MoK jmxP1lOzC/~>uϜxۖ@F=RS\ߞֆ!'nj֊ $7i=^%3 T+{1?g32M{_Vyr}8-Y^>Vu!ez\ԪΪ^,"C,UW(/"C!pMiz l ,ZRGYt{QJ5<@Jo|3o3pC%-O%::+QҦAigpB ~c{~ѻ&>tL!6DC)ؽީm: SWd-IK= H}U5Ɵ79^Ag!b .I5b#(jzm= e6sZODSW 7Ć#2k֬?, 10]S0/=0{^ Ag; "T +7qzA {l_[;G/g\@b*F0pn7#/m&+Ot2x wO)oZ(rυ k8 kYn?!uWrT5Vv{f7T?;c/n^l+ PtIM@]할Z+wA/AʭmY{^ľᶰ i^l?AkURjQ[eWp}Cy4;j9K UP\~ɊbD]&ѡP^$;ǀF-0]h GG:`7Cp_7=DNmQDx ՗%I6"H@ ~PdN4#U6섃z{)3?Be\nI}륍w5,꣛zqCF' j]AǹԪ]\L}'JNQHm3Ȩ)H蠒UuXN ^։/&azXȘ3"I/RTuJSD7?2Oѡx'!v4b$?w";&Aũ-K"flG1L;=GsԘ+Ì1Imə{{~LcDkqkUP^OcCy}E]8&ROhو%Ęi߫(]L X &(`)A^sqQjHI~{<>VgxHؽag-V=UKqD{W氦#W̯LW &e &{+mB} !b"摯XT :^];A&zM*> E_nő&L==YV )q;ki#`ٟ真ajIS6OŰ7*k\Zce~fŵ)# ~W[bY^Ŀύ"8C^瞌GJa.$?0i7z$^9noSіsՇڰ ሢ 6%zvDvS mĞ@ ҹG>}vK>犼o]?{ 4-{ɾ#~.,6,s🯆Y`j,ǾZ~UIA?0T@{9WS` $ߟJ{Pb:}umaAIql F9 $W%xYn 2ګ}lأ?^8C실>yJlD3 JbHXmҟ˾| Ŋ7ڴMҥ#J\\V/C2޲(>aOifƋKWb 3@cQ"߅kKl!nX*&p]-^f=Kэ"C pnJ2)QW+;M;}`ԦɓAeO=$=q*eOF9yibe'8Tد-u1{UjB"W Q}\ŞmNa Km!GW&]¹ c5e︷#s,wϿ}A+;R:nx Vn3Ad0P|PZB7VBR4{w 46~^[zn%W%vJzĞs%s˫&luN\6"I^ؾX{MӁ*tM87 5:#FH،[p!\q.Qf6"kn[%M _p9PiMї="t)Qg6C=y`T5KҶ9|K(GQ$-E6) So|2^#A}fRx`FaoYYl>n=H쏾-`F˰}__OpV_>ثQ Xph'6`sy?ɁP=3ntD]>UN?&p7 eOV<~X:Є]Гm{Rçr9!2upA(>}D{ 11' ׸ ʪS+C`(=hiޭZ8 m^~*D=qڹb}DZ#!7۬|ҥ-bX?W?>EhK}Ug{!_jm:ho0ԍ@H]V}bX2=Ud_)Z s~)~]4:Dri;BsOqSD`UO AgVT)ꧽR˶OG1H iӁ Uq7ce 'l%t0ĈQ%s*cO<JP~Ԃ4 tSY 4."os}bP!,UЕ?[d6W#ê~2Q1_|@%^8Ѓbj-}(L5iI1du<9ӟ]%]= 5c3c_57QAM+ãS!q=z q? 0sCo]-оsZByvoۥB!Ԟr-M}1MОv"HiHe/cB>xei6eY65z~I- DF^U%b.xф{冧8*Œ/Jseqèz)|-|QH7ƜSXĮ5ێ~1 ɐ̱Iq׌3}g)92E8/Y.Z\1mֆ ^2)<|BYUB_EK>bO!v\8qb>[ezEg14v}`COa3!!etlE9U>6a8,B YT;TCzxw$N0R[mw j A8UdtA0Q$*>n!u.M~S=m4⢈k>{6mn][lM>a :&к#k*/%G=J:<ب)vŀ=@\ +߶yfCpVN]T7DMq;}y% VA`%廪%fdw@\T:l鹉6+a Х$#Φ7HyN}ڥbPZ k抁]`Uk&jRձn(.Jukqx%G2#̟Er/6wh.PYWTc5ɤBEӬq=f54yN>?lY,Esb>[z"3bnuGozvˉiX|8W|\}˺ >ľJڑJT6S|8WGcaW>2`.͕r +EGYN)F2~9ڻZ9fW|CnDΝ;6\UJEȤBTi S$vͥLRB h갓w[\³)9kν %:G֮GTZqmI-sZ.F??gjȟ!!-s -!0*`` Qޛ괋C:'%1KFF[^0t[J@tiLYC2:+0\ޙi»n@05h(vF6-Cޣ(1QQS@T)_ipy[p@\cؤӇA^ gOuʪ.ޤ'f7ⲃQ‘BD }YCFOLO<NjXbOӤ9]6xNE]^+|&>!kڽnWe \Rrott}'_K~YKzau9*Q\7Ƶt$%g#B!V|F::L$*X{0R7*7ןZ{- }Zt\]Ϣߋn5-0i O Kງ:zC+_!xsgP$_7uTgE yn 3P:6HR0} s#>g`G ,]BA?4 ,"w= W2$>!dewh2]ZqnFI@nM}!/kE G,^µi KkdDd:yg}F> w"OXGCNRu5חm[5AT@ا #?I";*tqz+v\aA)]ٓT!YPS{۽n "Oy*jHAXK0krG/ٽMZ3GDGFd`&.a*/zj`?m(iAtY-l A`٤3!W1V'M`qw `9X0>yiN庚lgA-U| >@-j Mrۼk?z2,#Tޫq:c|}ٵZpUCuz9B=; RHZdtˇ{_ɡhHnfD.&b< q[!|x9 9-[^Ұ>t5:7R:P=̻ٓf!\ωS9 niATjP*G"ZF׃;Lnݖm/^7A%{w (D$GJFt1[afkBTjLwj-vHZ=$#񠧛gKe R޵rN'H?L%*{HJBNkU{Jڎh%ᅳ!Wu_Oۙ&a`O[U#G̺{ZuT/"j݀ o"׽3+;T7pi;_\ahvIN֐s'ɇe;ް5-nσf*!,5Y{lќsD:a~J Zb"֚҇kxyvRIJnp {ze?lݵAK?)-4 -H?5N5mn+id8&p֬IK[p#HU+ޮ4-w/XgѡxxGBqسTى]x{_c р&O(a }S,L CvvZhS *< &=Pލg^ʖl{I\m ^w ,{Q}ѵF^`"w$^WDM"s%YM|ZMҬi\^":Dn-Y${g96W|:bS{YC2ҸIɱkUUg1u[uwɤUujȆÐ"xDn^TnV7޺?\h䒻ݦøͫYC(-&c ËǨLKkң}R/[_v#(&dp}oϋʗ5텦Lk3̓/j)惹O*k93Y6ie#zwx$sEdVl4"%{жL_֐,ƤTf%OwݻuV7l hZNzRj` o6sMZS}Rk%Qtԃpf3Cֲ@ ƩՠRv  o]il&zu1=D_~Ƚv!t0&w풮mۛwj9@ mFB#Nt_GMJgd5lA̰s\Q[`EbR$7M+9OWP +6S/n$#}@$p[I} E!6퇔1d)潿qꭧ4Syެvz<0Ⱦ*@[YiX{ IպY{>mEUݞ['Q}D]>ndM92A]BTȠg$[bH h\PߙQQMt~^r`a uO{h?+n;/NʬEt E Puo>M=Q "V5d;F3H[u u\pv(8?h#D}DYWh7:"u2A"<:5pl.yoX==?v2o&j>5KPzezYXOyܲU/iחҁمWw\q!*E#zfvv"[ FAGLOO5޳e"hza8^nkXCͩOa/st:$S.$JD(ҴđGvKS;GY̸lbo V"#c_ѱ땭Yx y nu;U(a#3O*N:GTG]'}uYqo ^qBIE/y}99H`ND5AŤ/nN`T)M/-Azz"$ų +Cq}یvnd ~fm)μ2ɣFd*_?SG):Z-n,V~E۲Qa}ȞgЬt嚳O>KD0V⍜-;N[Lwgi94(c}NtLuU)1ύ:U~F2kJh S}JiE`k>N˻,=.FREi%:hS;*}k ip\AP]f^û`SjGyPm"kjTk@R-|:95VuCl:US`NwsR Hl1S~p`<֘XC_mYscDFdQY||Yٖc7kc>ieK:@-F5+u཯a_ZUDz[J(*iB?/V*6`\(=?V %&ci^-Ɉ(N?7n/g5hL+9ye5o Jځ^ \:u?V`w0 :3e֐&aIۉq &/ D+,Iӳ;iqާ5Un!)qΦzu8(äex1̷nz~Cb(f!u%iw ,QP ;kKٝGUElJ"Oŵﴘ)q5Etvk`A(gMMi eZj0] /Æ~zV/"Sr˖iPz1]Z#hc]W=XN,1Tbw F2^tC;q+~\ތP ml9!Y od}؍ Ѡr 썜v0XuܘvʋAJ^ -_]jV' ]]rڡFrk0ժU;2͓y//{ !J5!"9YIirϱE nUoC4$REPcٗ;R})f5m 墒odw{Wyc 3a;me8T}^`pM+1m$AMr-T_:?( 9ˆlċLu ^ʙSE)%u 츕NW(a+'kfZa@Edֱ\Mo]6:q96QLKQwsYG^QA3Ӫ}_-b%ьq;Zk8UMg*qDE0X_iU5}X&I{vfWP+)>m 򣥟c$25#>MF_e͐QMkF"GoAt|AgMx|&N>=?M %"`-9fzw/b[i5W -cyNg^\*[ x;ZiKe}tƀBet@#DU~xa\#k-RV̖؞g ]%wdm #sdP '9`'whiuGz.͏٦@Yd?e z9߼!҂֠ӓ:nmje$NqQprW~X<]'ThteSxMҠa)׽B/)^GxTJ,~EE7/Y3N)H&F6yM'Qᆲ:Pnu6ЋAݘ%ÄtXt5G{[~^j]_֐5(.u9ou 5%S⥶h:0*ĦN3rlUEV5v&K 3}wvcN5X[N[ފG9m;xշ ւv_|}%eiV[?;u%(JNUtUu3N{\c 럚<ȯGT j>Qk5d E<.miSߖp2* x~IΛŗYVѴ_t7A$G>OE?@yzC:7'dTʶ@J|ĕ]T9iD+qv0 9D2o+\OW<#pŭ Գ ȀS7Oo2l}υTY]եQdi.^!,>Ҙ4:?AXi|`*ϳd"џgWw,bҝ늫!zd' 'j=څbnVR5}<M3!7倆?X=Amm{e<}AC4]9,V? Ծr 㣿~Iv/JraQ䬪-=\.j <#zj bJr /TMiFSEcgRZx@jr֠$^a&IȤe=n rf62wRjgPՕr {u?O\ \?h'<֤ @O`JװYMs)S'{[M8t1uoB; K6eASt'>gmEFySث7m`XwɫWtvpǣ0 c4jPĠZ\+c(c@-3IQ#?9{k&W'>[9 ZbxĉO5NĔtJݰ{Fq&P >-g0E{0TO;2_B6J yKvm/kIJv~^;Q ###?-ޱ4½10tL 4f|,MҞq]ԁ7N8ΓΊi|n?ElH #aK`ϩγ_vWt|<6]ɪ RSlN)ZG?P4Ұ0tڍ^a9rSq*{0rjJ{Mv}jwoPl<;_ܨ5 ya> ?Pu45$7[;ԣu{4_Y>1 t'9ގ=-=&֭Lax-8ެ-61ؚ/┲d|'eS<, Z%{bʼ1_Fp{h@=lߌ%=b&԰5O%4!/֐1hU6ItK;EtܝY] }s)L{| nXzԈ5XVԴ}T#{QϼkJ^%:>z3 %}#m6XT^3Vn@߁@WLX$wFSy^{ֳؑԯ–Kxid,niNFNô;_ 日OTl -K=_OpTdVlwTv#咣E&|V-z0 p(_fhY.mtnt1\/nd 2:RG{okv>MZD,Y5B %+ zSzJ{kgsxHyPs\M[Al ,5μ}pxz@>%QדF>ĹEwBn=!C%yOt {BNI׺S}_KǒFU^y85ND``7ɋō*ȯ:xӖۦkVsV(Qۙḑ'O4 UGޅ,זrl-Kb oH{t.r@m-NN D 䡽Cby2?\*'C-R+=KSyܿک$PҶA+CU<\ܰ1n{^;v#e.;)ؤr٤Up[)|Jd)5ϕ=&_\V#dL_-zߔUjuλHcC 7KZHL`S5)ӨĞs;ӼMh%ht BEHKAs`f 7i&W6?s )b:slJ+WG *eäh_5PvSs/%/Nd0t u?ǧݣ*ғ\XG^Zi]:`6_A IF)/(Yɒ7w ѥ&|Ą ['̢VwdE+Mo S56n! jbZW0Bek#TFǭ1$ȁ0Ljy j1'I욟6L%|2~o&D%4{d3~/<ߍC/nt:XCZ%3˻t-%L0pBϓíŏ%dpr9z AA"Aangk%UGNFJ@f܎K8*pb;:cȥcj`oKz$4%dR/nu"hQrlYv_S[+gڂQFiJ%ީMhDzA9J5ި}^\YP&t8qy'OF;]nT^JA5trc1$yM/5ܵ?龇" ,'v;S9d{!eOp" hj9s| !2ZdUͯE3B{{do;2_ްBd!`BGn>/5vm&NTN&󦗝_kC3+ѵb_ڕ&W.'"":Ԭ,=*.)˖\V\3^;ZNm lL4gGwu{ρ,Ww5ϼ##ŠɃI<RV>MW%VE6RgcިG,]Q{AJgSȯeU>վIx[cwB~r}YpC:d߃c䯵?L_qѨ zO4OMaާ~mT$A7h5M*tpA b1NZqP̧}v7GJ+,ܕr-<6ZS3o͍Cei HJT:U";/vN-ܲI>_v2S9cm5%.GMćcO+N1YzꡉgO7>X 쨔r2XZ`OS^$W/8`ӲeqO |n6#:zE6eolݴ ;VL+dj.),@ l˃ASHcHL֠ ( #Cp>-E0B:!dթ0 9W*wnCX9I1}MYӳY1<$o1jy7QN\Jg9GvGjD|a>HxNG1k;*_QJ:Z)JbD8-^J+>cjf;1\ϑ Ķ8aM 0|ovFF{u [MIei{E#MLmT) sP^kߩҀg -sSYecޝÅwD_d!ĽV59G e}+kí z70]94,46>jxT\\> }:6Rpru~k+UtIWPU=a,A6 M4{jzzD+\5aM9؊zx`(s$$4b19h6śAMOÇ?f_! L.ۅNMGUsYPEl'bI[.mEm}( Ʀ7m*,gCt<4\ :Sʾu}\dEDTr2֙nÒH:xygX^G7)١g^N_' O [Lhj32 -ه!aJ׫}AáH"0D-aXF[5bJ?]z>,+6uhtEEݯ=M+BR[BEԠ_ZFZ9#:PG[ɜS4K b0/>hߋ6b ?qb7DXםt ϗKg|KdyA1 DNf>)zx–Po`?74i/0xEGNLTύV%E&>KtÑɚi],l8# k@9~S'%Uy1"O.[̻S8}Y Õiw*tobx*݈ 4nY*)ީM|n& xېnN ![i`L5Jۅ9K g yS zyIUnC.Y7ApaOj6W5~1SQmg!O /Y6Kwjaōz,2=QQQm&.@ !=~q^lܔt ]Íb0S1j,HDRAI89~I*7L9z])ľ/;A%=<ʥA_J(W?6xvp9CGLU5d [%*XyE6U> o[YҀijѵRO;#k'5h!*cTي7=%I$ͤd~j&.Xyt"uLTBg$u/o4i0,xuwm$6,̐J3^( 1X+PȞ$\vt[z%E*9cSr(O2iwֵ91H~YKҠzI]-u6;}'s[e.BkQӚi^J!Um  NH~1ΡUtmzY80"p}&S kRe"dk;akh))Q1kN8k Q#ݥhG9mn(y.A4 \ojs%&>2Maq`cWv ì<*> B5 !<9"?,m>҂ܢIt߱iņ (qhPՁ!+UTʓ#6A8Ig_X CIyAES}c,~/+ڀF1l8R 3o}e4)S= @iOmӥ5|9V_'bTcn5x|bPЭ.~b4 gt8mT`@qSqw sD.܏_AE3hjhO%ԁ"n_w Tcᦵo_q1V>/QI uKN|u~Q#]+5}Fd!Sgj֊ư]9Euѷ֟Z,Ytq(P;v7 c8 -xB兞m!U1i$gJ_jzP/ۧrH;aKwېnCˌ5䀚{?o߹gEX7 :=iW$Du_ѴvHއˡ䏈eb#|q.#3_L৿m!1˙Mfy)$jm`O9"]'i M@Vl{XxPfE"eBj#Y2c7RΖ"Zajˤ­HAXÖIB`^I*Vil!IC`#B?e_`jw:3w,޺SnjȽI9z_ }:Ү`v/V&":Jm"]ꓚ aM}Ax,L.sM[>~ZJNdzh= i>]{ %Yvuޢ=evױ)$ g-!`'ee)2vAzbmLD923(Έ>=W<߅,=kآg aPQ}iOAˇRM.Sߨk{jn?Wh>ͬ[m[=") QiR_E̮"է Т/pjkZґi,2(dҪLyvjiSIEĴĠW;Gv+o ,Skј.bt da_x0| tsUkWY~^Kj.[T7JtkRC->g5gq` Pغ#{%4@XJ$5i /nTAYuv-A= _Ǽ|4uK brZأ~ܺ<p֠" UҾ2VނTyYviDͥ]{Ϯżӡ?kRyjd3\,~ ?\! ֓{(n7FZcù,+5hQ׼y#ME'.m%ڡ+"4J 9k@Qn`&Zc7UŜ1 jR -ZgSq?bEAAD );юTzKy; f#Ko;GB 3f_:[Zwod UmAv5$ Xϫb?rfm=:: kYm\oIȺ-1  dlY7J"CB1Wz_<ݙN&gWiJ\l @䷛⢕xdK DAņh͎MSQnWFetO-33c 44p/Fṇ}B@Qu&Kw+G\%;"bZdI3rKa#;̂jxʧC¸O,8X[IkO{ck^ \A }K/+XV2+KtAt^쨹kc?摛ʸŇ0gxT(C #[G{a^@%GڃMϹ%L1=m\ϴo0ԭ Xx'%pyίW2FhmT567@T7|R i1 20\ 0uckt8 $n\_YFIGb'6Ut:,alr%Qݏa@,Q-f&X"}T!CwXƐdK DsY-A$gU(Ll-gNXC~p[xػ{ЪE5NWY5BL-.U2NLq |@DK`c{euYyMTr !] ?fsk1` f{q84a*z⪠$|0Vࢗ6uOln~Є2č{ CWZ qUjnA+0$'t-Pfhh2H(ѻ zPX@'>Zk:7c{7C\Ga4;(ܓB,I468aһmy!ˀ8\]9z-֗gmlGE9 v7đhdK* DFl'.=j&ٸ0}35 Z{j7^F'}zknq?ĥ`{!}~LՈe9.?r Y/J[K/ctP)nμ~DW-4йFx^iE44B PYgޏ,QmE iBvh:r3 ;U{PW>4Iܩ2S'vJF & ByNӎ<^ "Q&:pZݵqACOK4U.)2?xL)ڎR]=+5bh}&_Yl%ʌ2bwn~GtQof¦H)%C[Gok9/N ݰf{6?\jiPa==N[pm}sFS`nlޙtqzw+#t( ӧ(7b:YuG$ʆ!r#vJW.?"&C]Gz&3Z5 ~8 G;ui\1zJ9cixZ=_Vep;i|#V 4ȍ֌Sئ"+s? t<3cwF: 1}.S +蠑(#>tnX:fOOzNXbp7K#!}S*qJnQ'1,斱;pȼr G=Oƿhp?WVG6qY Gt9Csvr"(q9z#X: 3[F@mK;TyJ6wJBTX@ ڒxPF'&[~jUMn=L`[A.:O)_oJPxuM&u$tHY(vV9>X0ҜOP! cʼn3^ϵ}Y؄yWT1zdXT_4iɷ0Rڈ7|ۨ67\"Ǫ:5wsg w#hz#?l[_T!G D0uG:%FVYmܓ6Qhd56_;$y~^#eO(߾O7`9km$@uJ3m3?O3usaaEE(b#ݮOfvA yݛ6`IXW4X({PMܔ1 3s_Yr⢐3`OwO_X%rMgו/%V|n[1˼呀 H+X3}'c]P N_p a|P㝱Ox]֩0y;< zzjX;柟Ke}QhGK;7i m|x)}'6hzFС۷Pz5W@ rd*٭&|ls%baC5oOMgt>F# (m|w^ͷp1g ОS.,O6 Zgcͦ[:jbB6P4:y:lYTmzop = > 4nTaN婈QgcfۮP5C8 dA EM~5srK"ȩm]i;d|5{!т|}|@ tABjPquC^`h4*Of_VeST.).SwWngT'\T#W uax:YOFOȫ\G;Uw+c =w44F95209๧N\ UZ8 UY: ' @1u7?퍒u*քa|MgS@:%谻:}zaP{Y wǃ= t3wTZ%}/vC*N%R٭-%m<\C"UWZs=G:xcޒ"qf {mtJN,L5!OzE"84Ջ0&rG]4dRdF` u8fx3A`H(OxQoo=._ eNi1M6}p䢖e`I j+鸒,$ze&5X%p\ݓ>wJM30CMr$?ǴJEtv|jPj.;!F]>q9qSUҺ_gʭQ3KoL% ICzܦ fP`Іę9oxNdvfqPBKް5ȷ|nնbdz^G6+6aq D-;#7f}:hגx K"p0ida7lMz;9ʞQ&iMDp-aи0K]1⃃ Fv>`d\5`]>5wo L8ŋ6:-*A hzQ}>f5|l.6x?}H;׺z$ r•&|Fluys떇03أmvNJF]|rRr;Z3>fuY%;'No [ l`yb\/ "8:,%nZ2iE;3ހ5Ptqfkhe{!I;9^>D7Vɻs x{jBdZL pn^U_=J,cęw*"R^"g n w9% Q'xcx#S'1 m۳ƉO~ABЧăqN,&5D6YԚ`?Y1Pm1k6t}z(ݡ1 wGd Pg`݃4rJLHv7?`VӅ [݈6rՋ!t=}IwZ>0.E[I"Ɉ:u= |!E/ IyJ&VIew(6 "ؔImAkRB G^4Loc?'xf w$'ah?AK_8l7Ȏ} Pځkk[&V휢\vi?&5 :'/f-T*VM(=$[Ci)o#_GiXxcSĻxz~WRyA4b.wl*6[4iNfVuQ00+ǧ\y-: CUȪ$3+rP1.pP>L s*d%nCz!BC̽ߐfn$ 2`dhPEֲH{ṳ—^/HQ7]*=G1Zǵu7ibˣ6j@`#6boʍ)X2e2'z6zYj)Éb5xS ݳD,Vk`1N4(qSks-`i@sڳrޣ 4#Yl\v %1)9/U>uՁ!ׅϖ!;!5!-Ie!;O/^6э6]IN8?Jj)dy!Dt[rq}E("/doVxǽ;}5uDq;̕[T߹ N''zku<쓵OdžfL?*/Ok}sMY[f, |C6l5@9݁.(m]%TF5嘊ƴ^A$;")=+`sZfllF ѴC?TVwGh :kD;:M7Bʃ4ی/z!(~d<{tX0HԞOwLm(5Ҝ?eכ'T|4ٍJ;hYn:). SgYR,%{`UU(`n!T5>FG-_a` 騏|IM (Uaf̬`Z6KK?l rTU;gR,z ?0} WK~bn]t}kV2x : 9{nлBgl4`;vKz+Z _A:bsv.Rw *dR.C8=Ymx۝:E~0AڼBUEakLv(Jg"[J33Fz2~K& n:JsѠU4i79lj: ԜG]\f%k,|tc`鼶wSh\62J<)7h#Mi/{#}UwBT!Z{+EX[k0\KPKR!_Á5+Ct+{v<|x=i8*d_ $M:t O{1X*7=k˼<.Cp+QhE\V,t4On~ƾ_-Ӵ}2噞uBPsd;vmy'2(g_dV耵Z:n޶sx4ς&:qfg5;vЃ%KC?FzGw.`UH(.C^4u@)ra?wM ג)[KՋ&k ('`G~k]wCcaTK )JOW,*8ljO[E|KWs;@Oz⣟# فGrFQqQYK ( f+3tWi\{W|4#b +9oOU2I-+MWZ(`3I)i;ge'R'mGO{7k4hB*^8v n_pbJm-ޘ5@Sy\a:)[&.&tŗ ,~!t>NI]eY(7oy R5qjkM1Ka߅ [cVQe\w(SO_ <ℬu>Q v؇T`NӡMpՃ^4zNM7:e;=vPx3I0K]@D;B)Y])wⶼdx[J`^j`<0M_v>(U;2q@)|2 Mi/se=ih:~k!DF8z==v<ɛaDrƀwݵS¢\#+vu>DVG(j{= XYnT}NIՌA.mF LS?6 z+~G.X+;sՠ9 `w sqōӮma`dhrR=2;@ThO]JXw*DrL!g*;r0 P K͵Dw{8 dGwXLQ0 f@dӹxцc}^߹7: a>z%Eܣ*ekdw]kh[#VYǒ;0vׅo@b.@ڷ׻? x4qMqEaHVKfAB>ު_Hg{BU_!y~d5`d?Ge] n. 3ݺ;kڿFab-6Di^C\0ЁPΐR2{֟'{f1T^iaG^3P)ӎ?Pu8)M=敆¸/Ru6$\:vcޟF@)T D*垎0itJ˶Yo'@L3 ę{1YUmTɬ`UkS>HQ@p8LAϻ}& >AIOU\|-}@5̥8S;"j z~KA%? zI7C{4R[ "yx*؋ قB5G]4J;xz6u~Mh`C3^BK%E++nV6qgN5&// Hul2Fgu~Ie }' yKZ!X}q{:) IŎmˉFDK\uZQ|AG$ 5Cp>1͐8`Nn%q7X`GMk:\&*AGW+ji%9=< IJwmo:R&S&"/pB WǹqJRۀ^j{ˤ$IWEJ᱆Aٓ)32NZŘ^BmhZo;΢n:t2U[a _}c-sաQq/ #MI/yJ~^f'H4~[GTsWHDjϗ??u =&ܧ-e+M:i6>. zLxR7%2'_4Z6pSMДq;brdMp $H7- { xx, |@w&qPǣ֦|AB5}<EO23+;}w3/Q%bO3!Ke紈;-lu2/p}NS:@oLS*eefP8 N` /nBB48y'+s|ZS-;t=;(Z؟rݩČТ1nM*.9b?C]WGpaۖi(&7Q@^+G7c$CNu8Q-B=".gv;5G3Ts'C-?I:ۗk:Iu!:$llקb],&܏`֥~&pbi/tM3`W('.wf )^~$I:e]l}BV(E밠g88^a t."_2eQPM/ӷ}sf5드[*yY_hS87}q^T_U ep}f \3^wZw+LJ2}+fT9H5̒kH'pyk}ʣ\n8.K]l;ynj}t-Ñ]ncKYU!;꺭a}aA:]ˇ8}I8 &ŒnA~ICĸqY& *%}ZgBHfhɺ%=كcK`D؍zqI](UlaǨJG`?Sͅ=z@[#¨Ւ&Kr>o1EVPvzCUW[z$ns= IafݑA3NψqnFp/!g!'1 ʍt]E\1:{A9eݍ\v^1'_gfٚW4+@|)GTg_ YQ"~OU<{j.F>׹^顋p_\o*u^(;=E~~q{꺥1r2zMDRyr_V1~ .@P-Kv$AtgLս0 b}h}L}D\]ڡu2e ^詛h4DST.@;&IG{Xa{"uC|%[@߂R3T2e).>%v ' yEb|O1avb@G&PT;e 6вit]-.8Ps nbLQ! U@nRhg%{oI8GRpu{PTm{k^_ \NYb"pYJ Xì7GTau#ܾ3> ks/p~7g_1~] ×L.7B) ja/QHON(R cwE΍Y۪{!Òb AaSfɚmU[y Kڞ$$:tuFz37ʤbpIYF:?w=z *r82"뛲].Lb"Dܬ8w[2nlPibwީD1TpDҭpFAT^,>O]Nx6%c Ѡx;KP$+NmN篑V}VՊ.V,5P3L@^{ s.aly/cwact~&>aTrʻs&<=njkwvV} c%{N /4E~0i8ce8@CRqCBuWu!6i5g:F 1D:&PҔPN1ZVo^dĪұTc%ٛҊ 5ۥ糍IPJ{EVJ]LMK]Z]pcdKu-Dχ=%eBD{S.$w7"}ӒTX .j 7 y*GZa;0Ăȁ=6's\/~O,Mas _<~[܆v&Ԣn@%ÈkBHk=p >(a\ߘ:Ǡ=iw٭x)~ŚE::=ZDVRpi$ BSZ1N*ՕXGiG uxܠ&N!( wbj, +is6ŷGB7"8i8Ԍ/,GpFY@k= r󎟌/~_ 4ՕwW"b1W2|$\g4"4g-\KoJ$<'ewc͝Jo!pch"Pe0_3<~xwM?K1}oS6!=\x0_יR 6?˺}vv"%/ ~=NxMjZz6ei,ae><w@QkP|sL< g/݃ݘ 2玓I.b/w#kLg-9iU+e q0E˜5}V^jzJihJ 6l;;EL'alK[ܯz [\gBlOiR[NG#gX5:!Oj^M'{:(\f*tO)mDPMIແJ=rFk.>lq['EMuL jppG`'Hzq,i]'Դup ?AQ1~{aNC3D~[q^4y}(*DөNm r.؛;8-%I>8qg<%R/dw9̸ӪT~ORSߋbz 8Pb'w"s";*>1uGmZ57iVOT_gNgN>@pgtFT"gNo' Z:.ti{kPJ@E9%rg%R\'u7fv !|;eդ9^D#jAr얒R2ash'U*6Pe>+Sz[das #p[#DŕIݕ9g2\ QGĸw4\E^tdz6z$Rҙ{Dyk}rqPo۲ ٱ/bE%^Jk/\4GwoRjX.<.rYtST,?oI;Um!|x;L1_+sYz@ҔKJ,Om ĕ: ب\c0'*nLMF/볤GYjyJç_,G!mL*QLq Qu@*:o(LnئTL_tyn xAeoG`TQ/1B4.ӌf* :\ Wǒe8~mxzU%D)!}Z C'"էHg:Ͷ놾jk9~B3P33Z؀O2Jr'nPgGǷ|ST$hbpfqVՁ#}jJz[HOLGP[ C$4CECp|rSow_Ӟ \~pR:3&-%p]m0RY=kz+5okh }2/M \gpz&P(*ȠRNh狻SOb{ĚsV{>ȨfZI O B>H,9|Z$jd)b_a[.3\r:e|4\,Gw[;}(@UR. `GY˃wbJ(;0/A`>S6ΜT?b\|P TI33>*MekAOnY: kSfiȆu`I d;&6%:wN 8|4τSep B 'pw!⊓n|%BU=taq}]냲%]Ĉ;jz=N S&5Rq@ڣҟ:iXq_U-=ޚ'Yfuv bavmڶpL*Mi2>5,dRb &= Q[nQ=I·F^צ&T-Is(Z\ϳ#7yq˕#p7I><)`{Gùݔ Uax2.-rֲpKj) a!k:j1OQ=f_gغAb-, =P2z70@JGLZ]PS/{0[L'}PKg zy%T2tm oDC0PRP₼ EF^>?ЅeEp:R3ĸ"H651jk#djw{ZAr]tGP!-**h!sI>4OSY75'9A73%fOBQF<)@k0oMV{M~ D'K|S%~0hpϵ=Q:mm0)P!7J3ebp~mw>߯Nʒ~]B]̸V^ZJRSP;DW]%UM<A'}(4#Gd"NU_>k;a&] >ז ȞD\~&zFk?N^(2;rH/~OFOyV_!C'ԒKaKJ&yOexݙF~ǽEHգཎϼiR׃㋊h]mawO{Іdlgz QE_O[p\TE|zC2qNxp`/TC.n9I1 `@( wvxIMx漿L]AR|=IPFaSOBN%du{=EN h( &=V`( EuK+a()MI7´zE7~Q-`9!˙vX)/}.˾ $<k=hGJmV=ΟL3&r[" AtrMZqZ{"E<п5imV̿X6"h"X $VD{{hM_Gm) `v8{Im#Z# /Kuܧh,a'dR@NVD(zsݨ K 9tK{V{].~Ѕ~ X^%kEkK9sWXbCiI { *z 5YwY e+qj%'(L G D;m>"YY*i(qu]>e+ TYESZv{I\>yR%}2Űo~"aE5GUvAO(7clsPlؒoc}g*umI&@a:u/ Z6nun3 (I}mvyU 5'&7:B @4׼$t6B'.{ڬ&V|䜂n+1)K$zkVl㠬G=)udc@@%*+]O 4oQ;oRwׯL.>T>J3HQ҈-=t}X5k0#8'nkXC `p_ t9ș۪B70ֲÿNj~ ʲ#kȊַn)O;Y%KlR9o1;69PpjqBh~EOHA~}a|&wo8$4l8<99N ` p3a=Om@BjxR}U"o1PQuya4p2^z-nhFꖜź|A& MIFz"|^%J|K=h*R2bv 1`ܔ6[D ̵x]GIA'0fDA t< oޚMQ{ 4Ne_)Kj-j;LZ+k .uóv5o9Un$_$3|y0S6M+'1uKMB0@{& n0.q\P%\N*Gڣ $f]ܒU^u<1|GA7A+*cz@2 u@Xk,Uc oYV~1mB4| E-wfTui:vTn$`$!Lu~%M43@ `mI(ԟ`?H4~TH2II/ R"vZyJW-EG}Ɲ&)XٮPCh_=O(6 v̲M=m)XbqXC bG覠f pNVB5(5\b=[r5-槺|/ZԒ8bËV6NFBZ7 ֨kNqmSA, r3VC4koX.Gm w.<EHÀ$λkYR܈uM_۶{R&S1⬻`h|:-6 6fP.-gf|H B~Dv/*0 ֱ0n{5T.l [8C @(Tl)w>  zCVt:>n] M}߆Cֽ W~!*¥ &"3އݨ$f Iݍu:n+HCP<[>Yi>Ұ+1L=G:с3 {~gCYU0Y {:D O)*>i!Q>ϕ5o1Zt1CxYϠ`e@L&zH>z CY)uFܰQS?gH XK:)GBz}A834-Cj  ,}ѵȰM`ana5e^ebH3V\; LO *VrZ F(&o#hm*:$>2.d8T @Sux>a/kkPvȐh_솬j4ޅ~ ;ҭ]#N"Q^&9T3)?M"`7dm^oyu|WNWwũO!]ezAwNZB 5u Й6>i|!5MCxhl@HR%zԢoE"q߈<YӋŁAe% #HV<5h3[$B4=m4fz+*xg@L]sπQ%]>ӂv;L+s21zHz+cyB{Vq[ߚ"QVvXNB1kn\l ucφ'h'qZqΔKzPbu8x׵ߧX!Qۋ]>`#`7;8en*AɋDO{sI+/ װ<_* ˡߟK^Q\|'m9>BD.NJ%ڀ)μQjL3@'+a,wX7:s;iv {1Q Yc]f sAej^ J%j\78ih 5%.o3bM%| ;]!?qRŮӛϨS)b5*x,-XmyLp*+O~cX~y*|%|P &Oe&1^@58)QMSyAOVGH FS#g.;sA_bgWpKkV4M5CghEىpC;qjJQ7M} 7H:Ct]R@߾^2i]"dKm\#0*],9"֙B;GBUP$MT=mR}l,ې$/慭3H$]E%7 p$w5Qy3KZ zm٤}}%=`]!$:}t]an{=6$-jqH2&2i6?R5-?R2GrG쮅,CnZ%8:̋Z,T`^#kaؙ'P 1OW졆@:&frJw`S7)Lk\hT1`R?OV-zo0҄!i1]h!w~  iӹ}abxh?ٵb߿Ҹ>ՙz Rؓ^`!V#v?Q!-!t4JGiئY@}@}T e֓Rqz7NGUxo:4Ut{D,z-XhVh+/~TV x>Zr nԧl ;dW)dzw~u/Vޒ^^^/  7~BCo)'bQ $>1 |Veu_5X,kau)JN>=GF6Wmim{5_G;1g|Eu{Yf>TQAnՌf{^X!].vlǕ^= Bo2G{]Hw^2}mv/ ѕ#Nݏ JBa>]cNT۫\2MVP ɽ>qئpҳV))?Ы.lT>C)O5S'O/nSwZ:?&"4DaoxltŋlidRuS4t{@P$ G/-bOAKIDh?#Gj>Xо{:2K@L4H剕'܅x41~/&}㙶g5 lq2B璎s ؝dG:..u$U1:bK|n1! ` {Lk%uJ@Ҫ|;[[p ̭C$tר~ښ(\;vXgD:K _X2WCכVuk0վgݬ{@!ŚtVeYh,|2܀U #JsG`shj}h)6w5QZ"J:l狀ƎgVqy쁬A*D㝪guՌ!hV PLGE&jkZjTi['꺽/:EpG֏l[mƎnC,92<] # 6="} ۯ>|4.i_\xwDS̺+Ƹ}aVϱ3tY1ѣjR7YXt]}4ͽ&[U>&KvC&'89JĞhq넎X}ގxi}}}p ZccRy.ӮPC0M_ U H zQw'tze]S ֠Ifhc/3xb`ԝ O8$Trg>'x> κ)eGyU20V*FVhj_pcu'.EoֶB9*Qq|ǂO8@1Nhz¶] RN^dwyld9%0-р 4/:v>gx5 wde6H WL)~)~ Ruh8_E4W{N[Q>:fqFjI>y̧vsN[bdrդ-ivC SEfjHo*[tJSb`D)_5cZ u T-C`x'ܟKo$mTv}y/Eҽ[\ڬˇJj/|˴$K1}aPA2[vlӝ|rz/j5/iz*26esW80`{V>R"߾$!G12PkS,K'햸 bfAMۀU bGwAA}.Ke}Nb BQK[93ߚՇ>k|BmBtc>B||hZc>{ Z-#I 77Ȟ@kZ͜&lt}zPޑg(57eΙg G4y뜂A~d,XJ' UOnV[x.Uq=0&U23B5ENLޯ4 Zh;k PC0:hѓU2@=5AniDŽ"T5O*xs 2L+. U4=S%OSj!t1JdcD4o~Ĩxvz蚖BX pO6U£l6 LLJvp[7RI .H`BQt Oun͠$YD8_Vh# V0%)ԻH! F۞:VSlCh"CxM=OnHHJFgP in9&݇]=b$>Gŏpf Nj_nсmnvCmblb9TH >z7JfQ}#\eֻ|,ֱt"BcR6*Jk&jZ+QWz™N?KV~.҃=e}7FMB(=o&/rJ⟿_BA5uIc =|BVzF{Oװ ^:*Npd Z9C@}0{.;k0 D6 l;Ac3?+E\I-)**nffy EW9>lgv88vfSOx=DЩ( "'TbNQWﶿiC%Q8`3#^\k0x$E=BmP}^F\UQ/14'/?hŚ`D馚6.G][.rgV._DXP'Pdf]>s7˸gj0k^ { 7b}+zAE݃BX }3˝vӂ }׳0ZbkWGw,w\aG_}ҋ uw罞mK xSbH\=-(P$AWG >qo[CUvH`9Kpb[fMrX^UZq>Mgz fԴ.k,t1AGhY'zOUgnvkNjŊxO-/K/<؍H l)WU\t[/1K{̽(* =֪KA?V;`߲zYO {/Ƌ] :ħW8Nl%(hKE<}ةBnxk)F@f22'ޟH?ة68VHnD4Yj6"K*}jZo!|s-Y`+y.'۩%C"$giѬɷ>2%F6 iIjJqLP5yJ.Z]5LR@ S=ޖ؎56+* )¤`KMq.89J7j >WQT2AG:0LoFDc!>)7X>f3=P));oqse ȅf5{@QMxI$:5Z]j+D,W`$8#t9&C4}V{︵@8RPiҥ3e>Qx'A /]^8~pU Qe|493R@T40:/ cPoh6챧v\]ׅ]Zp~ѓmUo$oonj1i{}w.wxmĕNb],QjvKUo!OTEnw9e$rl),U5|Ua8pC1Ko}yJVfZ$1.dz Kʼnw:8솬A|Bn`-,\hPsB=ZL}`0K)KuyǨ};,m]62{چ頷ҕ W,hPK4$|qxxw92]nڰmEovYzXȓbo6q>F[(ѣ4G([@-pX_(6*il'7ip`zo0rY ;"B [enj|PEdGui^X@t;wo/Ekn*"yWzZ {L|(U^{,>0Sg)}UaCzw]29:?#cFDB0P]'T{mHdo3Dsm$ɿ^狕`m!jzp,\7|iRSnr<03,D,+9fvr)A4Dʶw-u*>8ݧgg^6Et]#rH:RbKӪW򺼴Zz[54zuX;5 l sYǮ?B˥ϟN@u٪eAHr[k Y- w u>V\v]!@lfJ̀ذi A1RqTr7έ} EfQ\ŋ-`v=4X^9μî(0~.$o}d{7RN/0h*bg1>t Dc(9o*U]0vC}T|uq=/1i@JOr{z&Q1͎:j1&(T)X102BV _Ndq B yH7U/=!{Ph?FGݶK{SwF(7"vཫ[]r{vzӖ#HB|}9}FN_]wIKj-02UTPkZaGfN.^ :N?} A*~c}Za7d A-ri < 5tն.g)h?WAk!"<0 zסr9X"@`j0%[ok4P!('.Sv+_A֠Us{\J"B)ϛAj8[(,@u w!\ $&)X̜x_49V.yrրBQ}6-p:l r":R &湟cBTIھL4`a ]{"6uíbsn7(#o X(ϖdo\*9Cv QZ(/@PmqXy2e+YV3 u#bO/m]qŻȐY;m :AUqޝŻ7V:Ê˴)&KV2vMmK;NvQ[4Tx|BȈU[n :b7}X;o5t5J>S}5rG *<";tzo[ɠ?|h F |ώMϩpZ;NQLh?ru 2T@Xfx->IO>}J}/ݷV#G.!X/bo0/%OzhzX-Zϕ_X'r'TOZFo./`#Щ^p{ݸvC֠Q0jF/$]ˑU=%6,nFO?5C#%Aƍ>8J#v'Kn[PRK#SDėu U,p,ƕY^~s>l%,TcGR!paL.[ Zi:aZsp2SboNjݐ507(iolek5(k8Ø{A֠I u+ k\Vx]Mq#dnB.Z4ܵGx?dD̊nyR[bKJGxt4]U==@g\#<,@uU5GC܁#+m P6yO@ VwpܹșlYGYuTNj&Buo.jQeQk瀬gYŶ[.L[{z xڸdG?gCbmqov(Yˌo۫n@Zm<PzHhxlRx| `bq;l>#IE [("~(do-R8KpA8iR]BC{f&R!3{^`}LIDܥOoh-KpR@[uO2Ttp@3=CL+g"VFBn]ia2J]WR{nBtHh{0PU;ԡb"[ĠG*VT LRgm rRt+7;ܼ7j[E] t^S_rhC e\)$:$[uD(Z`[i7b uC9SyXi Fʏv mjJ^)bq4=tb[{ņ`PP"ITD c#ƣ& ;i2\AR7^l= F0fKPU0jAU[J[*R=ž~ދ E b+`;TtvO#Mv:dz:wramCaNW kVʇ"}7hj0|2LX5"X~c+efƎl ^}rYW-!]il㨿{nT*sAQnϓ::V eMvyb W Eެn[>ՠ̸.}%# 2Q3_\g< mZBL#bk^2]nn9Y/D Z% >`fY:V 6] `d,4n m+@J!j2k ͑Llox2:ڊGT !{"x7PASxp-rx:^/w#L#m WJ{z[柽Xoe]NH( KV dT[bXu2B416fS `cGZ @2/_k2,Zoh4$g#]3D9ob .t2u23\逬4&M1ޥ!^hE>$^#F`lۮw* L^ ~դF Iأ%J"X`r˼6}>Pk]/HU[gz1/qQTD7m=T)㥍?)p>낖m"RŌ`pςSa%e>"m&\S]$|B7[7vXՔWsO(5m*cĩQ6 n#KvOwmZҚV"eS2 ?,m@@[L?#"r`қt 3޳Umb<\B=cV;WOH%o`,lh@ @WƘA9TL\jI=@%@oӿW<U,AWyӂRf'A5 D$IP=Yb*ľʬOM{8@ H ɢb["Z z\Mzˤd`ƴO8}>>uccc}_%Ǡ!MǦr cZhZjErzt)F4I"u+E1U4}r:n|N6*t-llW|,U?2j;+J_ KA2Ow /t>vyIsV".BHg쁋?~f3\Ua.bմ}Jnyg-;_¼`[♚y<4?PQLE%m9@r٧YGuj= YCv2UP4 .{ӠS8}rX1}zx$ gЗ]dm0Q>k̓Zt4g4 HLqۦޡAY/?h>C{L|5W:K')썗q5|ɴ(+A=g+j̖h"gCK3pUFŭ*At΀-'"7w,&%W/ƨh4{F틭OӷD@.y, XQx[PTaA:;7 >][ğ*@ }oib 0؛,5\SS5ĴkKه5hVnأ{0ᩑ/HxsEUCYKZ۹ԝ0|ʗKnѰMiΧIfdr:LD%B=XC=H8ڟJ-`{a\]EznRS{3:6G9@!M`@CSsCP SWZ]@{#<.%[ qJr$N!ZBԡ|"eI;\{h)*?=w4-#ui0iu%I#(fIodqlL-@C:-jRd:AS #JVazwbvVS $2\;ϞߍbI%%,jt8Z/W=^G>}||tU}󇥠I6DPg۲]] b@$t~6@G!3< OJr8_qJ #論a={jއ"$9VxZȂmn蒪?B/q}y>˺S,*hihvF;T_YnݿL,l5F ݣbaT '20+ISʻ|j;JiKIөcvzljMԞO=@F6wN-qk U;إJIE+U,)_G\ ÏkjXo$x|Z-u/b.%C+ح3Bo[Wf?W 9ͬW7{i%CzI5״ $+sՓ67js >ggZya{TJej`,T}}V~r [ b"3jh-p:7znyotƯɕ4JA[y>;6,>)ugm!'/%Z5jd*I Thkf.'[fx| "ʡ.y_DhDPɼh0US8;b\PxAx9u44Ug=;;>BxN8k,Y O+T[;hV`̾Xwml?7wDkiǚbiiN+Cya Yx%뢙Ɋgvo@]E31]DaI@.Tʫ$)$tΈT&9P5ҵ~Ri]>/ĎjgcP4gTjj VD5Nۚw"eeC+tۨPO|,_HA%BeN˗W3y^l+Hl}cFEíMVDK3-kR -/`uA8Ő@Mqb.([|1_*EkJ)%j #PELtԗ?Sd~0X9*e5HA|D]+t,C?STٖ+YDÕm*X#؇_eJd #}^+buPjZ"}m;P{1,q[&ԯ^,n"')8 0tᘏI'Ѝ(`=ͨYmFMi/`}' &{8L~i~+~ jfKC·nmC,KtKHK̆x/ee>< exAPmO7i34$ٴ⼧ 6z=%5Q$mc|M)l#xH6oY@T "/Tmӗ j H+X#g6Dg^M-BojۅONz> s-VjJ3A%gZ<@OzxϕB\-hD\@Li zc4 bkb'"մx7i/3|2 hKA)ԈF+l- sRÐ|"tH$ЛX>Ƈ.LBv:i9}۟{5*B'Y{}nbK Wno#O^( SgOXS5a )Tiʞy_ejmʂ$<D(*o,+< 6{Xqۧe,kp6lؗ<<H]Q.,:V=2k}FU\-]-*z X>T9NWS 2lS_m|>CU,%8mSnȀaoE_{@( XŠgv_9dF,Υnb'HR78ѝk>=hCOMgy"rZ(Ud,ouA,k+'$7?]M5 `FѾ2ʥԥY {Xo7 C\bC'4b7$O޻-oU+zE &rІyoCf.u5o,!.XOl۝Njc2/V0*km) V*kr:/{ &L4`K^rW<X$gx~u6T#Wy,Re[=I":=bHw}}koY%|yIWnA_H hLشBڗ8kAKr=a/AIŻ-O^qZ! ѢD{=tS9ޗK5ПP鉮7j骗XszBl^ %RΡ2 I{ taO[:jqڳk,ONx7Gq~:!`J}LpD횷4 x=C%pq_}{ [L.a>٣VTbD܇h&R(},W$jsm0rPy7k&k~KUT ǒ9BroЅ;PSKqD%J3_`e@t8H.0ON&_ yk6Bu."LNxH2YрbĞHzRAE~0maD+ҒN<ɚ{SUx _wQl t;sxGEק얶rXi2xw4{x9<~B ŧНklJYHN;uC^Y |(s2=5:k:\*5˦r~{̘ P!L]Df~<5X&R))M_g%Σ鏦eY ك^l}/VDF'P`I\2tXBll5uI6in׀m7j3Tj0K۳|㶇!vx~4֡uX$u2T5T,uWY ~ 7觝su]4.q#[4CHOZrqcUSs!']Mвz5vm7|P V<:n T,.b1~i 7}nm+ReV]ք}Ύi6C?A\T%',d;e!.fs&^mHP{Y%s4/nN}̋ dgnX?( +ϓs vs:Ary?rT !%"i+0&6n\qj% ~ ؋(sԍEދG7jpIc{M@ S.|Q Bĩ BSz|iwwI7`= f6ϵ#g2BWӊqPA8Zp1@,TwDz>mb. X8Kj+⒎yQFd˔Sğvm)}4$zKQSW1竨'%Q{0K wO6xo(8/`#b_ lOgCΤwV*hCo~3HD愕 Gz#y{푔JRi;ӝJ.Ji#W.dxy{ [ל6. d`J.g eg5 A>C-Ǘ>/+lXmA}+b[!=fwLCL+?,|\U^Ma|EP]U~mS kٽ= m硕< DІ2-t,h@ HÝ<߬JDxuh A{b3zȳ݁ à&SNE:\˗s7edSxr͠]rykC=2KtM$jj+NHߗL8UNb~XUPe~~T*{=`"+"+-޺ StB[D(/YBJ+O΀/17cnA 8pwPPcikJ =tҚ/GU#ҵ78Ca ŹUn?D_O4`UfLwҵB5dޯkRPj5W| YosȾ%#}=3}.ͽSc;:gIdG+u_+'uL PC@j9OiM)x#Kܯ}4 μɄyOn]V 쀿B`TMT=MIJ=LA}mg0BIh<@Qكa(_|-?GVG`^_ Gr 5D(q֡ s>C:=(h qj7O1feir7%&UukzHO@W-s,f,dpCcx3}"@ӀŢ-A*ԍ͠w>U;F\AtlVwI]*J%Yv\\gzҐ\$E gDT|I!ԸLWͣ-e :mqt9`ۃcHD=N{E.68b 5 'k/V-堓|RM1l'N\tcg1uɵio[gЪubOɓZ+I5bUFխ+h8FP{Ls[u>,#87K]&hɫ)ȒM+A૴]+Vkch6(@22w͂ FW9bLm?AVˮT>_N5Ca4!;8FO)~;7Jp}ϗ=u"ɺ`5=d_  Ei~jaZP~BN>Z"jh>{C}H,`ofj/r *3U Z62?9YDh$P gb;RZ̠wZ?Ub"%Ԉ~B]]}O كv&O8T Ri* zAt+r ÷>_x`ά<@O0.i'ce|~.V@NyyuX gYiL^:qK%g?$n1N=; h0d 7}NljU15Ysjf/Ot aDT {D z4gĵGBϼ * hӅ)>{J->ni, n:e5{piP)s|⬗vQF}%]+n&6G65N{,K XxΔK{mi%}4jjy/ =~ΊǬܞC8dGʸ/pج6A 8cRYo_15"J&[]Fb ‘%bm_\̻!t*CxZF;MɪǼEVkГx %` RUpۄ_/+b T^}JH^Jt>fDمf{?pJ  [LVODbB9#(\AON[?`0&@w?z˘ps\}e,B屴4דZn%:\Ӵ%N{+c Ff^|\WHt@b^ bs?g^SM(C-'M[G S>*F 3  c-hq KҶ/i/}6l ]ug=j=e?RKs2~ [غָ>i7[c4+AvDeWF-m6›]zn\ltp&}apX^Q^T-ҍyŨϤ~iSN^55޹c}畚̲RoZ9 ^&2 Am6ϣrD af{F7TTiRMϋ0u5'ⷷqeU ?)_jiAك(ؿ({H(E_흔A7T@mlyz+Uɯ=h͘`ZELkVa ֖Cvv i &U}-JzS?S'Y%KYV)bl H.i. rVVyѕ5ߐXw5(Zפ?O*=O~BUdk#C<:-h܃-q.jT{XA~6y yA46mw, Tk+Z/1O0V8yv䰢m*PsѾ$/o u<8m1ZU:o߀~Cs`TPes6ca;-vi5[ [w #:=`TA{~B9GNvnD] U;ЉJTo2e(K?uTy_\02B^vEP+w2N1 )Aj!JV柛b*$TːN{ńVj1zL"⊧8Ig9o#gJ{}C to})chcxho Fm%yˬSʟY QNUW0L$sVI)L}6ߝ@ۜzx5q_P\Z]gnyPt+NmI ԰;pjSJV=K/u_-o s e'q䣉6Wm([_-7wjL1-XM*kާ/Sr3mUAUKN9гmUнڬ Sb4zy|Tqݚ`jLǪnV* k_FXJG~F+il. B5HG7GkjK=L52_TI'zX @m|>:L+@E6esg+DCdrR|K'Δ7֚3㝰_@ LkX"/@;{gk8Nz,6Q8TuΞ7~R`ՈO8Tq} թOs7)Ӯ{ U]Z)C dpNRП2A󖈽dܡ71azɑuWFEP?EP|5*`Hƛܚ|@ڔv XxQ0Q^Dv+b&;Q;ЀE${:ơgNU`s&nոY*t|ǿ8 X26`e'fU `)iUR0~P ֣w3 Z-iFFfHHř(0hj[{ 4N նz w["hz{0,C.|CaCKX)^o⨐+ &Bn~ᆪA‹֢^! <^i~z]$/f%YZ?W}P{DzqVi^z/7}yX4ͯP*ߋ}~_a/z;}c%텭7S-VQAҺOG0sbA'oOk{Kq}k*v}˱dÒݯ4$rw pͳYsBVdjwQ\JTjvZDPb]|==[a3 .Sh}$\Lӑ  ưYgө:7rq W}wV "VN?+ܵ73(8u(@Pe;z $Dvgk{K7MO_ޘr,'4%hwA߃%FAÄGt`Ǎ.'l ViT[E]^^a>pC1(;z1{dI =5P(G~f>*QD9ߚDe[wWy[˹F9|ew!~RSy×|iѡvG`|)*^vYXU3[0߀6uBcU,TɢwzSF׳BχJ3sL>F3@נu]>N 2i o-T" U As8勭0,j >L.4hv>",Rv}Aj5\R8 -;, >J^4mE 0."o?")EfZ߰0Ȕ.xIU# ؽ$U~NsuM2 ʹAg;v|P(|لv^t{6lؗl%Qg4EE!bo|KNk=E=W0<%l7l{*Jq鰍{ !*.$ڹ/i'EݐKF X@\'W"@qx+W ;}+Kmnxa`(<[<1 y<4.9tN=פ9\-]1cc T*X&1TH΁1PnOtT<Myx8;!V '^f~+ ٶVKlY3,@U*9F2z ņ}R֓[0ϊ}x婞?IzP ac?m%g׀TᨱR2V 2s2_UV4hoƲYPpCD`R;~YXv[>顐[cx߈Iev_k>= ]iܺ[ v-?JEqP~d-q[k2v<-(bs[hP=vp ;>7U>ӂ .-]ló}M {@m=/Mxz٠iD$^HXH_l\??חL'JoȂ$Ӕ?b봗nZKLbHBP_2u#{l..8HXʟ7| K- ȑv%*$ zYIU(>=}%CtUmym1f66J#bowQAX/h?"rk֖w CT./z_w}ɕp3]$g !$= KE jK~@y @%>|o `G"$a\2j<)B= `>oB.HVHf@ n"TW)&q^ 鉗)ƕsEs "$6YM$ ;"U דCXC$lxxɐ>bF艎E`fLomF; ZHP Ŝ,vDi >s8~iv 7sY|ٶY\ ڈ凱_cʔq׼TIOBpw1d27Ph1QЌWwo8uiZVN,&@8ޢW2Ch SQo:u).q4Uߩmb/[C}t)=6xAb8T9x#'[( q|55.XXHl2!`!_۞R NkH:FQC2nl\e?/p)K;_dKƅ?Vvpؾl> ndFٯMO_`ޠKnd]q~]{qkƲh;wSV9lW ӞAtt냶i鍼+Ltbڰg.(c]€x;3}@:hXz'܋/%hp}b̴=Xnuy ZT5;aԕ dHٯTLG og 4BWD]"''VV_It´ַQĎƾm5!B\iyr_eL%#W9/_Vg14^ML3v,O4N]CizL<{l7Acht'miOߟOrF݆bEv([:rs}76in8ATu@i6qx&Ϛ$ h80Ԫ<}{hl3ӗ;:X=e?_Co͜CϷj@oeCΎcqkV])"a#t'2fiu//7[8ljHT{,vۼ iڛW J.5)k0N7QH -zóMAfnȡUp/ʲ_zGl}Y p 㶠SO!b08=ҙ9ǡ| (I.<.M'؅N泫 Az`T,Ab8uÒb炐tŽsn5/|dr:$0йU\,X}1"HgrAKmAK"9[p7퓎θah+>h+h^DMH¬;Gj=(&[\L>9TZEN9/$V{>T'" _]Dݿ ˔Fb}<mMjŁiB;Mqۗ7x?7Ϥ3N:e-\ E) 8}XPRt-}g=}x!hg=dVp=Lˏė=~Rx :w:~ ?q75 |^ve~iO֒x'|@'+ufSd}gfh8O8ӈe\UX 4W%g \"=1Vd`MujQ:lVt>N\PZE|gJ}gm~CؑPMꂟdױEoGǕgH䁭]27|3'Ubu7y,EEå(>ꉵ"rRd<^XfIy +Ǵqnb7a! SJOjbH_qa[:FηO1+.U~6yۻ(*~>r#.bD Uywcm.yZS۝c6UIzfn\SeH]iw$P.ZXk )*c$x y~G[7cGl|A JK{ej &$SVOeSvoȻS9MCY9)PH,^~.2#~0"h{ 2ZH4&qSsx ^Kڝn>7N?hcڞz Zi[x >Cwqy<wǂsoyr66ohd>}v- k+-1 9%SlWvhaKÝFRkdB0VM,W7bp^E i f6)yVF#Y \ЦJ@H|Q3^ r ~ojm5 w=mq[0F@@#~jr~sHpD8t?h۴pSk~8zMHafݤf;q38bYErLڷ_6 CBF9D79ԛ8M'Lr 9FOx"K[Jn'r^4{wcI_Or/:?=!(9Nx"<BTܔ8Bb PDҧm7ep&wH~7nܼTȴqziw}DzAOxD>8D = mGwU[,8߷i.z85ĒbG/?[DΜ_]H>Kz"i(”H%Öb~x'ӟgWiWYIAͤwwb<9o_TInW`^жE^Zrur~C> jv {R]CUDf^/EǤ;_6"gcffx\ C'P^\$[ɷ,dkSOH,scAi~&<}K ~L:Y^b ;qMZzo.N5^Zvt"0FsD]B6E3^EE?/[ZR {BB7:~@dCWuX`.ϕ)d@XD$Tž^L4oU*0WFݸc+ފt,#[nIOڷUŮ8)MRu] *rJb?AȰU]ƎqM|++ @(/u+N(=G"(gdNOCtVPZʖ+ dA;ͻAु;l(/p>ѭ @&RLR/qJ%255g~^a ܆&IFNqp8nW i3"_SgKEMJ[{A*}N37SY}ƞ 4*vϪߜ&}rf颧CD;nKӥކgDJ;8-er|EL^{Kmv@/|W1+<^|_5vIs8B%EPH% S=n~ 7AKb{}(E=M^~/cH%3KJIlZDa MzJ@g]~D4֕^)W,UXp3>X AVuuRIoawéᒢRM08}p7*xsv> D3VF\,!A!8笠m:r%S?sn{4S*YgIRޞ{( _@85`} {jfx/E5^V3^ƩIa.bqkkEJo'NW˵Roaϗy[N5FݻY*OhO_}é,s |5-e:ps_t閟 XڳRp-L?Q ?Mͭ^֢=sK@׍״SViT#WL~@,ɠeJaQ!e)MTOB2t~wW >"ri(%m'ྷaay u~ږ]9jU?Q!,E]}/s~a=#2a.N;Uw+(P:ـ쿓/npdZ~?|ૺ~b7ڕ lo쿽4V h1Lxa$uĭ,VdZr7a ib'Kq Fpsa*q J=k/X=$.nxY f%f?סmldPbJ6nX-^K weEAg#/ vԊE?Cљn:gg,CL^ "L:&Aۼ7`?`"dڪ$6>w`RaX,BR;1Wx,ZWzcGw[ }L&gWŅ9$Fܫ_8CͩO]8f\:{% r= Otnֲ"^߈YX8@ӋE7*,vzf=:6zqhc"NyG'O=IOp:w_S@V8\vqOЊJS-K{d=%iY~cVj)t@|%Cz0qò!'fjxF}Z$3k8JL)WG$q^n&dD0hϢ4x{^pDVߕ u^b~ E`֍XeAk6c UB7~\sUJ g4NNūG 7I,uUtE*nL kJ6 > d{eIt8bNqQf\ˇ1z\}h牸W+q@t!zK^@,:}ovͻT>a fAIFZR{V "-ݳ߆WݗkN44D; .>ͫ\T=; ^%[7{k?EVp/99NT[N.ĵpuAGpM抗z?7u ӼMr눆}\uk&_gݸ[ߛ9G*7=2 PÑUB_5voo :5qgyL?6])sqԜbɸ\?I7 I5Bz*~PS}oEmEĝrm=^k IW0}p=1AqJNH8;dPT7$B?h¥E@ 1gN쿭ZwF}LiD[z+wp m85@BkhGL^3uuB#@ӱ+ kqnN ;`VC -VNQڊ3%xCA޿"e"]gܛޗ1H[7/,J :\dÉq\{0G:4= Qt;ǍQt8~k?)L D[a C{ [CW`mBIJ IC haJ-<1(!uGiAt"jN}hde㾗H7ool> 42R_2efqHO 0pFWNm]Fg5MX1S\P<7C1\l߀Q^`|5O n%MI (\.;i^zO7- 3~ 'hPx[f,q!op-t9Ax6ж[PCJӡ=ݰ.̠xbzm O*Y$[ njjh>mӸa^ޞD|}vk ^"ƬEEcm,Eo{ )Bs=-f;XHE/w G:Ra]kWD(B'.~iNj5"lC<} ?RE #,3 IW'=$&r%Ȓ;_g;:^p6ŽJ[hq0#NUN)oPwOM&f ?(*ܱ ~7ϹAQ.3ŽUP5{ #<)޻AxU,qY5j2).h/Mz ڿ+ WݐMyckm3S}ꒋ=ҙgw{Rs{fg.IFH &'|Ao3!dsR.qH/v7JCq~<L"tYe}*u6vEx[A=̩M|H[u @qrs )Ϊ׹Zώfvt?aR~c}5,W0mS=z3z3>!1BcHC)Bgk: s$hzqIJ;+ Iź7y% 05 3切{^8a2—B#g籵Q> *C鸦Egz/poyE @4/YF~ͯN=ur7uҞH>&i(nzwf5ZJ1?:)feT{U]_"i='f>yiVڻA{Ha6N ;D^mAң.gZ;o/N|w~ނwB<нmy}֝Ǹ=phs=d"+pѻQc@S`D7Nnm]#.`+-^CSwNpҁOĮ( :/׾5Ox~푬Ꙭe}iRá: UXL}3F3ggcŏжt˘;^ƽ5;V7͟ԭfMϓ:EZC t1ꂈsx~>邱0[yU}q=H/tMM )nb%M1{k lb(6zNޟvKFhWj/gH=+Aotg^vT"jii%vVAz̛>IJ *d>`u= $ZVx|Z^jTZeJT!`ʊ8բ|;0^4B"s#깞xzY9}Ҍ|*HV;_{hߊɄudW:_ tryJ,pKllT7yV8ES-ZQIÈ qZ|xu{K5̞AP6Uv*gPf%2 x}aQaKG}؉ Ơ|y:@QҺދU8 $Wj<}.}6ű~k>|w_:͎~an5B(}^b.m_ӋDgZe~@^N޴%Zl V?]3}27,(.〚Y&w){nن'0bW*@pAOAK%a?0Pݠ,՝”/&ۿ RyrKwy^ P#ZM;a҃ypaq' çAވ*#R="_ ®*$X߾L\/uEkm(ngQЙqRCnG*ZD(l޻sTx~oa0 LztI"8۳>t&HT+qIIh @ТhLOeStj4R*c9طj*/ $= AJPhͿD쯀j{hx!otL  OJ_#$Fy8_?M5 >0NH`1Yd567/v:O<x:N2w-"ouE?([)_gիvY ~R$rC _>Vw2mۂ<Ѓ`Е+I̡ !'"a_Pe[BM#3<[<;gXRx,ܛ=ٙ+#FE4~ȔanbРBST*,^pVv3s=yM8`Sz u$)P͙d}T}8iW;KS[[>U$vE!ѥ-_ `DKI%>@E8K>d ӗ`ՊRȉqj5g:~ sK=_f6l}󡠩J`kjZ%D>|oI9CnaQK}@jb&~j̦5z"9X1ƀl1.asHęGIͷERnq36~j-O}/|!M=ތ ADfR'gyx*m߻?, nFmܺήcE'0$24f"=c=ߢTV%l89lnկ{P+2YUI^bn4.8I|kH(~)0O/:J5X5NKk*vxA `Z]򼚭-Kr "@a2s4μ'mH03{>,}ƎVowL:@R@鿁W4JbI_S-0Ioz] ЋJ3p Ӌl׋XUit t{ַQD/1u0<?g:P=}? 5TM0{hm@n;(C[86p-Nzox* !Ὃi,!(U:5zl-f5Zo3{r񃊄7CV{ yi`z 3CekFϴn6  =8ɣW;<T3C~~׉R{=dM/?rR6j}4"rZ.؃tpNQR{`@W tZ@w YDmh%R]tY3 vYiؑ/~rzILR~*COxwcA^7Ϝْ*gpFez)<2e)qlܟ̣\ܿsJ=DJɜ%R2\Sk Nv4{]R؟6sUo`PIy*&piIƗ@Br-M=WX(u6,\>ŲnZ>Cvv8!$ֺ\,i5ʏ j~\y{(u NhOQABDq۽oo;dMv*)xu2؆6YCA $MA(OZ̠P8CC_Z]oҩPC0D4Wp~L󥛃Гێ*'t>Rg eK3:JJİ,j¤[5D*ā?c 帘j|bt6/,TM!A}2] Ǯ+H^+6DgЊDX*@<ϟ+6ƹ|,V KUW 5'Y5>ܫїFDVq5a*TGc#[=AC:UB+j+JB˷gw"=~+9¶Sn«'O hٟ")3 ufa4*GO8CR.Ͻe= /%+8@;_NsFIesn]&gN*W#rЃ؃*z{6Y5o4yIIg۴߼#+ttWD+auٳ!5 a4H0XUhmSNYIg^ZuWj~&~NM{K;ap S H^d{q- >xr&T@z AkLݞ[؃/s7Y@iOX$hmn(n(,60årsكV7a3P 3 zxS<n,"?Hq*?z`g(iO2Txnν}d ;3fy4.E\ehMj xYԘ ǮkPEG[mܦf4K RnO.El.=ŸlD:VMX駁ٟOz쌝8B A| 7:EǢe6TÈJ|EhlyǦhn8_ xT(U֕Cxls{5h%Ġ? 7=^9b,祧J~L|Z,0mwX5fAX-M[Tyw5D%?ruZ_N10G WmF}6Rq_qb6zB}q\r{~P۝V8 <@|VWx\0ێKe.]DÈ(.3r":Uw=>^qoQ %Ba: ][瀞PgsLԬY{ tΧ'hkQH57pX$.'з[햎xZ#/AW@MHl-{=&E'lg{Ɍ^gv5j qUT'`D&+u(qnIޕD#{]IP#2%U5(Pa,YL$BiFuRA[!!PmǪonZ;1H>G^Kdla7`]=5bOshMC0:?]HVL*%|joA kws[UriKw&Y ާ{*Cv.}y5$+zָT|>B`.cLFΈ `Zx*ǰn%TӰ]::կB{oG,|1p!W+3^! `di0hc7ۏC &[NJ!zb%B9fʔC^EuJƹ=6/8mc7D a{ǽZ#*=^ϟž(,ݙr|P:_F0]$|>JNue+m="nE a)RG =7.rU> $|>IOT=JAZu07NMQ,2uԾ0Ӏp+S'` jRb-0{e=B/$(%"Om7=Ζ?ЅsOaK]/5wB:ZgnZ^HWm]\%ġ I!.hlz(xrɩj_n"!A~>%_OE:.}AB:/T4}0&yEC6ZMǹIuA nabj=N}Jm&&Sj#L{ p}Tvk rqy,Ҕ~XU3J]:)b9 mw@JI!ެmvͪxu6(9N|)P\ dj9F'tl'Kq4ku{ yqb;xZ!7[ʄ~¬Gxu5r]DELͨddZmgдpEne/fQZH VV:2M!>m/wgіł{fǑJAQX6\@@ЛW (tZn/--MTgr{У>w}; Ҵj\jag`u|7TjJA=U#2LDWH2aoϼ RwZ{)9LCsSW X.Y+m9 SxAc\ fSMmICc/ؙN%r|[}FoPzm;+uzD{AUz\j#ƿ- <9Ņu}2(TC$^{^.]@)aV* 62F}";ɽ'LM8R%B_fVQȺw ENG->wsP-;ji"A/j",q@jV*Zn' |m/嵐<>bݐCٗ0px6f$F!XZ7*fY\mM= VR2:}U(C~"րp{"M0^z\F9XԹm1{5boղ<l6Ź(z ƹƥ:(Ÿ"ee7xʐgWz}2P\[FRk Ѓ@JG~2 ̡1%"@C-yk@-{} npqFc븿f^ȀBϧ+73M 9 ]É?(Z v,㬧P<[ًgğhtN!dĞw^ajmwV:W #4KBD􌫽q=e.&`^`wP,d/Gh/t ^-8q{4g8JsBmCڗC$ uTtA~kWjq^nk% W}!J =h2ݮ>1|"Zw-%ܻ|TR.NjY -Y`c"]{!c]Ne <@&V:B/YZ J5,YoϐYv,,%Z"_^–iBD5l^ ޫ@FJlOu)m?0TWfȤ`XV,qBP[TF^#{_TdQn"]ȤݲQδXX"TDlP[cFϼB5_9=Tza\j L8U2/BU`TIZw˴!c0A‡Mq$0 r4Ǩא!E$k[r c|Zu&+.g+BI=%E)jPYڸnPBD@ǚtTwJj=jKlqfq,(?zQ<(yQ[+59x9~P\}7֫ߦtzQWY-N  {=HlAd 5^4*Ҙ0t)eV.4aR~[/Vz|9y"(+IU1*';H8vb|uψ=w@q|KN[o&:8%V;.Hymjh:!Zw+Y ,{r.C<O/fm6=V j`Q4H|. +r*P87u䄓F[BvKOoޏJ^ ?5KQ:tj:|ޘ6֊턳l:/*X6=;A-VCַoBZI,2|޿zzPv4L{O=bC$ I"M=Gl6ދ=dڪzJ}0acvR@ gY] D5FixVg拇*سԖ^6/>M]b%Tp J *x=7Hjk`eFV{}ETcTfUDzلో^/Ub7b>č3 -oW8P?{\>ag^౒Tz6 _ N|Q96؆l[ax΁&Cz#6Oȩ$X Cps8C{"z>pCQ1\X|@dǬΔgvCVI+R1 "PJ(VSNS5x6{nC$uW0;ۋU_cmƃC^MJNbTxo4:PV?i Ds}n2=ϩefc(ɬGiN9z% K}wsðbXEzE ? dXcܫ)w:`<xA '|> A]NF W57<4NP̬>[ɖj8̧rI-`ɡMGPzgqC/D4/'{~6K<6^L!+RO=nwtЃ``Gc D6*+:j g[{?R2,$MF^ow_`mxyLJ)` Cϋ5ZB EX3%(VV+BV3[~6XXx/PH?X/sb)%PC0(>̗Ck0A+YZ+ ef?,\a'yDǝh fiqUYcA~24\1"=>%˵Z{[1 n yJbF35l'H u5_/c=[238:$HЃ*SbB=thvh$Q=U8͚fT`m^iOz8"CAG*h \=t{8< *(/v52mLr>;W%0<m(^};f%.J#h&U7x恈b:T`K^MXh ꛔ *v$OS=i7e2*D*Ք?<@}[?Qm~S4(jo)o55hA&.!AH˕̍ ["bޱdcz2Wٴ}yZh"Gƹ:kd0K_JyGyyE<^iA8 3 JP˻A٦$x$+_f3%/H0@~c`+evd %Sy1{#꭫苶ksv |_\F߂ƯJȧ}fz9ioU;R d Ԝ7uv4g"!`>Z-&)J#RcTla ЫOa'*P!7a䈳^nlnًGLܚ9[,my}B|8^BM z_ ̧U!6<RkuD5R_ۃjbG y틭0XSѕkӵx1/en}mPN Ţ[3,@ۿ5h##8,}Gۨ%*^Į,|RӎWE;P7Oڢ`J7oL&OAN^*-oRP:fAs{[|ϴ+hl&K WW7%';P<AG/_O'Pi`mo!i[Vc zwL\>APZF;I )͡mv"C'X_)߶^XGH&@*)PEX`n\zYE^ $+v7Y倫P .R,9iQ(9f UwkFZT% Y20~}U07Q v"tWPp-vQ/{m|M8ZdN'[` sO/VGD}_ Hnd?1"k3ڳ)@J=f{q ؃2 ;wdYXJ G4:b.67^2^Yr:.TpV8#mC{nzFO@ MwA.K9 ^اRO#[@4u}3{:k3n7 5{Ezf7lzqcxpB|{].V Л]ͬJ6=hF9E}u%&OjvU ^fdJ ۃ*pvgXۂAS t^{7B5B~'l_SaN *_B>WHMUIڷKib,I7oaPE+ܰ6\ɥԃ àvQ*S,/^0.ZET[~N36?( (寽JQ>v9js&EV4\C7D M_Fe6cT)Q'cS5{yKvP 4b,y-5,*+2 0{P({|a2ʣ&eۅ>?+>pC1TB0_T> l9_tAQEOZSmeM6tc+Qt^5d1͓AM=BuVc`Dlá-//x{Y6hE'pǵpX\t*u{3_h-mT% nYM~4q>mM/ّHjhԎOi}mhPVS 4힗*OI=.\Px7dˏq:`&b'?sXa葚fo@4JۃR?B'+I8}SlPK+P7갃cvY6hjG7qŤᩕz|g 4Fy^epB>>B5Jb̯3uqy9cgZ:"f;T`{0 P_ѫ/B_\4:8wU,m+f+|T ٨5bo4geGV.n]o/*w Vhǘ l=ڃT<j=tj 01.Uw'5r۷$?(SJ˿iWDd`>I6aGZUM3`YuY4gCLX$e ߄UN6ҿS&¢聰^0ZS@?t T&.DO$@EИ!Jp)Nk*"KE4N~G} LQ >^_A(R_qvҴj% _KfouΫ`q("u{F=Oa @_ixLAృ_(BTJe8NJZ<`yzfW6ST#:4@D`=SQ񆏭{X<2ťAb ɗI 2=|>|o: ?3m\A!27K@65}c'QiA 5ڔ\?j{ wx"_+cHL!aFN0$@J"|ޕʅ:|)/)tS(ӂl ){ݿ(rx;GC'+\-q@;bНZywckku#`y2O,nmmF/+UvmQCg As25Ϗؕk|\ EE2IgTM_chF#˽IL{\^N۽o"Oc):tIa,&P8 F QGE{r,~Ăn$+6{h)<,/v&1Vr`GOS65aoQ^&Ep (s;f&6hK40]v! ScLmUc3Q:[dkP}S,gvuT]I!Eqi%P_3#D 4zS"J@-Lq KM)P:@,ER ֩]BgQ*'h@Ud[*Dw[j;0o߱ Sڑxa B*€)X53`ETl{v4o3+xz-} qg"="CGFޠQ h=' E\X D#jhè'_A<#J\cb3pqLugJvmFfdKZL }S}!qJiñyvpCAYB[D[rU`c6ӷMC|kN] _m7*P$ Vϭ’wCm:{(9N^QɊ3{TP١h;@a83!`D?[f;I`Y\0GЏ79Z!, Қ,v}>IC)K^b XIS."PKueӫ[Nd?OmY[\ $C|D9!fJv !'oM3_4B%1\Ӿr/)a ?DxC_⹜ d'^?Fq֜, ݈ɤYjlԪ5,sL\Օ+zx^hXlxTU*};Ovm*5=!N3؇ȱ,@&ؐ<t)chav2Q{A i;eghC ٯSuqeȆ2Lϟ aȏ'e[ A޺VPW*QG$1,y-J/.esB$ZiX`$5TZP2'|i*FU[|l!j{lGM/Idhf~zLT(u/vz*b)b9~ mt.+[&.2uMɮ3!?Y0_jgP![qأן'=]U%+ [ζg 1i釣3pt2]',> d#zb@R PXЗ798~olm@,Ǡq w:`' e1=q{Q9p0hQhzn@Y0qWĩdMJKZNj_u$._m?aG"KgC н|HFSJU)'w,-)MI7!\]tܮBqd2"8?@gS !,{ Tj9oR:{ ֝! `ؓŎ{ǨŤ!3e>" pCmcoդ $9aۤ y#,HY`L@=4L6ƜIN({xB8 ^  :?vmrqYoIf0J*%%w|o#όa뇽hLDNr^ ŧBKX*!դ9g[+,=L&"PE\U @"߉h4EFcOh=3.!sGC5_m=,~1pz/UL\P[G>puFf;a% E5V暑wPQGA7K[TPY{[աTzȪ7%3o0V7h ׊GG].! vnH@II;B˔@Uq|ԱmC{݊FNH|͚9m`jD-NDAXhٔPzfCZCȐx^)B/Y`l­S>jge)|A&T|+B0hB(d)c MbgәOסqހyBN Um-H^/`괺XFVu/F-(wAo0 *4]{y QpQ)}~H| v14 ݞ~bds=B] t3 ]F~ ɶzhQK5y ܃*`1` P[y"J^%{iʟb}[xuc&辍j=zNJX(cJtr/ u q?mpkhyXZft}`V%Wg+Q#ӾVB@bKdlI,ʷ٘mZ!ߏoT }F=q$TmО)v/妐G,K[ EZh;sj~o\jkQhvK<J-x &WOrEʴKbQg]zETpԥ@OR#A)n݈X;TRGMV/w *iUW`ZνU, 5SǷ.|)!`7W@pWλ,-b.&T㰷"YcGFncQA={\jQkmV= =zC۽S#u_,fUP:t']f(`#K*_|Ū=T*2X^Q@YrIq/zsZپGe:`<`: hYǓDKA' ɐ8Q'L =Țʮ sz@tr'QoGtpHF&X6#V9 i E@$e+:7mZl<#T)ݲ߹+/jhyCxwDuz`3" /rGMomT_-Ci>`{OgqzQ~ Y*~o0;c7m?e}j^v$J\^1Kac0EwH _蔗Y(oP/I{%ub~il?58ωl]+Ѻcgo`zQ?l*ޱ?[#Tm YNb{;'ڼ @ܰ4aFhU'H ~ϩ&lx]Z@ׁ8ID G?8Mc%\1[ I0-ోnx$-7—=M^eX9d$Kdˋ}lT H=qT9#76`ΐޛYc 葚s~*[a[OH,ZV6ASNm4:@i؈#h 5kI30˲ޖ>/@JmO1O$0cZOx5 _mG΅AF=V*1FO.c+Sqѵ<:)QՈS Omj=>1?].Viv<ǡԦ1؆@zakml5 WJ`700R|7U+o/43,9[2=n>>CLk9N\aa&-#C}g<@mNGny!1U5?%yZlͥeQ aX֋(דX[ w=IJԯY3tx((H*z{ò5j7߲$aԳ&ݽa._}1tS7 OΣ]gܾΐ薿m@SO|0@'۪iM~c5\+Z)VB^|U -}b zjhESO I\1󿳾iX/b !nߜ->:%': Φ8)Ū-܁@QG`|dI:_UE]o(#az]^xFr}JݮA`IM ʳqOlZK2%}kwuY'LN1Uu#_Ɛ_Ξ{.Ɖr؃Q$imOTFQsK %ZEv½2/HSr^7 w^"8oD9B؆. ZOvdL]_J mp6ԏP!oE'>a jmoxi5!)zj(>ɵ9X4b4ZE >aނ=tai>e56}@D{-5X-m!qdϧpԪݴ\u4 =\9m%GR+j7`,AI}c8-Z#tް_$i%]jb(OXWu6gGV#gFYBS7*fOg >hA;W~3ˈ#/R!>xe iHmwev[qE^@\mggi֣y`߈~,/M f<"ޟ/@UGh _gh#CBșWS25)!^`ћe=v_~0ֈ\DĤm=B X9sJg%;z1jo|Ar>xT+H?P !]I2$^>~kr=+ԃ6O'nA[ 1ɏ,cE*R׫3'[]I K+qow`],}QϗDj "T=Yj!BŇ.U"0Ũ%;BU6iVW#^{kTHqCN !\6Ɛ`Hq[i;IdO|E >%B`($r x+~s%A ,P|;|V=YWuE;#V"7\ `(\|v&a OwsaQut, RS@0)%$É?؟ 2>VCK4#[V!r/ 5}\;ʘ 1>PoɥjeeJkະ#b놸p00*;~S#Cl5QcVe*$7/tO.\k_,HG#AgbЎG}[Y '"D瑁o6.G{R;oU/ }⼄\zBCK"O;DnOLz&2j4!9,!`f؛d˖X}&ҫ] |Wص?RTedzUMuS;hxn>?ug7FW%%YwUvѤ4ak垑oE& MJKj*8Reb{0h_WWBs\e/<*'O+ ¶au{b0U4*Ih%HN(i)7j{-4_ƥUBVOm*zDj %ӢtjD}q"F3 Q aZDB6*`sv^ Fǩ_CS"}aۀ.T#8i~|36Drd,&LkkS7oIGJ] "?gܘ帆LpI? : ox肶a !/86 l]boaP%T}8:7o*:u^ī~;x=> ԢqgĞ"tEqOSvءU>|{nTjjIo'|1'j3d3'쒶#\Q D{.]Ŗ7&E'ra%@p$vN:3[Dyc@S^XtG&v+=lmV?ݻ0DH]b-M7st0\RV[4>$/ֽ[ ӸDPͽw m6?",9`M})'ӭnm:TdA Kc5޸LEF>_Nǣf([3s.wD=גuue 0LbS˜ >|}ßB`@4{̷ !6]uL=uz+]a-\ҿ6{K?7~7 =*rN!ڼ5z8$H+UqlwLM£Fm\zNe7oacl 8܉E, n͑λ=Qf<~]Z.{W>)-ǒ63QyNзV{SCtۮ.^/wΖ#}W 9[߾g Ѡe%CRTUFdA[[gƬT^Λ_\xxn(k6RHaX  ttQo/nTAaf\kZ܉q%]UʶunYSbڠ+:.APHѝHv}<ΰ]uwF0nk Ǟfq¤If+n"`F*R8wbtNÉ23ڛjZ"]"1I}sԕ\Pxc]"xchDZKFL,:czʐBQ#UR}z C|'4> v{gQh;Zf:YTD!; 罙b;DTy>.}%]Y5,WPpђB>FB&)@٣>mݳpWWI\ܨx{dمS1=1K3VZC'6$҆L/+Qs CЌZƟLo.3{V,|L( 'j_bĕjM;0mBQn{ԛdS TbҦu&?u;m1GƏy^/(gFq˞(Nac鮚م5a|e#:IXRY}QBZѳ\?hX22۩!P.Ms<<:*i-CRjlEXԤo⌧(;/i4i:V}gAiP;ʉ= 6~NNgE4MۥYMDYJT&0SF% wݫ0o]zm_P'}+4ZnrU|ᄬ'ם[ڳQoލ&|]Tj+F w\Z[tÊ ڿBl@ :OSYue )>p 򬂛ZRĴ=6 /eS7?OnG<àZT|.OwJ=-lo۰!ƙ?XY.F3F +E'=Ԥ| Ͼ>\Q^]a2/ ]xX[jm+ [lGv[0֐"[do5t7捭Am~ÜuFSJ=ׄLqoJ3҂Tܮw"9LlD!?~ox31+b>kZ(k)%*|w\[pHtweTL̻vQoT » [oUU4ڥK 7MRTFPdM-•w4R8YPZa~Ö rF ;7xk3?{c-37_NwɛRa%淽#/m"hSxEyZ+N{B|(L>d淭#Ω!' o7[Sco5?rF:`_N-Զ/t[#iC-[|-XC ^X9AD_5AN|ƴ’PbtT|f=R[ͬ/A[ !~N=OYBzeTy?$+ ON¼y ҳ uǞ,?)oLMo& ${EEZ(ntI31`׆w )>纘M+ li(Im;B`;qGʞ[/kIRh_2P^~"J[j|DyaM P|w&);Tծ/m∁[|F,ڜ#!VhoSd#{/Fր@0n:/T"+om>$D|N |DŽPOsW鯹_^^FtھU%k_K0!S,n Z_WٶgEh{42_a~wtkx5-V2>1/oiʟ?,lRPkDokT|6J -A'0%UYV†݅OC^>`Szcbo֡)G޳}YĪ~kZ ↼7p 1xm4"J`i3npѐq.k)l']7sL?vi+{{y Vz =˾a*s|q۸\=<2QUEpAaf;AH2a.򴋐qA/: Լ+ )qfiUrsgoL L_tt#}26GCq.UkSaw,8 [!Kgڍq+ŋsVlNPqMe=uX{,&F 0 DhMλeP8S s+Nd ,ōHTyxa8f7$7F ̧S\Շ%#iN'SY_DEIR2uƧ9wCdT5fU<ևn<~] ߹ YLӑu\s uhd]onY3I6M!}t{lЊ%9VْEx<|w8v;,|V[ (7|S {7ᄮ"7)k_+O B)z 6):k?rOꆏgnqOt hӉ`h9|Nth$+Nֻ*]*>mB{Yd ]OÖcYy֐5 OOdLYbTy-HzZcpà!@l^۩E4ۇ]'=k ѵQcnޭR$;TPM9VGg- '!Wk}>62cʒ2ŵ2u|w7DG)KK $jvCDoF/G}S_*Ƈ?2.) Fg(kHaѪH5b ؄I h4J D`ul~wTh#qjH' 0cLk}U]Jq0<({wC=t{>/ :Φ ̍yǒ>6 hLQ?+ Inm~yEuY耩d>Ҋ`6=M>A=E3pE5z_.so6hn/1 =1f˩dej=@?\]A :3f6c ᢱ e!su}SuMl,ڧ>Z";N~S5>zYq@NT9W/Sw{ؓ-umO%k?:|޿ j1mC@`ۺ-A7"y}tLw搃AçM,-6T `+SpBTS^ \A $JczD8vk5ƒCTdBio썙[h9/Ģ]zdl!`fOGwH=V*lOl k2k1,AY6 A O}Z- % Mȇ`g A=P:1C 4{h>e\]A K\. x8C gQo7irI~5/:^|{ǝY7;}`G비UDnv ːZ;6jh I 虈u JO "@-Ժ@Nlht@zK6Z=`3]I6m|ʻN)YĮdA yK.6ƀ#ƥ[x BF } _lG*o:B!֨_H~R6~S ?G9ۣ=B[9mya3Ҝ!VS A(fBA:Zoo,AKfVr6b̹_E-.R%?Y)vOA1[es9]f yѾ;lsKzg%+z |V$jᕜ$F6BV'ktwV\RQXڟ{P~iʞU $o"L+R+ږTxK+˯MԞQH鿵?VeR_$KXzNd*',޴*R۽_/h3۱Ta@kL؉ΐI,ȆZ <zY%Htb"v+G e;t(.sC;'P5 |O}]u7:d",wQO'qѠ6-ҹ4\ctqGIj㘦(pCE?9ى:c2c#n(*ΥMJg7d)hc_Pk_:~5oQ${B؍LAYv-rƱ@&v!$12.bedܲ>w-̿C||ra.xf8}"Qw)ZZE5B,b\3k'ZAF"A}NJdܘ, %BhXsY4څ2vT sS4y9)ʨQϟUy62/ $hȝh6204AXS] 7i@ lkrweFgb{BB3fV0 J" dawtcVxqCG"Fс¡g&UȞ/@($,\rcuxǮnO62OrRjEZ>py z_*A>R-oV犏͞-U=b$o[$/` fw5+^rڬ *@ x;Z~vC }nGb}HbiP8eHgatҁ\d!5D#O8k{͊=_Ĕ?k zM8G9>={7FQuD&,V}b҅`?!Ya̩r_)26$&>Sig)y P&S8Rt̞spZaV\-)\*i"pC1yS1֟F^NdXyfW%>`,\2)YcnH:c O SQPN<|'f:y|^΍X&(Z8л8~Ю:Nu[ƺ-X5TyahêŅCMy+>-4|\:g/ao)YT`;dSg=u}Ɏo5DS.8e8[',8z\`"]bz VOb5kJv@AaajWش=C X{ W'k @]NE~u#'~Ktv@$RV L{"HڳmAY]nfUT￈5}6.) ,]8M`I Vp"I.['VãĀs6U.@Kdm o V Ѯ|`{OK+>cI'6߹ Mu7z{Ѣq/Aڢ ´\^ Cy%N6XA#EVD5 *\?@jڋs֦~GvЃSg=[?Ty,EH q9h C7_xBMTmqڛªv K.=z1=fKz>kqVJJru`u/Xd_g;=Xdn!do4IIg/eU肵%XFIqV.gг.9}**Y,@;QVl#=;vRq`hI)ac-u:,gHF96T=*" Rf50m r\7@EA]9B_MGXqqODyRB#i Y'2E0"q^sZCǞ|u,>.w^Gq(w/%Gu~楘0qӍ Vn:'t{z8I$)Q|!NkKޛD<|'J$umYd7ֿ݄$?? `&Qh澊]I)xdb:|! rґ֊%̓"!XCb ƠJ-yO>r:%F-qs e$ +[Cc*ioRҴM[ﴆ`PaG65T?JO:\5}gL|Y3 &F. s}`TKj-wIsXe17?j>bV%5 dDz< P[Rp7c|.(_|RB #$R=AB$ȍ%T`V8Ym4Q^Sa$$Swma+b ̏`:IwⴿmBރa<{;2` 3ժ`?u׮ˋdNE)S/\~zN |Ok='Y!88q39FugI'3uWy,C2V)4qr iIYpgMs>(U [8F/߫> vyH"ED<2f}Dd#,X3KÿYZ%%8KA{2quQ쿪+^e.dnԧKZqO5~2[7}j%TJZ= %oDқ1*<UHt}B.-Q<ʡ'N)' k; ?~ڻխJ Ul#5BEC1Q D@pU#tU?r-{+bz=q#A95gHbJ>  Ԉ} KZFٯ{5;}͉֜$# s)ztu8ALٝ>]ZzBʾZo|I 1DD1FG>k%TL\DϛHԜV"JQDˡZq#pϻı h)Ⱦ=Qu=rF}o 9(U:lr 7cV՚ oOV{Pڡ?Sl{j })Jvץ)/jdnKDɻxxO%Hä{FJXUjSwI0nРePYe?o*3 }<e?ߧrkˠwL|t>EMyp4"rvw`RBRn$;qi5گKn6^ :K}U!:j$9z,H(N [tP|[x2/gDmWÃ:97iVk<~xjیdb;DZ_7B{3E~+gV/s~-#5^׳Y\g[0{OWqckiu4#sE/qz?AH&e~B{=l|I>a֕s8UzgAo'kqRU¦H_ZIcxtJ: 5qjM5\_ =&nGi*3ֶ^#k)`+$o؊ivx/dF .?AX=CBU'oA-TGW=-{zk{ e.ܮuM@$3)KE t>?`4~xTug,Sl_'?)Iah(ka ΋7a~Vd?GfWkퟫ= Xh.$3'TEx~G'B׃ R2inZ 3'O\@w9GFT6!3w- P8at# {0.w e":QQ YgjV,{QH#+ޗe*>8UZ6l)T`Y2T@H!g<Թ<=@Voq;k>d'9~_CJ}UF%`_dfE|XÇM{z9U_ܙ#*z&odpy2A*;0 k5?h3:d {)$!=MӤTLMlͫ'PO; tYa%ߣ!KdGm8E@LWc}/khH0d_ {9B*+ϲeZO}#3. {/2CoE4_NܱV)U'ƐD4y}&aBsnVI-DCFsNS+DCl1Y]'Q賧 Uo7! .Y)_Ex AEB6!UQ9U>8=,zccWP~M䅷Y˿UO1rZUpkE}rxtʧcX1KmhWu0f٢< 1TpCfܱԕgu `L &yvop81&Gv|8eBJx_&2aWi o.U^\a,5? ݊lG|!ױwg/Hxo݀Fm5 tt9p~^%; lPqxuu$;' x= 7@7 xu9e`Gcu.qy[S{(Q~S#qN3S]!ԓ^?QwWU/kNXbܤa>]qk\+<)NS@'}$\D#K'8EXn34qBmo0@P>/yD~7)O7 n05h 49.p+x-TA!+n 0|Wq=/-GRkD޾''Us|\stHKA5͋1y {Q׌3x0[\\~o85/گ+|1 g+׬^ܓk |YiiQ>',FC5&/IfM\ /bXx\&SoLEvM52sٿO" MA2jxWp$i ՈgGD%FsG HUL{o=NxI*pnI#yݐ)j~3BOcuS փ&xD*2.2HF#CHG<\Z!ClLM˱O)gKvAXZ@QbBUaM'^x!(bibpmM?ԗ-Zjs:[v,#سUR/Vo֮ <}o$KRѼ0oj&1JEc%h_*,GΏ-K7vj>E0CtM=B]w)Sy@[cQJj43=Opz?/+\]}jYyO˯[ݮYmWm`AtSJS\3rpji%aUdEkwRUӰ|{,q}:Qbl=>@'a`zuT?6𱶹XL~Uub},Fޏrvl <,2A4*aLWf;TrIr,$נ]~hmg>C0͉ߒS4N$i/ݞyfɥr4$<8JdPإ`-Rn;D9kiOwd_' M[}znI4lW&ⓓ{t}f]ȭ_wن\ۿod$rgEl\.@V'gƢۤοdU}$81cuҕe hB;g  g9+Uqmu*Ճ+%Eݭ!^ޓA!WV~p1U#u}[z]m?u)/M4w T>`tSY+or#Mѽ GHN` ]iD)\%N=E+]4u9Ԕ-w{ ;F.x ޗbwZS՚r1:bŬ bcTzdVesK FOV'M]񁌼]t֞yčdDTjշi`5{Kd#P,#߄eSS8n;pE<<Ҥ5eNhuHGl/) NCf`:A >Yn UI%{9j~b}^Zy@rz{u*q#Nk}TBךK\c^X;XMB[\sM~?$T tWBwQ 2Pp+#Bonu]T-c+nj=nv~?A䁸s߇D#1ZJĽG Fvĩ$>ZC,߈W> Q6R0 !{GBZc; ?+jt)Y3-qPRhAx8S}l 7a"t< !fu5#6QGA3Ldd꺈dn4O*^\C7}t02ҫ8sc}ָ ֵowbCzo|nJ QU]fG僳s(+@IջXCJ 8H+g}+|~s]őPx0#>T {M _Rai'9 <;nuH$&tG`B]8'Hs7y].pg'w4G^WmX<d*+b擔eijɊ+wQ=2aVw@S XxۼYb۫R#C!YOP߱h*(I@; V`萈HBHc$ZվlQPC{&^&} PwS?E50*pŘŃ`kRr6ԡ:[B{~G߬)S>CNO9YEGϳՃA %e Zf#g22'.T/="/%R9=/6NI?H<gZ\ 1YPaz}$X jFp`duTO`葅LLU0KS=5Div^'қE כl=*nt |q R}sGht4iLGCk ˠ/pK fĊe'9T  GU} pogb CUqV܇jߋ6P.վqW D$[{y ce.DNUgXR}'/ 2f +3M' 潛j_O}s 6D hS4յ:޴lg_ng5l |=kۥynC Ajf[XQ/ D]bfDͨ\0i_g77kJ($q!)#8#Sx>-(Et#JOF?h_BEV >!Ϭ dY)Oܷ#Qb_?:Ҵ847mT@ P'y܁gJASo8N$Mym%BsRÔU+= S<IJ2s< ,*#P Ѷ8 /ȇ'IxRgۖpR0(A;CxXHd5}8r5wU=:A)P  K&T4sI.Gn2#H-Za՚6&ٙy.#vPL GXޱtpS}C{Ȕ:Ki =.:r˻_I}ׅy}GEo68xrV|b7E6L^-C|/j ]/;ip<7h%:Y!=MDy5#jϘT%GO,#/P.)B=)((  uyXTo RLߝb[1g3D9mTl4UA\b752@N"Onc{[aq[:/JBet2ewScq#> )>cՍU_qh/:u!kk1[ Ua/gP铷/m[o$k) =J.W#:Wjԗ lSPC$U8dmcUIcidQpyem5:H$/ tQ`.Uއ#8A0>|.7+rkKzT`l.*E?|0 D;7xD*r 8˭# @d3h.+s}@tqSm1-F`Uǿ[k宏hh}dhO@NdUP;݆ilx>0ufr:W%&?H, oO36IIE*XjOL''a&՚.Ќ41g3}&9oBt{!PoT0DOV=uO^RmDI}pj0]hH̩fg@Wtqx8/ٙe>G(K[+  f<[[aP˔?+|Z 2I J$ak1yc0ݾd=!?z.c n =PְLj=\t2xъfm˘ ޯ(xӕz'21ܖAy?Oii~_ɆZz;M% 'ϕpdF\wzIt<"jiL D7C8l@fPV&OUvuI +[ݷ3{pO P:q Y}uj`;M 7Oaw@gvοwX$L5K֖KDO/uO3Hsqx0f7ПäQ :<@-4rg<03}Von``x7} &2P) O }ǩHUL {o"YC m{sޡ81!:eLz=%Η,ױWk l$7ZϳE $ 'x"pWQ{Wzz޲h!. GT I7M:c2Ҷt0:EBg\&, +-NX {0=UgExF1 |{ Cu/bh֧<0) ,=sr9೮D>0I}U(Nzq0k)FM mܮ3AUζJKwDJ.S_dR۲WP1BBx^^Ⱥhݝ?{ Z< v+ҩc0=yffRHlW*~RT" gHto͂q Fu=JY <;X\_ l/O z.Ni "1XެZ[鼳zjK۲<9TF 6Qqߚ[;e.SCUԽ/1'wc'Y,td]b`eUwT؋szF}a+iɧn7cޣ D[bO^+eN1,,X<9{+Z=&DZZl8>e '-D`&9&Mލȣ Q-\ZXA"!Eƴ|s2T" ~#"+wDj^?+ qjsʘ~ZR([1p9"nmm+8ئzI~Ћ]C+sR*mЈ1]vA&vO>fLI[\S7<;AM̢]Ap/aRP{D7[oY?n.a=ZU9X= Ť5"Oh>rxF䍼n@f Z+ۜPdy"G tRTxAKT1"ZbTt_n UIUR-[. C:Cizo5HS3 ;)tt3>%ĔRYif5ַQxBy}dyb4zQBBv7 YcRHT6˦@Mb"jm38@jJ%1ODCbDinC-w,W}:ĭ4^tClؚygcby0 S#C}Ğ7rCà=PY4]ɀi8zAB-0v05{rWAz$KW)F_e 4co?v بhn]ِGqݜs v}d% ^W#`'wsEA-O,M"s%Iaïd ~BsU2mmc[*2uرۃU/iGh: %@aâb%6~P~5HJ^,.]j]-A]O"]5xATژ#R=R1@!AZ͟e|Cݧ6}^,rm蹑skY9֭EtQEݲOx:eюwKxaĪ> /_ ;5Dt()ϴ "F_ `(hV%i`%%Bi}C)#Z~#؈ZAmxB.[ɰ|E[NHf-U&4{hJZ5^v^Gi+) a'cF/,TAS_W gѕlBBDسkoqΫ-1#U^枝h" . T[BD+&F/-;|FQ`7VQJ5h,hunL#]@E?wcYnHPUᢏiH')BKED "UuRKn {GĞ OWm{B:ǗH<eɫ7/ quJF Duַqd)s26A ?(}|k+o5=@~sh/Z=wڃJЗ֛I ?Y2~َjPo5L|kň(i?!Xz|V?^iƇd ܀E t;!G"z]Cg4/b|>4ʧ[>ه0~rAYNjl+]tTZJA쁬TO୏?PC-`/qE,PI&+!DWYX?-){*XU.|,}!TznGfidf,_\oN|wLMK@O ŃY%R:QDX[4NjgLp5/S)tU#zPC[ǝwg}s=*VOψ!_ _f T^ڗ8yT<0PycrӼ}Z^G?hjY8j.}QSG՚;Q4!ZF{}lq䵤 ԬP5N}X4s9KJJ -͏XH Olx5h]7u.Ej%N0z_A~8򶗏P`7D.X>ɬh'Šȝz zMna.I놽;Tj&/lЧ׌9 /b=*"؛^ _\̶l? ݴx_i-ۊ&<?0N9;~ywnSe/k1(ǣxχMK]h F#^)'5I4pGYDbyҦdi"/bWOt?^ZR95_zE w)+.fKb"" *'v}srN=lqjٺ϶}QÊYg? +S燅bY]{5zU)nH)g0ԗ∄*nM:}c7jRj[%mP7DFhݎ=.Z7ٖeD"{<0&"W1m_ .*L^l^/'20 ⬶LSPUFz|FGjKzA YPxTNI~~g>(H*TXjaol@` n~)(3OT㱆B7F_O}!rٟ۾$*Dحb#@b,s ,4R/7XC6DE0>="en8/a-Uֈ,.;,]՚G9 6N׋6 {K7s ǥ=I;9Ź/ Vr:SoF"9c/dڨg_XL| 8Y3-9(Oʳ R~^cGxh޹8=1VF5WAP~‡FrJmh'&dԩsڶ.yּ%.q(b7iV=fO_/&ݟճ-=Җ2(H_ԋ|7l-g (ڙ_A}NUZEVmD)=@]k%([( l $lu>b|tƺ>T:%߮ l V%ƒ9PXsfkXt?z5g$6B6=^_U\#F_kR_"]f@jj}8T@?oаa#Pxm|`̦[.G?Jq_ m:A}m9.Icf5(iХ\CC:ժ6B'T#/:[|8]/ Rm9u[^̜/oE4f.jUrϷCJVE_$h=1^G^v[$-[FQSv^7\k2!XCß(ۭE=`tP{5s3;@O$wZR!88 șZu{лHo>'jI1DuĻ#0sq7zK*Tlv?0*F:d'm)x͠|YҪ_Ehr޵亭D !H5K=\[yl>XD!3>#/T-,xTEDKT =3S XA DR˺v׾Mi|"%Dvaz,?2**B s'VxS IM&=SB0(*/)E)z@zUr+EOa c*#AU*y:zeE!Z=2_Y_,KR$ȨUK`LW2<e)$#5}>$m"2I`l+-W|2Y{?i6>?hbP /هZ 2GEt9m`?sϪR$Lw®}yz~σAaՠK0{1uI ZQ+7ogBgChҠRvYOtQ=]gT>/i59 xm]zZ V`0hn$z}l%.&SJf#cuXv *ljΉԲm c2ϵmzgTp]B,e{yLdK"Q,i+˰I Ḓ\,ν?ٞDϻ_) ]lj= ZBL ">?߇PH4bD9csAMcX/B<>Kcu@alK,mĔtвi6>-qlOSDکΒ/ m^fN顨ӯ1a魘ZS O.a7A7 8JrZmGЧ?=eϣ.w ΂NSeۭtk}@ c]j:vq:F+8r*r/ą(*#$.ϴ1`(+l-;IDy:Q1` Y̸J-:Qp>tomJFSS!dI:P~PCd#ꨓ5NS9_[,!ȓ)I^{#tZIŻ@HjO?f,QJnu{@}r[4O R7Ѫ@Q&N=o:=$]6o-bZIgT# St;VR3qsbhzƩϗUr7az1 |)aiVa>-î^#̥Oif[[Q,Q踑¹stw󈒪-x,dEu`+ Y}OgNo{LzBSXb}VۃH֧R?Ke=hsih":'4X7lj]ך[a{]6Ymlylvn l~h-\$qJV*y/L;O AHb9MLOFq]J;@+?2< !!7NP"4JFLB?42Y"-$nR>Zuݞf,&zVV {#Q1*6+@>5v<H>{A{С`:ߛF6]}J3TTŞ/`%),?@ cbz'K>aK3oa [=Ejkb}Otڃ FRٟ5`g=70n5n5(C+L~YfGmꌪ&+̸ *PZ]X@XF*q]~?<`YŘ~{&cB[b4O[ܰlguЪ c1ВO#/ETrZ{O˽O6xeZ$P/z U>OX{]>EjI:.)m/XLs){A  KI!xsT@F`[EYjN6oTID~PՔӾei96It^e}j=yuez^=j` x÷ʪ=/|oT>"ϋ3l?n6zV۪D:u,SUDiI[< {# KfB s `ze*b7,Bp%ֶI--s#uRn= a0ET>o~"ژ迤uwX `gdb%jtҧDįL^CUy8}kklTS %%'~]D."kkgKoLiPͪ) x2'#;gdؐ/ ƀ,]} .0 ,i*e+3|cQѺx58-]"{r_D7O!=tj_N*N=h]D-pmk!DEQ d`{,]%FG3.P4~(G#C P{ZzQ`0ؗ*a4jn8򚼊F(^0,ysAs0|fS -6Cp|f];-52įa$\Ba39 =ݟ!=CmehV[ 8qPf8J:$9J'ztZ[qHP&'4s2V}LRơ${|7L BڑL-3!˫U)fpP0="X$2,J H8N:\<׆Smu^ B4gy/ !<`45߱KXk圪Nh!}ޭb= r{ߌۛpjǯ0uV^iM |}[oL}FlS1Mj^}YNOD^C')P1 `_3lJ&lȸjD1ym?Yc iwxM]De?%d~7}XÍa?2XY_ H(lf\q <L1$zL SߥAhÐ /(V9 ?Kf($`m~a$lr!SO\m^¹jKx'%Qja?O>e,!HeD-ufQ~ Rł(ڊ }Y̟ik |M~e~@(_(onԃ/_ܚX T&nڗ:DSp :Q:NiݻCܱ (z6EGv/ےDRuIN.QN2a?U#ވ;_M5b?7q6Ue{/6 5P[={#3q-b%]?25B4`uuv ϼ{׸|*eA8!Nu=C_gJu9%ߴ[{^1ee2荽6w{;^4b˾_0&;@Crœ`0Dn}u‘?:T5}d #6{b ؈g&}n+b`d){Wwe|k ~0>O~0^ ӹ .=H#bjY~؛2&;T)>aSDC_Ğz!Iv]d,%m5٩ .}@p#&y$zVz@KLrL/~ng W=5UcpWR.Ƕg)қ؇x=F#/iq(1ihV,{?zbq 3\mhUUuc T~X::A0fo+b39D;u^{y?}wɝ؃u%CddOy~!h'ݟӶI$6 |f):"5!N_M$QӍbϵE{ܷb( (WwnmkgsOⰀ/XM8]ffz۾sٓn?,emn@k=wC3eu=_u,{o.iY.a cĽkBǯ Bv rڶNJ.,fSϢkt=vV": Z۸OC|ˬ`0H_3k3f ÊmgO߫ކ:-wOܜ1 {׬}uH{odnUvn(K}'^jR#VY5 KWdGΛT 9==(NvPӓ$0H5J"z'U$4qBc(usr/@ wer@HVtBPDue_A(bE5N{'Q, ''<Ձ ;W=l~?&St_oDR|PlGWgZq꓅uЄ>.銠#1,R9R Uu$vpNZM2 "zżFs>cI $,?u^ZgڶT $hxӪ@>}$Kgƻh/`$+ixV71@x1I*4R|VF&=6zF,9V{F+}j +X>H6.tFH)Exr*ӭBaϽ,|5i+'yY^]#8N֧ ԝD[A{0L> d;CֿѴT*Cո=PQ 9{[](bmH}朽EtBSĦƍsv?)aL.SdF=؆5 3GLpN(q2ByQ[a^ /gEOg2xhC'̜0+4s㛅QmO=Z*Vku>Tp[Zu#ßmz@61}վ+=؏AÝeמ'W^_V~[NI]o҇ NI.C(8)!uy[./5WN\ӪrR=0+o:̪v aFMsu(wN<22puۀ?,T׾_`ӔloC׾|S\.45 ,tU 9>@ڟ7mlt?w<גzuKj^ZC"7y c-Fj)A{|8_`<}i9-1 nRsJZx^E FFU)apSV66 5~x]Bj|k|M" ~AB6Y>$";h2L/H{s5|x~6#`47@k3L v'c"{#|<9ƨڡqe9~ 5\ jA>,2 :m22a:=wвOlI  ´%2MC9ؖP}Wbcٹm<t =Lv==cD[@t1Dk I5($) }iM5YqTiI?C [ý`'fY}NJ3{I`|̨R;AA˯ d]; {bɦɖEcI& !Tq `]4ovM^.`L=<7W@5鿌RvHm!1  ZiA0 2݁!(; (vZ|%aSۯ01qw[Ps=)LG8K@ojۇ];wS5htY KVKYRxXk>謈Kb'}Ɂ67a k-Z[hˤ⃿M5i1<Uȧ߁Ž( T؂z[&&!uJxdP=@ `+@.19z~y)3\m<lY-+DXʪg{,Ė"vYIhhɊٶL\a}bMd3=!Org=7~Ԩa#Y:%Y5r`T]ɷǠ^PEW ZH?Oe\yd8>ј' J1lrNPNiXWXQLۃ)9' }٥f&"%SV!YBV&-itBEvOF,MuU]|("[h9e' Q'\@c٧~!'}XP `Fk߼{xH`` Q4P!Kv4HwԹ#1 jkp6ZHWݺG&AHr#ngv_㬤>;0BSmѭa9$B4Y$*#`r{?RRCiRЉ R$ٹiOפʰC'|~py٬tp5: /ԯл0|-Ƕ5d@^19*|屵cA $+w؊0ly^d;/֕躂`G ]]_`H ԧ_#Vfc7]%;bWkSY+?Uڟ2`㦲c"!b"r@PDU4.]ǁ+)Lu\U\`sb^ESYzW b/|u"#>H- 甎_I!d&!xV8GުdCc7/x$ؘڈ]ūaYs̝A9b,E&YNݘwlצEWP0S ~5ntpWnoX +*Iߴm {KTOeAHmQ䰵B]L&p*/ %vojkHQ0U %ԗ$fw.|^Fk Z_vv]\㉬BS Cj{_Ƈ|VI?f,UV"jdu;BS%FZi={3GWIh0B8_tS/t0B۽1}>@A摗?z(Nk5)iGdD{HZv+v#$Q[9?Va`+>'j4I`d SBi@g4k]E93hM#?NlsQd `cHQ|),U``dHr#FՠJQ8)LM  oϽ2و<)Ǟo* I8(qyy:5zkG}bpؿ^әO{- [® 㨐;O .>DeƚfIeG5/ƳeTElf/n&ρM]XF^b>wkV[V(V:{%pԭcjhP2=t Y*%o [N"KW? g(̳1HqM^'\{d)#pb7gpZ`57*p#&h:hҝ Wv,Y:)k=tZ* %oB=K<ݪ)Ql6݋m} qLe&Vkyfu}icu[i yܨR%εnuI*ٖ_$&i7u{v#Oa(aeSR$[(-Ji'VȚ}T.=$(o _B`*yRx^DZj/*]&{yzrE={5&֟ɴㇼj&"A= M_; d`-ORs$3J1RW9I4ctسXOFu;Ïofni~AiɑMS{t wpN{H7 $'H+pqLCn(A82JUĮm^MDj/H7̗HjB#Ǩҧƞ-0=~.vYSk ]=#UB^~~y%8 o+2?O>SC8>>,9h;2kAm=/K u{8'hhD`r)Q,]]/o}~}? J$س9WFTYRQYܩdinߵ" M;#mx=jndߑ}*{Cn-϶pw]Z;x^fg'vj'_u~Y"B\u=Uu{뾇h?"Al^K|wfl=O*gtaȦ)]ߊQ4?ID?nS=v2=miP7vn[O 7F}4dcDt-h7:rb~O$z5E+v^dk"J@cDQ@5S۱Ked0ö4C'8٬~ɦ$И7jAg嫭[<.idޡx{ ?H P[$[{씇h(.Y uK 픡#zw-.3_W?C%o0?5"Mp)]l{0tAj4r.A5Uu ;H{Qy@Dp "Xk C&IBe144?纙CϷk8~4Q? [?uE|ؙwt|6:9Uı u_e@~X BE)kI/[}ƼJ! dv_z^[ZYC}Ý;ܕyo;= "'_/}qvcO댿8Uz%Ǜ8X:Kq=1gocn}{5Ɣ]n>B-ÄY#-h7ȑ2bDsFАFCQ{"5[|F'FƱ\APLJZy||e? !7nϨ;T֌پk{ ){7G{IuH^?رH65bF9Q~2%obdkw-Ÿ"Y4-Wx=$ƻD,ı#b'4>9LlH=_ZfyzUʍTd7mrԤZ'M+ٿ8Osԥj)Ϳ bװ*Rkٰ/]k^%'r9ܗ>W~1 =)אL WOj.K@-,B8Y]|W:[G/S(Kɹ;TS"{+U0ƭs*oC@nI&.Ԣ7l7U@%}??֐)V+]7,!ݱٍgϲ&#*tEsz"{5}ًD9Xg;!KD,==]c.R@}17u,""dW,U:'AuءGFyzr5ΧE 2 ҥ)HEQIKe]"Y}9onG%tnvm.~p A0ؘϪqcA{Zd du1 l@Eb,ESc& )7$?=Mz Zw{碐3[X/nccx7leK}2ӴNu|2w>+&!v`DOYz8ϒx)R\`=wZzmTZW="I!炋eR9 4T.{5޶y5:]u)tk6XEvۍ5?ϽZTҳqT̏ʼn܉+L; Fn2l)*w/Evc)M5R@ݔ ^o٣bL&1{J9 SYTR}ؖHRIKcQѓ?fuN&5V|Hr1Nrc_>7&35@($<^>ȗr>|`CkcFUZS,ǙE ^X!$Խi@y/Rdpl} u=LpfR8Qi)=ch%9$ny҇ڍA=$\Z׉E@{6)#EC}d2S|~~ /~m`I`t}^No7dr=M]U|eXI̡@S66I-m>{Ǧ>]%; \T._[ 6zTnإWNG iā7PjJسa9?%.FV- |L+wO8rD=n Xd{xdQX!xlX5Ta[7d5 ~UѢgI-Z(x>7U`71nP$qAr+'3c7hF#%!f=#Ĉ%x27wY3,?֐؋RΎK0C0,۳`l|rѕQֳR$ӥ:%d7J;Tu|i7ōR(s{ 3Go<[*4g03|)7X?拨Q1Z)?>T4I' )QV:x+L{qdR{1כ:yFB^ppYYCL"USp5ovaTڧeV=*3{a·9Ah,W?0"x+| hE:ll?ްoT5v\I  ,r$߸t NXҌ&!@ f'%4 )2|)),:8{c-֧w RGL< mX_aզm*?p#tݲ:X!枱eIХmf}{|!?q~lQʎ]{8:LoFkQ|T<ݥ(֤#;UMqN7[ne!tw{Mrc&ٌI5+$C~SБB ;p62B Ma(ZMAp3eĘA6B0Y0֢43 Lj1&FBO1'Ѩ2LA\A-BP 4bd rKv`[Zv|ml:kZ "i2 :M@#N $ ZA.0Pu226FRK~!\ h"(^ӓ l[6EO[.–NJcR" H!8lcs-3v(|' yZwx[j/{ft+ǴC.NT_N|z JRIJuTbWbg2]݈j͋5N&K#"N=pO]ns˅uTD)Yc~Rv-;OFY]l.7L5/^Tz!x{w~~#N2o*R^''h Qzy"Ta-&`M5,umwՙߧq^UNG#6C.M-c&k3֫ VbO"w+&zzAU.ό tަn'"k喫SF_ÝA~YP5g` ~r",@٥&vCƳ 8 8rV17+t+Gv]V˓k& t&vH~yԉ[B]bv 'EACIQ?+|9O|26MttaY*ST;c>MI{ÎUF OkBDx]{xlA&:Ί`UMM`6jHKKBp?\rm Ro*X8_*2kڎq5ot-)>&<3cy7VCGlbŽka^ 5n5V۬~}d1Ә OiYs[Jz<>NUdl6 Ŧ[gʋP'*E1>gNyI2}j*iIZV0V(W敧=߷ZȂKBvT0݃_y50z9^GIb88NT$^mS۾4|^ fcU1]t㊔mhpڱ4_JvDUVZJ[>eۓ7KcBkrCW#K~ehox:{_(,`zgKa]kl4<m=T3+-B l//'t`ģ%l=>~B*I6C[EpݑwfȔMn^~ql | mDf{={؀wbW;#?']L%R5+.k\RfBPvxjPKU]o-%pI2o#xYc\8)MqcY=U /+e>QzNM>{w< 7jIhӞ;$fT.o#KNE}ƣ]Pe J*OD6CUpg7Gc&eb;0 fT.%}kp"^;f>V`c~2v9~Q0^%GQՁPh*:RщcLӺ1w_ՈJ쳲˕ᒫFĺB?!Yߞ{ԡrZo <$* #6AO'dFV%1 YjdcWG~ \nYWfLI"F\Ɖcwⵎ6;4DLd>EJq}o TzTk̛*J%3{_NhW$)L{3({ ߟjSK߸-Gp"g ؠ6oGL;vd{xHB97)N:3F\h}ɚ1SJ.gB%}L޾/`J̴Hly{n2*>44^NzJu3" "yp[˕Rlد#/bxzJY`L^y鎸S4%}ȕLZD;TV=i7Vn,k 8NtޔviF<"n]: >DoܚDIC" %["[5??% _3c߉xaj(NTGz/k >'_vGF':C jM&H7/Z zcৢz YqOd<$wYI`Qqٓ(pwF<C:,vGM_$93\{5A7ecuϷx3d`/`ciO8]bq[Aen&e>f"U #/!x~ݾw1pWۅ$'Al}%וg=`cAﮍǶCt*R߅r#͟䛔<=\>mif{^m~6,C,8"jиp\]hl2NU\5=LV|#U|Fp.= 7=y^C>fί^oJM\fF9he۟- DMwaíᗈ.ufrx/LWs/{cOPxܩ6LBm.Ğ7kVb7=w)F#n.U:hU`+lR>;f`TNzdOLba/e1U`?sAE؀g.{+|Q'ލrú-=$TO1;YwV+EdTrT3R=C{5bq 6$†Ζ_D HMLS#9#y/*tY2^E{ tZƓ9̀3Y=vN ㉁q)AU9?;cj= {?OEr4]@ۥ)Aa[Z^ ,b<O^j{N $1b^EESQLyZf0u&*֌$^j7➟P'#fͫ潏/ `6b.9Q 4%FK#|%uןhQM="N^1Y=X~v$=eW u>]\ҩGRE~ƽr8JMWRrS'@IO*l/M2{\u}qMU%;-Y>[VWgx=]6)X^WJP ;xT)>'\F 3\GD;2Rr[Sz#zWh=lo6N/g7V8$,v")`cnRN3bFL~B$Ց\0uI0j ElU<~*@4av<2ԂvĈ; &9Z?$X »;I$lΠNxgڣ7'−X55V$*6{юU'ֶ#Rm0HQ\n\]A {\eyi$(`Iz^kq1d+Ao'ǩQ0y t|E|AdlPonSI 691t̬6[-KWF4vJ-$ \]A {dƐ )Phw' _A^:]!U-Jptl=9 A1|Hq/އKDF K+y ag\]I ;7]?Viq2**08󠬗|u`S? f=Kif}Rl'ށnk^SUGb6?UpX@X_*- 9ȹj͋/;;ƕrJ_e)Ӡ& J竼I:sՑKsxA€!9.4IȜIg 0lJu]| .KrpwL/ߙ$#\87|Hl5r1xs]VJ՛'IZ%e7,̒]0-odK0 C=NrF2& !Pr[ISY^>EX$ /1|D40waR|7_y LB݆j): H,C캺DF1\ v0Ɓ8&ăg-HA ]a3Q2wn֑45_f GMO/SӤ˵.! n ^wć "^j=]]G3f>Lpl蕫>\M o7֫c/ΜXcP ].SRth@pT"1O 6l WҶ]@n}Fd& bϋsKg$yoUA ZoGu$Z8+Kw9 a2 1N/كQ#k^G;HNRˆmň=ޖ>C?A_;Cׇ5"VG1йK< >]J)W g{ vGJ9c^G(:?0Rw7+NXǮ`/OP?"XD~ƅ+>7+3ȯYw*IRW籏}bA+HQ NK}qY5CoDqY-yE8=9\yޕp5yCr"=>\ wn;Bku&hQcR"S=-۲IѺoCثVrjkwwӌ!Ft\^}7w #\\IyC yu}ś&# c4C)9Vi0b5ͺpi ZL^_W?vArxc1=@h櫊ݖG=Aբ+?9yϤew 6Ӻ_%PGuWAw"RU%䯣"Ò{,VlH꽇oZ[6w)k(Aoi@g!N|wÿA (%Qbʨ&>PcRb@c6?,3%߻|a Y%Bc4!v'F ԅ=ZA W5ҕsv(}\IRg(e~لG+1])ܔkDti lT>n-EY5?,L RHUPLyl-O>*Culc}8v8㾣<>15lIfr0\_ IZDڻGMr #'UR3Z,Q leuA*@c ]hѸdw!Ji)X.(Y.z:;/˦fw-e}bqק( }&1څKaZ^DF#̈́? JmM)*7,ȨִDbd0%rrnL꣋x/TB}EO|,~goؖ.1^NC(RPWZK<'"oikHOtɥ3TCʞ4ߨ`~,iqBBxbKEzY*}|ٴ;:?_,L`QO`?HE(<ubNfAqבjXЀ=12&n'^t 뚸ܗEOTz@%ȃy*v(0RQ;YT$C R(s81;u?rxc]I}g4(Nb` ">W+mJSRGKOkq%Jn&dU?@Ⱦ+'{~"g-JRp6^ȣjQMZ#Up̺8:*4Ј>z%?KZ\U_Kг×GChB!0[:ltݮu@-/?nPijY> Wiv~uoK@(3lPLxrZnA*lɊjm`(Wi:`>֕6UKu|Y^f< Fʗ{A\Wn7lUS^9֟ul!VFIW#gpt]RFުLekgu/bE/Bۅ{\Pz^cO<~"N-ze 7 f׺/2L/8%m &X N_Sgm XmR?n3/?Y#e/?#[/٧eF+$29TƓS,qE*(tZPU˞ܢ{;i4GCZϹ᪪->w%Ƥ[qjB":)I~8$@B>S&\gnSb UA_-n/̆XVsYr)^Wu\bd恲c]Zwnb=[7~cF<ƪZ[5Ti&DWW\LW|J@athm[K["1VWEs|'sh\`Df2ļ'a!a_ U}+oUg$y [#G yw5WX[yQPRЊl*nU9ıHle?- 6߄0ۻ|bVV<˯(Ygte*G^{~2t,>&S(蛕7lp:^vLnYP.q˗,J:"Nƣ+f9J qoT}}xKOG!'k?*VzS[_'io9eA.Vm= 9Xnqm-6ڬ^Q҄G5  yU/%\;w9_ϥF!8dnFv<%oZ@\axM{އџFI)dӡFdz-É0Cb\<q׬qԵUq/"(ҝs3^is3cz5 2Xxø0á5;O1|_3"5]H8Vv.=&X眪? jE V]R'w>O$-inQjGcHkmiZzUjZ>I 'λ!QvF;s̵یR0u{^EW'VoF#O"(ZDuJZ_"!ySՐЮJ;C"61뱊X M;m0^'b=˭ASŏc$ 4tfyV^`@-}Ux]3qIhȓ'?j?aVe_0u-ek7 :flOSf ZGU/ 4=ybwm5_19"2++4!X"0Z?B=֏ص‚kz2oϤ>;0hSzS^`d:q=リl.,n lBc9ߺm@M4xڈ9xehHnksu]&[JHӒ,k %h#O,pC,_OύmEhU0CYY=|*\45 YE/,C4Mojפ},ߞ_1"^P8/Bs0 zP *O6l빫&-J̽""!bGe(f?^2hŘ%'R.VT+&ytQJwa 4B.% "r'"hư1bP_Y+pԮ\J @ȥ囼)Z>Ca(}5ra:P] 꺽7xV,*RV!z]5̢8bQ?/MO^.L! pͰ(Mo;VsJe^=^.dȏ@ƲvȒIHZ `9z?-S̋vuGR2Mϛ3ynŸT]٣/= s#?ah1̄;vϲ:@EM4+jg棿Ŵ2Дi(P NBz^gUm[ڋ^a ⃎gHP2hl T:f iטZIpa,jRYBc5@⦻`i6vbײgXT7,o:(:&Uopw{ _ 8NjqNGN~<[{vܣwF]׭؆g! ćv3zwϲ&Rv,Ig%Opwo研=Ox,8J֦N{*L)|x,3qmٔ=:RĀwYnPn=T>c)_uξ -9=WnnM9֞w3Ȩ^r> fP1 rk@02Er t.@<>q5RT%0+D T'zYM/ 1BtV\Koc|p6~]%Oh4Q*n`ˊu+/nyasFo?܄!ߥ#58Od=r=xat<<h_vyLk>W)+ջr ;I6sx~X@}9Oq=,ZtUNNj%<&knأ v=p&Wy z? pJjyO4 ]Vf4m\3UG&i~spW#!QS練T2x~ E#qS.7..QG.~@@er'3H(HPWsՏ(քT^KUf3@8 }Dن&~k-%W>}V`,v(,]9Z"5vTwFĴ"M>CF=dS"N/;͏5\WgGi kLz c8 j2׮U|q6@,3ԃK/8ԥэ۽,h^0x EQœ9/*gRnPIoݱ,sPs#KWwUm*/xtSY8])HJ mxKl7v\`B(H%j xQ=vG +f;H Pw#0f`!eubc.$~S4cwp[[s3 0Ven,}4 H"G2ғ<@~î?bĂ}AO;@.u}ʳ7NI"{q_cĴX㗀eڗZzi` s/ZV?~@1)[M)GJc~r%iW ˄W˧Y&4Fz],&<xyY? !nKIKr{|v)=Ox^c,{ּr~LpgۋL냓wMebו{mwF\Fs/n~8o@|U)\v*cТ~>H>Խidtדݴ%_EK`@3&W274T ۙ"wFAKgD5`$o"Qr͖LAЖ;A+P=jRJ#\K CFߘ- 3Fi  cHLxf!qJSNSgLig=GXl[ݾJwdXVdM9ߚ[f {ZQK_Zk =z$  >LVrt/5i (nܱ;_>;E'uYZ6ӈ^*)+!PZ#O ik8r1~l/lK8dw,dP@HeNjlD%J"kfuzdXSC0,݊}o]g(Jݟ`:Za"qCylFS?stWݷUBBh 7w_~ F%ӓ:m4U``ʨ%@5^&\fQhԽ3􄫷^¤hjb߬x _8/)y]I$B0W`hЅ죳ЊQ03 x{CEYmPL_tw/8+*5:ݴƉ+OxB"qR8NJp[8 6gƧ )Gw\vmQ2c-Dx+iPC^xxohW4j~HYZAjG*!NE)|hmI> UI{8ʦ=rl^Iz{hkEZwfCp_d0]-?:Hw-G;).1'KA[~!=XV:K9ɰ:30`Wc#y:^ UarǢjf_M1sćLJA^_sτO~@>j'Ms5.B(mإ|~$4! /3Bi48G <37`G fYv&>wAKa\ )O< 2}ZHt Nm#H0R Ɉhu$ 9ûjg3A pşGs{uzB#٤ln'B 8jT >d<`p@O__*^H.4*pt0p/Z{O< DNv0dlct4&|Fl#uoa}~^tⳝfjMlX@~\49WLng ,>-]O-!ljŁ Y͞xApttS ֋`p8r}nVRH͋^Y="ۍSU=-={'9bbU3?4v W! =rJ57_ݾ&E%2 ~V{ٱY9^%LV-b> %]]Jۮjz,v#8e,3<# R'PYh,yyo02NElT7Ý?( uqވE4[Ա OϋvtC_$j[tGY"/P3\E$.4lWUBpuo 8A:k;/GR="8d3zy ࡆ?(~x s#Uk! a }:ޯ|jBfזQB糨F=̈ PH(%(t~yd/"_ 48Ӡhr39K/P@5[1rOkO~&5[6|8Mjoxλ7e}M-WؖhΟic@-]-"]SE³IGmD#OJ$M_} yZfz!L#"TQlzN^5P^NU9vdN:}Hp"q"Dܮ{YQ4_P1͙8p6E6PHY^n>- :"Aμ R{v|A6eq-p'.RnARw컿~~ n;~  DYˏm/Yߛ Sw6:6Kz*γ1;!`*iE=,B;}z(?@P0t|Xt qDG\UJtD^y9j@ {xg]&>۠D, ϝ= H.Ro#h1*8NgEckR/,B{00gf_X˼.I%4ҵc/,{2,`_\~Mbf~P&J-PJFWziP;7-G @"i%[#W;^A ׂEֿs\_7 sX@V6tMA^(ATH0gjK Kr s kN0Xň,lT zFT'=U<5c쥼K|Tx6L~/N=,j`PU*3[s}YV2Sz9mqWhK|ވC]m. nBe>/R=nzG9nuwg~veGWE=Y j8ݽt Hi_ޣb+e ǴM%G,>"cst!zKS_@"c%:% `y^mV ܞؽ 9.i&xSd @LA'oD-5TlP XdOak;mǠ8sAñѥ77^ ̶8 |]y\gJgl $09Yot6tX ({Ttj={?4iv#"H0K]2ݓ &ύ<kO\Oj6]7bhB;(SzܿH00S{LB/eqvYޓp.#{Nv?ȃJ0M_NPHˢ=pCA uݢIrkΉ{;̇zϒ3?Q".JKg0RL>=`Ok\y+zq`[oKA:" Y~P4b ?"3Ffu% )C|H*r*nS!rЃ```Xgl{UWI|w{K0*^ƕlxid$mDoDWT}b@` o3Z1@ۀ8'u,ϐyrHBpq_4:eH؛i zz8Wqyz.j%g=WTR#" {@Bd ~U-n7Gns~P|Xއgf53Mxi8 ʶt؉k>-`rߪPݚ"X>aNӨ^KUpJO@;NkOu}n͇3@|EQ%@ ArP;?1ITO! @nx|nz|iv/UU/y6n+0+n@ru8HY˺os;.EyV\… |YY.6.jzhU+8NtZG25z-88f]mbHR'=Έ=' y=fqNnt~c+/@c6E3!B7 4h 韥|"L?GwlY =[TZ Mc%{* 7J=!ܯ Z--ރ8+bjbT!+RvI{7fxKPЈ&14ǧtEj,5UE+z}{.wAt}Qg:=ItP;g^vXOe~,ʣ=\*-[Һ{ WYTW t2q&PC9dXoh :vO8a{=wZDUrٜ"-V3+~vpf zqw)6˭"OTxӸ2 I3: "'/@w|j_lj[P8r'zJ_>)E-Dt6N?Fl:a mkZc8K/_l&ݻI(l= \])'Ch9Otd罞6V`8 c_nHӼ#y q =:KJg!=z7STnۛ&KZ(<_TcB^?%T= fG|i(X 9lW}`ornSV[FK 3L€>oTeܴA*G]ME#0,~PsKѐz}Ѓ@LMIeʔjs˼}k="3aۉƙl"WZ/dAHEYT$Z~ڋZ1k7$l[kU:$Q %E p=cjYfOޛfrݷM_N߹l?c-Y7+RױZX-լG3`pL*iraCb|/{GoM:iLENC,Nx~5&d{!]e%4qXD\ю@\vPzEo{3!t)=*־duk3A1`J^kbȽȉh>^f8z_hsAiCiAtY)가Rخyx2b#n}o0 c)q[@j0h`R"VI~[Z2٤"8 kx Dz4&.ˮj1Os92|zc PY-@ %Yv9x^aZ:נB̉)\N Khg^E2o{Eiau證_E~O KBLnWcmTw1w +|tA8HIHOWU}B" p ew1G^]Ubb]q]Ip)PplN&"3衵lkKlW`Uiɣ;C za/$c.bޑ/I:o dc{$g,2/=},DfN/s?01ꉲ1?X8p.̑u3bfTpC!O= 4Da Y:Yړ& 7| )gnֵzK K_UE@%bq1̿i/ ]<׳4=*ݾ=?dRPYc+ۄY ٧sc0}j@iPe0 !:W|OaqN_mUo V:|5DC0h_A ];w} WXбߊ}jaXmh0J=OT)@fU~yjvf2$1qh~eW#ٜ͠Yo,:{!Z oK?\S<`(8:g>.!!un*UF F\T@SI=P,1eWONEߙ[eU `&s4ib>l}X -6~2*_ՓVX^J"kk>mOAނe)-Vz#N`۰1wkxŨ_U^E)'VE#ۛ4LAlt|7 31F5I4%XlO<~`{v-> nj7,__ז ˗lcvOjg}AUTqnj5NW[+^\޿g=ehu`<ɖ,D  TtXm?Ne`th6>oYRIL_`J"/>gWGzA4_b̧T bM>7-eۼ1?c$'}m3&`ɶ,.G_DzQ9K}OYР?^%SJ=QsV놰5H&Ŵ]r6ӎ jŗlK4Ē+Fk'@)MN:le0q򀏵Zz:1Loo`ZV >y`{WC ܾs8gO{.Kހn ]j{D@7H|P2w|*k]i[ AVq֗[#g ?Ȗ~Ȫ7V%3:lv<T=M<[7d{}*P%D60U9L`g$oOVt5]P*gpxN^O[KCbb \P̢Dr<7AGӳ%*;UhP)t7"rʜ]qb8o71u ~ {ʃJ#(|=ŎLv{W/{jI.ŗ0 XL6{;nրW&}U{AB>eh#N{ͥϴ j=B34n(nd2RoWy_WuPDa 2cz-n9=h`0y b9{Ğ ZVdS0 ^Ť-z:-߯n ۃ[B}5I e2By{k{0[@ȣׇ, ,7lp|:n@GOպ"@ z~sL ^l@E#{w)gBk|.ණh859w2"KXܡN,ꇄqn݋SPcШv%޶z"Շ tspk]9]ςoHխÌ&XI6*vkR_uŶǡsSxO~%c>)b H#98rRۭA0 (nN+ln0mj#qEY{к+oCye,*"/>w~ Yɰj#M=5f*|e 5+LB2Qpcoh@ >|J*?B3l<"S0y?PlgM$$v Cw*ijL k."E^I-ku+-d|?@[+g2;!SJJJ=lyݐlso`2C+?{_;RL35҈aM.ث_I }չVz{9V2HC h DiDC\I^逇A I,fhbۂ0uW!o§(7r؈yD^0=h@O5ai :?s@s}=f=zV7ff]0ʒ CaXzT/k=vzv5Hl0 kЮ=S7b_;ͪCm3 `CMz!w"mˢ!}ݐ} [#RL}KAϩyerXdHtHY᷽4%N/! $M[43IO(|*lb@UB>7h mB0(]k7RqIBpoɊw:\.*CDNn^ݴjC}ުn3߭YD_+HUuܿ#9gK:@ig0o Pib=n>o i&VthޯEZ,fm^I5nj !Q1nMj\a7y(77E-<@k+!!'^C2dY(7ԾJS+l,O[A\E_UWW\]J/iHfPqjP"%M=ynIHn2_U R٦V-$b\Z5?=OLwMQ 9QA 7THֶR"8Z30m0Lng^۶1-Y&~uIvcva5NQ)eNn^ ,HJ5اiTIdf^N\V5ƩcdpTd-N{KxE= }[î}c4D̫yF4xR5sPD ^DK Tf V o;۟Ѽ sݜ߃]X!{Q}UkU:N8hR2k@Xk~V(/B`DAEO$mo 0ޒls}/"`ƭB;A+M+N{8m"_@B)|*k?7,U[|-:keJ{69 T)ٺ+"d*XK F\1ɥݽ WZq]'fH{i+6byS[;{/ )c^xsG|& X<jo ijm;j`:;ͪ&S5"<`3o#!mM]3LL3s~9Kwk-= =imȽgeSlf=V_F6f_ ^9ߤ1xⅩ_A.z&p`éQs /)4Um]D&drT:ߠbKz?ϒ{Oe=AxFxK^@»k!nH2ڃ՚]!زHpC~xۊk-B5u m`v j̑!I'^O+7K{ANe'79Ꟁ5k&FKSwEkq'Z@DN~yOJq Nc'bjUCbyo}#lЧ$$UzzApR⼷;/G˚{ /wiipԕ'!~pCe#:-F[eYd?yZ=}_S4t9s1 4$OU(JZZC7@Zq_/MŷSܩU?pp 7=:*ϝo=D)X:~XdֳK}9atBigɤj= ۀE8n0+`)*)ek=3@mU&nxCH֓`VTxLe{IaIQׄnTfQhOFussɳײ [y@'|{ƖHvl rWQX/>ݛ4oo-lF Znj :ޑf1hd#^6}K#^#k!G9$f4\ !Cgh1/&|`%fɆ׻$$w,((`0TfHf ͹ r}짳S[+@H(vcP mڠH?aZ;}\]A ;o(Bl7i%^^2Vё4eBv lXNCgEyXɥP4}ɌoxqVb8W4t?>a`@Vnm.o|@VCgѦyvѐ}aO/G?87, (zO*DD㑁J$!_cq`bgL}4hH|1@}He#gȑNvLh+9xł=1A Ao,dA Dǽwd?cRnP IX=Y,0oK"4Y3}llcA:'P7Oّ*0oЭ6: F5 ا aic 3!M}Ol-O:t.= ӿk(- Ǟ"yGb kk\#nSq%-̻yCF6v܎r{bZlt7X+Ơ* Jh6{;%B^W犹F^A+ѣؕnB 磣-#,B"Α nI~$.- @]F};7cY哝Q4PWؑN4[6a5:QJ* 0: >ƻ냵00JJ@o沫L~r*rሪy PKv FCΓfz<9B%p[M2LXPE4@vuRLA ЊP!/QY be nh1F(5dYŶ ESi ?bbDQtѮL;zO`θ4>]'=,Λ{ԫ0} _"{P$MiAv۱Erm\7{>Z.XCOu?)\[>mkڃEK<9+)߫ #p}3 un5qt-EVΨN!ӎ_?$FṗƩOs?TP5XR.t/smߣK}zrzF|2ТNki EOGZ^ͅuownÊA'H}QކK.Qx8!=* Nn/gI;Vt~wG_t@RȞѢ+`jX}>IIٸ/ sRj)ʋ%k"gKjP z2/_;#E5FrU ֓([<64^6"Ӄѧ1iM",_H9"P7d&ڀRS ^mۆxayTf]`䫓J=oņ'nhk7aAh D!L v:Ƈb=!;+$ۃ$'>&)Hn˙=,Y+2F얳E7q`> Lݚy9zK P2!¦Ӫ|ϟk6hhW'2X>n?V;K1E5tŠ-.S5`~S2ɱEL;P55gE3/AlG舘K7LEF4h -e,`;=.?߈vYTtJSi,Ū@NJ/oߔ:|؝->S)0h:=Jl5v=? %G6zS;9n=|tΫ:ҫ9Lr5mja{\9 C}@jMUo JEԎ$ TIJͯQMS"tbg aY^eMK> N)I,Teō22$WY}~lߣ:qA̤0;+~wYz7ԣݦҘ|7Gb50}>^٠VҒoF=Qq#ؖT/L/K7W[ϹW:[{^g UP'8m(tXi+{p^YϙV`؎4XJ>E6˭_>=m Qt3#m|%} l*rɓt%Ba[c^Agw'JGuZl-v=Q(i Kr(Ԭi{dj;tSwJ4wETUmRP$n$b-C׺'ݛUZp92 ٭ {`lYi%?jkA"YЅM,R>:LHP+gPlN.JG`vkS`/L,;}0$n'D* e>.fa!/,' !R~ eS-6!lYF},=:ŲÅcRY yèMNe랙 TE!+yV@GywN彁R),[v%wT5(bGdoŜjf?KZH`--!UL4?kPx0fsFTT`g:´8}%`EəEzu usqރTbmݚP\*H%HʵwP5yzZ-x!.}x*΄KxNg;vP`}d9g;{:U ӗZk"ۀk|`-7A"JĠIf[Litʼ4xW{ S > V09E%E{&7x0F>SQ>E>Ofi~AtM:(8bqHeP|).U!p͠ZiRpol3EOPBm?E]#Uzs\{b>T5팬v%~hԻS27itb`X~1 -8|$?m5~+zjR! i7"ڦ{eg;: T ;7zsPր6Y5HU0Lz)Wp4Vj{v|aSVrEH'ӲX"'E9g aHyG^YU{]UI_`2x ހ} oye@"a^ULJE{[Ve_k-oX@'ZbZ-=L[*Ƙ74(sb51hK+߬^=c~`[ řVmvulo% &=Z8z ][Ajͣ{zV7dAfTl|hNьT@G XBqnԾާG Zgl;1]HyX6uBq+дjm-'Y ةjB4ŅǺ>BKJBX\fY .XZ٤뺕Zmf';n9>X?{[?9{{S8멱um9 @Yye>Xk:UߙYh Fg7o8 w!*[^u-S) ˔#-hoA^b&@N'=+=ii  VWWlje ٗ-nټ}GeIZ})o#?6Ileu!PUqn{T||/0<=+e8fgnC(UԼFTz59N=<3+Bz*\|*wVSC2 '_orޮk)3T M*x6-.yئ!U{ZW=5SdR+kmޱqDɝJf8  'y3touAQSR;950`~KOdm"c'rs٧,QU|JXU^+E'=%C,%)TV ˽~7Ng%fU_o"{0*[>QLoOvB~)|Pmi?( US #*UAF31uo!DG+խ֧AAH ӈ_vZ@nE}Ʌxn4=17%TB̕Y{`͆)+eyqn4zʈIYK^FB,bfՁ5d2䋲Q9Kc;-^l2^ȶeM5+ۖIJnN%I:C#3/-KճK  iUL{ ϞEjKΣ)7f{Fpm E(Ԣ"`+c[Gk nyŋ]Ye aГC ilИD5݃&qGn2̗PJ'LjT<[sבrYK'^'SB$RLآL^}C+ʠ>rǺ(M,^@TɭMި̟ofOAtF>F,4S7ܭCD'uϾ0]=@/;4g{]xŷi;-I}v)m'Nށ.Y[іW0j`oh$o֕P'g}q*לi%.|)˟ٍbй67٭H7o&.쾒|, L tD..`h<(FHA*2Q%} (RWpjTXה|wPU+%}F|P:̺ =hSs`g/j ]4?HBsspQ{0M\]"ԆF@Ɩi|Z9;%{e?dOUMTvo jt}~!{@9O}Y&{Ig[7JbC5,ֱacagB\À%^XYr 0xTvei{LhA{m{ G3R5sjGѠf{=h:_o6M\RnJWm~{-u%$pT~%W :O)O7'Lm֗7lo>,87O| Ա(0S^ &!4qӶfSCK&]π̓nE lDϽųm$M؞L^d:FbG 4R J~z@}g܍^auro=蚴br(1y]EL{;tP#*Ef4:.t3m;# p7T:%uRN/OkY!%{M}OK/WIЧ1.9oԟn)xEǗ7ҔZ^spv[:~= ,vĹvխ~Ft?[i~uٍ#Lf5HnD/RM[Q&UǽR 읤h'W@߉-au&W z\#j%=$ЩM$iq<5M>m3&%YgdOZLv}wYvbLd_M_/}.: OEd^uB}lC2 0gJX[at:e|o6s~~FȻv5zjJkg1Lr}Tw}jCՃA^[JzE5?mYW Q."j|aAF]O{1X=9uFRGXW="{JP gpBg_M "er}7_joU˫GzvTudffg .>C(19iu4r3[g񓽶Z%~hXCt)y}tz̉ @Zr(9QvyMK Wd[MYWY/{W97Į^9nӮσR&m4)zQNٻ2+o1=kUN݀8xS.(w%V0$V_b>g-1#8W{TS㎜Tai1rDu#oO!C@۶WښEAeM[%fo$t%+![;};#;a{0MxoY@C z:{@lk!q~u,#Xv"vF xd۞\S{8@RI8@R-:}pڧ,=)Ra ~gMC37D@8H U;I bxa{d0g a0%m] u!l&g΋1סE?9I9RCu,wP?*甼9 &Jщj+=r^^LVQ}jL? T].S@3ʤ_`{z'-䡆`В,&-\%t }[wb$PS)'>g|bXn U%': M&b/(ݠ5Bozȯ Z:v?t,F8s)I4e0mJﺗeP\U\+^9 ` AN1Kww_q.envO6sE-{:1<HӠ]r dgBD3)Yi۳GeqW0 +W+a+_l^nE` ⟣ߓUeFa%Q>:hʉS\Ne)b{{_S]cDHa j0Nیh6Z-9cCNk YMiߴ\7ƞMhJx/r sgCc֕9_+l}DҰ~8pSW徆T<Aʶsrɖ+eR B~.{rP#Y=[*1"a) <95'e܇@-n ;.$,$+7xFT8>g5i=ێ$@㫔 yD*j߫v,%Jm,Z 4#\ 3k3AMwnD뇅} *}SDqab CU:-B5bmWddU#* (^!-?ʀ;58T~7=h9Q\|>9)_5@_II(Iń^"yj>Dg{l7gq/5CTz. E*DD'y{A]005~|ǴGN9*1 5]!kH{@3 9='֠Kx0f}m ;ϐjMd'Y>бB@7O׎I?H V~ 1йЏG**>^CwuC.6NQ`EM5Rȹh y'ڵ X0enm @!=/hŻMv8P_O2IJ2pB}4f6c^ߴhex-צ ogUZUX[xDD.= < P{T+s|bm<}&buSa|.ޚ=֬ItKӰ(HͰЫ}-`r]BC#\V xFTݎZk7<=+ r/f1%)n;0,(Ä=@{0ڣX㎪7 rCBB{`kĪcL`Ѭɝsvbk}kx4w8l-'Ml14#k)^'i|l^FSU |%9k֣N`_鄬W_h C8A* )Ÿn* yR|.Ӹ(ͤJ׫B*3u@ T1Z;-<.ݺreL-&/ -knoMB ;Tʒ7nC9FhϬΙv?Xՙ P㈜(=@_=;tKGإpo[]j\f⦞~O876Y(*5]}@UYD_]%V*DE|SOm5^t2ѺojNm E(?;C0Pxp7Grl8 >, ^xNzΈ=׼^JCA TRK{sD<A*tyJ7yZ_Ha eSWtUdiSL<-^qocU'*9O^ :"N\{_-]zo 5 `7W|n^HL*S2~7˩?JZJWp݇vUn&E:{]X9ht[4Z`pPd!Wc!D0_хvu\d W=T}} /__eUq!OСEOӾ@ĜGA&1dgQ#֛"1B)ݶ)#}ӾTꨲLec{K~' Hʕ=Bzm`oEAB7/ =G.Ϲ=a"+9BޕS+E!oKkD'R.WH-}<PM Qe䮟x1 zz"TmSma˛my ' :-1$:s].i" ,=A,q뚟5DŖ:ӽp:lי,P> MvbO[Br}UA@b\&2c[lsn(8,8ۼjҗl4FaIc&Q/NxkȪC 4ZRT{\L_ŗdfQ z"Ӵ `&uҼ: "TA}u7D6hӒrS&` R%_ՅuŤq`S}>KA.7HҾ$`!6A6Ԟ$?(VUсYefVy #V((BՄI Uш|*Ǚ;A.} Hɏ,#Ǣ̄wyOkVsb^Am4(ȰkvXDx,/g^<*a>]y+kAp y+6V>lmIo/W[i@ZYg`*m[ C|=kfPML:1bnq~iХjiѭgn54cl>@ԀVYYNQʿI+b7}6>az'  ziymr&k<mA_-T'ODP cnѢnX_6:/psvޟ݇(/ګLywZCm i'x9` <ؾNU3bh^< 艸oԎjB.7yc-d4 O5@v˗1ہ R\m;C"V ca`{=;x !{{/J :aEZ$dm(!1k}K%ά|NRMkEqn"}e gh-Bk $$!Nz:iRiou֐6Hj*ZѪ S.oAJa4HtWa*YJC)o0˳{+kD[XQWq"ZJ:0U4݀ݯ;¦s:[L|bu{Ia h.}s@FYxtUuιo az.1D1H-N{dEk=-=(΃!76n5r'*YU=T uf ;2DruZyS\AUbHB^ ÅV|ӁvF-)j%Hbp"Pn(ƅ}3"˙hU3UH;GAwR#@.m1<=vCpJĂR hGG څpnsKƻ]6W]y۝ڜ]CD qS G+#BAUDNw"F3kD(V\IR 8!Ne8UP/f|i9 !iJ2e?B{VuT;b., ˗0#N@{' *`{c}*X&3>Z8ߡX^MȁAYX y3J Gɱ4{sYC;_uV;ޑ88bEzE-clJX`^sO8ʥшJ)N`Td񨡍ўzDm'׽{?Mؔhܭ=Tbx[뱦4 qzb* DUr a*U'e'h^`jc?3jE/@*?uIc;q7qO>wIb1qhφgyN~i^.R0ءϷúD5W})Tk6fo+DĴ脹=-ۓ77n\G|EeU%B8#v{}{e>eVV%ZuåGlA"쳳bw%Fj7qDpg<,7/j~5<ξ7tI:FyMAn%ߎ7m?0"LTTSϛ/hZ <$f>HC4&; oGw8~^Eu^n# ޽q;!>d@ m5nY:'j<~Nd`o-N\bH8Ȍz;~Q?8 ɒgO&p>1&5q= Sd.(PAT(@o3`d|M?TS‚J?j%ķzC5~/StJF^tn |r"OI0v3<"Hoa"COVD$VuiwqPp?~_9hš?v*t(r3Nih`sy?x ;l+EsCfV9>o=YZ;\su*766F $E'VϱخF~M+~7XVDGyB{ͬ|*y> z|g#t8畷V3`9I)o|e61CMɘyW|ZJY#܈7r78٘ ~9sfŹ>,N7eoSޛ1M/f]kW-fUG-!:{0$y띭} sfYaq(K%d)"I wNdZڱ ڳ D̒zJM Yo@ϺWaysGw~]njDmYѱ0 5U?82" BgaLmiO9އM}b)ل9g} ϥ^g+fY,] /:>G88l?}AGX5Y',`[Ni=bȚ,m}E 5EUu / %d"Z9}q}Z{z0$[ Z15LA.j]6n%Uvs1EdLΣ7m>xGLӼjs%TU8wT/S^PIUUS %#է ^)SzΛpY&+I/)\W$%p7΁ y`_hkb`OTKg^)!{$ɡGN5hQWFqIL+Tqp)UAh\7Kel7 !]Bp0;.*}KY^ = C86}=fzH;Y4}VM$zj@|anRyd:w/c; qzJ5sKr`,>$kguj"G/|r%L5)OT'l9ٟov*蓈`{v*;Ҕ&ōHNR܉@V3annZQߡk/ز]6\* hQÜqr{x1K~:DUE`~"=}/we#iآif~XCB1Dl\i.O:~O* De|Ll}S#pot_^ (K:z K18[ݴkw!Kb'N|˝ zz^a_sw5J-j^>4s)18dނB:qr ٟj..6`gIeE}ҁ ^3˦Tj6uY-.'$ J=-L*fAV ,gb5lfugoZ4"os^ޓn{P@i7xpR'BGSf󜼲N3a廬} KQ:heLyOZ$ߣNB㪐}鹸C" +Rt3Bv# Z!fCuN_ ϷC_״or0T^ay d6֡ MTZgGƜ&FŔRcM{6C@)QAU=JO)m#ؼb!>"1P^2`Ӎ\PH~-NQ] f6(JHc,3 HVq"K19^VIDc`;Pʢ+z ص&3Nxr?T @3\JWt{汆Gń<+]QtB>g%<*? =$$xm+N#5@##u:\%@A R3&'}y$ۥT?sJdN՞Þ˟,oH+2œ3%׼<qa}rʳtc]l]pM#LL#ɟ#ْ]H%F1 w^n:&A}L@{*Z|gIuaֵDJ3LzcQ.)O*E.k_Bbq$28x } DHVOŌp{7) (Ͷ%em/ V@@/6R9o"2E7[dNqbٍ܎rgQ?sB"Jg^a /7&Q$]̢n `mi2Vx$ʘ*XVaA 8)TgR刞?%6 dT|SseXkEbdn;}AG ׀bcyJm$ؙ.feZ`w{"hfZ[ʗ4LҕNiy25tʜGc0I޽=e4lMh|$0q*\nSxͻ֔X(}rCW:A dX@!d8aFWP+X$ x`{@#%H7h[IRբ3~ۉOqAҒ:6D<>>&ǓGWԼ4kɅ.⋄gR 4*q:Aբ`h-A|9!GͧSO3ׂJml;Aמ{rk@}Q9_}bцhb*dq8!,-MNtpZiE(g),}6Lt4} `weҺh8]e*l (Ճ兠R~]B0bBvj(KЊFdֿ4-i@*"wHC.7(-.r>K%z /J VvMTSWlq m/~OqQZ璄ޖ`*z'FUm8%@0e8Ϟ՗mYGfЉw5`S·߾$'>.ȅ=*7^=.>!r-8nK<[AR0RHL 7&,  *I3s=Yz0z%7a}t\:VX(PD?+ń*5K :=$֟e=^3gB=%1G knd͜T8,)e*b)%y9R,p;eRZV'Y&_] "%cFN/'y m"2"V=t>{D%m`E Oiq'a"KT%B8 `Sq@r*}ž?]Q5F1BMa=޽ܸ@#AR7.Y+q"@c`qȻk?o8T /x<4vd3 Kz`2/v>;(}9->tS/x^7I:":T^"~[ PvnAn.RHflYbx1po[D |4dZ0jp .Rl=bOlw*3=3`QiɘƑq o {SDhר KeiM"ꄊc 0˚uKs8>;FSy^|X/~ީe 6֌Sa2 /承Ĕ<AbAɕiJ 6EQokCQ"tdj\":hweOQ+p`%&WQf@/h,>H`k I\bXgM&H&EkT B90@ͅ2 X2YN&#{/ X?#[ Х0`\w,y=L6,oHk4ja>qN%y9'3DOboZɮm凳ᅰhATg5;S1@+|# 9S =Bq]\w]<=H>*Ը-$xk#C[67='ٗU;ධlYd7so!h8g=~;iO\娆 ߝ-/19Ou (pQ+ M'FzLR_@c{1h*m 6-P_wg(K?ϯ6[~ä @/ ˕%yPqL){ܚ8C{mX::z{Nz@ҸmɫligIJ{|RxXZEc -5Y\RstDb˜RN>PO=)in5|ہ Dl__(n"7kkqmR[L?FرP=MwJ6\7_aL#qUple3oUy2Uw%ЀF$Fzy{䶷+ j~>}O~+BaUgqD$0>-J%>gQqUP{y;1]mx4 \̄ݖK'Wu2#oSu`m#^)m~wx{5 #|n\i6llIe(鶡vo ъZ(FZ%@!/K1nL nð>I;*R; 6aɥi>ʤךi!, <$4ʼn6,VV۶p# T?k-Lƕ¢K΋0N@:uJX˳mUxNf.L`Ec#U~GCݖ9yU=!'MPI/6싺.rDkO:'оXl? oP$ZV\1eq E_7aN34pӋY$&LKshhaݒ(9@ڕo3sj>Q}*VSvn, _Nr:9kl+}X>O6䀜Iw_ oY2pr&IWj̼jF_(Y 2&P; _y @r>lhE"E$]Yo_kr˄m.# 񃪧{H䞒|/.JrݷSېƎkzYG?\i9⠂ؤ+ \^B.듿H!ȰCC4|ưZA`ϋү$%8#[8ݿ 9՞|Hi}XjV\C$5L/sx}cktd~ڵxA -4;&H91X٫A2WqeO0i8 E)U^іG/3aSupۉ/x~${wjߌ *WVNt(t'`(oqDBļ{QC AaWѻ"JVa ThOC{A{+×2uY'pP{!~2 S 2Ϻ>x/#oxo,{')-G.'3AވJ3An4r&oڇF}Čz2UM9oe+A՗4ϵ ګ]W5C_m!`d S3Q- &Q2͈䱤մ#2@8l;y(7(imq7@#Rry\ B~.;8<PCm=,.d +Ù4"Rg#`5*}Ch&s-V#D5ͩ-}$ȓz2(b;{7Z˄r#l[2>PC}&zQ.윋%<|(@WߖǪt%Z-1?7*~fl%m&@vF?F8S^o9iЛPFQrP3@/c^T@@Qp r:죮 o*xH7se!]IB8/vyhMzAlM>ɬ'M; H5gv1WV,loWE^5AK)[mħ X(эOVN3Ddnh=tEJ<:EQƹ0%R!Vl~pCqNe{L@"Et;s]bFأ3( UOB./rohD _*Jϫ~,m&å;ܶQwRd9xtUv%r=D< D8d I IzSi8Ѩ^;+1H Sp PM$GvXApxC T ߀kB a֓K<(΀R1?˫bIr%p n#cY&5;̓zȘ+}x!P4Ѝ}F[q^J<ďNq Lm ]O;0Ĉ|+[%9=ȇ}`pXNޡeT?W|@ "$cafc,]L}ےks|r&H>6Y}D jfj=r IO+l5,iD ;h=Jgմ8e,e~cv{-f;lƪZ#4v0m #3^|Q1/`9Aluq]ZYfu8>984 ?g}ۺ@gxjz6BTh'HX;/00hI,lI,(-9Sؖ ,˭_Cg-2q=d;n_7"HRX7C'wXZ@VԈA989R8О@0Ti pY>AŇ94ak> W9(О> )   Osk){4%͙*{tmLY>?hat*5KoPA2}),rv:̙{|6)2Y#+!FMJB;@)45(AM'ͧfֵ衆` ?kO'GI p4ȤPoW0֧~h+ gP^*Q(HY}\#&,I^Aʟ:|d2JE v )#Eδ Cd3PQDl9AXnMz~bw L]1U^YJ6E#:Kgu;ڨF9 Aiݪ CABFbγ+;A%F-t5-4J Pn`P"P3ɺx,a}e.ZȪ&8LfT|wA#N A@49O3,$5#2`r7}kēL >@ +Gydrqb0-&.\oX;`1t>k T<#GPE}BCM͈!}7Ki{NfE]m^bpo Y2Y.`MU>^$,bC3z P =R5F L4lQOAVmN6weV 9T-T"_oCIp8L6fhг˕R b @@]"{Ape4 dhWÈ=,XW<vg)t46(tɼkjmsЅS.cL~%$)A]/KzxP/ f[k/"@E:fC/.wQzO%CYjn:8+ Ogq E*/WC;@l) 0 FXț02:5A*|ogҽe<>Y%[oI.sH_/sg[dFگIX(@K5+(_VH4ط{zR FKpC|v)oؚ 5!.{bO2,B˗:$%0J݁ALD D+4i·Z7zx!R)6-%~4SNTSyEɇy1|n#|[ZPW@<=W!QG畛J~xwbCa%Rj.S=ϑC,s9x fLzCʬ7>z vH }F캾KhjP_lMúW!^Bj5ߏc4?H^Q<sr: ,zrN ^L|@{qzn o{ylbQ}[HY7K Wwr["a,jcr˻u4 X+ {676 9i3"mj<-G$֬69^%;_Muȁa5 njO:obaFr1# @~`3զfB{hסZoh.OTn=!s%K͝5?{%ř^pC7V 7Twl;3@;s^;aZgQfOk^Q*{uzNTC`!"8 ic8肌S6>db?];=hzcPs/زawJM7z(;˝Z{t)$rxw*_$$]볼iƞQޱ9Q)˲ Ӌt]WK"c;5*|y>2dPIo*9n)Z>=( dV |^*, ?uݪa{պ_Tj8I"G|z@W\j>8nTu_(*P 0?TKp)ǻ}5g6%!1'r蠧Sڪӓ]JW3*hwl=2Ey,?J괽kv?r= oUmKkJz3w=bqt$$17BR Wq3TF ?_[E@ ܅֟SJԅk_AOaQVGm~:$1{6X :> 8"c ?6v>/T-[X"4'1?Byn:^sUP,HГ*v"Sa.C)3N{ތx5=ݐ=A^۵Q^ ڃԡQ=̓oYb5bxUZvlT%d^7J7 {Y7t q;A6t4zTݶh]+}/@Ӏ.NQ|>@PRWȝio`U^cM|6ϛ {T2v0'g=1= ;"s,hvE쥗W{@/%ȳ_bƧf}-jV)_9hhEڸc\s۫jV&JJ76xG'~Q{ {(Xث^EXqx/@uIngj2rf?@YZ$$J2VD/2xoBq4|U@rVu?pqylê:T С0:^CcR(`de(HK<~4AӞJSf=: Mn|w ̡^^_ GZ=uFPSogÕ:wO4UJQ=;SzBa;O.bqf:g|~ Jxzm3kd>7iD((~DJ ?(x2s` XxMPta)yۜnKPl;4MLW*)Ly"i,\L>) |pǐSO$P_ ~.\q&_03{D T?TO'PyĔ,D:S#}B^T#Tm X:ANuO2!CR~wzMW, sa]b8d0U יִ ZV}`ہRw9:䑪N,r/BG]W:PsLN諤SEg:=xDN*a=| ]*jM}GMz /d)2Oʲ,ߔO>oK{5_b5,,-HWS6 `َ? Dފ}QbHAb{(9* q ``Vog^s~{lG:\VwF[.@wxY1Q$ƿ.zĉO[sKdLcyEyN ~.z6 Թ^;Hw5 *Og.ܧ%0? nIJ^ڰۖ>>z1CknC2v^]bP=LClq!U7K\U `d~m[.Tu+ pl)M>Vi$]B)yr44YIT0XIsQQY)<)6}r9D;K lMGޥO7xaE}n!zwŗs>ft{'AS)>II. _vfY8 ' FAA#*U^В?4 Q r\>d+zvh~n@ -ֽ:^=MPLss][{Z1{!&ISGkD5dC'@Wjeܶ;'W1iɨ)/=2b`=XQ$CٕVoË r sW|*gfAY=H{S|kSWu̯XSVG> 1(Wղ98}kݐn(!-R"@]* -O꞊|;C[F7Q|?.S:Y'ze 2_Xxtcop Vzf$LږĹ/fbи m:s{,"R*+m6SY`q V)ޮ4WM7 ;v[ɚD'" >{uy;imڇ]/ 5zO)g$]a8Qpdz=B{\LJ M֋`='U1M$@E@ s=!rg|>~!]O]IV-&˴ݯ)&a  {"c}:"a[W?6_Z6H<ʈ췙~/ٻF`YZr~싢d)#ϻq76c5M %^%boڸcqWr~Yڶd'jѫ- }"4Âw @g|U,MG+˕Z`K[RIaFX5mrܾco\(Y6"T5ͥ~Y{/lˎEz7MG=!%$gᙳUkY}zvߴWTj [Q-Xye>b{o<>iUyDyIe/h&]Ff.tYVjP}ulH#Z?Ӱ 2]Vn>"X m|y;* Wm{e=vCAo>ku 4%Q\րY*Ⱡ~Pi4rGn585PHOǜ|OʺEͫڹQKR/2:8"ij?P]\,(6[m3IBEa#ôIui_OYadMNl : Kp뗱GR.O7qy>jR;oξzP1&;E5ustЍX"S^yYJ8,Q ؕcZ ZTa"X0Sfj="o)h JڋO3Va UŲll{fO>n%Q_59Bҡ(9{|ͪ/u{J0{)m(_a ,g틣J.xD1ړ+<аA6f3J`UvdDaPN*޿gK7H[ ?~+0vuR?}R3xl_B3+ÕmQ]o0FdrVb'r8g5 =xJœVq_XT P 5Wg߫U-&iTvuydP"b۾Vc5:ۄneuՍ2y-ˤDOm9A@Y02EU5ʹ-kj?pc #an,#]}i-)УQP dnFR[ۃ.*]qƹl+ 7vb*>[r{n5x)suP3C=6n(dk(>^;t3Y755hxgeك8Ż=<ŎT]2CL!/ݑBȰ䩨huQGVQ~Նܻyo0辋և=k+d Zh8*[ըlJ|6(^d+W8i_b @2x}`O~ ^"I-Sp,()!G{4݁An68#2̀C8Tc)|D PUt AVaiИ $Jhyl0UU|)Fj*Ym݋꤆k ~ϴHsM^OJ{DP:OG?6~ F{#s*ICPlB qW4c~cְk| ك@ >-\aACOAho., X,@"QΫoޟխc-U/q5Ϸ~3us_}I|wV$^8eX78u3slsi7}.a ! vxߧ`YC gؗ$nZ5!)۞s:x@TyC.3M=(Ϯ}M.ZN j; ٺ& fU=m ?ӌ; ߷7bk:@Awҙ;v@Tu`Cjd ڙJm?#͸is_>mP`?\eboV2[ ZQ3XNH簼Rl=FgaX*ؙ.sX%#P Xd- M&EcPZe5׀] DD|۫o1"tz<951Q- P dU8aT=)/E^hā:~ ؐOb= ɈQQ<~[)/S`oJ-G;arNt~""'zGzvcccu{j:2N՗ɹeQj|sYӬwa}Wj-P^q{VH,ga韕RW c/=yADm՛R\J"/$#"C, ?= {@VP+%B5Vɬ+E V%R;K-v<7JcwbC0=t9qےd*Df]@UJ͎ ĠuQ[*3EFA?u-i\~-ye?{XRD[dfxYoid?+. *dv'Y.b'eO3U  uك)5mʄ巍g|n=i:5 *;nf ZK'[_(%\vV0S;=T{Fd|#XL/=@> Mkbg%DÇ58AdVS62ҟ-+ojAiO t+XYS,AJ鸹F3vyZ\od>VꩿqԲepk߳RC$̮ e{^!^EɅwH\>N܁B0XkfjE;4E`{8DFb뒱=|nl! u |b{6h[.D)nU>!{fWM=D8H?e ň˶w[)LۇmmT|^X([j~i{mI܈$ӊPȚ3q;(@18%'[oZHzP]6I *#iQ9v |EM.E=jmHtn{Rg=tA;"^E$Ol=80 ʼ׷ =/x~vbmQĽ Q~-҂:1y'Pb|k=XP2e=e'V[1߾Bj+yB&;mhٻZ2Gq3UZ;d}@ g[Ձm@AT |ώ './mzխq ,yǚRXɖڃEyU{L۟:pCeʲ>-5gA!3WE)кK|q%/ /{ZrKNKR8ۤm=>Ղj=H-8ˤڒpoa=g{2(s7d2_\X4 *{҆YA~P PF(5{ɪfDX37)ݝ)V˼$('mo0^';2jOFyƶrbÀ fgc<쪆Aoطt=vC8R`enW$O=6pIFc`oC]6ڔTueyK[ _>͸RE ,/N{vy=vCXFg~;A%A*n45&Jq6Hvͧ袎N6ѽ=($Dub-kW{ VtYU릀d}Bh4hgȹ."K0UqޓVu@@k> =~vdHjE8cw5&ޭO}b>$vx+#^夈d2_W SvޟQKz!`L>7x{ǿU"]k"-8laf֊ H^{5N὇”dH~6zZE:}a蚼ͼn r_SF۠$FkX^!e85H&=D> v=r߲398!KVW!Z=`$}ݳ_XiFx$jxx1YDM=(vdzplEo8y>eBfg존 iT#};%oQg֥#E=(A~zmM,s^ /P4Ӄ R}^r/uP p.'Q/uA{=Eg?||skCoB=:ݒʣ`o"ļz MxRci%Eo5 QS57?J[vhZH7u#kYUO"2~Zz|ӽɲ3q($mqںTRQѕ 'bo:QM 2GKb| (5`|uEsWcoqǫJ7?Ӡ &$Br{~L'čα \P]ѹqݻ/h/khgdyB|c9F6l޿f+ntBo&%Yӓq3Kou+;"`{gdgH;ǰLB2NUwd5są:cxFY Ɂ=Sf=^^7SQAZM[m mBN6RriFPaJl}.+l6C#VAN.Jf8`GDyhM'`a]eyAE50݈a<E[EG f3ΚnYG6LԽ[ 26+JzZgh4h1sĞbm>^@K5gCwUc9} k*gJi8ʡ4>̌|Vtǻe3hIԔ8(,UF oi̱yϿc\FHS=n[/U,m>d)"OmOB5؊P'8|NKf<8I| ûw@M8=K[] wn|ڔω2̿nx@Ӧ|=< daֆSILYjsŭ,IBk%5p%>]|j{Uʸy" R73k~!MYPH,NVrG߲F9ZjiC:)w;ٴlY 4T4ԍ7Rb6\]:G`I~ лzղ|@*EP:CBOO%Y1%1=@؃99~EXU= Fd.2jP@ 8 /l(`#$n/RA {q 4G^v5Pm3u:E , J2̽==v6pmP/'|E:_/(c^ω! Hxv꘏'QK9^nEk5c jsE|bgw͘'\V9A{>MHFy(;>|lKsjrҌ<7^zp=(_nBZQ#zP{yޜЊ $|nn Px7cJ kub"S3Zyu@U.w;蚜G({A]bej[j:t eK.Fr BY^ 62^wc:eq*ݯ`>Es>=rjtlfm3L6q2@jwpC呎8RD}QdQ0+?gjmP|e&b_ąKvEF%~̊nq7~UnNbL}I)D`eێ鿊9n=X Yn EԌmWb\m8I6\K/Z3A!sU U%T*Q:6mT e=+z.@ "qWg2,K4$=al+YYo NYse[IcG%^Xf {!`4C\}T;a*uU95+Ьu$bHQ*ћjһbo{&iJ m\A JU_M޸(}wth蚈Ru8وoǤ4&+7ۧ>'5!E_`q]MZUws쾲둮AoS%e: 5: uH;rJ06Z TzVGhk^{B AC_2@lm1.DjVkaC5VEsТ1S^(Z!:@ >:PiagC9QuKm jhENТ ]c%@wеCt1_drH"аtdK Dǵ> 57LkCO)ZQq77\$d^fz֥~Q$M5Rg;4F-t\|؅hPhaA$u֩ʎ1vJ-Cb\d~\cKm* ~y+\wl-Jͣr3ƈ8 ~d\)ܟ٥7FN]ij`_(תG >ҫ&AH&״[nMĿ]7 &u AdNRu?8it9L7Koh. g^f8LfxMs,Ft sx׏ʟLj x.`nsT0[Gjq1 4.Ɩ;mH^եX/76_e)ÈF2Up%҆4@Wud}X# ȃP׸ԳD.in=?55 {s~d/*?dQ DOTi61XƐO'"=ClB2B-f?J,9 (rF QQ ѓ=4}P> ҋ(HQg[m~*IC 18t*FEJʙ@-,y3;d1%Vmvtet eyo_^'d-nՑZ;6杨ICW%9Z{WkA|Mc#Z^ 9r~-K91ԑť%gCfao:@< KTE؞:nЉ\/9ZNwv ‘ ]Sy(*ʬҩ`9 |of:LXء_Emv]m,:R@'{4dk_E+0%,0lgӣ7Z`j ͸HZ-A'$0Y dK DTښ/VBp7#3i|[kʍVctuֵr8DzZET4k xFuRcnms&AɩAɣ$*')MyvdQ CO3H/$nFimb{0Y\Ylͤ\}AgL ]KS!zِvͯjQp뿢@ Hx-^/CUQ_1 @]>JQ4O }耡tG2\!-_p{gN,7;Z_-;n0pjV$ 6M_lMa[ 26; :ܥ)N%gr0WJa%D@3m:ac~^uR0yKE_)68]<{I!@Ǔ΄ujtYfBݙ'tB+gw{x_řesU!;+(Ϻ,o,Z⣝AaR+6p 4:ᄤrkao[=6鄤,O0@W^| 7-n*rAT=Pq)fK>8O _65/h ,f2@wBVB - ß>-H11!! > thdn&rҘ (>%^T~o $/mjf3TJ Ž@ dgj@vơ)x^21-clIg0,rCz|=7ZA{Кk|^ӕ(~00JRP-n6//aDٻٞB?P .]BiE?B\#@0bj M OZ~ p EE!i2mV=Gf+NuEӿh클e헽hmO"B@Pҋ2=N[y3#SZ?_|뾪$@6%I?('K * \6>5qJ>O\|S^ ҔT\쫿^?HtҔH@DkaRn| @TI t&r8O}jt}3ۓ|(rvzdüf= {lJ#kzhS)]&QRνxWi3=|]{`(Wބ9/T'%cYSddPʸ%><㱫a @4آ0SjNm(N 8_\dvةb J3mmMp|wY|0nE"ʞk8^4΍[a;mDD9^"SUxo)m~ia/MX:|ؼ@G?gVlOj X *ܑsXE!j EƉt*ҺfMMip_~JO ˀ 9Sj'(*u@؊ ?uiNgk?,et!68&֗ؾԁҭD~}ƫ3`Jdchfyӥ/8νUTJ-L{ ^톙/ %b/jw{B~1adMu~P"-r_=v^>ZZu4u\?xllip-Z4 M^[ގ9f~E@115%3f圹~0:Rsa_mE{ $')fɡ x &OM>g$suNΔ?x>CߺEi x,+j L&!nxҧ]* &^v<@{ܟ5%i#w 8Q.]@k>#@HϮF?,R*,KVEv62}F y&f'_{{}>x$,K< /Nb 0="a^nh靕2_#>(Aª]l[]4;aauQ)`I(gG,~Z%x>L[Ҕ澃$o'aVOOy]@&Yо_ .5E˜1wl>rg ~.}=8AԿU#ZTJݤ -_Ah(K+{Zѽ.2|e@S(rWS 荷.d>{KͷuhFHxU;3QZy0MfRs.x_N(DJӿX ܴTۖM7&E[D-iˀ*ϳg)i'w^*:W1%eu P*C O~D6)~wlij(v\MuX һ)e~zO(jه1#S80CPhbČ 5>)ÖhB&74.;4dy:6г13+rEQ@Ka=@CE{0'%kǞf LK\6pL5k !e`'P|]B'ƀlqN/!a#N Lh2kܒ vfMg+{T8;zfUA^ӗpNMӊ$^҅Ut\՞C2 8PUJ||N J1m&ɹxĈlRYI$jVT$/ƬrϴaWKŕE^0rHl'%|s_tSfx!XZ~5 :OG1ږt0X!9Get-U- 歶{it8RI5DARꜽk2-,? ڃ%6`+° X?;L~҅ TM>ҭyb7V0CAop{ZtJ ߆N{ ajӺH&>b]CɚT{ 0ޑXmeZmM|wʸ#a!Æ2OY8:VG/$FKh#_Kgnk^t0'>Bu*mpUf0F]a3Ty۳ DaGthO8.$݃!O}1]Mkv3%Va ))"]߅,UtΗ*:|4#\[ @T%2{0\ 7Xd*O[Ken}'䱽HTbw'^CeoT`~(8e]sXrx Tw:‡$pDKDT̷1kus/@CaU #X5uAAg#RK❍i. ߊ<@E=|@I?5 ܭS @%,u,yKX "wnݩҮ|4?c7dh:YdFvPGX(_ Izz"}^QȸXa+~} +M$ 蹜oIlJ%8mKQ?|(xF{ǕLW}iwwarrMxۓ9f{hRk20P*^M EFk]@˔kzϏiڐ挋?=tBN7L"Y5hI;-b4ի ˽xR:o~hxDn]>xgp %Q%3 q~zq4%D >h>*q 5n' РҰOï]mњb*inFۡ0 h߃.b!̆i5&FR}:tos& (=iΑ(+ϰ1z~'!l~Ǥݴxũtk!6}Jjnxf|N(wT-^ɠxWMˢBf9^ϲ}V\ @XmH|_|Q{@XOߠn"Wx5OuBX񠻐=hIe7e$/nT~ kgPǹ" Z~+sęh\i9Aq]Ko+Ϫ2}/P $*CϽ$9 {]ZR} sLFB.MO`)'^~ѧg*Ys[ y2sf)5DAfȦ*o!Iz`iBf.ǶEi`ta?}Х\|r8jUK׋=2G׼ b+xډS6JS__8솨(j&QPVo|qP :>ڷd|ZMO^|ՓVEm,tlk AV$H%trM(X"A0>b@xك}ZJ؇%:ݐI/tѽ7Oa{i($'V{lEozŻX:}~vS)}~ެ|AeFPF^2:Id/" %Vos%KWP~fݨoSXmXYa#_k1hz60\`PY.1p7>U `FME-Bomz!`akA ӻ \767rpi>T&-/ؾBqzU W %s`{@[]޲i͊ZB-j D oN19 )! 9녠gH5H|0r+T_N !غϓj3sjmyP,c<{دsRXnf?m9R{bPaP bmyܻ]81!a尝R<)MuV{ {Aʤ Y,HTq kL:6WT}SJX~K9!=I*lu _`5ʹ(s;CӴ!3̍WHWuRU-5hč7|$g؇.I;xyΓ9eJVtc7+]Uؗkr g^+!hؑf W|fW0>N=х/f[*Q҃֩:' BDAg&yCk pr}/WuNf8:!pЄ8|2/d֒qgqSqŀ6R>Гb s->5ki߯>]K0*Tk,ہC}IYLn1` :mR={`c3^wh# _c9AaqWں_}R&N0ef آ`Eeo-BXcEK=sճ)t_CBxn}\v"]b%E?'Bg.?`{~9NPRU-ׁAS; 7sqPAXln=|p맆}{>kd⏤M튛fcP0ss#C3B6A;Ք|P?(bh2@[Afj- Xci \ 0o45B*Ayv6dG VcKhld1d S`XF8L1hkĉ)JDA :pݨ.W} ,mHq -i7B43,D bX7ܛauՎhTnkCKF> ts2t0r V<e^$@C b[ IƠ%(`6-42E?|h%hM7DNBSޅjcx4(n?5]tP8w ŧA zuSu$ 3]eOw{`4_HDlq>/b`1(-b{x&=dDݨkBmA0x&' qd1 ߄Epټ,1A[khve--R *Mw!YKjV# E)b p|Bd[*DX:'֬xKqo71)SDENU-|͇5H^$W]{x-[:Pv*.9k}p<YS5x[j-[@S)Xcbƍ*(fjR(G;!dP [b{smʁ$S>>jXsU.2Mʉ>>mX*]?i)ȱW<0e[# Acٹיc[tC!*Κ5'D=j4 zJ^Jg(ߟ-`ac lT9=PXZ3X6{}kIM6 2S{J oz(D 58ykc 12kحT=Wf婵U5ڨ"@A$ڹn@{KN S{ υGYwNgg QPҼGNqfJI͇>0|ֽT6e˅x;rEv#Q}/:YliI*K`}>zV~3MnvF,du.Udp xv!C?L1+tl BHPB.䋽Ծ#/\qFhdMR uĘ3"Gvk1mZf$|d> ?y3Hu7E7В>M4rZNq-PU^vhAE}ΏZαc[tܱ 24"Y Ұ2h|k[EoAUt]@4Zus CbC6*p/&0e㤩y.c7RCl4yVlCM QQW`>U ,mVOԲ/5kqHFUs_?ywZQAt^;e)YGQȐO\wK h4!ʈ^29t}{Q#IyiÇ{\pS(%)\pFH$WY6.wِB!|ЂNi+q&Voj5!mzMԽ ozmVS=t`O)?v!=WlyjpZ [o bKYNh'ҬՂOY_bbǔEʱ_ߜ6Zapwt}d4^#KtȚO=QE~QխfZ8ؑ=hQȢ2O>MC״Ԕ;:4~(z{]IujaiFEZaz̦vdɱk2HwK ص|]pQ9`ĮP{%5OT^~P?&>kl#Ŏ VbIΰ{ٓdm%APx̨(ԘTD<6ma{@6VPWŒXoާ0<VY-Ɣu[G`&pFL3!=/̂g#gn qNi/X(Ж(q݁7l5 RU k{%S.ё24.LE`p׏߂y^rEhP70r%"ݤøzII5'e^ANu +^Өo9yvplB҃ȀH 9o}5Gݧ@pD5v&1 Î^{tkD$K n^7 U䳲EhHg@5ojoouPY>0'eXn*4(FtdkQǝRFl%ߊk w6a&a Tk>P[<wBk\sKmSl-:_u(EI@X;Inڷ)wPwJiQ8U%v!)RP/#or7nT![gRxGkUfVzj<9D~(hCTϱ:Z/:ț)d*1slЭ>v(꺽c96 X!3tbo A?%FA)WQN;VL cP9E}8Ŵ%Aʻ^#kIm6m[ũ2*Y:ZYU-6%^Ro4k;c'yO`R--3NV{_7f%Ҟoo&J?8E|QkSC9~NmʚfXC̲X,s ݇!Q%MۃM;HXoT@6VPRIM3~=(Vw50n!uM"\(;k;jJy䚪9YR (%, Z)Wu1fMd\7a1J7yܰ{ѓ^ZDh;hdVfe&mF^ۡx W6 PJ$_%`gy8* A ']?ǂ4ZHo|cdRTjm8ֿ$r@F%gw% \!z8bgd,qU ѨqgwoPtQwqX$$chnHqp'ص`5^qNRO{cfW,/j+wFq~Q :gi 隰 4VhU֛z_?3q!ĶV#efha۝bE4Bf|H}ՀFz4Z|" ~- g9;U. g…c_tIvU1gd|ov!U_Ȟs容T҈.u`y4Peж!ً7HVd2goLg%t&fGE0:1>I688 C2YYo5O3Tbch؁g%ۅ̉1qҽߗl*%FxX=9):8Qhc20J9]{)hm,e c>Ԩȱ{>,7bjGl l2 f(d^߅F2ٜ^(!{҃I?LIjy}>BR%ȪxHtzR㏅[]=%% Y y4zb z۞1t͊ϩ%1·mݶ`m k Gۭ*LѠ>&K Yl[纵:xz13f LnuiӁǪ1qM>)&]IUGt>gv"lb;lqDTD!D׃rwEBG^z0:IKyzS3ށ)nO!Ɯ s9ic=G~|{uDvdt.5Aev/]ֲ^WO dun)5=_dLZڋBT@\Ef]3h'}kxK,z\3WK9{c$X +92\%in:ȓm$Nƍ|H`vW`SH'VekSeZ 01ˣ W^ )<+>a&Z*ZsW%nml5poD.}[w+XhMuJ;nhKh2Ѱٯuַ1P;!&N!)Z{*=mHCEsU1R%WUYYE}~s z (/ex/`si#Mw|b&>u!̄42ic?\Q C$/F;q">War'լĖéYdCt|>T!s'agQ%w$:u\A D׽M믴b7hL4M: 9m?Z^$ƲJfe?~;!\}{-{ $,<}'D=c3癱]Gọ̇̄f[ʹe7_j orra :W)' B߱N6yCٖtmj)sv phD ۭb @  ZaRf: tAt jق6ǁQ`2[m)4j1x&th|ء!H/4[\A C6N;6)VlB0~gVdO$5Ա1QPqqpYSlkl@e0V[m$φzOݱ.d\8E@} t:OL5.E>wdV Y;Fu=YR2g\g9`ZVR^Jf4PQܓς5A> +G(g=o_OF.o-ӂU#B)?dKDg,7^0x{Z)pI=u. "#LQ~ؽ2dR(DKl{hrn ;J傜&3Fu >87j_!,,s"#c Hlu4[Ic>=t{pb$~"[S~= ! tKL c0h)% %v5>ojvﰷez/ w8#;dݠ^^{Xj9J|-3?>z>ā`, ż@PrC%vp^<5嫺р O;5:uIW+A/;%1qS/NP!̰U62}~SZh7K$fƇ_t"CjkӶJx0A R+Nu^w@PMYi|o7?{eJ^2hp,+k}ysIŷFa B9ܤ֔7s{}$?30 Jؑղ=: +S~e=6\2 .7?P;n7p̋5niAbE>A*zg^5Nf M4uy#&]uh4Nq#CM t}hieWKs?(B PKG!F;*B6)TQakq;H&a(wߡnUq,F" d3@aªHէhN$mDu}8#uIb~)UKס]JpG)E TkwU oAH3N~6oR\I ,J1iLUn2>lC;,/Pa;'Ձ{3(??,"nP 68+#ڽ(AG5:Ly}Ƿ5aGGn7ONo3c&[OȰOb*D皃8m*U ;7ܽ$`7} 5Fq6_jLX 5lJS :>AIIMiyߤBBv/#Oߢ3hK$lؤGaµ<4 (:Č{TMY!bb_;ktE~$#PnN7yoׁ.~`J*@U]Յs]xKga8C&1`4THr>03l5/ sf?!H`t:[~/!fPY,<<+I .I6V? v%"ńAJRmR~*(g3HF:X t*˜T7uW\{gkw튫BGL-}4{`PW8CuY,܇Oxpǯ{m=,/!rxsL[[Fk~?[Pں>r:]G=3%a=?ՊQ&*i7~P5@hjd (j|4xDS].aZ YXOP> /w #V2Ň[qzeႁ}ߓyf.l ]NEX!mY^BIh zżs (TXjU=ʫњiE q%05XGC="LR:ӭ-{G7^ uY4s,by:9{T`,QT~d*[ɋ nܯM–@&+LZ!:@S*ni ^_j GYSl_ G2E h2@+NFrj/An_ 9mE;Da3!Y \K0׽MI_ T.Qܷh}G8.!{K|HcW!# gabwu;zX!n]+6խ2X9xQl~=9vK&h\sRLvEbR;0(5Qk+~9{sֈJDSD8lPelqm zO_B64 fQ>](ZS 4EdX[vAӠh] bmLkY *AS9hn U7ZF\I !k Pѝ 6C;b6:}ytNH=]9jPDpɳHӬpPfac *zbعSq@L H{[k9/3z㓰ԋuDSj$紞yMQT׊f fT!FwA>_4& k\.9+gV=U13@W; 8D=cwd]A {n-ɼHQ(- F7|k}r$~TL@p-u5F,܇O'JZSx,Ot뼆́IAh&fCdf&⠂ ?lR=Gm5\ WBF|,@'9R4a e9w2L9KKGnbߢyw-/C[ky4ɮ^\1e6Jr1,AstYҬ>϶l56%>#Kt/k[k?*D#d劏w<9$m'|!ٟ9,$764uX 0<($НLi6=2SVB5J 咛suR*ؤ=+$}OuXN$CYq @4s=t#n4z(v j#NbhY(!{їx>?,<(x<[2]-j< +nkȺU7/fρݵc{Oٜ`?['1^au-CjP &@Ch{*Km2$1c׊w,Re ؏[1q*/QU/c{pڗ>$?aR~X;Ց~#"=Au$4x%LJs>/voYa{WꟚu}"5Ew ®{&g5}{R{sRMU.SE\eOY,F: &YH խZ,H@UZs|/@![lc/ PЏ5G{~K-TgMA~>z5,C/Ů/ɶ>N6  @CI>/IޞI:= JhVH4EY G4\ ֛_X9J9J5~0Yjj/:aeY>D}fejݟ7ъޭ#E@zD(@ikRDQZ1e戠>W (<,.*o{A~o#Fj3l퉳/sTjD 獽P$e_P*/b;>7JmEMpz7,CXY9&eQ { T PG[<) apH"HvB6jE||撤,fq (p}y |P^ IX qieucwH]yG ԅ%iCͩ Ώh|\}i؞4.*L}"iC2:آ*y2Uy!P=|WBayL6pIiNLMy@ћh''"͐٫8 ų48"A"aa\7%Txq24X`iD܏7.#X'[4F$1[`0)/b|]Kpw'A(q!A2~oI5ZkB(Yop]M>iU#7)t~%jֺ:ujw=\xSV{/fsM9$[k_ʸKɗłg_vm@!/vXtc0M;Q]Q+y2o w^>i^⋛I^7ذRe9_ ~8~/5zWѠr\Τ9=´#TO'q(i9:H6MΎm/ṇ)vua}3x=ηpuzbC%z+b dEBB$d[lF|b -c%y8~w)Ir@(|>ݑ#l^ЁJحaetgC?ǫ|_4;"$˓3^%JPaX͚~Y|JRtȞt[GSoy=&.tR=]qAOӡi(ڇB.--Np$:ZJtS cnõܟy RY>#.0 f~BPF|6< }iүDM ;8} wT0Y[! A-#[V&.%!=L?/L:e"pHCPKp H ğ#R(I3~񪇝n6L z腝S>s{:vhʹ FJQ5,T٦L# }0n#8ã,xDɷ/P>fE  ^O)>PoSrCc^{V| p,g(J$Zs8}~-509$ JX- M/n~ -QxdXE\&{5ۖ~Xap93jƽBgr7Y=CPGD\A{_V;ucv{f QyB'J 6r*jHx){@zZ&<.<}߶o6Ei|Hkn/+Z Kq'Y;70pPⲮ;.<dJ/QcɈcͽ A6@"|ЋՔw~_)B8~=Tݯl~8g}j >;6@={ J yQ\:o]p<|"az4{=]N \>?"tfd%_ eZ9ʖrHl=ϩ,oc.YFcN\ ?HD{ŨS.<FEz"|l] ebn.7^C9?OPJ;,ML]g(FQЈ  3~ H T׏ YV vPHl퐆H#u0yevh' 0cp^7;{ta癟R_c OV4D> ݹ-'?G , ߇\̉4AءO=dRoW[s%]dL ?yu8VGQ,@BC ӝu{ojz@dWo/d4>IB@F,42籄E3+$K>NMEs8}]QC'/OckAm?{0ӨswN{}-CIvH$贈!> B /1.lxjG@*bXl"N(_`uf>޾`̣b=AEFn<[DMcAšJWh}';c7 Ԭ)ϷJ{%p>/E|s\&pmXj&nw.S`'jk<ăyx&gRh tߏm. žlGS=09kM̙$._:swғT[106ID6"YA8ݭsK XzFp"t`9^Id =xt{Gq ȗHB/mi`F֮3nS\|c4+8~ aYײYOPw>o06[(J1BfeVjdwPP_dJ-$jÍW >S9?~ȪE5LߗF&x79Uc4# FiθORG}ڵ&5`!v %~k|&4#<%xic7sCjB2z'׈[; |Bz(/~n*AAd<>b {Sb g#!@yQWCb%aTί (^E ur5cXHxEN\f?C$B/K Ӑ H 9iXݰ҆~wiC ,RR;tY#y;-8㠈F5(f*Ume2z3͌+,P}?)0w8YζPAVqӪ烣't*C[<{?+^^|?1z]Y+Ngy6?8= l ǔ!XEAxi:/DCWS>8#+f4]R̈́2ne|KVgsg";IBy_IvwuʯժEAo\AEu5z;IqI 6/ ;؆we:E Z4iF>p{ŔQJlѶ#G[H 4U(p^lQ:A|EW?t7.XݓALD gɞ-oClƄ 25;Q%][a5®cUK88y)S2$)dBE}r=ED>[l*2NvhCy- ()y +/VU2=DRl{0PwNsq8(h[]7Gl:.LJHZLm%w'Flb#V\ ݹtaόzϝOM4hݺDЀw',t{ϱ/P쳿s]wa/慝SUc7E^^%zum#ߟbĝ=fH#x5Pk[ڶզdԪ. Ќwf?(=8^D-f[YDL>/Y^o0?O8I{)>:U^=q<.#Z(JEG;/!GdzV[փRfEkd+ԞTDl9bz/CxբČC\xq }5tdIG$5XjoBY ޛiXl>@O0u~5۝Juޫ!S4E3+%;wٺ il3Ta+Jxwл9ܻk}4fp(WjMj#ZJ*#4L`=EGu)o#J&'څUVCt3mB A>RXOo#NĔePZC t{uNs :$%9_QY^w_P_۫]xz{E۹RuZ2IŘSy*l`XO;>S65C VP#FGۮL ӝ߯-b8KIW @Xؽ&=8zqq`-繌n_Țҡ~ ,+NPހѯ!@kFil ߓ |&]!˪m%$aR3os:tRԇ-d@Ra'Tuq~O?IY9t4=Z V3}ﭑjyrؿ%۬j^rE87n9 _{].8a,1 x:1_=^I<<_<;̅g*VB;|\kZ]Kj_h~Q@8iw5Vs6H\K^-+N:cl/O&"?O %/iE2]|t/"e,*QqQNcg7byS;l4E?ESuwɧ`m+E)W|4;7NV]( z|P\bTrY½I~/]UB.Д/RqpZ Ǩg[HNBcbMYm z- -l'v0[Й@a{Y U;jg X t ,_;IMD8bo/ig/W h9;:2z D~%4|?.nJ`,"5el? ȑ0HҶxW; ǚ~Jo*0eυk~j#.8|J `j{>Wf{%cCvO;Q0Eeݹ e3eS`, ݓ-yg7tXr6W{~H= LvS&> b!n>ۄ}Ev4tuF S( S߳W,> ] @|R a2^'AdFVV.9Lz)OmвM)O | ~:oUpsKbjRшHq06 ym',=pV u멼[x^$L`"-B_.k '蔨}h2}.2TQ 7 3aM]E}STR,)$mjN8o'b|.hС!c[e^'0[]KOߝ.bZ-TGDZmϡ0JSj7c])lO83XD@wY}uH2 pAnec_pKG1ן}4]p o|dYCn}4pte}bxB/W;vYŌ`}4|?ӥ`x(ZiB{x`ZcI,wGeS;gVo3>rnOsl^2 qRӃ>77.+uHh_4)GV~Հ/P\gD9Fzpu죽ۿ<$$߃?'1J=ǽx@P:YO]>57AngճIn#)} Wch>`èCsQIz;F\w7.|e)*L/z\4+Nyg|;ւE{.llTid^&ݗtsw˙b#`EMjS|LNfQ]y:c[T|)9^G0M@y*^VP~@T=t5uvrs@^gQh !6mEd@ddqa j,I&0k^33a`38X.xEq%wyb\'-OcߋzKHݻVY?ǷjȪ\(V>o&FN }>&W10eS˂9.ŰJ14jԅ'}DkԈrNW{R9 u }>]w 3}F)<aaؗzL;=JHS&jh]#YH8ߙ )Tp1$d%Q#ZьCÒM{= y֓sꕾk=&>\|Tzal;,迕u{fgVp}ZU Cv}#+7o^lPM"R%p~Vc$*?^kg  |i|HMfTSF@=<A\˳Zq{ֽi(#=FHo?>r@IDe4H>t/퓞qBNj4 Ny>uj6f\Fp@ъ%cOU<E~A~dCb@:-ZELe_a(3o<%L}: jΟ'u~5xR'یK4Pi<*Y]g| aN0:Ǽ ņ˷`Z53Ĝ*.3ratQ5=QI6 B{usz~tA QKTJBV@$)yre98yaJT CAs( rre:E?s+X;C*Ŝ4;[m˶Ks@t6n*^ Ŝ5#HmiYh`=5jp {< 4@S9>XDl[C6tbReuX@!!" E>. +@ϙFsh.NJ H3ӵˁ3Rr>& qcY[7<2U|R@ [8@(wj 6C=) s0,8!LxF(Ih_|(d6#ک8= ·=TJtXg/VuS J)t_I&앢i^As^ ]JHq6zm4@Br\~R2YqZ0 Ʈ0j֮U8ZkǙ]>ۂ/ L ~-sY|}) 6ߦ~/EIWz\$rh\T?l嘆nI#7p` bЏ0W"kz>n.L"䀙4XtOb-$灋^tiϻ87:%TПK/rvBp~{`ٖ(?83}[$IA"҅O_{@X"MgAZv(xm 4"",Cn@Eۼ-yt+U% |Dz]sb_Hj hHUOfoy3B!COvJѽ=P}լn+sz ԖrUv% 5tM 4w (gL4PӲu`aWҰFu۵<+ `7}BidD*D@r] Kid `A+*z=PmgRN3m cη~}@Y=ˠ5c-iY̅fjM@ͅ]%xS}L%>oyS6< ͖xu>ҩY^EToJN6"Xu:Kӫm9 |JoQN(K[UiDNTW;9}8T+{hNzgh_v-/L7ƫ!`an_2}RQ|DS,~ԣ);}R:0ߵogum]jJY.ZU %Q܂JK7dKiBݦ`6wL}G.\Wp$ ʺlf)HrhJK!zV8jzO%_CKR[I',??B`KO){ITtϛQ~F&-/xcoA)麑j/YR!9t{źOx$IAAjYo)\VN h'^jWf4<|jjP~Rt`OF9B1BoŒyij/e&56-o!8V{ NSv6SjHWZ{!{MQ6[};f)6g[xR?Hq!.T(Iy]6}#y:Y ?6.vPAz޼U'/smwJ"V:x'B+ :>zR*S?yAf]>aZy1SF?>ue\~~Rrg@1F8bvQNg"fx)U:}zt+0PO~`s=Y"}ymI2:Lxǟ#z @!pD^њ=rԦϊoxp/^{)= Sc;+{b:WKVu+.T@u|.NhxO0~?$&!?ڕ!˅ΰ<t}"Pir#W`^cWSyR3p/c} ?_=@k=)/0ED ½yE\K]U4E~|4cvIZ%u([<eApU('ǽbKzkV5|CB_^.-_Phi{r|rʵc\S!uFV+ԙnA9POIŭī=- P(#/RTK`z{P]QyHqQ8 9>ٓ c۞Q~Pۙ{{bwE%`<!y?S'^x` ̀S7'^pV?ЃcM%s}.wJJIY_C:/h x[>klDu7P"4}mBl]uč[㫯ivnDh *T/hB PuΊVjPm=d'qBf"2!\(\ax#򪹛ȼXg{bȻ ̘ uć_tډj0U(%^/oUuG"u9ӯSCࡤfbC1dA۠%U΄ogyM̍h y#yb\`!^Nn@\ɹ~]Sn tx < V'`^uA2VhY뻔8j}%}@:d͋"H{FkXH!ip㑄[j=SCw:V`'蕾mƧ;٦r<z"Y!~.Q%Q =g8}BTFLw:ĺ>,8,nTSzb5O"= 9Oi&F66]\a*|)ӊؒ!(t GJ,@&$YTz3bO5!`y3u~e˧TxEC-Q=y,JF G}SKęY~vPރUɧACwc([5~P65//Ѭ}AMNqp&߫kcS,&V-ZJq@NaB]IO`Ksmo z7!4O3w`N? agi[Wt s16Uw&=8f=xMƤ桭g~1NhzF樂f.+ cV;dQm4Ϝ_h0NO H"-<" C>8F|wsnO]#BWĸ݃F4Y|W\ŒH30=FK^DUEakrsHljT{z3F=9*b vd: P# Q"V?= %C^61|"G :=|m/J@ 9O>XQGNm05gDjBgD -RbI-@[9/~5jN=8VCa9!N,[-酂X"JTL/ Ud8A@/V[=9u^ڕ{ PQ>-^U\Y9$}p2MYU$K~-s0;doZN" ÈH?!VtߊdsZk 4GШ=a# 'ƒKkwj}:)bGaPJU% v(hBH@28żwxU{~`s*`lbz9_"M"yBS45A&ip1"&>!!"J:/B+8Yo 3{$wR. YrEOA.ްE=hW{d=S4$}~IښT< h>W)6t-cs=5"fn; :DӏAzr1qcCMq T2Z>@bQ;Ξk>3uڴ?J= *tTtv|4mTp)"= {ݰ*%O`D[fA.[3^mX"G`,qӅP೉_>eгQ/YAz!;PP)E5A !abeΟej`YAYֶZ}0P_lӁf!p,B߬ɾw1u>_aJ@ƜYŦż6}@k!%)f9t+mv2=AU&{א؍/rtS1⹇A>&=dȗv~0 P曞OQJ0a# ^^/(_d.Qi4/YUBQZep.=s &:`欈-[ uFbV­DۓzA[Ğf=zDAz+cӚ"//%ϸڴ3EO|RK ʳyS s*2tnudS6ܞ%bNxq\1A">_Q'\6^A^@ie9Q[ag7Ȁ)=ԗ"JժWY1^X=&< Ujo%0>v2Yʾm8•#[g=d\,Bae#e\fU:u!;1ZEꀲc {?!tXԻ\}BwR+jBa> nР?ԱB/LjOF,YyUE{P-\FH':AްzwƋvy\!NUyuruݫB]j_3;njL]<xK3wAs O!W[os ᭷lqDO_ܪSj \z尤x1~N BcV&d`^gEmePWQ*/aPQN0#%^ 4t+>;F1%&(4q1(VWT$?w ӠSJϛAWQ^g,!IXxF4MڻByHW%/t#RTNz\=N촬Sn Dɗ 5~h69^"۶?l9W@6CV1pA-1~N>-GWn޸dž˅3__iHaz &|tYW BmIЫ%PCd>D亸Z\̪mYTPC)wx i#ȗJhڨ׼\ζoXF̿qVCzKk%p럸#t# -`ЈS *R4&QsX,B+ &PB>FS 1MϓnLL._P| ~tЩ8OZr;%[RЁMT @(Kۡ/z'> fln?gbCP9em?߀윟EtkʬWB)r -؟Y ԇe}Y^vU:-9wru.-[>J BԄX'aK|7%0m軔-yL[Ż ]>Xt'6ɓ2!Sij/z5]IСw `hݖU:!7`ouYKm1qc;ۭ/vňۋD—~P{0G޹La]A3CbsǧAdV_(|wyh ͎Tk؞{@?v8dYA3\vy.㝇6(}rlSw%ljOIhe~Ѓs/Fzȱ<7绸S Q?-}ƙ_;J "pQ*Ձ`r~,ի>{؛%p~|P5=̽TmPBHx}b@϶~J)@%^ 1q=t'lOFn,ʯ|ΤkñZz!?m?v{6Saj8a2$J3ՠZKd_٩~P xV.T{S<ɭAAh|V}=,Лʋ]uْ%>'-)ӴS]oC9ŸC:H,6eG%)*}]l/%_XoWv~ƻd˅=|K pm8e\7.iR[ uנJ٬̕HLIWTC=ǀkD8z߾׀l P>O%|~+LġjPIweQlb4QԐy{ЍڬRX{dH0h A?q,?bT})kY uYrvRjAHV?'X^i>MRR=eq%l C Jr!<[==rX@ݧjHt"'BWS/p_؆˦EzZ_Ed'$~wkK g}W0?QG?BQRտ?kIkA q'fHoκ=Rk@@Ӕ&Qz?#ָA{w>)yߝJw1't6b)GN{(#3yÖb+Ίuѳ~'_1<PB]dƸkA(75nж^"DeX!si%?A,"R#JOECƹޔSh@R!jv֠񣅪 }G$׶l@IoxoN̉@~OAK,y(9~Ѓ,UpM+JUNtHmdDTm ©Ǯ6Ek{O%%דk*rmV1SzGjn9/Tp@`~ݶAitA>S8+cHxC hRlɧOR]{e5_f5qE\Ru~ogv5"_h}>|-Jb Śoy{3k"K-0="h0,Bڏp/8P7f0MOH!yc [ 8z;/iZ5YMY Hؐaw *x~PBxpGx*찀c6LܛH9,5a4L3pVd˅cѷJ2X&4GSDȮ=ͩwbZ!FT[rAԐ"9+IjKŠMiά'oU:$Jx4?2Oj*S׵j+k';~Ѓ`v.$<юRxC8AiPaoWRz"k֢ >J,loٚ7|~ϠW7m^囡BKNO3~0+dvcp{`%hve LԽ;;sjW mn <2準)Ia!v> [QAa]E _Uz`)dH6z"J9V3AFm`sr ֳ,q A3}sXn)Cn3W:ðFpPePţJ!5ږhPcI]}zm ]x'OyUPuD^qkNׂػ&霷#a>r!e ir2yBc㠕d0R]a0 Zn DITчUu4#N|5K|F"96,' 4"? !lnDnS ?;zP?hpigR"hpK#-[ofPE_}/Ǣo+>aI9%{ ]} Ѿ+)@ǷK> /m)v Ia8#؁D-dvI vjtA?" BJ8pZВFGp]Ac i %1ei.LJ"U 1lP6={¹z+6 27wKpߐ/'=c6׳ J] AVc T]0~\=("3J=J9eDvN5G 9*:8`;zE5^A7Ua5K,ݓ.YuI-Gs/zb,{T,GOByOh1(V#yY9rCu. z(kbP9E%{J4; A{^/7B~T ZREn޲"`a8 gy/FzY!"BheaPU}2O%dxl_}'45$Z"2F)h \B&|;E؂3T"q?3'NMtbuP'S`~`rD"7G_0pQJx3r5;d Zbh:Y hle{p '뒻V\JAJz糆:?PC(R!I@j=tY즫dHۀ+(ol}5%^;#bHl :ISTȫE[]/5@ZV MxS6Ke-FnSĪ t( v=p v3F,^g5UfZEY6PF4tW<c]Q:m VyEboMTgcl&If=&%m!J{SdJ&ny康e?ӂiJ{{6- g䬩 3yKŷûzCVo!OUܐ:k6~($ӥ(1MF]^r(? \J-+"hQ(L㽾X4gswݞ?IE!Yj,S׻V5@Ch׫oJn&-BGH.M:6 ÏQf3.;Lř8=%Sg/]!ahSk//aM)-EEBI}|X$72Ta.!=Cûx۳tJOlb=)ZaSVkI 5sڤ>c;'U:A6 6H,5/vQngsM z[{CJE.8F%(㡋g=K}6a< 5J(q@`1˳/02-iX+a:鹙׻CB##"d|OޫQ )ZN#r <5M%xXwNгD‹9|Wnܙ݈X:x")~nDӬKǫB jo# "OfE3+ƕ TZEWOzhޱ +هm{sɍs qLjL,8/\(yR9M14| 8&[ij1y^ 8|㤦B`-B꭫:vx9MuЃ|6]s3StSKq"\L|_S?Z,^,}i"4I8/8B X%BOaRżSx]2FJO1 L1X(IDAA]b"lE7PQezIlK, yI? lSf-ZzR\f77iM lJKJq ]6UyRVAl&!rHZ ! y5j P{K¨ ' P (9sjc]jT/ˆnۺHpIeUqiK'-B BbItnzwʯ :fe7 ]5@EP'U^zEeRGUqJr$O<ð܌/5yz>)ު@ʺ;/%tj?ww䐲LJQh x-:E4U(2' p{'"=+ ΠBuz`h]NJbٜI q]uos9t izB}`+PVFܬ S(?-;k6X{C' q$~nwji0dƼ# ]3t6'>xU'M8) B]%:j*dN.6(jJ5k7"/|RhUn(AbQY?%j:xe) 5>KD)i aB Y/|5 {w m3i(ԁr|dȁNDE$CyAg?.tO 89T;P!c/RtXGwDy9s =IgާP[5'WDEiTUH sz;?( J4Clj eΰv߅_Tav^$GZvhw+N"gfV؃{/Œ?0hRE)@AemT wDp@,U ֘ U`R+=%ٗ VAU- jvU}5Jr3=z<ƗM+>lò)91PEMΗUx %AU) < SI̬?06 z"A˥I{WY.> xMړ0No' `+*KEܝbWE'd664)v%`g&^- 2 D Jx8UWVv{PDVE1ȕfZ `8=u:_@AB,Z-b.iIDl{@L%ŀIVyb/4LN*K3C!V j%&^vs^nrթ#sb;7WU]N*ܪIQ|լFϪ5DJts4竉]p TJRui'k٧}=͂g4L7dUWy! )3P ! `a ',at=.Y wEjEAxDqYiYDG8eL^kϤ]i+EzI܌^S A=iE_a:ՎN(x D;RyS+IFP|†"RD5\ \KFKsȩ EyS̮*0usނj( !~Yҁ]U N_Tw0Z [^s^I!dz\;Yoq:Z"a  7W ɰ3*!=PS)pd4HmJ+U;KPaUD5ׄcnd[_]z_ҌM B AYZAxv[M ^-]R]|X+i@pCs>z˯(xtTM1szSE|AP啔IUs=@O;:,PB< IkO+)\.x׀9'۬YHA DʿBMx.#8͡iY+|PC`ʰXݘԾ@^"M;~(Zqs ck|zBTa=P2JI{.Bq='Z=A/k` |y, :T:a*E^#6{Lv)]NAd ZErI4w{s=KD*=u@ORzy J{л4ֈ/(9HWB: cڤ*QfnCc@9oGmr[#א25|Q+#>dsb' ǻ A "~zP{+-Ft|vXnDzGy]l a&><6'm jgΏwqЭ&o{Qێii@h3g b @+|ʠthtڠ=uNI]j3SjYT!?3lXvD~zmP1|dye/ )>ʶtjً6kHWL?]LK<5 ^96C`6{=-*r];9̷lJR| {eî缒= DL}&U8`V%3if&ާ|4xyl,~`hˏHgK"ab찌Тo!2(:H<=dZ'8ƤYA3BP\r $ݳD&G|今yB yZ8H|YZv`U"u6_YfG8.o5Կ~&lM\_"P̷ۧS㑀i .^AiYP5LxN~kϴ/Rh 9w&TR +q,(=7KXl=mY팗| i ?'10힟9.DM,4 d{Ѝ QvxY럹)+o zt؞ᾶ얻~?7 B*C{Q[uXCRAUcqIudBI5ΣkG}5 _&sl@ ,[jj D|0i&O#IAR*{xH1M*2߶ln(U%u*ɚtJ\en-_ɂثC5dszJDŽ4>zMty:Y?&^MogrU7>/@4n!F"\7cN ٍ4Ȍ84Qƃ<҉EKJ^$oMsk{pBdڊ#= [H?Ч>+`-Ă [e/Iʻ*ex$WOIqEm%i_Ί*#A~ 84Kmq+vg LȇI%ӲIAa֔.LDFS C"<^Q\ojj}Sla|ZE 4t6|=gTZ\Y>Q*z{?A}OgZT=d1_>=@{=HB7)J"4RIvj;Uhav^&I>3L_|A" *(w; -eCTN=wpAT*_IX!Bۙ;TigDԞڃ+h!Rf#{@Z/j''Y%A* h;lE(JV'ިd@'/؜C~d_4ȑ$:16PCNt1 pdrMqYF>h$٩t-J.I7\e*EmgOe(ߓ!#ȷQ3*Sh[Rf^=Qz_8Jy{SSE avPKVq᠄tøs}"tY&sZ{Iz^栶T/ 錢W)fX=!RfnЅhPڟ󂪮TLNPtb9{OQO6mv{BE o%{OS 6B QD }{Dqg2IڃA]%L 7}峞\(ܳg8Oنѵ{*5u{PDuYJ,EUE{0Ԣp|^_-끘D Tө~dAn /ǣ;]{@M7_Ͼ.=p! ?TJC2ߢaVU'}! ,ޓվѓoV;iR A an2K*\uAb8ս qdM! r..L+e*A)N/ta|/TaPµ4>:p=d$Ԥbv q&)1&ȹ˗cAFr^ MN/Iˋ샰^k'*u&ԠiJd mKr,_Rӵ*ScХrWb|7_#j0|垮Nizasڤ-Nz0ٙE) ``E^ Bď ovZsoА9a:GK9֔DQٌW'>MlQ Kiv1H.ݻ%,U>H@]oN\ߕvnvDmVtw6Q<8Sr.G5U"v{ӺmVV|꯸{31.݈Di3v=M@ kW*D`&E.pӐ=kR,eSZM'z/tv==z*iD18+tEj}f=jj%:SR%T͹hN՞N h 9Olk>"bTJ(R7B$w4oЊU< m[ 10h[g44j]&n(2 9ۃ̛"|&n[kwl趟1^#⋰j#Ekj@˹xm ?3 U9V r[8e*Yq+*-NV(M[C6zAC Q4 yE"MI}P{ Dw$_yzz^iնD!G~>󢶳4őSGY5B J;_{޷ۢAZ+: EBtЍZi*AkC^ϪtFTSu5h~5tϤ աjzbkS-|,ke=yHen?껖ǰ.^Jƾm( # ߈`Ja08sY+L'GQzfF>%jF nO^:Cybxnճ1Z&mU2ئYIƯN-&)D%>/K=y 1uKK:[G4Ey(jo˵~[Oљ]D9LhzdMŞ׬ URT{ήLBʰ0{szP\ْ"`4ekh]^%@*vo֮i{$\J|x>BV".pRa޻'sEOI\N-`9EX1dSܑ=4'fUThvyC~@̻8 n#h||| ijl/|Flo⧁pU5x33+AW^>i5$B! Z5):@g^u{څ `]GfaCNmpFjFM` :>Or4/}D˜v{ KJ, L浤$(rpOx}Toxw[AF!gHC׫نýėAkЌϟ|C(,꼟(d]A ü`џ!*yϊ8vqo .t~9=؆&q![}`2 xXC1G͔!3YFT&t=0ޣ*b ?e݊rbLX@Pz`H>`+ >`a*1'U_4V2 E? uDP ~Y/~p>-U/+%6yAQI&tDn؍:(!+<^ }h/3[?(RSeKŨX2?jb@Uxۈ- Ư_BzNyT$IsY6䇄:HSgh0H?(f}/0!8>Uyi aP\c@Q89mӰla .yZ@Z9YB]l=0-iz<+N|Pp.Z)r*F {!܂_o+.lvNءt#IKՆd{;Oj TUm~B5P~OߨZfۘ*`&KEV)'\p, #o\J @niW HEW+''03dRx!J؍{4T=B!`;Pf^UZ0bڋL 34t#"#TW^t<@쾔UQ1E۝d{7$q`qu-⢡OKfX:! g z j r$,LUIC.ar2O<_?DѼ$R H[q[?l\ $YՅ;a}fzC`fS zUBDgQqNy # WԺ7W\FKhЍn7wrɼbi'QAuG3|= C ψ{=} y﹋0 7d5 ijK: Kg X>FRu%E0sUDP@$f@̣ LVsy0۶E 4-8[j+n]=F G^)»U+{Mb{0[WcY)z T8HX+&'3 4Iv|I-:L(>*]<늕0xnٮg,b$aЃЀđ , h0H?c8J]V#}ˀ:A;q|8 n+ɝm4'~a#"khUXT-¾UmS}~ TC |ػeEޢ@Mz{LNVQvC3Ģ{^gɀ;K˲AqPZf]cU2ZCެu-έ`-H_yt!x$kfդ=àmBnQ^{>[ȏ}k(Θ}2Z¯ mUXzXp@\Ya)*ኞ|f6֧"| h }cZnSȜg>ƎGV 65sLwNkuSeW3s;C"`S͖ɜxT1% "E=Be~?uǻ5 [kz{P|^^k {gꞈ<'2g"rн`9%y)j$IB.TE'{L]' o@WriCt ϲ8B}x> <t_}y^ĬWCn@EBgoC*(;Hcdө%-yNU-):3B> !.VG{'|"=J={nEE8a]}j !gJ3߈E]%@{ K3{ۮH{P53Ug9%sqPCT"}JanTnԌCSRx?Z荁ZptܓKl# "/їEhBqGyj$Dű_7<(Qv5$[cZXB5* :l7_T\ǧ'0|RUӃH\a"Z# 5!kAr8M^Iym ZϪ#.H(Rtvh1h@!KBe;~&. Y/5e؇pmwggŃ$?14%B_R{ګBp oiQ=fOpCީlC4%1f\QVhxg+^?6WETu#z C)5M{ )R ֧~ϡ9$m! rddzϼpK!"`[nc~^AUh%x8^L| u8hgW*L ՙ2UPf5l@]˵[>K̦}rfPFےkFw`ϲN EoH,Ҏ3F]:gvP|J즚~-Я?( ^q㜔.Vw]K$3\?\6ڑOנ u(m Cf{G?EmI^r\Y<eVPu 1*33۱CR*=s&hD:S< }d&c a}t@ͳ)|R٦uEi?|&-x.{AQ  {?yTxPp~\ \2fQt%>2hY!@K |EP X t?H?i,^]zDT=J͐R dDC":P,<}}k%_"K(ѷ~hн-nކQ -( ڀC->uteEy٬=AAOZmW*砆Н"/Wwk@R$Y8~n#[H뒯JL Ҕ/!}}bmJ"ċSCzĀt˩%p*5C_R9sk&>)STq)Y{Z{f6Z)>PK~M oUN.J~#`s>SJӣoâ?Ah }m(gn]>>I2ԇە3qW Acj m~Am.7LDݑi2ⶀ\UIPޮ.1Ft MSyjYY=Ƽ6)]..C*7 6|J:ĮZDI~Ǿ`vg?A4X cexLJ.5$-z-1[D_],OC L_`ir+t2[iR{mdH&*vUfYŢÚv/|w8rߗ{6dŪ)U/h*j=Q+!P>.~؃c{j7s`i`M d1mU}CϮM/2m!7^p L&y؏\nF3yř*#s\n( 36^yT?({KqIJ+!G<}Z8ʩ{-r+W6dW4z<0DVM"TeMa`2&=^Lt8 x*$zJ3@/D6 r̀d|_nhTt{З@WH\pmj_r>>##u !# %ވ]wS^u^Eht5<8YAh B7gR &=8tHx}; ߘܤB&?E~+b.Ja2gz1mYj! ̏qPC>)HX!y.Cx=aG4CGW~`pX+LB1s6F4~F0Ú0ثg://TB=}5jc].gyJ{M* Mz8g]5}O5`_fުUUm+uh1o^ީ)j"j0 6k{Vj") Nl{V!'h7oѣЍz(:^Q4@z>kkf&=;_(=MG+mm!*ЫeQ9R;'^{HmGt2ʰdWrEHPO3 A[2Dvh6H\B],Zgb^U}< :Rw=rd0 ,Nz;;w11u6pC D]]Y9 1 DF5ά󋫣Jjv`0{wgҞy[Þ/>U8\rm#O/à ؽ)b%r4`a (ƙaOT^{Ý~DWE=!:]zO/B-̞gOTa)7~SVkA|SPA߫uU5-냼B/dvco3SzUx9!`|_gڻϝbsC}5J|L݈wD Y/;z5o4^L=c0 k^,AQp?a4Ws4ۇfD*pZ!`_ |6@??PC0@O0Fux{[vTF{q}al{qZTr5(ÀqGflU9i‰yvm?ڿ8Џr,8f%KF:u`Źh5!ɐXH-7ej=*@,!^)AG5DCôj |S5堆`P+fVIӪ%`wh{]NȢ()& `r,#G1P||Zt;PC0XvӘ'vъ<4~>b'X2jk\ye! /^1Cv\};T3^epPC41&A}0{jge|=h'nGVn%x!2a~ F~` fj;Q% &~u,@ .C37{U)O ݿv>lvCZW6E=b1|8qq˱L~T9t.6QUAjv>03z,a@`~"$^ bF>%p.VJ`PZ]T"V >3Iv-o~EPi@؁'W)YԭhxSmHϷDH6WpF ܮ Ո|^/KzI6P>ڟ]YPT&^;o55Cɇ"UBkުXΠߍ3W<.wa@GYYQ>뜄XrnU6TyL-+޵0.%7txQ[SrA(k'W'E9rԠ*PvÖ[mTRȥ \՗yI:1S8~)?z˚7)%؃ޤΝrpg:Y@5qm |0+A䳷hQSa㝄6"!9 6oj;zJ+}EAk,]-Gv7̦\p|X]_<ğ7ҧ$uuK(0HxK)~<"^d8IO+NHVil%QmL}n [IyyT9"K3f d7))HF[<Z/ U6`YG tjzѳws]X D), .W./;ol=NYv1kC)hFS|M;FhG b4t>>UD䢦wÆLvW6s@n= B Ag)$yq1Jui{ MJu|1Q mLf 9;<4%FU:LvPٝtN ΅o Z9^wg)HܕiC!"6 [JcWs,e[:Oy5%K֧c.qOH h9>7:V:8 U^=%s'?*/I3ކ2_6 +g1\M HhЧBʓ L膎xɷBy^a&-[dUj{kg5(ʇ)Tz0 )U7ZRZRĹjz⪤E\.W{8;S& ~?>"/>Džnu)x؊*_c_>6GKƎE 7 u܆{ ?F ujh՞i8E//tqTS-}^ZBL.Jhb\)meiPh{͢\B;\+W*YU4x 옱%{Ok 9{A4s S9J}h&(q0Q{ &=t\݁lB\L\VY_ 7GDǖ(gu(vga)q_wO> @ ,EP<>hzߗu0 P<fU47ϳ*tͽrVV*jV8ac{,BF}dksiiVeza=D 87|?_l#ʠ2'퀽A#.e,T}{ !޽"F@-A&}Co87st! 6/rj%aW/ ĝ%NPdj2#{>EVsDC 6 GҦXKtkN `4`/3^~P{@xW/˓!߫SGֵ~h1u8Nu~Ɠ)^]3gt˹g2pƩi/Z$kyCu)@#p=WJǶOf` `/xJL[* 90nS۠v8@ vGwfCoTJO-+;5qڃEPt-vѥX|: tq[=h$y# lOVXh/ $@!z||+-6iM0USU.4%C_@ V776)@߫6q1C)߂H/7,H1d@7ݶf"r¹2e*'Ii}8.@ W=4hx6EYm}5tKM؍0vHb;?vpCaH|ũ/{.-)ΘrPR2UK=`mmBbwn?tPX7 ʰYq*m?{ -%yQT%8(qP>mKHB}}:W=fA4XՏVS5pys]NAԒ6UjWZTyaZʪG쪔ib r}K4Z)+)58 ?P6"0xz-@"5%#LdhyŽBgY,@}U¶n-o{G/o {AZ=·9pJ{zb?hRDWn3.ZKdK`ġ|X4XZ\X*7"wkѧ#؆isD=$Q%JUD{n(ЩXͤD_YzAhcf!UCGrEj̞~(6 ж yk;d!O{gW)+)AVeTϦtYsݼ~Q 2mv.78`)yS?MR2u">jNw8ˀ2+) Z{(8DI~?؇v?P#Tcqxva Q[a7[@o!nw`0|N՚|!uU%W/ 8`Z}!{*b$K룢һ99o0اzjXfxlcgr`ɆXo(\0@HmDIWnNjudɀcgUn5V<U9s+mF~Y4b(~剶u mqvL{ԫ`1,hAlaEkJpX0hbl{D2fnv>AxP촘7DlAo%8Һk*cXM Nil6-'w#j`4(V-1X.Ћ"ˌKV??"\iM ԩbI{Ւzh`wXI)sQ}rC}y/ Ǐ2džB7WdrKb+.yFIl> d%pibԶݲ_h :'b~G᠋/8̣/1ȤB㬯Em! (n^`7}@^,[6s4'D{qZ?~X ~dr<3a=EOĦ{%YآGm k6NeiٳpqfxC[0up0$/a(0v8Z<闼1j BJ C+~4j5/<n(% .~WK}޹q0nlP(nFI@{%f҂Z*Twќ'vPkҼOM,Ԥ&&글?0tƠ  qȪnW?/Ю|8VE!$%ZKqKdW?P!\(q:>m<3Mdͺ.vCv:̈́Idyt3"){!L׻@~P{K$Z]z"( ?l\o/TyP'PX kj!fdł>t.a(`Mw!HyNo{!]$[j (٫I | [>HWĴ6D+v~!6,~R5Uֆ);v5N F^~/2qdZu߹ yjJ4OT0~h<0 jZ*(ۗn)Qޒ0?PPK{ ;n1KQ55/޵:oj=2"( ˮI;4KR&7XJҼ;h4 HwDh =7sWW9n֬{`_V>X *$'~L]bm}O6A!:%ҟϳ^ ?1[&]SN<)G7N뚃Vq<ƶI)P ,}W;_&Ұi~ŁA7_ɪDUکynxq.wOB5@T_.(كe2Y]c"Eƍ{ {$Cރ<}ZW^i `~uB)>b_=l鹢(nÖdC{_/ZΣLk Wa'܈"`*l݃b=GM¶ДFХE"(_[D{%lAHb&"ܮs(?E>qЃн7Xt.=t\JsVz${޳O8w0#ro O!*twޱ%@ӽJ>eYSEf|>Ip_X*TAݐS?ZdeS?l#vP>&%CҦ4tޓ[~ YZDKZf7Muk>`WĚP Azz O^b+KFưS}:'q7ȓP!`U{C~}^0C٘=< (Z⇧̐ò iatZSKe~yԤ_]AX,/zS:6U2vүW$hSȁ">og.%"Uq÷=v`aAqyG'3t,5}Id7|wWW>wphc)rPJ?>2P88!4O==`aYO%BhÈ bg|R[Z] )^(ARwl(4 oD?!TKCJ */S \1g}&&zᓤ{_w?lWW ^2|iώ`䎷!rQk2@O(<2|zxrUVIat60e0XOn#DL& ]zOYщ=sЎɓ?cjg+N/td)ONwrg ] 2BO#|)DP!:O2M>'찙fYHg,vY o7 R2zlwfןB}6ᅹLf^aXǽ':<=(7v.•<11&@7nEX᪥ V)[-dc" !qPCA%D ԧ>iy T $!:Ӛ ôJ㵙^p\wzUȧUX/‡|ޅXh[_Na B>\2|n>+g'CA83E.$l5ʐif?N1 _,̲\j.,#Ooi/u,B%%-FиD@Ӯaé YfB|֪`P9^qn;O#zLyls(lIx>_sWHai|"S,}P 'kx7/w\:UYN4Ĕ0} WTF%[H?P2x `5w{(wJ_ڽD4.Ļx(?\a:y eq.2j"|0Vd`&="Ab0uV@'@_cgl~$$P]"\ ZuYn'n!r>7ycW] P)K򎳶Xj!Я/%ؾy`ôl̠8wT{яî!SȮ"7âJ=tDU`^AUֳj+GXO}i Mxj.ԡYK[:r+,V1&&L6Ż=+z% D󒛝pzg9UV=ɡ+ߩH.NwΚ>$r^@W Z:rFebm'7ťK(U -j/8TtW}RypzhQ*EmX>,Ha9J' R]ˉ\ExAopeQnqI./nϹ_.TN{ {@o)pI5C{ y>IG?#?nº'u|bwZaSYˋ]0|FeKXΠ/rBa8VmU3K;BoRb ҩ콡$ĉT2xH)xҨa l:F{\tQ?zhJ7;Bpܖi7V9a4=XUn) gCs!h-CP.sg8 bbm_A6qš65L,}sJqc{6tWj"UD^3Xs0qNb;죽s2 d``.b7艳|":v勴/_Bt[T0$*fzF)Lh=lh8ԗ-r |y|6ݾ2TW]gviS @{ ] YyZϋ6Z (+2M 4`K9Zs\ĐLu UoI>5΅ĥNRR*ep1Q>JT/q=DqyصimO)'ᰝ)(}Z޳Mh;Fsj>nr~/\؃άpRX||NL^{a TQV<(;oŇG @J+xe;S/9! &pYƜYX>%Y zy@ QSvƹ} T!1J_N 0BW{"_wʘxZPu#=:3wy쉅ySokfmyg־4a]B:=\^m? d;xHuxm;k]t<Op @{H$lܧeeKGI^-cZ *)|3cGKuN;-+ƶ}A蠃=y)) y؏,߶ m.L8lϪdcSnMʋX(K3.R>=<&2;O~6ݧ]C D/c{i^z(,,mJa#|g6U7Ir&UB YC)|L< 4qVoQ:X B"o?J>4-b>Wz 7ͷm_:= [OL_($ӈ8WjaM DCfh֠nɄګ/CQ 爗MgUSqiPfw@]V1@J*k'M+er E{?`w1hQ321pCu+[O3_}i9A1+: ÃO:G93L~9έ5TQ+h^miu\5D >i,8^2wPmo{Pg'|jJ,7#D(ֳ~җXix9JJ{d֣s~05@ELQmAiU܃)[ *X {luhC+B1.G+tYZ/1E}#b&yX(^贝!nNUj{;wTܬI;!tpWv8T=@erjiI[<ꐸp!f̓-K{A$>V jƋMnGM|5/ bDڽ@ h5Ml>>HԷfuI A~9lMl/{bRbiQN>:f/`-Ձ>'a "qvcm/kl=CgszKF Mv1ڭ@H^]Xqғ5 %YSz"vd&4Kqk(S4G2)v`kĞu4=(Ᏹ,||!3 +`OϬ- gUYurv@ރG7-*L"X(hP(v̾(<MaF Ȁ6y ®" ug46곏wDQ:"`k6zykHG<[$_A"t^WbgCLC$)Id(Eg(;b69vJjPWp>Cu͓>v.$uag;3'y~;0Z!|)Vbw.A&YCQe7H$Gl~b;ɭoLTQa[fOA,j h[ziw@e󔧹5#ؽbPٜ R4CjC=%ȞX/RMHI1XnB,ϐKnt72` RA_ms<'WI&4eGuQQ5я4-":r]6+'8G%nkYl6n \J}}gݨÖdSgnMUA#td80lCR7怊Pۘlpw߮mDK`BՓ؉Gh2V R_֐ ?^ݶΓ5Fa*Г`ˆ -&o-U@%l#YT^L߰t-uiw.hQb~iAM);HcUYl'rUB<5aZ3~u^!uCK=̬B}x` &E}RFxNQŎn%ʍwFMDdg!{ksɚD3\qzG+hU|VvbIA+Zϰoknvg]fI-}}kQ5 ~f Rޔ^Mj$ah$ MnpJ7BݿAdk~.c&Y㱪Tdc9Eܻ-E񐨎oF]ē4x\۱ёcoaDZ߷-B(FҳWb Dln{K.Iz"kJI mo^T0"t{t{>!lۦ+ۊ1Q:P}Y!9'D׍yj%Iݗy,; ܍zS"^?-=w(SѻS3c޻kO+[ݷ>Lp:%wÑr.dc6k^\Rs+^ ۍ)q)٧c ۍu/}9tP$p^/=Q|CÿkEI+939G8P'hl[Kh*܇H,Ԉ4 F6XH#ߣo gOR]~8׌d>S-gs˞p{ O7]JTxhC?umn.tkso֜bi%gsu:e- A~-_O!4~WeUF,D~߆&]{LX!VZNhq52rכ|0{s$fPzIN2q>#BT pACz2Q|=ZBN$P>߀E-ڮk2IWD uk+²lCƄtŴ k#UdA3r_#6(Rq[bp=㾏 h"SA\6L ɡ`P.͢sܧض"MlSCѡhPO"k:1<-Os(DksI`iEoxvcODX趆\2 !X7}ƮޅR ?gMnۍ y 9贆=ZU^y..2mozgOab#kb 3g~"͡#L) u'2xZI0ȩzN~Wp" V2:ŵXC¡bW="/Bg[I~kL.+<,$a mks]Ws3w95FŃnh a\uB?[lfE9h."XZOBB!R]DhV0ګMO(qA)E^UuWloȟ]~2BX?5:cSEԈZLk`U|8ycE XUL6VC&Ő(ߘqhqzR{jʿT⪥偟ZA &|͊rٖgwm c}XJr<W'5O-噅B;$W3;%e"ɢ9îWfBldgFvy;ߓM1 &sy$1d 萦Ҹ]PKG͟X\UC~'0x[cM5*PzC>MC-{)'ؕoL?%[2/<>%粗zy^t-w֐I7f{ҳr7J;-ȵR'KcVS~F2"'Z =7B$Z5OW  4kL|G4*uPxEXZ9]_6LAS QN7Æk$Jѫ5~>AQ]i.G jj2/=*麡ΠҸ#4r]Z1^{bDEL.].n}ѼGDi\l!?tڢaxkwyv?DnʷhÞBvcCSrA%g'GuU8"ݟ)> ǫn˱M ne=vfʯ|IdӒӈ,Su'̱Y +D~g4U;gTNјhn<(c\AE qW,W:C? !jPm3_}&`JsG7tAF4 l\c1[v"Z;ےjۄ+QōBQZb,:S&_0 -Hnr~̛GKObNU` A}<ѭ|1K$Q'm/nԤVʭE?>|X?mSZװ͉ڑ, c!é\{>]|d/3lGޮi8-%Sz'dϤ߼:13 IR4T G>kɻI؍s^Er`v; =(a;DPsMo/z,\ n-a3Cʍl%v"X(iWZtjyȎxn{\?-c".%x!#ۥ&oVpj*BKo*W,J/wwd7íYt2}xLzi0)x5FFlS4 @ň$ Y-s9ډA;k|N")rxXi Z;M8ZGrcNޠ?Q.m5͟aHğ+s$?Y{L|̶ ^$aF!ਲTT F{yҶZV}akIɰn=ەBL]Gsa7H,x7Gt{{?s ar=@;|ϻ6G}^QuSBmܭ+>{B3:ۉrR\qeA:F6V-J\^>q4Q?$ݍb>>m)FakAm=1d  Su(-y螪!pppQ^f9) \F׈GQZvUT+Q %ad+AjqdS. B-$orȝd_[c7 'u}*\22DŽovWF=&:6zr/@C ƲA8ZRu*"&׉{Fp1-wOmX4^h&M-^gC*nJ+?)k[/`n7gU9WSH se ANZn=Z{ TI QLF tW=Na썠Dg J̺ϺbDyG0W=~ ϶Qޣy &f뵈JOc`l~&JfᩝU "D9f?խEE3<~z~ } PLrX~&j1L4QSR`) ñ Dנ{'1} gt/5פ_vX*'PzlRT6 wo!t:Ln-?v.Z^X.5zңۃnVH"'F#E5v~?+ya՞85[ -שq v#LʘI|tzZ()!Sr,ΓƐr[[V)͋j7:#T[ʨ)1ŨmP8ܮP#vcI\!aaVjF쟕D ?ϩUbLJnxyh>e (yDu#ǫQih쥝;W>F@׍{ r)u?֑ƧY1cСnf] U+Ta^!kԥiKxZAw+e R7 dA0CܡX2DD e7r)̤mOenXDFd gw ?v ,RRrB"eCBcZ%.&WXPeJmkJ;1=ez×.>~5.12]) jU& #Ks tmkr'zJFaG"i-2@)U/,+ACjZ9b6Ginq߰^Gh- #OЂtBwANxF Ö7T 0EW8!O>%/O@L!\]ow 9!cӣd l ݠCy#n~6?&1^a.7"=ƉYkb1U+>AJg*)42GAlYEw[NV;rd)pXϰX Ɇ? СE 4܃=ϬF,m A<ңbDFU??Vi&GswEui4!;%<4s}n;W/j4`8yjP2t_W<آ7#)|&M݁Nϋg4Uh= 2/}؇LyH&U+ld@Yxi;26sے3:/.}><-@Qb g|+~m^ `h2`X1+%9P%d@Ruz4gxLoaP5*]]Pm\*W~S 4~lNVヒm;Yya YnźmBwmM~70Pp)n%z]+tVKL=VYϣൿIX]Vr|6Qn+\޵3 CveaAFAW-hX-CMLbK Ftx?/nMM[%di LmKVS' >d˷0+9sBu\Vi :=H/\ߙ Т v3k՛)K+*L̟C 4Ǎ+e#nsՎlpƭDm(ۢ:n!I*O{@Դr^zm:\z5R-2Q]9; \.gک9%t!k*ZȰ\qdVshd[kRNks>%yi %.yӆMY6R=tyne0m]N.Gbѡ&&wKPԯbǦ]jQ (^pw,2Tbσ,<%ol{|6lу!3 ]CvN]LGϘ[[_|/qn&697DWTM+u%Zh X٠+.l kt_҄::uĦQ<,4F,E(or}f)Tᷕ [bxd,@3CO\ٰV,gV%d [lX&2*~0::S;<\;PJIHڟ{G5wIjg- bY}F%q}lQiTn FЍ &G7Kz 5-?B$WNjijLPl=HalS)?׮LJq[}wփMdimF}K(6 lgB4VEBGBG$g_%At[d([Ns+"(SU|ߩjk+K|#XsH< rF V?^A E$Q7ϴHreS$]z>ٶm5K P?T9za~ݻGdSR`ɺ,IWGˡ5M9p5u~>N!G4x6ck W1($o\yAh)j9qR=B ˓ʐA1#~Y>oO#,;e吡Gvl%%DZh<1eUQ,:t&5hto2ww*|{:XO}Fa][ߐB[JD"MZF "z);Y/;/U(ɲ[?٨IlDFkr- b mδ|mY NwȀ;Ð:N,LtՅ*xM6, N 2F;rllu|/X5֡;^QO g;]_lsL[,(sɎRUw*FU2@1JsEʊRۏΉO=C 巷e Y I GsUxYmͥVh)Ȅ MB;"1uyNmi0֒{>kX.uf9}[ +KPcEUm/F`I;!,10=V%TP͡mw* Bv}Ŵf\g*o韞؟ t?VP% ⤞+Wk@u2h=qN+uXAp>ʠiG^&yَȀ {>]m75UU-HljpFn2 㓻u5_Ēnm`w(LİZȊWК+qbQFk7- (UmyLjн*]|^bT 2\3:,ΆҲJ&aN8鼼SgoRbeXe+ 'fvNxdjבýc@Q|2Js[\7{UCUXӿZr*!1= >Y{`zVRy "fwe{::kZ9 kNޜ7/njK*(ii dc|x 5^hU(\WA-*^#93ghTbhKlNn._;.nzEM*>/_cqԢ/ݒu'"E%0pAݮ.8gX8 I7 փYc2 _p%;J]lE_~eMen^qW1;@OuxVEC]KPSwYmT󬼼zEŎggJnu{`kDaYǶQݫ6=l?/8zDx@FUutu/Ёx@@fu%BHFJ"eh]l C,}. $+5hʤ (%笞ry;J`ಠ9Zwa֗5YnM/@ɬ<[Y.`={X]ug\k}#2Cd^.YZt^|&3؜5?74me x ,5?(|&nG]Ŷi1׬"`Pzf_S|gb譢zE5["{*a ިt}n.>IQ ]G@GYb7F FS'ڬ)TbG'U{)FY(_;07?ã5Iʗҹ>/9H]; EQxzxx3:`Y GܔkYyV{Aufse{Uy>`dPA3`l )!AVuH˗K@>8K_/󢺡, 뇀{|~-]"}Sɒ͐%LJs[CZC\[?,bT{xSht8YY#٘Wq,)W3)!XTunCF3a}KD}$~l\fU8 bjD!Y9[,Ol:6%4jcya%!Vkf )-TџQ2XUA_ke0.Asz\ae^YdBE'o+9j#ɠiV19Uy9!F:q;'l[4Jb^T^7"KF!Hyy\QukTcMO5d hy)*yT3xE Ibou@C1y{hGFi?7:bG "m:fXS1NH]DoEk:#HE`1hda<{#MQg_M( j*7m[rB5 KV Q{7 Fbc֑Ec#4Q5eOl=8xsnv #])4kkd=]9RKGhr~bFRxj")=r;;7`'z%ԈE)tdpWyYCtKm6b:}N& rbԤ$&L%G'DpcrgҰg2ys:=+"?3塎&v ORz][˹{˂ॡ_S~*3]uVU=P*uZi-gkmu%c("ԇl qj~pOL3h,aftiBj7oqV l;0#-8QkҴa etV|ݵ\msbqbվ{֎c>:A-zW]Jfk_twFXA͖4^u$=nEyюv;?`(I3Hު#$h9`c[FfHx}n$͚Cd E\ٳr;_px,AT^s=9l֭[l f]1XWn>E ?s6BvXuO Ik3J)MkN)QrV߹Aă:ľi瘽'}t+Hcaǻ<[֐>:2U)OrX ˨25Hi9nݼ cF`0”cVAAۼn=T]&)x/[=EIb`k"9!(H U&4iǍl|()kϟ f=94g=]󨖦r4^[&HkYmM(ח/;1ؚ&l=Y+uN`k|IeKv-JGsgH70e6ͥjmV*6ޔhBnyޠ%=nʿHf~n'⣂wjfH$gFQa?9=7nړKpD%?ǖ5dN-C.>5H=pń"FJ ޿0As;_֑263FHTM:Ctݶo"3rlߚ窍`p1vtYyJ]E>xnZ/VTsRI; )tu$RmAl= Fg|ӧbe+!uEXo9˴*`u%/o&EZo3;ĠӰE̞:pP2 ah^d`MG'q`{?nꤋp߯߅1V9Г-:ʟg ,,FWRt5hߴw$Uj?_^iQm@XLý~kM-Ln8p8)v߂LnON}1<<ГP#(E#;%!irf^ qᗓ2\%]+65DCoQL"|Lq^7l_[r4[f\8Q$f[f[#@s;>hke14>K롦,c,^OV/-j/S6ix8dG(8y]kȦʁdޏΈU>rFC 7|S̍gT KY,!V?I4hruGw4p_qJ HԊ񔎞sYrHu9OaS-%Ce{Cfi~YDtZ9΂\Ēq(pd9R?,-U-cIlbȘIyzlNVqᛂXBZOa2h!=(ѳ{ wYU'([:jdۊb^2GΙ=h$IB#?D*"ǜb-'ud Y9Z9FmEjVE U>~dj}M @&i=2L0Flq5q"(=6ꞌd2,IL`@/ѡ/ nZO4r G dW(do$5((aUk3\:@Nz}n'H:kF6kXUw*j4{|@1l,+.#S\]bkF6U#eB<;Q-25_ѓ e٤a_8IλM s-ͺt͢b:Dʒ`Vw@q29D[oN.o5B zje!2b>װ-ZN'|ILӤbc…I92-WOs%yh?z>?# ;Kra%/%;NȘv@ =k`ΉU8v48;Цn!wZY/ t9as1B3X0̃Vh#'}lTwn mNI#Z"dOٵ2w6l/%ff*n449 sb_* LSunnF6N Ρt Hn"VEۺwى͚q۪(s,lf:/{/_GpVWZf1,-G`ήMzh)~}6΅H4']Mּ^ޓC@!5q@6ێo,S+e/&q}c@/~X8Xz},Ueh'.Զ5.7:yDCQJx;E|׷ \#Z@At"4# l;Q#6>ZrLȬ qG`YMXJE՞fA7~mh7ks=Xڋ3[F1t/RZt]tvp2вhy^{h ¾n4j/D+z3wːP%v7fѐ/Y{ю 9+Fd=E% 20e/gә9 uZC+h1lQ([!gS2M8fm}P&_\Cyi[yvNLh`i?]sIW՚gDr//*?9Jk+ՉF9- E/Jha@E߄xDFg>(NKϣ|EYxAfyn1b>h`m/D:-|XPSUrfIfC ( ofs@\ڒ٥u@l9ے&3e.d#)%q!٢RNbU W<n}&-~lґ\N\Atgh4E ʞpOec;r$gNWE:rK^#M[ՐTUhT CWS@V\!0ѹ|>aTҀXh+9Xa[l+œ,>ZW%E9E~^#&uTtfNn͗K F=N~dJ|ZIv3&l)kr Ӏb\A LC(JC|1br#0($-v;k\Y.wH+:< >7ǛK`M^6 * sxo3/ ߙ&l.2`L'5j} u{᥺\WsV''DLE*m~z*LU5ǺB'ū;դY'eF~<Fz,b;]JL cj mܗUב˲a]V֝] KH#H#—C~, d]K Rb̀؎ͼ@Id(K#6C"/c a#Z/4r3ߺb W( !%9Բ׎l[ i~i'ӯ٪b.фOCK>F2m6gaʼ ͝!9W !2*΍U.98$5FP}dY: <[+jRAR#ĥժP]VU,FlVj7 B$ u3'S(,s֥B΄C*gtMxȒh,-HEHAW: vxzif Ypy{nm,x^"xQy؛2*)Q{xP' ה ;l.deމS=>MwЈSBGu B<[ ˠ_O]XrBHRAҳض~Vc!B^ܩeE#MtѴbB=Սo OlXYtXI^ԇ>n:٭nϛQ/Exk9OƻrI~c)u5ORyqlCrIfN~PJ\m$mpēۤk$±i_iζKGtq됝X?==ګ~40M/_[k}0XraNABjw69zzk`(J턧;Q`6Gke7,Fمܓ r60Rf͍0]]&,Cipe-m2ǐ-W3W#X"U(qXCp[΁t?o1#5LJs8umjHk>d?d&g baBmm2 {py"΁UH{Nat>!&'ZݾXKc~=b;u^oR9}x#H9R1o%XE!PT-C?6KaK,{O`w6uf|ݨI <[7pъ0[COvsDi( 9# #y7V`FN:ݭ?g{Y-hMYOޟ8Uɧ[Ԡp@3d.\d<1%j\_^;>@H.*M! ZG/X}5։ɑbν%~RM=l?Ǎ ";YG0*R]R {^z%L\*~sΫ 6)L劇t|  UX}yCNtq٭2]48Sk~#y팬Ip,G= *<SYqXkGŲS_iO2z8{Ec=9"PĚ%c>Z)|v;G Q'W}!,<=åV'>(}`C'ljeVr!ñ]Q~GA`עKz}wkN2 VUY`d)fqU1&f1d@Q$Dǚ}a4QݝY,8ͻas譊4c#h5to9l[ŶlnW BI{,VLJE2_[ls 4V&h?[{"8Si2㻞:7pO+KFV^Խ_?x"pwW:㹇g`<7|ca7m #I,Zx1#h{z E4p߁|/ 7NʷQ!ok9F<ȭ8͹i|p4Y38871/n:ZrXؕ" ^Ҫڟ2>k: (܌>&sX -\ۡ8t0;Œoڅ;GN A,]h8IrŽl Gr_Û zhinOlaSϏy@fg[_d]w1&hюQu}bV2 _nWD5Ub4mWRP囇 }gjQ}bdкUUMw e riڲnLl&`9jZ~+ @7vEb q̘vrekhhxֲ(Rhe`lj7=OhFoulɏIjmka(倚rӻI-"F/TW A >u@ߒh%J v& 9l._PjlW]O^ʹ9cXCOfR5žn}]]`0}/HL2 n; fJD Z(6 ]ümZ`x=I1w^VӼ> 9^U `"iVBtr 帹n'dޤM[Z] tT 覂lZJD{<5"R:O,m`^K_4ՌFR+zK_)8h)"+o"'KZ;Lhv"U/;lρc>1aІQ :g`Ah!B̂-`r|Y([JY ąp+~a{\F4T)$^/)kk&}gє5[#8V6O/[E/44 ̸VɄaVxke7j!RЎV!)RC}m<~B'DЮ~a/1CoS-L uj)~GCnM9udEPrþWO~^`캄vν74iiF|栏򓺝imZx9 'Lцf%tF9 ؕ&iMSM'[>?`0ֲ6͟i-WG ×6䭴#vo ?\u].~]oYF4h!zE RG֢خ]/_ X'Z(,$qV&OJ1c-%iH~h Ŗ3 qneqDF@3]6T]Vk. C"Zd[JE {-`7-`R2N"'xgM?ІQ}#ovַ:"~v!LYGN}=jdQ) fZÀwYy?JϾ0M/R"zVAut|Mho<)JdCw->@tZH3R0(NB=0I %n Ah*€$kѝ氃!VBzB-דP+a k֒Fa#O$չk7Zh;!0^0ZJ]?0U^ 29+Tup G \d:vƯwqYxR7g4&.'ڧI[uC(}-ɞJ9b:/-;L  GT7V%'"%gGahV#ț ӓc"@ȚZڂ^&y B 9-{WT"zaddfr;n;FAK2Fu#hD?i DϹmZHXBg_׭%QvGS~o&2lx`'} 4p8ޏя V*l +O4 7]3ec 33u58*9~ahA{ϐb!^n16ldR1ѩ-x`qZܟкſvݪy0x ~3`X"ԣ1zuwY` 0J>VypU-8\'ELbSJ"`xH{#Z;}p BB󶏄$UPp`"ЎX de&a.}ai}mgBwFpYC:,1h/ہͷZ~L=NuYRCZE8/ Vɿh0r/;-R+'Wi]ljͦ/{\'zL鴄lJx?s?7oK@+p[kRD}XZR+XFf~{ B+'Z?/+O^eŗ si?? ID ?Qۀ#~t }/$r`J'?9 qT"ơ6 G?bm"~`jabso[Δv3!kZ=Q+Rt=p Og߮viQu'd@WDJ-4ߘ6oԿ]э  y֋ z5KNFo~h蝯s)gcJ]jL&P~i ϻ> CjO0ZEB?վGߘ#h;vn|p9Uu}e/ ):hk$ V#;A[Nb;"-.gc;l h@7J9=.H>Ch-0鱣orH6ռrBјZ/"]`%LQ2A- O)+z~`lA,8r.3) H!?hè5bKruwW5o׉ezvoݼ@m=or~~҄,\EK 3</KLhRy0*T]N&> NxڡWS׿Er CkgOQ1sXy-*9L9zLE_7>Oyk+viQ ;g;vз"}o!ւ#l:U{FE)u"%mL #Z\?{o=wya"dOk@ڑ@^hsD#i O藿&Kw/22)9^xt Z/떺ۺ腰O3 &p.۵BjBפZZZQ>PLKFpmWkÿqZWkE '&$@OPRGCMH3ZCxq7ȶpɭ_ ȗSR'9ED'*Ctk.(_" >Il^BkmU]ޘ22^a_0c:CgL@Wh>_۵ Z?CkKD6k(ʘVthr[.R"U Gk(Ȧ=I620Ax6ц{R{ErH 436&1$m9N.VBgXK/A]| V~ Ax| Wu_4ŔBr8n0$UZo D"􈞣f]DԂWU]GeM͚*pgpJ9.ۣ0D+Β莳DЯw\dML"L"[N?ƥ@2lldA޲ 9!BN+Q9 #obī w9я.HYb%#`,( %""@0hӷy)V釠J:h%2pVoN&O8~{.\oAJCOrUl_dk`7c);Z&O{y _j VϦڋdy/4n&LK!/+H/@i[!>-+K/\C5}:n&U!k~юEs;WjAVGt?pY5F஀jh~ޚZwV׏18m21/a-@$KV^Kt* }u`)֚UJrmL㈞֢t;+g1Bp4YZ9&7P &9hZ}.!pgnm[1wߖ{4Xt~Lc5^()Ji,!,s4酀i=Mw:oO4M[(\HC 'Q`8ꥵ1k`*-3è/쨡lzHQu x: tBF5t~=# s性|[wJ}hJٞ EeZUbAdt?;3X֦ 7&+h20퍵Z?+>Ne9dcU2M_Y7n&l/MF_ [BwteԊ$7(Oj'A7pqjdǖk9Y"^>9.}RLr7 n vkÞuf!z P7bk , Co` $NQu6 9*.֖3C{1֧DTjB&7uOX:_Gȯap҂fE޷˼Zԁ@+Y"Z8o3 'GF4!@ڟ2DŸ8Ԁeo3d^#)GO5 C٭Hn6!ؽA aiȊSD`3u@cq7Yy@闵z׮"F5^v-&ٖ'w`ߞox"H=f\g8bQw{i5fK?O?mẒ%L&X[_h=/DKP֧qRÑ-/_l18O !MJjKǦft^->C;Y 1[g)/N 꼬uDj,CdI8ћJ׳od s=_oz}ן BC 8]oQM?05[k1V(~B腱y'AmaE8B/mY[]uY;. Oq+\_}w\3 tA5* Bu:QQOoG0Vh>bX5qx*6 &iy4^;imiiHtm3kϔ6:U9T?T'd -ci17LOߦӼsR$"{|2+𒀧X%K8v.xo3J* vċrBÆlG -CxCciLuw,j Z֮ψ_u7vDF %*o\$>tU}×&j}=EwkS8^gaCvh2Zscs>4_Z2@8.,Ӕ~f9w;b"LU.ʟ8js&u?0Z9Ffhz ]%m,II{K׌ MO/ &#v-HXP>7o0$ tޫX _|>hf%{V?!ք6۷cԢ59sUNpf#8nghut*$N_/V4ZNI덭olӹhaP{`%:<: {͞KqEJ᮳s?yۻan1Z;xqHe˞ipj!\0)DLwqKTPI_>aƨ՚=Vړso/VZkōԎ"GW?h5ϗJ0ҏު*yݤi{٠Ȅ#i3#PܠyɁfw6/K0V(p%xG=zǏ'k#?,m ?ޜ,5:CZ'xgy@s2pvhϴ+X_hEHچ҉uq\s@H \B uqo'dPRYkմQ!U=A[4ҷ>3ͼtlZEV@k~e:kw`ȱwid9/8If|za)fN g Dj'wSxJx@!H Nsa S s M<@{Qo0 ^FNZm12*t8fsbifѪky` fAEԜ\`:0F؍شmobϷ7A8Z]FŨ6FVL9k'vH߮S 5ƒod⦴Rz;j9њu460:-z CwXUdb{b0EA6XmΫQmZk3qp"~`x2tS"fK'xe_pT;`0Ç9lyL$cE6+rkх0Ss-,53jij{v>٩Ky $a!"zQF#UD]ϾE_Dz,S+zdiޡ., Tv?9ϵIF?GޫcL>Ӟ~g__4(%gu|JN5{(bV0iGOzcYtu䟾"ޚ X{K|֦(8̤ 2n=;Q ݜ ր.Ӌٴ^3=ZUYET|f'.ƭD^?I.!<jM岶 RUwGT b | eΑ~~aGb;o 'JFU.Ƭv1V$X  y!9ڣNj5%{%U>{6!/WBBGjբh0Ȯ !OװBL(ak2&cAډLF>;'؍'O{PBUuϮ`evkBZ5ʗ({? ٮub3$Jүj_]{Rhԃ aBnIKGDg@t,\A׶9 o삗o=&.hbЩ+v].["{ f%uz. sfWb1,raK 3Šfu@s\4:ۃN89O֡ܡQ\=|e "xq߇Md;/] '2T;*rcFܢG~1T#3مM#F;K͍^P{uC8bL:eZW܀*w.dC6_4@QDS=贁uE浥Ji6Q"8Os ~h_wU~15pFxUb|g=D.vta˒;y2rud^弛NFB F]ON-(:M:z9%*a^LF6 ej# 71n]:~Ani1aNעkvF/xakl'8IV9`\EwE%}jne3)-U7p6jϘ_{HؐKE#;9˅Q%ks<UH񷞟C{XLHG NjlZ3KO:}n&wI6zlڈa1N׻>)K֫acz$}#V IC MadS4т6VQiCjS;ғCEF,Rz=g8#4ԪP +kF9ʰf)byգҼa;:loXU6h/F*ާ>ƾ腑n(1^z3V{MVa&1\V;!3jgG][feGn9ym -xFx[1NeA,<SvurA;F xcAo6v?Gf?0ES` κ0^T6- Z5%suwy{HLa۾ۻAhA: @9 oea/S=/^ӕځ"ymj$ԏ탹%:ﰏSӘlx ?0^q`PQ-ơjw]^Zvn(՛6MnhU dc3[yD XMQ3ZDaV+I)cZG+S@#&>OQ<~2yƁȇ@ q).6KKk#+[b7WjҧuS/hkkghsRq/73:$rT{CJ.n'g+" +T8R "l Z(o{~I?0Zi (ۙ/gF`㪷#9S>O촕-;pa,-x1=~y"%K__G'Xb,GwjImT(moR/r ^@)C:N6gz)a`ZkV@lx v壣cٵoPjZ 5;]wΣ<%}ѱT-g;v7Nfɷ'u]+d\U&`lS"Yr1Ewᴺ0IaDT|?NPh]q~ /n/z4A&vhèUJ"C2~ѳ!Md,9wVߋDy咽ٳ ܯS$哌0IY9Xobi{LȥM! :~~`m9#Μ>3f#*ׅ=ɺMi,D0]C$z|;#za QD?IWnDDV2i =OzCa ;ly =W˜ޱ;E;w-tUqfsKsu(,01޳9O'nf\`0ZrtUh'ܛhNEw<%sF59ܭEհ]˔D.'a}kiz+z@ VH>/s\^yP3x͹:ʵD{E'Ӂb2#<=oq||YƨB)Lm]gVe8Sc Xr>畹K4$+;K|<ԭQW ?O NQk\tE~ zwبJrj9JZJ^\ٱd=fLF^J >vo(ڥDtA0n fQj"x;gEw~枰6c_ЃĝrXZʼNPJ*>h^Λ`ٹe8q7ˏ)#~ qXmV #r! l)AS{:3g>WV 1 h$br?h3C~ӭuZyb2ێn Zu~=^I "j!QwwǺp^Ux~EeJӻR§qXZ΢xpEZo{gkѮ-wЛ*=&ҕfGmK'WZ,gw|'"StjցhH9hi##]؉R]S{jZV / `2XXo-zhA3;y"ziZא̖:}h_@3^-{xf4|EZ U~G"`|-M s9{qL FQV̿5U\ga;)5n^Ghן;7ZVW98 d>;dʈ&ez~ %{#9=GGSȻjwD#n\v]͸88 `eɟHۆʒcwQ6 -[ȸ47A8]oПvƢY6 c!t9A3džCAzϸ%AMtEQM5[\pP&? s(CQh"^*S;H&OߎN]6DRjߢ"b0xgZzL } |a]uzЎQKuo_:@fbxC'ַ5*:蜤QdڇM9lv v 9\kkhv9~`w%bkns%rmGZ?@c0a)|-pf~v[`ɗ%̗h{Hz{RmZS&;Zfˁ6̭,f C #P|0l`y+@1/ƣGT0%qUl \ήHDϭ$~WZv# g? E5f|L)@ޱew1|֊xmM"FA/bWC`}t:XP푣ɾtz0J}1q$u]p>#ehoIb?egՈ6 -_Ay30.y"Y zԇ|9B wt;X;+sȧ{B?`0Zm|ȢےlWѻLE1/JPVQc i!:cheAJ 5eG/VEOѻgގa'058RqJmJY#䅙 Մ|`0]a#`/\K( 2 Brg{oцŎ¨ԇkomk)-EN6p^O]X`½Ep!KV[ۙn6nE0$ZN-3%,TY5kyy{#za*Y3b[^h," >l{$AgghnyDT;/%=|~Y8*yH 6 1{ձ+*:/NF ٽBeP $,zB}nr&A&Q&6t1?Dggoyeٍ:]v~6@mr49>En]؆l܍^u&\]Esh^Ҽ5p#O~//gyAOiM5G;o##sq x;J-Q:cෘod|wk+aa"eloHB^ /c;]Zւٻ!5.T?[kOI-  :n:տ,pfJ{.6qƫ 5k#>(Y|ϗp;?@dJ Yz]0E- Zb:hQw!-5яZ ;Q{`%l'uXY?0(FFayyZZ{6=Oi YAbQʱuߎ1,{}_44ys?^qOsN)>]`SIzKãۘ00`(5-cGǼ`'8"}n:|TZ^N9ANnѝRCN%ofF ñgTpײV.}ɎR){gaqpzh|=]UnJh{~mrJ(J >X _tu`D#x[k\9jN+kd3A#{xf6zdBֲ */CbѳT۷q~ٖ'{{R[[)`@K4ed$/0k5B4mR8â)b(՟_@ǯ]UQ1j!:ަw+BO?[jg ~krKc}WN)䦕 P~t{]KҺ^M[f$X~uzN8FEҼ=aVϰm?cY\%%襯s`~Ў s+{·dF@}kz-ZKS{Eza %H^.p&ce>RK{ՊgFquiFkv)ϙ0ա#k?e'%z}w]S[aDhxψP 袂AA20fx2ZW9n}ݦE^Wtbz ٓ"x;#jgȴ1s0uH3s-c(+Eh=P2s)&]WFOAncT1Pr뵌>J:[_syu Zk:dF&Ni腱 Ni.D Z?R=Ϯw&ZNg[J 7"򙠾 M*Џſ1CF3 걭<8ngIZuAioAK]{e—+ b*E8;3n7 cRD5nnK{ӓ_(hYy̭toZSu${0TIJc?73]Og˭TPH L2whi62}$cgȼ<4:Z.tb j>AEU:U >*gP(`% ߴ T63qg.;NSW ,ah mTy޵a6Z-Faf{ y˵;/0?w=&נ޳IZz*?}$n֮zvve@;V" oW;Gɝ?Zk"M]h ш6p/8(uʥs_6ji1r%*l1ͧgI KAvޘmz`XK>_fے2P}pO1L*"xYַTkg/XZ{v&Z齊ZCG;esWfZ :~n"[9$[ryIzot9xپ#Ϡmy>цQ\ֺ[7q3 FvPnZ2Z>ge8"h?7uh*kΥS|aZ)Kd}ݴ(Z+y9 C(h,GYahQp{;Tb'FF2+,:ksFRn֓z;s'Cӷcn`1DoqLM_24P !7~}h1ޟ" ?׎o_)XbB;Tu=ҸZLӃ횢$CL^ෳ+#xA#ZBe:}-m׮wnUVy-/V-B"`^uޟJa)/)+C=jBs!U[u3Ë3@ '<џ/HIMekOת__F%>}溃Fd.M"gg=9)b&.Vf,&~`j.gy⧿"Ns k8RɊ%qXHJ?Do^D: }\h"SamʂiO6 S*$bQN̎ q+y s Sȯ!Ξ%TUH_N'nO{*e F 5ڷ?t]]%zo (Z~T6'۴fcl$H E OňͮsMxxi.?xdg}Hv]ZA=K5/Ȯe>2v)3`%k\S"56"O3AnpWX vɥXybro[)$%ЄKy-(+m>{"v_;)&歼Kti[,$Q̫\)Xaj9uNUCro 0 `+ d/Y3jOAU?8ҤxY'wjޕ52wF!.~I 5ҡغ\3?_<]A/h&OȆ*^K%=1Sr*0 ]ۡs KD$[D%zMOM;ItZ5|uCFp$iS5+"])Y"/P|<3%['/1M,GUu'] %LQ:y_LJ s'y!H?!]$m-P#P]<Ըy:`D)—vNl6g%`竸ࢶTX y [ݤJK ]2u'j]M2Z}:X* D/(szPOM~9a8.DVv<n8mCk-@mj3$7')M m 뚠 _YYMƁP<;N[>[]Rb:\G Mi@|ί(^Ϳ;R;#[%L70g;orHX`LW[j7u`㞷z'ayGg{󲛐"_R.)_9 Ecm6w[?|ҽjSJ[j'.D;qC8\:}YbaSgY M)ve!+g^Κ}iXLnOM7PiX8]yDB{ֽfwS>]Vm$!if ɔXìC" 3 VIM0|!8^|]حѠ~f~_H\92F𲚈AdPWq蜈k~` e"χTS$8+뉳9w<+1Aw;s@#_o񱐯%(B[Mfa5ib8:4SrRTBuGkNJB6lfu4hiثLJ\­z!dO5qE>oMgׯO.ɿCk^]s~,,+׭HZ!/%IkqZ fts65OgS~۲yެи&DD_#(dCM* ƧHeSbiK +XTX軏y{iݿV/}$:#{ݬdpVJjUD{|~Ea,5,xHe`nl>{PIGqXuHO olP⠷?ˎG:@];{X8r~z"Ago;e UGXU 9i%WY#kQ$*5""Ak/Z^A 'í.būzpPEQ+bq+|5ਨ!}TlD_O\ZO˙pu G:¬ ֚)G etK$;1 :u;lgu9  ط[/Tu}n[v뙩}(ny,p/1y aA$\O? k1~ㆼo"1i( ?WFұ4IQ1CpNRtdpFuH!ݒuѓ o9i=]qDw#ha9E#ؖUl {o|G&+ ZbܲS,? 'T۱ #[Χ6骪v[&'DW>T<IF;S4iDbFQB8eӘ8@ E 4f{&K$2Pd8Y/RC1jKE`Υq`mTB{^鐶\]X` 1nʼnfHf%Yts\LA52ZG\R; lGffQ=ےɖgׯ5=`JюLvuXz` A`F,ŪV۝6 :D E7"L/+{" =Bd $n-޸+`GIMhC>0]}~9;qt3d7t9))WĤyq%ԏڀ9fqtgL̟o\'A;X_AyWw9y |3/isQJciX3C'?w7ͪvʆJ7 OA@CGe")ň8!-żhnk|^"=8+֊͗0cSxq̓ڒK}n3"'ly9Z&ԽѮ^%f8g`)$ 'y|z#kh^њOo LBXjoާ։3Ykz#ibhF:L9rR1t Q)'vP ݾ7t ۫*|0!0 ]:fKF(\Ǻ)p91mqyp"|^% Eк$f./9|@q5nĄy PFy7^] 4|9}oa?Ý@_o@F姬vOT.V,H(68"5PSXM?`$h_ب^qr;ɢ>(OԤ;_a ?3ࢌᵔjlN9Z8Mڑ)eN%M~TvsMXw'nS:?j CJU}Ur}`"-xث]LWλD3([ƉxQ.F$?]>O BgP|U3d/wigw>'l]!@gP$=9󢄟:9qXcp,)D=^ׯcsնt Ib·9`֠N-'غKw[JsZ$6AZM^ρAV\٪&Tq$q*p@}2mڥ,]F;ZT6Kv!z4R(@h;R`=f'k.ruit U Y0aS= B,;&$<`%j䥢a9bs>aNtm]#Қff}pOۥS)mFj|-E/ί<Ѥ.(e|*9<"-,А1MU饺ӽq5ʼnIk7$qS}4a6! dВ˺5~: k(t0b܎Evbede?dTKs0 9)re,ضZӁ$即F uZTPS9"C\B6ߥSTdUAv#rW濨LɁ2IYtjHFAM᛻-265p11b;1b^*r显t|aZ*&pv}Ezb67: Zvٛ ) !Oҩ(,[402ZskJa6Sm <FZE8K(*jiOQ~ˡ'S nyQ+ F':֑h`(y i 9zÉz)G-.(c(qcjE{crO1ᚬDpsU =8VGmm? OnVnL@ ۩¾50]_!Ojj;K=YAPJT{ N~T>#⛭"˫ߡM@wu+Tpv=;Mcu T<*`'g%:;eZ}zm,?C첾zaV \w=|b!s>=__MrJݩp-ᩊƺ8q~&aBt !>-=BΟ R':=g$ _yU,ܨ]N%=.DE+ AEJaD=av9`Ax28C.2ꏺy([G7q6#s)v ya ޮIDb =ǸMM'?@۲o7ή2Rυ Ha1I-:,sI+\|fۊAQ;+1Gۮ i5@ԍ}S,0|czQvXW榪}\>X9#EsGNl !>m)**lC*^ܲDvt(b7K$pTpxٷۏ*ּOA`~nxr9׈csP[O4jAnDRP`-{Э[#q3 B0o58)EHLYz 0BY_.AXel,1g8b bqQ3ƹk\ke u= ,9ZvS,jsE N"k@2`k@YυFF- QCPD$:YՍF9nl=*zgnOdn] 8ƒNErOtǸ)P~J#SOy{[7ZC]=(c3980!>$eOx2ϲ O(Ӣ?W %VCe[ZR<)&Fwc'J,r$P!AF[d\Xv7CCVPqme;phѮ#sӨ)[Co\_ǢuzѶkr`; K3^MX3:dYdEGEo1w5@a!Ї"z`ί =J90KU=%=vkdq07 E ۗC?ǫ5n%M6W z0\sIUX5]o+ of RRqgVwi єR %(flX-Ewe ajSq=0:a[tnJ:A K^i*_yq_v£YǿiQT'.CR긳1b"P]W ՟'{Vcx0˩8Sg# 2ls81bpYEWDN\(.c.o欸keVfSZk 3* ?_u9tUgT69o2E}pU{Za]9\''}}pDCsCRyGsrG*$LL"ZXfp1|Rui+z[u=_ݺW$udXS69A N! M8{ܹYGg|rIG5cw^JH^v㸾# /:V1JL/S 4\M+Բ+Bqd`6_z %[Ne>YdWwZVe聳.Viz+7`ٌ%M<V5jJ/c#h>un׺qf}y 꽵\Oq.[Һ:㠢DGw~97u:c\"8x wv^'n GnG) {s]! GA?ӵYԛ;%t|t* [H^'D~Ps%!wBb\_}iZ!_!jBFSNf[0A/3hCԌTuΧKM46ߺzY~䘅(yXPL\̂18+kMrחyۃsbצ,&5tܽPYx@|+e~[^W:^$h=YIz7B 2e,V#⎕g 5I,VAf*^{"A$MvK"o3 8w%Xsu.w|ˆW@,促.6_{T!nt5h/3s2<8NPb,j}ќtRCnt 1H)5яӎ3'IIB^v F. ;E3|mCu9}?0"}^lPXb 3'E/pи7e吲]¬7{2|cu- X{rRVw}SIzq"@cR,J᮵oZsEGW`T2uAjPNG7˳+@eSQ"ٔo64j͊GŐlO6˃b iԨDF]r_I)_d$/lvhO^`2b@^$zJ%DFھN}zrl4i d:x\.ڸ׎R|wׁ߶b&w듰oHh3*gtzzUWd[x`܊عEo }"-&R -TN\hU- \kڮ/-`ozު_F ųLEz+ѡXHd^2?U.uvSà=_Xk,I׏aH 1!XR@/Е׎ujq"S˔k`mG+->$kHϮyJ4ZH!~w?)7) v$)[@DF#Y3%)!/|#ۣ:֏e_̋Dt1#QR}m45R~z4t'9u@~5 XE"~ ̾d{l[/!y[1H4 r{, SuD rJm<~9ẽfr*{ KTdÛS:t)|{ CC%=t^a2zq(K=+Q}XLjZgi6axU!owDT 2P:87 !_,U#m;1AИ$2^)Y[ȬbYvQ?s k,0mpM4K^&J0\k coNP)F+tf>5oեN:"pr̔oZ:Ϋ9]fd)vo=E>:VJhZ"z/JO7[80di1ݺdDdH$Gj,:=ZBY(\hyOn1Zvx= JgU nfN4 'Gş*f}G|"Z@.D߭!דh@@#ҋ TCǑf%QQpy>e;HߧK<į_)M3Qk^OpErH x&K#{4!E=pg9pٽ~ύ}MɲlVσn[5q9[r oO,{j`!Lq|qx~ADi"c[%d}&>o누uq=j-p=l}sp\\&}$7 _BJDRACJcV*ӉU'Y Oo-0r=rUF4xp.f#JS{"> |ý픲[Zg^UAlg?eǧz#K B3N% Ħe2`s+9m8D9"by+lKPvĶO3r\JƟ$x"Z+ͅA^r5 J^ܒ7]IcOFh^8u2F$r%Lq oJJ@:m|J-n.>tVX Dxȇu\y5V C爑YPYLc }" @Hg 6ިiEZPv2D)nDWa}9h[{7#:K׉y(4:51UQ(> @c2 F%ebTH#vBT6QcZR~ @]y*T,+{g5s$ ;ټ4.$ۃHP%GLD/4AQ}5σV 6amDm<Wy•#f 1~4Fx+1NIֈ6"*iG^Q`?]\#f.FyLk&қin}\c{$[, 7$(AE-r}6@|ܱ_׺C$m*w>K.Ej#y2M 0 o0فc-iҭ۞d `#r@XyTs%)H 9qs(>>Kq}Ծա1l @T:>jXY)s͉vjCumT0^Ֆ>pǡB1oM>žबH~NwE#rR; W߈q޵pܻFTIyhȰkPODu@DvVCJcL %C`=^SnDȱÉ ;j4?q&Jߛj 6Hut\$׷*.s6yťvYQ\,&\^UmYw'[TШʶ=DHe"5`%gWI~1&\OF? ֌&.- KQ#]e~UE€AD`͘sA'hu< 2K=i։\yMu&>K޾k2:, Ύ fg/<0j4ghQb X_Ġ@ ݺ4q9XuY4c>[Ҏ۽K5\ݠzF$+ cMy(HxA[t9N'nE@g?&]֛EmlW#l@kv(/ +\WnuL ~l$Gٌ&GPUklhhf,@Uqް_OC2cĔn/Θ=G3Df–3<12kE4̱~F5JCr!t uܲ٭c|$#Fz_,(mbΟnk r+@gՀ.h;&}E q|4-CRܝ22>9_P |t*9Xf 'zVc)u_Ѷ©Vj;%`ѭ3& uD猆:u\i4@_+TIT0B'iZG蓱Pp7j}3 kpٹռ]ވ\u>]=@>>a}׍Dovr C4dqHw^O@`\*;o$1A?Az'+'#jg}k&g-ji Rb[k"'$#ˉ8LЍ [[nE0C>yD`(g5!vfZ]zRoՇE "WOZpcS-R tj^Zu-2:}{._B>ǏY*) rW~YNhD;',(Fgi#W}E)UL1ou 4jCL@UGZ@\ pGrr?:@]/4`Wm4M{^vQm(:%T,$"qfV}WI'f:c5Y9Xڏ%%wNnC4gVl0M)?/o$&U%%a?6/Әi]~v)B:b5Jqsviɩҡ24o2y =o Ы^gLLeڔs\Uq@[EWoaAsy(Y yCs=ZXLUmO8X;mW4XdNXD*t05xPqB~wZiDtKcJ7⾎\%i: g)@6}Em/[EXW txRW,[ ,H@ .l']i 'tX7K=J r~uĄ61Pϧi94 ]TE[qz|V2l:D-Hfz`%;'Rg6 u=/h"Tx6_FPz_1[^SU`*pbIJ'W25uU=F٫DO.jBaOUJZ1ZHJL4ba^x!f%ll̢+o}cmwA %6_8Zm_7P6P\cMJ)BP7QBLj ZIaQCl"o<!8;NDSBdޒ}^hGA 1Q~@w@SLb4X R~v"LC;XOw/T |@u wĚ 2$.wdH;\7@U+ ΰ/NԓGP0V$?מ³ׅ(ZI\TB74KPYb Z;F1u7= Ul B9􍫦nf1P(ĠG]|+]yГPGAج ?1U9n=דF4g:xrm}Ťa%|!㥯Ш !*uβX67[ÚҘw =3W;)B; oia$,Q ޛwR&Gk:[ƫGZ>cf2piTznZ#yÆ 2xm͸W DCiu|op7 :ҔuG*-{aܞnw3w?do*|8Iq L/ATjC84'EWb6zPƑ wɮO|[V #Zfj~ޱ2|JR;`a!J~^s|C9ikl:%"^F;h5RS EZ*I?hF ;m0:@9C+v3͹m_ꐴwb53]׼τ-p wǕ'bBlO>AJmf!l^k*:+U55[ g-W\_/1AZ'i[R9z EjO=-|zi1.!u.Fq_oR9¬F 3w@"v[ guIw~ȅG#w-@:J 󜊯dM/?x.*yǑ Gf'#y7 Q2ҳw=)"'H >3Ğw9K>.tr[̅g>Ět'E(&ҙ9Ze Y }fMצ;]) qܭpE!'pkvT)U鮼aAWR0YA.W?>w{#sU;܊6h18e'NlnBs e)*?6/,.g,_yCWXH<*BT\Co= @={O]/5 ܯbb9St,B5E(,nX2/R3F67:jP|sg<9}sI={)al _e q=iHe٨8$A>,*eJ;o F QI{ȸPHH$@ AchSO7 -C e|$*U)˦cżp&o1uZMoA65aVȆa~)6rC|vmC[Hvc]#Z:3Y{7k& q0v5H=:>If1*b\Dg^,wKVDu5܄~BIQѱ'Qq9 ƴΣlTVOuNb ir?;>b#sPG@֐Tp.ߧd[BhhPiJk žtX$beISkDh,g5Gjm ])<k;@|nu2VsoV%GMNhǙl)]h"Q#V)&s`+X[h2}<5;oCD+tt8ik;I6"+4}ooEnb8 3o5c떷}%̄+LP7m2xN-= %?Hi yv#H&R>bиV j-"ըFҳX:D8IM3W>od9)Zu\,uDnFKl 2ӓdJ۷˃HfQ$ K|ėի<"T}Bр~u'e1 {&{ 5jP|/e|mINw@Cx%fH^-vE3A44qD# n6B!Pַsѷނk6D xYFycL2mjG ߂.B@$NfESNwqc"@5쌘CQXIvD$[5*e? UftōrcHg(P IVX QvEdSwЬ|0~]ŸץF%"=1v˫; HAD\eT:JcQ9Ffٹi~QV}Jgqm[zk u:7r{/Ǜ@V]_[Ej~V7\xN(O\˚h@[Y\1$JSDb6s0$ϾXȔ}`$@cOVhM Yo$Æ}Ia>vN 2|Tuf A]Wɝ^("pU,f}lc..q/;P9Os? d ))s[æƃv39l']?6Uw-jՍz}eYen(H6\bm"wT.d:;޵fd !DVRN(lh_!2’/r #$JBO8dj=M>B砯aV51` tKa= !P8Xc+6xA]SVX rIt鏙mDžc ?B)QjPG$RE%ōFׂ1eED"3˷\!y$3[X),S9fS̨\ V\uEF鱪ol;\6Z&^#,/J1^,q M@עC]cN5[R@$B Aif|\-T+0?=xZ >Ξ7Zw4!aRVu>f'OVU[@4+I_A z2@h2Qtprs 38;vKvr>D͇Ee^wތ`ĞscN A#`0#icZ󶊄-b1&)jgiTu)&x-C|vg:;y14DJuUaX&_Fs%Qs U y3xs;!~˃6"Wp(?e"Wp*~>s:g$.rQ^7)B]9O#p.fDԴ/j-UٜjUv넾)nDm\8f9j%ys͎$>|\z#7価^"ڔ\miXr7ƳKh0کrTvMM@ 3e(WdtiR>?/i/!hFCu[, E]Pø4$y aHL"VM FAw PǙ:V[=s(4̍5ÙɕRJ EnQ續o*3 Ur=I%Z6簄5jt/h=TLO5 C*[TiXhGuԁH*y\r*UԱ$0d6q_ @~@pq1>ŀN\<]O_ _S8cG`&W[7uupW0͆g6LˆWU6@xI"a#|Rwao hrJd׻MI5D]1'5PȧJ[9$dq*3F{}(?[[э=~!2ɈFC.3' KD$4j7#c JqWs剩}oIc5:+|Pp,WzaWpKNo}-)YXz/6IOz\.sX5QX٫$oڽ3  SeZ,{k| @r5 V09eJl,V Mmw# e8k56?8-! ٞT:q۟cDٓtؖƷyTj'pFwNRb]/rvˇu~X0%lE;/^Zɍgu,OZSu\ጧ8O٬W!SgdSCe|iCI4ȫbY(%BZ}4"Q2vbxjrA6=kpn+Ulөh?j=chrA7B}nUpebDk$Z{iItK7juT1H`oC?ȓE_LX5`ۮ.ҝ!H k^ Pr&M5&,Լ,v `Xȣ8f&d@?k]#8z2WZBG^KȵH0YmCE@J1 eP!ڃF'R;e5`?| O* m rPV-1RVRt -PZ;nP-a]&s14OxZ NJmqN0II5OFy/#'}mFxu2GVH7 y[VDNTC1-.+:^tzMn;h62؊'bS;*aVf:?dPr[=q`M4EVEhNUp$G,Bw=Lw%O7S qʀ_G/QrV@jYrY/I׳'x+ m˭/wzYoӵ>C?'TivE@1tp׻Gq25(LIZ1I#ZGj2&5#_Sc1uGq[%`@`5SkT5_5o#?tm"`٢>aБ~- pP, *:>LI}zf]ףW+ߜO< SGI<(/Kʶ}P(!dæ"K$T0/^3ׄʉ5=/K Nv,&Ixʉ6" a\3{R7 ʨXѾlSqӵ*(KІ:"k67yMe{(-/(S>ngRxnzTZD"r"݅5IT@ -d; as[Rl@=]i iP 5Ac0IQrBA`Q㗼Gu~F-zEDJ 'vD[|c$Ų$MSuܷt qRw;E_ɂ9"OG.3'/m wTB HT~VFJm)n,M`8O@hZ^hX:;qY:݈ -wdA%4 [*Ӳ46T֑40V.JYZHK2_hXukKm.lo75#Z jKۑ?JNYw}Dҋ6hCNwCaP[L ֝{+x>lHݐؚ%n#ɹnx\ a'H)@+:/X9N?dРEnѸqL9V4fhk?pRJz@ 2J̫h\RkC"P A>3Sٕ,:c,|ܗYAɤn%):`}wL)@ wU yIrg[ NhIzB=9 '^ujP ]>({$5[9x}\nyj̏[k[40*zb"Rb + P[ ;rGyst q jwW<`B#\tݞ+S)gM'PMI?3Af@!v{U[h5s =n;S?ob)@0omQmBMu"q#k-2 -Ӥ:3昪H[Z4+bt 1.ӂ X شc](ʕ$ q.͉~L4bd2z^J_nc[A<׻D#JbdRA:6%-VsVh˞%"ڳV&1g1R47tƳB;Fo@,K#PXNV#'8%fk|ψ4 $} ^cC<>}RƳcܙ_m2~0 FDATKKrL^kyxmEŌ0 KH`c 55HB Vtp^]TE2iWF3W BK(EPWɲ#}B-H?̋HJx2"JM8a:F2wnuC ->1Qw'tƊq~_h%H *! Na)b)6&G1|v9MT: ]5 wɛ%+y^ä:I!BEޯw@(UX>,1gjβٍPC9֒ k=W%k(zޏ2  Սh29SIV>O4Oi N>u/Eޖ1nR'KǒG!H̩Q76%gM)BAhݨB\;p h ?Hn {J't~V޺B0m4z-'ԭxd0\ŰHhV(y/C q<2cYp~j')?^E HnIN}:C$;8Pa%ȓC&羕HTFuHW.=o ;%!22z4YWihTgs;>b?zvY uþ b2j|٫ek5#@zb`$t|ם6[XTx GQ-|P\%fs@ %wm/!u-ҾrE%n>2iZ&L53@ usR%Ej J`[\TIDB{V4={ͲM"2w@#&,2o#<,|&L%?&S?mYf~Dv1".~.]?N7ʧStP [%](~?ū| !Y/,lzJ_O' HK6>985Ŋk/dӮDzF'vKy C(_g?0K'cbj3Xj}#A~B=KBB<~BJ Ɇ#\]#TA=^T_ c2L]gh_r%5\QcJu4Eu]}}&J|wܚA=/PCtjp!v>F`*1m&E7l>еl 1 :ƴuz@&'AV/Ѓˢ0$wsPLMb)x(/ cJpM{1ew8&dD;e%FH︋4:,w/sI= 5anN ?#RLcM;OټpPq$hd C#`A7#sQ8u6"POw^!"cgEfk33o* lϓ: cKqYJN N/wu)΀nj|#J88T'm֌,ܷ2H!{7bxX;kz} ց{ASV}QYT(7G*͠>ܷlI6>)#&7*]esQpCEx}GG>j5ۮ-ucz>f~@lWs r5:,1O8W "N{D5X:&Ĥ66VXM /`aV 3q7v[$@bMle{g*U52G։D{/X햚ytKl R%dcpg5j2/t= G4Hz(]6f"QQMyc{~AIG/u.v|h1w]M4;㔉S I*bDShq77ٸ,,n7O\OG#px&Xn:(Y sZ82YwiE((ZK{Diy4%;x SdΞ$b{ps#} 9S/Mm*h=>cdiҶ#04ѾG3J3& gђVI{ބvޟ5! (3!A+fRfQ@C3Ď1ob|\LyI FWs$a"o>Sb7t=+0QVDfDCKפw)b BciD?O3еtIDH c_V6CP !N(;kz{ZPGdŪ< .2UΈGH}̌ӭPX[3YjF|CZ ,+&=@EE'ƹ>PCdu$]/8KTlՋ6i@_%Wb-6PFF3[΋Ɍq>ʤ6yHr-Օv<#Yf ӳZq0ގʤ4|-m\LJ5#PW0}/QҎ+~>*Nx (b<;nL߽5ۮ߈H<15//9+aHq"X QE<6IJUz . ZNR=Ҡ-nwd|$TFu?|зl/1T&mg$|ϊ2PCƜ+k;ǬO7}]*)rWϖ~u[c 7P:Zb59'q*$U}QɟvST˸h/Rt%#ۭ%2\-"ܪ:c. ~srsWEDh4_w(_dIN`koI^ˊ[i=>k`* ęע-T(VP^*-Fg2z~qDD ٩r͖_W;o@o%n4>`2XjJC ׆t)B og\7B~H~Mec!]1~eqjn(CP+ohi[-w&~R֌++Q$17-dnlrzY"H Գ<"GFm8S= w>C҈H͞>pm`o h0Ɍ:[fjPk̳{^<iZ=b =]k ed66h5dzF6gJO}ve 7udmuIpLYב_CM?2%QF\8oM%UGG4ԍ/ (bnHzuń{x+lWUXv 49)6QIx'rJhUeYK1)? 5>5qZhb2)…ZC~p9(˫ll5SKW4EVF gR͉V-8zQnTw0Ĕy~9PG@HؽfmDI4'HȡZ Ĥg-r:F;n*ș-q#!H2ϑ8?4g{$@=.jMBfrykJ(L1.gqښ$ q1}PܾtϻѦ4z w-mVIvOm|4$4abet!Xs1Kv0ENv÷! qGx33 H`jm fV@)__oClUb _1tn:%psՆFnc{D ֝>@EtXgvb`V6=-jc#,;考|HQ}h]zvC2G:BE[  OǞ_=gxRR@`5J'e:1q^ݗXL=ܰ#r[Fuv#bRF {[YkBضըߑtdDbHpM Nk%@ U N<^^ AO$a-ݿ׮Â%l;rci|a2jAP56ye L#E#QOyP\ڷNd?f#0@ݲ#R Q>ű!Wjo Vx!޴uoЅ갏McEK[\-^}ag*\;>4&Juv$OFnY $'8y@:>-@7Rq̌Fƽ"jXf"toeQ<1u:N,kE2_2 OYql6/X:J1)7O¼{wGID =*‹rt_FPE)}8r19I%8BZ֢6PjIW:"$R8%=f >hT9Ru_hUV]u簁9b:p?gd"QStpߖUl vTOWq[x!V0xEJާg׊B \gW ztCLtF}b[? j,S[H"BX$U`t," /2SC">AfRHOzzUt($ŎdkըKmN tAGx!둢lN,Yi֣rD uEthɋ>,9 r O 1fb,Qkc=asA{''X %UY)%spȆId)2߁|Ըn_C`)vKN'9k`CZ80c\^TF:1-ge&r0'pV[D#IԶSp m&Q ^FHKY2)%7=v 7M/] ŏ} |xo!;`lI0Y6H#f5K+'Sٸ1Z*Vn,b*}!ADAвiތlD`o$R>k-N>^m+ "+NTmE$I4 H97 C"Eٕɴ>v8qH]'|}o9PO PxޘJTOuBݏn0Jᾖ-[VA"=ʔs}-]ň WƟJ$k܅  BKYn_5`D}z5j@]jd)b?Eeފhك;Gx;S/ uOG.$ |v+afKȄ-B#w ʵ|iW\L PE8476) =bҨ䧯uѕ^۴ $CxUMAtl $>!.GֵLw}+Hb=DG(j/d|7;! ɲM t)p! PʪYfGR c9@ےlT'ۀ sobfagkW>$Iiz@YxLӇ}u!M7ޛ.xUY 3:02TFPj%H Dgc7-GB?_*H>kM ?zfNQ>$kVZD02{4|_%āxK4b-,sӳ 'S>bԥԩ©~Q1{_ 4H{df1KӋ@I#:v\i2e\ΧͿ%9yB!iq@GSkJd7B ]6Sʑ̮yVԠh[QP:ioHQFNTׯQY ySѫ# kT]TCC 3)|_dr3U(P g1Ŕ*u[ʓJY">FRG V8`U" duEo[u}ꫛ[ AeYvPg=5bST"LAnqzT++5EQeѸ-/Qm!/RtFEM}O_]NB{"slxSdj6̀MǛM@Ap\c+33! 7&.𸖷MpԤ/{<2GƃNmm@f}iUES9U̖%>qnMIfeNPxu8?]К$Al0SbB8B|e9]?D;FB2jhw8t||I%7d{ԓW^1f(^rfCU!hJE&y=&zYo2rWUΕyCm߭b {IReQ![& ;[Zax)K,FzӉCSɥiJZ-dP6mS)'ہK|Yo#F:;7HV"T~jLт/r} " o t`I ht=/x2RJ?jx Ql=  4>YF|3BTVaW*|' bS9b:H<4=T1 R Y 5f@FkK9}>MY!LQ}?":s323^l*a F}KO(XVsYp m^358T~R6Px BUGp8&K}/1D** T$e]ώM^}Z R7v>JOk(ʂGj骶>Po,7 qn)!Ih$gE sXA ֣&X+[unYOIƊ;*e#z@+U`Ҡ 8xVӫ!'v*HSܬv9G\ZbrZy}K"YOǢ- ֩6Aٳ1~`Hd-evܿl%93<+P?^} C+h ʾ蜽x0K Cz^+UcPbv|*/K5t !әЅ\kogwX3vB%rUˍ1k |$VU跅fKNӛFV`JaAzK+gWs=/8pQ6GSzܰqU&q鮹=]@b6ΓuN;C:7B C91YmKT.}CTeZ^RR;UY.J-Q֮ h.O!O4Q@nJH5X'+!`\P'*@̓ӳ"H*e8= ֚RbDP%.9dKU4f=fFkՐO(EWJNDXe$#tI|QXdEGyr/y1≎|No$>KW?ԓJ{Uj^)BMi-X7 k;k|ы@rm{1:IPQ?_"tT;ZN2~7꺯Xubk '{ΞWNT)&Z*#ewj 86`*w/`Oˆtmyv*(0z{F){^tk }}šnu`yVUIW%/zSkTS '^䥔cKTH%E?*gC1XyQ:,[6Njnd iq)G ~P': O.K{@x:_.U˱O+R^@eў CުBYLxqa!i; ր$ Ijwy`"hLuJ.Bhwjm~J5vtAjS9W‡e7GoR$я:5 ΄^mK$. ;P&B~ /h2]:Pf{<.3ly7ƭ=ATZ<ק4~(e.tK.<N7ԡGݎq^@`l_:LJUu]m.}s nyPzjgs$czlM>FzNF-8Uz2e'|Nf7knwq5??%;NM+3~(GZjȎ-Gp"; 5wm{Q~JgUSuS+e wvqC ⽄<JέA "|f:tіg> 6N%;)Mgr3҆J9fzb49=ΑoT+QE;GXxv)kmn톌YaaQ"fNC_4o/F7[&g*_^y"F<1uͩ(~ :UOʳ_hF'!iCNpחJ?1ErG-ڎhiOFϽKO+Ry2T$ ՈrzC*btb jJW(hzV>?QcvD R,1;SvEC2/Բ?RڐF6\=CT2c4d~il AdQΩ-}P'W_Gc]v<<8[+k@W|# +%Yv? RrGRDBEqM=̼SxvQ@קӅN1~gFEwN:i0j걝4q0T$ *4=5I?C4@O>ܞ1^d@x%Hs'߯L-845$4'T]z/>HnG|tt39ui%*l,c[+KG"(S`Fu?r{޴AJmߢ jh =<4@W[FmsU\g f-P K@@042[,UV% F jZA!t6CELQt5\I ETTlMGI@C Wcti|5eG@^j=FKԯP Kv9ۭѢ>whKv& @]An_4:[Ahe=W64iֶH&}f7;e&G2m~mdOKç/lI-m~cIfO)7B 6FQ+eMVkX\z0;Zh;/49EGHвEg_Fe#jDҫ~Q!֎uGgh -S)/ji󨭙ZϛK=]UlivJoklɁ]sxb.R*F*ʠaDU ISdgd1'D/B]e?aEtOR5T<ɝ|WC<;q=Q On,huT=sy,Tٷ(ƜҽepBrZMФAs7y\WhL攒Ql5Dfu~C N=oCwS{Y`a=;H.K(chC>ܤiGzJ>иR9 `5o缺IOՓln(j'0>A";+= nAG^n=R4'䛻1a G a?6h~]2L6j֗L;!BKS0k$`5y!XD$;2@ 6q2=ƌ&8SC͡ ^٭S@dcLM̾QkLFK :m:$" :Y{ȩd֏B -w^@Hۢ3Htj079F:CV79XoɃMPu@ɫYDeLjʴV +)0DRܙh?ԉ=GE%8-kG+kYv0"ct FޗvI uDh^ڇR_W/X3I\qm֤7B%n,c@>*|~9}Jz3ێcF/ؽW4gy(CRl`"dǔ'qE;_RGڴEDpwtND,$wO{ !6[ְؠjBM!~[j YaYDuDZ* cƪL2 /&2tXd(࢕KׯӰW+F vP2C2 @+D3:YY q^$TcFDғ\BY =߰F[5GG}1P3ߖ@v?7Sz6 J4R'GV6~L}1uGbT58A{﬛sD MEo?̓y'Ab>{ p`vZ2|\4[#5ͷ"$u?h~< ֏<"ѿt6aV/JcSb~9`fds\Q?HRJ{^f4ց,Vѣ04bEAWx+ћf'"I?_Bt&@j6a4E{}BAqWO-F@cM3t+51e4^8@WD:OurSPJpHurO vGZ=[Oc1d {\=?#|)ѝ!~5M6Ƞ6 C[%Pk<vZ@&ͷϏݼj\|{dړBZ?ɵFCDWfoUl$lye9'io!i l9[u} @2J@eJ:_n оP~>clS/Grp&vpMo5,d7}:d$\f~S˟iYal${7#돝5!ү&:iuYf?obT6+c |! !ysk_0R4٠Pq_瀙5nKʗW mu`u<:s/n :j+;@{TmWTSWC+c~K}Ԧ<,ycBp38z?ˍiJ=[jv5{j+^0'uM* !c =>v. e2 4u=ӷ._2~@dr\k\f,@uOROܦ՘3l,v'WL=2] 0$+-ޱӷ/QyX,{#K_=ļzX]G97\靥#TT{I~ˑAg5O-PWn?,DU1b4~s}5F4Ls #Y575֝N}cp(i-ӓTDA̎S_3a!]dٛYuXqv}dDEFnCm#!\ZNAgWŷw` <:czR]+֔`\W?1=ciߟM[,g[^#;ȗ<1(J0O&|ҬzTjR>)`43L]h },I-E^z|#XD l8!`` _T^Uu>Vdi.7SFPN4ݫpŝSOХ :skXH[%(hЖ;n vI?w&]!ɣ8O}Oiw'%̋`k+֢> ck/jĤo4ÙVNIs}XAϢMTWx۟s9a#.}d<ЎPyZY`ZDgG;)-W47[n@ndQsp4P_S;FH_i^9{dяo|Sk1BN'W:qy!ل&wwm~^DPsѕ=/+mbl|.K+?*pl}xf53 a0g֣jBԬ\5#1jM(}O3+%h^_GwY,74cS6{m5ĺ!?s6Q+ϋ !0ܣ:_e!Mȕ4@4Ȓ}(#RgS03MwA;`sn*rm1CFsKv}j|%ԥ b_StyW6}qI1|ì*~e T!'1ߑp~Spzn}nwDn~zOKޟ9Aoyvz; kTy߳; ٽGF./!\'f~%=wR`(~]C˰Z@D]4,fZ!m1:cH3Q)|n<ܬhPZ^k䱫ν:+ԁ BSI ;a؊$*BK2-knVfXCXTj-xiJ{ a"6LG˜M 1l=pd ?BS 7+Pdg)E:#xIc{eXߴFZv]C ̩qr9P9= xZ@RH&MXZO~n5 XAH@G:%بBͰm|Q uHibo$ǐ宦VAغFVuJ'$wnÈGO'|V$H^نd!DtUɼ9I9ZsAA27A^-Z4"_|bgֱeGBމ#mTtpڒTP㥵tZS> jOj5zu}^XCUΥ  wIҫ_}vM:ec"#MF Szq-!)gj%5s. uc!a6b';p5D(2YK|OwǕ"s|\YStusF53ߪuS'<ֱ٤,.}J2/5kmIXxFT$"qr?2VV dߍ9c49W//[=_A0SJUFYHlpzSFfT>=*N]6hvm8 {1yHR?mZ湝(0.g3UMw&GFYxd v ѸIAߒ1spgS`Xi3lحI JNžĶkܵ $lyz)%nqvY3AH>J6 n>H^Dh=J2]g  t`{fo}Kջ#est3+衃ʑ+'MUB+>OJ1F`htSZ9eݮ`c9F.V<^ uF.RpIJ'2N!<+ĺ29N8 f1­<獏{s$2t;'$$SGLxYzu?(r< #t_.~IҮc"̑:xjŅW&Va.%wnAteT#(sarȔOmf[{mdkul]=vyY9/) IE; Ĥؙn TƠK)JR2-IfVv?//oǼ=~h m\g5ܪAX;>*Y|u~ɉ=GPWA~xlEL=TE+TLM>]U&lm:Nwrck^"z2b[/SxmAU<ҊHcUe%Ȭ@meXπ_*gF݁(ގʠ.\'ciemAŃʦXL8ϐ CQl!{oZ )_vEbјT wd?u1˗/RR)K :K)Lz۸ 5DVq;5;c"+ :d@#y,9[x4);.ǹKYC)bթ5B[" j ~ht 老JJz+FփI5D'"=T:u`/4i{JSݣ$[2 /fZ^v'Z"^̬^xŝ< sY0"MCeքm9%-]2I:һ)дYA\M׎@Cb/ˏl?ύ3¶OUlk=5T(]G,2z2 on UBly@1>,G9AOKw FS ɠFk;K0A)|bn#gEE̗(pLxQvY\m{& a? ?uO[iήlc;ƠF&R"k; #qp+d1ѓW4[kmtOtnQhʥlb:0y;0 @_Mf]x{<`k4K~Xyd Ø>ٚqx\x\ۤWoSڴimm;,$MyłS_` !*Ptq'S heR5.;e {enhH7JQAABW$u-] uBb56;?n:rzKcUbƨkp.? ĵSpzv,d~(Yj.Fz)W!毨/-eo򂤋UE $_[0ڎ:jGgzӟra) ;[&Ѕ7kD{ShȒQy ji6Ź<0Y;!2`5O;pW|+bq?ry~Vԁ,UI)[.pVDJvXib6Dpj{L& 1i[O:ۉ~^yqnao\Q;1PM?jfhGw\q/]Dgii *58^-rDs?ɽ |<7Iu2,LNǢjEIAKѕjKJÈjʑ]$Fy{+}dFO)tܡY*+Z`32#]UtȒo7jح1Af~qZ9S(C jĒ\'X}ѩ˝_*F U˲p oJVQ-.+^QPY%鿍ؔCJq RI=]& 2+FgQFXC9L|RbK:ͥz̢PL'Il{7ʲulZhViW[tʼ64Wf{L7IVݞlpC;@?"2CO êبَ)m->1V}?7 HCXg̺JCed:f>,'ގꉼ*.mNz5 K^c2@3*؄Yn Pwsu+vPoW>U"W!l'"&W,WNQP=J=N9 kjۙIg| nb`2@]vB,Ά|{cP:gg | !Z2vRܻ_Oh˔y"I$?)-;,|r2#PГYa6mؽr$D֟d+\ߩhB3י-Yɏtyf_!Sµ?&32?lL;`=ATy< Q%H`iogzI5A>oJ! <}w[?1kyoQ)L ]Ӻm;/j px):MGeeRkOb!x||ydnzhd쥃NYAuۙa$:=߹ #؟y-m2lݲI&>a99p JR^rP9Z'oeL3EeVk0M[w6Rd:ͬ)մTQ#m=vA Ic\W"2GX=+ 4Ԟ-ЕQcm9K~cXH'eW1Mzya@Pt)J#_ÝCx6Eo":u{ACr{+;L"鐁j-gy‚fM!C[tlAG'1JurbVd YƳԟTֻO`%cj24Ĉ홽DŢ% ؾU#ZҪUw̒ PFc*gD{`s?:<*54KfO:~Ѣݦt@]fɨi(xgNDj~N=_fT·gvm#8 z/"r|Ï~=GjDuly }^,E&tzIoZ:Blظ3ެJiI *f#F Qކ;/%ٍ3f`V ZD;.њZKcح"[1̺O ԙtrOX]P *z u Oj;B#ԇmb WdtĦ{aN(R'2:D]jꐬ2KS{@NoE![NHR%WLJXQ =3R.6=k[]S _JFϽw6Gtޓn.HB@Kqq[qKfq=5KDPz˸fi:xQ~D7JL>hנN]6n.'9,zIz2)R66>S; !,fjah%LsSchBObh - h͗}e[,@K4ra۹-=uups/v_2ÆC⤟(ZKg^1V؅AɁWTJX/Jn{Lg[XCdpmzӓ[\rzwjh-:5L V&١['|#{^Nɀڍ *]k"t~"JХO҉նڠbڨiİqO 'kBBQvyJ9,~C #nyOf}^ݾ"r_qs5NJb+mdzPl}d] 4 $Ad ϣْT)DR7\aceÍin7LR&}𨢍Y~룉Xg;%r^Ry)[~DaHa% ]wJ4g[ W _ޤ><9ҝQh=:ds_M嶶Q%*"KOn7]O2iC1nnBѨ5g&>]@VW֏l~)qʬT< }IsSLЩ.8/"M/Q KdOƍZ,EpxC`gGzA[[*IfT:a4m 9zK5dp; CWP)zdCA@6mk@]@;v a3۾N,-KJG֤./'oǡ&"_ru7c,F1ۻ%zk|O $ *t-;m*X>ɍQ.Y Nwzܐc6Xd{­ӏ XɄ`0 z>yT,8o&{9}Y4:0H#T֗洸wobKAM>|nκ4-T=;ҟg;I'h7)tekf h>܎ɠ=O=XXxUC` "ܬk]L4T%3QK%N=*b\n?0٭ߏ4̹Sȍ>Gǟy=oy[čxWYkyĪ ^TY0MϨ}VK,5֙3z7nAw(CQC7N5d w>!p sk#jO+OsJ,UQfT-!|/( 䗔w|"[(F-mOv^Kҥ]qp#!{F6<#Ǻp;g>;| [f#NI8Mv\7cr)LП;_ٹ(X#'ڛ9?vT۩;E8yyK}_Onu j/'Ta(.M{-?WlE].С͂ly=?ɷ>a)qشחpz<C<͎ %"m#ӷox<ЖQ7]!+&2YGFozTN0P+ e'םh8?Ch˴7kxMU@XSS( )Yn,?>@|oF6! yUe>BLAGd~d1X]3  GO1]wM3UK n7|9:jCy3ڌA*hS[X*\([PλS/k@u!vk<߿JN1^FOXjCו-nC3A=OJhB fycMaLOOmŐP֣ŭ![uGmi+$chTIJ@;Wì7U0vbAVНٝ;+V L[b8kk>aKR,Wiˏ^qqcAuDq\t5a^}# =Օ 4L?\Soآ5;%DTڗP8o p.Zr@s14Wyf"'B4d-sshŸ^D튉 \Jo.gc-*RB²3 PqV[t76YCd@ }ƚaW]d|SVVaN}/ږA3~{4 Zy@vzyyjԃۇ]*x%Vfz aAd47U'S@@ ՋACS`Q2 taj Y:n,|o+ d&@Tqo)3i.$6RDC-XW5)8Ld'A2 Y^j7-̅J c7o9p&7iɱufE̳,dԮod s&5[;yZϤ}sCע$ʽsՕ {c[O:<ӗYK;ܞdeȿ}х)+FQGc Y{ƘӸS,a&tn 1+~<0SN%s^tҴC/K CCAoZ't?ŴSk ݊4mY^N2[QniO|vz/%:+gg|c'".ÁMؠFL-57#z( s#YҴ~m+%~,TS[‡e9(g>;`C췷hPBSx["ȀR^ЏQZH{Fɀl]>N}^ gu攕tbHŌA m<ʒÏul3Øcc'~vN$Ѣgۃzl` aH}_U) 1JRY+Y:\m22Ly;zøe&ݷ3{ѢōbZ~='z?`/}R~_ ]̊m`%y8ȎfF;! f"l&)/KKJ(:%XC;^6Hr-j<8Jdb?}{U$,+6C%gH|=ԥbѶͭ^>Oőb1{Em¿z5DFG3lrCP֎E(gwo.^kC0%0?/H{0Ag:wasә뮭W+0U{|]rU=w+P@s_/$R߫#5$OǿdKr1CsTyłc1<76H.`DO>J}f#c8S,TzGqmQ/kZ~KxqCeL=9pir+JB9,ڔ"~b]!s-DOEɤ:. 5HA)ObCo`'Ak_&F {\(9؋h IX-Ú ^-(nE}sX[Kyl8K@s0i'>Ů]jT'>d3l\c$x%}$Յlj0$"E ZmQT_Ka ϲapCX.p& c TzUl] mUdLpqSey]s!{O+~l_ޗF0X)R<4Sa't&dg[":Su|'?@Ε\aZċ?G4.xLz& Ɂ;۾͗XjĶW#ő47볻5&Y:Ұ\sJMj""ɪ~_͐:M![q7kvKu\EvJ6.;8%VidYEs,Wd3=֎|~PU.as0M4;=N6P4ipG>uqSE֐&dQv\v4Vĉp?qiacq^0[BPjA4l>-ec]i'`ҝ Y%5QPϾl<5bӊ_ٯKJE֐h,G5d2RANug]GrKa'%@؆5nKm5wzBy2?+'D?^A3+{; /ze>=J#s%RP~md L7: Xhv<&׭{VB¾f]=H] ɯR⭟Dݶxr`8P8Ʀ^Բ j5*K &FZ}^(qy|Cjnߑ&?>RqujP>P'p5ɱυ8.H&c9Dه k_6:ŕpUT_Fmo0wVuՓW&0ֳ"XO^;~qVy u-.OFИ9q׏Tj,Ԍ!⅑x"#22$%]6Z#ZCnXlm`)&QNv͌ T7 |3 H*a Y)Rk#LEϪG {뷠UBW'Lj&PT䕲RSsuRA5ݢc]ュu_<)WUqiS۵Q8,ߪ:p) Z.tv9.C߯.zapqiwL)mDL 9/Xӟ I4l5},v}e(tz@L?E a37JdPC=}g.zse#oˌ] #=D,c&e+W yPkWb Vd3"[W*bɺ /?riSASnj莦:-eԔr޵knt{>P/kȚ4siZs`ٸdL8[ 1OIrC;D)iU>*|G͞Ev*Cbd"8u;xKҔ=R-&N~$԰rA֓¼ #Ǟn@~kA^ ڣb%#ZjwSˮ͡ZJ%[]ߗ85ո1T񘏝/jYjД>|B0іF<ɺxL"J}\Ηݡxn hH~ iyY'ť1zQM|_n=izt3߈NjV?=:^rnJ*W. '+Cɺ\gbX>ZcbogQnKM =@Қsn d{:WZֺEy#PE*vomTSHFm(y@d/DN}rՉAh-^0t)5~ hk1VOX`T=K յc~*$~;Qj]&5dPZ=xcH}@$齫|8y/K  HKyZ?!0&뿴~Э5DASK 7<,oxI煀6ҁt[m ,GvD ?ω\)4Nkbk}@0xi3KVNvgkӈ=ÓLGelnZ;FI\cNQ` ~7ԇ]͐! 8uh*ᶰEe Ն8;FKyS-O$Fh֏Oܶe'!Ai,9f[_ÃSvnS'Øw6[iwaEvZ{[aEl a:&y\n%ziz3t ܷAM*1ؓz5o}ߎ]&|Rg 駀3YR^5PhF+#f&R4J^݌x9|S4{B!0{1 ȎNb[H "89ya1:ץRݒȘK|q0tGg{o1tTeŏ߮vX&rDݰ4A çAuE-cK?=ᒫ^>ԑup~^@f5HA?N%ˋUg&DQA~kb|{]L10 ȀyW M5f=ɗJO=I6j"O3LDAC0e//ZTFUG>k|IH]g7ƼtY1kQd yFGF%H>ΟI>3ԿmBjܶp7c?mVSjF=dO;Td^5R\=F [£=ts,ij?~pZK''=f<ƷJRZƗ6h5֬ٳ0vōBw1(m֧K5S@ѥ˃.A_)YM'44FrNV#YHLNa:ݿ)Ɖz\awB5}*m>51iR~Q Tža宭]U~#%"|X^}U E[aA}dVc}rM$!h"qQ>@lsk &*ljg%nKPs/øB ] -YAUG9*F5vflHP>PeE>"o> |o@SKGK9QUم0O Bmj>+hң:?odjO[};Sv69DBX_z/*mŝza1;O;2PZ6XjV82@ERALPmv~8:(Shzc*G b\@|-E݉6 SwGKGF·:?#rlfo=Rw+wZS% xG _fm/? kboF]ALYB/TL?jAHesMЯ_sp[x])b7aE znL Yۅjȏi nVˑrS|=1&;[Juu0~|nܑCy ?r.!^"\.bd'k{~bI$o@q$(n׍]Ls;Eo3 oRfUYLg^^Nl'o{Hu3jwdsgZ`ǡ x}GSk2zj0{cճ*W*:C ʺpаLFԥΚ=eo8r ڎC,SN[ |0^ӣ|ij4mv_-Z5+)))% :񆸨%RAɮv4iFv:>$m]rf-%/ITfSs![4oB&A.Jޯʝv|Q(nǫuIRA`4[uOEs-P~ͩt4g79sYmDUfy<yyTSԁ𳟕j 䫸Wժ7g;,:5DpM]%`lrJ*jgW\bM6>u~Y"WXGc[ZPQ>b`mV.O"JzߩnEg)TJBi&}eHtcósg>y;*ZQ(@}>KDgja?*}nUvIqd#Mg}?iOu6\gG#%RkڴHsDZ ;H/h=.[^KwL0~T#*-~ynƎ _K1]# Uyބs)˄H.7 M 70[[kxa46'3K8MxW.̱~u#jKSҌRڙ=/kC싋~N[LW $~p: 7 [ l j/-,Q)NZy _:(鏬zlLK}A㲳ھYE̕R|kpsAv!IWܙ-rz O>ƫ(K)7n׊Q:VX^*4CϨ*QH'hWL!"'յ; :%sXnb"5Zы>cЧi-f5lWW,@4g) =X kY>}G-74k`oW7sٖJBg 7__7ϓ58s`EiLI(`}S_] S㹞 s<}5ס)`~#N1)A}oiQ,4^-rr/U^/䨚ϩk7%0v!}X?bρN뽧H̍qZOueV  r<=% ܲ":x./(jޥzD)75T#}!}?>X4K2}c+]!lk"aA){PUŶVcn#oym&%ADw&kw-RΊG,N닝'w]/xB;ņcz[G:UʵLI rF5]՘O֠ /^1jwg{࿬#>\-q|˭FCdD}k^wV Y<#{,&UG]>VR-ދ1R<6Wn$Bo ބ,ʉp]A`](R<ͮzt܁EלISpP\(jf7O>`Kz٬Hy6N<֛N~sFF$"'lW{SQ)>rI4vkо<ǰܿ(Y Hw|_ȔKT=& |i[԰zG "N@<ճ#z9@Bjz lԔDt]%z!]f=lͥDCeP:z;D=ʐh)Dnl.ُ|p&%CHCl9aWS6F~ys-|*(jܘ~Q:'{WyS'O\dItDQ.|Ex2(& 1?E'zًjٯoFL rtܐT}mp5&#.FTYf%]+PGBhƁ]mY j)U~|:.H۱tB8H poͶgHL_ \)zr`%0{OɃ^tSrc!%e(.bK.j`%Sfɵ^v-IW&+j) j)^ "tmG g&: ۋSԂeg%uF/z-xJ}=n*"DD~R;^#8DA79:wB腇EOEUe-׼o zawi@[*r"nXJcPo꧞pjfh>i ﷎iݏƃIkg7l"͏@эO{Ϊ۵4fц=4HIy|\g&4Ay)$z޶ͭZ49(Ӻ9]ah&@aLR̳Qa).*eTMgaoE[|7 w-ҠEDUa#:0:FEK&wJZ>WwK X >;:G;BmMruWz*;+ór34!L;zll/*b* {Xӑg Z0A&h[5ѓ"6wD2V?Rv=Vr8mCݮ|:[yO2`|%Z8~tّ.M"hw||Z$6h ~x&uBI /?bF Gofi_֑YߟN,}VDK9u|r:GkaC' iOYu9Ƨ電0,5A\J>dkU^}ޤKW$̃%fwʼCM\>]l7#xdUvXb]I;jԑdP@La5\xqCu|BCJ#a6>Ўd-݇ ۔]PJ`';R0Q+cL=P0fJ]e@$ Չ1w&(CE 9!7YMY"@I4[y,V[RgK>5%l]OؐBwIi{и*rTDžk#:2HM;o^B&,;[Z윕nYFj[e -V}M%_!"aMea'Q/.εxթn`;P/$52ig׫]|-#=U#nԤy9b>Etշ*hη>٬]9A ~B-')å>|Ez*lc73Q󺴍ţ=COτelrLR3W!|BcjԤIHeM6ݽf#vdM /gnk9}.ۉ(-]BVV#hѩAO;}J1UC0sˎJjLI1֊ BE(#v]=1@r'e7%&wh쟱rb6Tせ cUoC‘y˸jL WU9YCVJZb":/ىwHW5fb"!Lqޖ&2xg̉k)smwVM>~-D*vێ2xR=%7_#711b(7)ߘV N&>fِ5;#!Q)6{}[UnE?}F#S8yyoc@n}ʍu\'6[{{P#fǪîƓu5^mu:Ə"vmSѳu1U" 'fdՐ걌Z Fu`[ɏJ5M[syxnBwK:SgӤ^I'dg|0`BEz:M(:1*&()%6o '4jcttF4gK[ۺ,o=jl}'.,,Ydczd:h N_.78٭|ѩr4JFf(u{ ҦHEPq~iLx{Dwzy)6ސD[isGmXy<4fNWBVaAhe59c' %Ի ͎ 4pOSZ2W&KG:W/ByQ'JVgFinz>6CH-eW. *W핎Ы{rjP]Vfss򆭆$lw y1G֓.@e<.i~&o3APpds7jB+#u jROw <Ϫk2|+I[8O։ERM]LrZ(0C~OM+YCVc: WޑYG;e!-p%c!-?%?!Dn胧WmALع!⨥(>`V (~9/y<'ҽ/J w}:.m%OFX]*nKNc[%$lWM`a׶|*mj)΋j577kj ޔq<^XǞōbvj%pOv賨mEU {نJޟ*:*ؿp&'U4Y>}syVN_#4֑#7j#}{Z!CH (}* R:xvl"8m)i}x&Ee)ܰdI 2< Xk&26Բ>cH_j4(q2Ļ~^TĘ(-NuF}9 !VF(`5pe/߫(a2a~F]3#Vy]#yMv)]E I iof= Od7d}+%[ODOr=L{+5􏳺r+5F̊o5AyjǶH] [~?G&7eq.ޚthɉF6zC/ULiNޱMn-tW(QDUgejSF́2ӳ7x"j54f<}+H)4w?ةT}ݎM;ځ8pБ2,AR*T; 守bY6jtDCb n<$>'x^ͳ" &ި=OWmO PMYwϊq;7xۏ&)d~DYFC4䅬-հXE->rX,<< U> 2 |pL͝KM!iht?;9PR5h@חk ?$(i tfR" Nz!LL5 a~v OZ gl-; jоC/h x`z[L I]kJ-FqW/ . {ֶ+ZvmnUf BوΪH.'֛zD.=,ڌ;PU=Kg<kM<}4DfQ.#CzpЛpX@q@ˉ5glR!4vM0XQr]gd3Y*NC 텒۷pS eTtnҶAHE-ZE~ 8e,żq;~ŵ%#s<0Zcdc.twv Oha߬ G7`2bWaAusx]I wm |mI*;>M^u݀x[W3u~νHZCᕏ+{ 2  dbvzl"LVzc ݎ}^a$uڎs #Y1}HA[E{R$6^F; +Fpɞ6:Kڣ-ȻomEFࢪJl5/ cr9%GL<`H9[{4hD7q6v҃\Q_}~S"iPM*T|'-wDH H|t?ei]1lցjGx&m{#m$i:o wlgαc7#?w.DuOr{hEviC F~%UtsżM\ٿdp| |߿倦Nrxoj%^̻|T.ӵo:y"|/eo}z~Üit^w۰I\=ڑ=$yCDG>6iKLo1JK`3mb;q%D6\O>kE;)V!tpį n TLs^6/a8B%qC~K[{}<ah9~ذ/_'Qm{fN"$3DgR^\4C)tvȊmƋ^L;9+J*(UFz7 [UӥK'{hII61bZg*܍Sw Tv0q_\i ij]1p Qg1 LIȥvezfCp/iS8Ûμt)c]A$ .{(3%%ܢ";SnLn_=V%{SE?aQg옛d6Z)& KDD؋"KO'̍hkđ <ѻ21ІY()^Q_hiюAjUr=FTogՀLIy]cHD좡{c06Mb5m7ʾ "ZjH*Jf'ۮ Imय़`)o^ -<$XlA*xpV0SWz0}jV-8R5_rG9pHb!p4Svb& C^*?_4mYI|6uD;xME=w ,TQXEo%uĸ.#!{ocW}6oFrKZcBoMf[} `=o+~ $qir+n9;/aDQ=s{|"Xm&Rx/l[Җ^ o|k`mema.>ԷxpHS"6bG8 д񝒖ٍY99}M0)OKVk04 OA 9D9= |Gl\;-}] ]cwu^^ڈĊQ Gd}e!QG2e14[sNFG?e%kUҒaٻb>;豬ԋ5b7*qHRfj[˱mt!Keszo aTە-(N/c+2 l B+\{uPj.i]ysoܪ̼P++Z Fz㹒7H}]Ƀw;ӥ$mQ+Ʀ6^:;rEL0G=xi8)u%==JDF5"za咒Ak~?̦;!buX<)"[䲿7(=u9zdmӺeJ_#ƖeK-/znCU7jYv^G7˲D |y=`ֈ^v,LQhh]=+U0$T@b$r/%CvNfnãhҿtY8D==]@Oa^82xO A/ 7R iY?1(;EzAȒJ m}7v ~M&?G-{.Q˳p3a;Sm82z5H (u:x#5ڴ'Q:r?a- ,}mB)=yq틦$fO((,ݴ 7imsG\1I9Ѽ6xˋS@ ?ZwڪQ }gsn|V;1v|$نF{wdJISH-|]#][)\XG 0'K񜝥mIS}x,[ QG!;xm4~^2t,Da3>#{׭L{,̀qZch=IwL(K&lqɗUhyvA8p Ż#y=xA  h0T VD+<ZqHP9rDZ."7͆gD4T:bǘD?[~G$4ICfTNEoaӥOa#B0}^;*,`tNꔎ,[ؾ9EPK TG݃ݳ}"&Iu^ ԗ'Yњ4y]]E%MqHsW.=37* tE;..R$e>()r F͉s f;!Oy=@ngk%x;$Hhm E!**XڿwpC!$7VnKу!u2>KJW0=4U Sg,5e|UȲ2<7G޺8y# S~l|,і-iGh2ww>/0Ė֧ ڱW1YC ZDMjt{l棢o$XQ"U=S6퀤U5f93hߊ;Wo1-˜cʔҾ_B[͙NNð6Ma智8hjs ;EᏖ f+==V3)?;lI$4=H?Ihpf2<=Scٜs=Uƹw"}]'Zq(0$CֻUpGӕU'/S ʜ+!UK?}c}`LΥ?]|7BlEQ Y}|4}ȺrrXA&iJ:=]Մ-<`&tM$ EgJ0$QLmT1[I[nΌqsg¬N6%Mh4s|ʾhE/L5{:>h/w@KdRU:\ٵs=zSX!_}Nuf^7TN>iƼpPmr"&7oY3݅4g}voYL,sl}5jʹlt~t+6Y{rU^4kѫ] b4u'/gTMl]O}-қ]9.Xߝ8h Idzts"PEL3 "}qy|__{e+O(=WTmBԴ/w^oȴe_&ivw6$)z6I&8Whrs%>swH K䟊(}c+bo0 ! #i /z{TjP9Є'OܮhJ;" H/CS_ $lN_Zn=re"л SX3-id1 +Zcd_-ЭuO ,2XQV=<`:yjgV̈́;iҸ]ђepWYmM/v x'_YO5@ս6k'z8z@Wy:&B,SڈD w1r4eiaK4GCeȈ MYnΉM6V|(ʬy=`7IjY|&3n$K^aʏT+2ܕ }Tf[ҍ! WBYt@C,gf+Y}0NV.& qoZ\mtB% I]5~.~dNػ>'&8'G4bwm"n0]d蹣ңY)@ƅmP_F`n f&M;\hØ+]2DwѤp 8S8 $v͟W}n5U"sR,R4$x̱;/2=>~d@#޳{%hj hQhJǤj͡}ÜF/ &I]Hh%s]pxp\-h)73FD^Z2Stʽ bK\!Uxi8LaHT>ʍHE[˷?7I"\K1,{9G D_@I5p٫*1=ۏ/6:d)ѨWq/H&55mo\w2k:. Y.O_@/_si_YО9IMt28|n/ EťiנvMI.)ͥ(,p?g8f`AZc_M޹gzFۏ7u?K'R j)oıFtvh 2/Hq}f8f:d 4t_ZPFG磂t"31POhjۣOnH)N6KݭrK8 >C\dS}2ˎ)ftF-itG( 4Z' wME)%TksmGٞnnk~ xm[sp\'/!Hpןug2J.o(Iҁ 9E|/^ ljmk:ȫ]Kws6 "|t^IH=^`4v=֬P׋^:}Z0<}>ë-%ABէͻ#6[ T*A|C},5)t(FΘpVvXGs< 썤^cu| % T{@XKѤ4n,?+ 78B!"KGQ_n1,Vm)Cm,lU/a(w~t8&o)W'z7;T̜m4GkrŇJSE n0$jPfPN;&p=+x٤F=@Ki'f*~{P0K?kĪ{`v3DsQ p鍓 5&#lIf& sON (iLcdO^|q;U]NÍ>>CHMd7>>*^; ⟤6x _%GB4}i a`$nHfz!_Ezz"AF7٥B-gkhTs8 DHNIu./IS$x9Q\stɂx#][U=[9dd@ }Α6e+`rjJd;ܜz8'V.3p?{k,$z='<'BDB)[&rŃ4lѣ.y*0^ %iRkO5.1L=uE8('\(6%ל+;~$ }vYK!IZ]0 "5i=}2zmIɟ|$I1& ,?ݜΞ pJfBw,JX]Vەt>,&YfS3s%#ט)x[AesZb]/q%-`0\eքaف7unk?n `u'Xfܐ!C(FۭdHgчW9SfF0$=.:<ɋABP; IJ퐏,)|to]uMuL~F$դYya]Y߁6 R4&sv':?;na-iʋpx_mSoV>v/+"<k# fT.fw',YdؙM8ݰ`H"p?9ËN@Hs0F0&[y064uwpif?|`u7\:zJҺޙz?ضF R7ȻUw~цAL!w7Ἧ^ǝ,%5#Fm8xcOMǂ'>)s@Η./PI:y0%U}>*aɦtM[m=<`HP;t84i swz(9O.H_Ѝ.85h9.@[+]EM`%Ke3RHr9aHXU`U{ o1 Ňi6 >~o.F+D0!=a#2Fp G$]u&#IIcLܸvK&-Ae?cG;\Q3v[Il"iOvFm@;)3I} [2PfAh T\g{}Ԙ3`]HKr&YQ~_4zTD-ǸM6|$SZn\/ So Y%G1W޼# rO fMF`GF?zr9!(aZX Ӽ8#xxn}g>n$#H=α `yI6r\O~J.\E{^ToHdwן{7h0/gd67 Ԕh@adx w$+C,/JHYRg|i^D{3Xdr)" %I\f-G*lWHQ7Kf?Dl*"rvkJ^SOۍ,ot֚Dt/RLureb#uLJ'.)҆? ?x&#F,}kA&̼Mʪ,Ѱ]ݳ{FFN-Pֺ8tQ/LM]1CKwyyETXWr xg}CCb*0"fM ^ՍݟfwG:W&F=#>0r[ 4<ԘU:H2Y Zv$)Ǩ>X5 Jb+Cϲl/;§$JcY #9(Nv4,c*y$yNկ9`A$"hu{v.|1ў NQhØY|bA$)Y fxaqIL`I\-ϟ=nU${2omX."g즽#}}XG.(+Hi 1$$3r3.⧰eQ]H[ws#VGj߾[qDJgN}"XIz`saJ~Vk*׹: U.0R(7LTS tUM$qO{D޴%*q3 ǓOПnc|E:쳍s`lm%&0nKzE$o=Z<^\RNϫ2I\0lw* =sTe{-:T4rR:?;|aKٮ\C([w9زn5p{5y{D&l~G?HS%f%uHacGv Rnq+; "z5{QZ9[Yؔ,}fCZ,gRj('$[dW 1>=B-'ؓi V>gy/S`0I_ь}SgshV0\'i]:ctª -rZGt̓dn^A8qa, LAK)v0Kk ^̠>{ QlKatIӯ#xkcq}vɯ5 =mgoҺ 5tJЛ̻>h Bpϡw#z/^8l",' ĺseTwU` ІA8*c$1~0RlҞOG܍њ W@Xu@;=Np (`9"y`n*?u|($q}'GB!A6CОO.'&+[Ej5.3w9NZ}$ݕHe;blC]uG Z)GC2_uh $UNFw,IPazLCormDx?OpRƘ \:>W7 )8Lm]`>o`Žq}`U"ڝb="PHbUtfzWЭx)>`H$#P9xhZXC,I ktKݱ˷c,T,NWmƎdzUvȒh{i4o RWVC;3*4DrQ2 JL'ŠikK2)ΐ&!S@o{z>E.rV6G0eh]ojtF0S?#cj[uH{ѳ[ F?ыZ=x([ivNj_1lۼ \Ѭ3oig2q~75Y5tYkCOOI 9f4qUw$k6lKRlM{2*?],sīkkhQm@wMLrz6j_A u:IjT0Rdv t+(O˶&Fiu[+(= ٨sW~QK um?zY&ruQZ:O%ZDԒTLtN[G:r{LSۭE޻?-'gxֱ~og~/k h$\"n))hY;RNM׾[}6v-/0o0Ӏ~G57 C,w] շe> G=6IRoTg<^U*lG[W06q:%]fJƅһP]e#1_]Ꝼ\7kIA.OɻD :RS@hNh~MDMpPϞn¨IReXzGL`mV+,Fr>6ȒP&QZZLK`hι̌hXïv$9p:GϲKOb0T#/.BGVb{9k$ FFBˊ@_tTȅS;u$>ۗцAAsl摊VPJ;K$򉳦}~70]u0bKTkG#9uov$umj-f4,[5S C'^ّTZLjGSP܊؝3Rx^]9wSrI7J8A@ɖ}ސk5 W%Zאh[JU~&(=jE;t՗ I[KW`;Zv{ ҵ/;Iڍ͢yRsK7$KuC^HꘓЄP ױSֹ؁b8L_؛{wو*EnÏ80Is$8XֻaIlQ"6bTڷ؝<POz=n^֯uȰX.g/wKVv_x.Yi^WA3u@؄gfAN=0"Ia,-MBPHŐ8?} ^fUŬv(X &+ƜQrni;.Ak`4cA+a,8i`0Q/sLdԹ CxZ4e3\DtxoPKnwhEA$U[[?h^&Q2,KiK>mSÒÃ?wtU=%Źp/˔zP)gfe*1j[?H*8 fÚ 2 ,6nz̹TI_U|;{WPOkIOFaTqRc:h+l]i[z;5_5l=2E~}Abnr+x)]^o [;hiۡlZD=.}-*zQ;%CGwжaR/.+Tl>)AD93غDarF4OemYv5ހw~6  "Qg=&Ia$ 1elUZsviS'4įzy5oF/||W&i0e~gv۳GOc^l  :R/M/N_aַ7̃B/uBzlJ{ߵƙ,z!,dh}ث6c[#G/)MݕBiCR@0uL2Py:/@оY>SZ9>`I":Nqgv̋wx ' ke a;Oڲn \0 [JUų/SG $݄?K<3&m˧N]kW~Q}g:=mɢQGgyN $Ơ61< s al y*vPHD7T=34#;W>2&|<#=)C8$Q[OV;;Q`fiG6RwaACnpS~lQ !D$dbò P8; 374V P8O zB'Q~cg3+fǭwJo=3T.dK0DԾꇇ'9Q3с1W/LG-B4Thh]MN>㡟49_\i+B֙ɣgv[v՛q*l6ZR*&F2(H%A@+#'8C zbJGstVdN ¿i@%@ͰiA-ځ@v}˕mqI=B 9&|I9Rql:6YiIJGl54F5ehId!S1#z??$%S6/n8YZ۽Q,\R|ҥ7&&L՞iGΊݣ q(g8`nK*e5Ef4nY^RF{Nx~Q'l ̘il~TdKF gZJŊ[ lu Sf9ꯞ%R7hgH[e_`LlKz>{l O:BPϊڸ犳D#P?4+@VG,قT/ +dȕYuø/"\öM.6;&|ae O51}Ցhigybl2ڔ>&_&)B5@@.,Q0:l ]D~*s͠sUA,\9v TmmVvK4o܏] ?o S/2c jH #5 Xl[0r= HƗpU IR3Hkf<8ljO|zW Jg/+Iƃ~Ti+;Hh A%^Ukyx| ~@I4L:#le?qv#q@Br˻`/[`NJo=ên=6*W>EcBKA"Yed:/4;2E 68Jz=fZ׺fbӞr VR6D1dGM&c4$ =p^%"p,ܓ_- U[5kAfpD#EV*-^&~Іi_g_)zki`42ja>~zLisK?lAT}>z='Z8}~цѨ>\> !iV0RjjVmHL!΄; gݝ|5b:}W{O)ݏiF_g0S- dؚ99#~O(_4v CrSU hv?xHa.}jZzgA^8{si֨``p|eykTR;;dz b$>blHd7&'5UR^{mt+Q١a@LPg* 3;J9^uf&{6Ϟia:}5thU1JPȖ?ue#֚Ao W-S?Eg]1!@/}ڨdvy:~hlx|of'>XX>BF׈g ;I+o*fPR*mm{۸92m5.G b#r㽫)܈G~cU0P۽ ·2{o@F-=m3akj7$APm'?/V(Οlf(#b8sj6'Zlу.}NFy k̖7_x387pa;cKlE=dPyRm+Pwc[,&6uz{aXTwrd4TL;5nlƋ=Uj3Os~naWY`Oչq>}(.Jsr™v`Tk~hBHbtTAj>6nhkD,cTK!*c4aνs͝j*-h03;֠y띧gq`"ђH }/Ëh ́ >֣0OHv/ ϡĎ pA0c˥c0{R fHtƙaX ѤulSLTD)˜pGo9FJFG;HuSym^COG+`f`xliFmcqhh4 VHGłBQ*Aђ];6`ѷ<-FR)bh-\]< ozA0v1^gskr+a*6p{6v,FjݦؽU'LYhsg֩gTDV4s^Z =Y>uQd**gm55-`~/Ց~u^̧[4h4t<#Wf]tQbK (5e[˪x.FÌw~ W{u />v$3?1)%PZ?T<9lnaZ.8,K"<ȹaZ{hM7Cu7x}nUSP?3Q}k%N`⇁ vCREΣGоz?-:Mj| {%" .(Ԭ6!1-^G䟄Ag>+{+GlPku8*'k78!k8B$-3Dbe8YuG!l 86Ϥt5tBbКYv:&==?AE 3\HRٟi~i>ENQXZC%euI?_Ҹ` ػ>6N>ܢ]>91-)lT=jǹLbi*Iow@@Kf0N"[ lB[W}[ݹ4QYnYםs}VӈweFHClWpxs.J;jg{arJO8_b F7AfVӽT^nm.n;8]`{=w};׋ s=<]ی A 2@Ah`UJkP ^SYۅc+Nx ul{CUv a8B% n>N/~_+5I_ĥ^xfNCņQPj ;< jiY[rRjh2b-uroeN)Nwֆ`vyS܂j ^U)y#:̦y۷tuA.$aySu6 v:B RۧX ' Le>jrXlW)|,iN0Ka ,V_<ʫvca-(Gqh,M1am"E^ .ɁNuz7;kZ~C=^KʳDKNJ*s)@#[&=B`+q³$PooAdXہG"Qj((Bp_ 8K .(b UZ.nЁWaOYk/= =N+_9dv%/F~ģ%~'fBe c6版jUWts9d^-K v/)]zՊ:,CIVFv0]1R_"V$yK8T;]9o%a+nL,+d)$Peex0ҞA qy!4AVA[6{X#iJ1Ur9Ŵ[=UJ^e6cfP]~cEnzv0eH<0ٜn7wF{R]-:CFv={VnUav$m{).3P$g)#UZB_Aاn\@JwHS1=shچ"}\AfO x}VDI8>mxA5>QQqsg˷`[PLrX U-9t (?X}S{>PL po7(&}wkQ%|/bƋsb=N_4`ʧ :?/Űx-V""{h֖dҎ)C[vC:B Bc,1 d8^n_O>QS^bV[iԻi>wAmϡ1mÎ6g6W^(Ž,B3;=ڦ}{6F%Qq"f}ڗtپ~IIy&J=֩^60Nm[^C%M<%®j8 (1[(e'ƶm]ܹ~̗ʷe**}jq+)ܳcVqF."Z_F|i+jJ+u>D̥FaxOTڕ{ Ȩ)#ݸӥr_y,7_xuJr.aɒ6tqB)9o`=Ɋc|rQJ }n|3)b{?W%no%IIf;.f~*#4Ng|g+ $lCDuUDح!{qzv|\WI۟3mQWb?{Ʉ_OWU{0x5TH@m./\߶MAZ#d,ڰ5L{/Ⳍ m@CNtHߟuβ0.gmW-l'Q̤_7>k@&cށ= f1,QSq% wɩga?C)[^߇qTpAסcA;{CvKT%Rj٥08k^qN%u!`8& KL&/gJjWf!ڍU392Y:1ZZSm_njDKm(?޲>cV?w/5<&s§eMҫ'nL8jv/TǃLVum0]so !绚Z汄LcXp =}y+Yŝ;֍WOQ#c`[ >{x4-87V?0iR!~C9Wm=NyPVtH#O,fldaD X,ѥ 'eyC%šTgkU<{J`a>l7f}RSCܱ^>TDQO/z“x*b ˇՈӎo8~HXtK_v0]N Q:r/ֱ^z&XV?⚾ݨkz/n_ fiO?عVTU|Y]9)(*aĻ=Ax$+^6M4qB@71?oRXp7E z sbY]ՋJTvnzՃ_} ;(m[?v44m=c}9Z[3Ttw#u8Ewp}V|V1}_mޥ~f~o#2nGb,!qZ~g~c?FwB'a3d@o "!\_GP }*D,$&YmLx sX5_W r ̀jwML{GN3dn<)E9?jf *; 8O癮v 2Pjd?ŋ#J V>AF9nMZm}=6yN8+Tw7 0ۇb\Ȇse)ĠLԌ(l~mMx ۺ|vV",K*kOcI^̞T<~F9⪈ޟy #㴧3@'E|ޭÝ8Y{qM_hvv*vo^$%`/4=bHΩvs $"ZW'[臱kד?ѼYj(?bv;;MOeRE9^'ANk5:3Pa:qHҦߓx7>ݓCrEA!OɃrmȰ2@z`&LqltZbHM$~'#  ~: C<}mi浸svx\;TO/0I䞐I%}0y` 7Wp4Y yβD/SkiY6>e FT] XѦBhDGDIYpWMžj8R3{:DmE9rCBEXiw+NҦrЗ YCHĻBC[AQ_=Oz>_$@] r_3>[/P>0=@1QYs vק?}=j塚\B){B0BaѤ)O!s+(Rzg>Ȧ~&R%h;V g:#@]}t99$_OsV'V I cy.S HJFjw w߄Y tܠ0cx"gIG@BI`iO].%6x?Zq[kq]B ˥qp/gr*S~HِHA^Iy~is.%4/Pӳ|4:{Y n!R&vrjrkr(^5Oĝ@mV:+@{CY;|3# !9Rۈ6A*[!6Ȕ$}:[&!6 ֈM^Q$LZ#faW`, HO;I08$.$)ڢ /\6*_(|0~7sQ z3"ofBx20gPxNb8h6aO*zjj'Eڞp(82{#3 "TQrwfr J$lN|!5z`2w^ŹW5$)jؔע! X;"c5S´k|ك #⓫`~IPbM4{eYB`R+K%ReIjb;f;8%$;(,G%l~5L J۶8zYOlq @:۽aZ}Ӆڸ8]' J"NEC{oh&gC pB#U_^{CGqZx`sX@ ?N9hJz2uUCokbQw>?=nFך %q1 ?(RHM㋮ʐ^38?]'&K㖔 -z"uR>RU.u7 !Ԭ@"DV]0M=͋@! h H{`uWs&CZ=߃Qȑx3^az>ku_\u^(DzCVwc;[ ɼ%oų 46a#c$5kܿ置TJw7bNJaG |{&eXɽCH6}Y2 Mn;{@а3})sUioE^z$q Z38Z|rh)+;eɽ |T%/):>ӻ{uD{dp55SoR2x38{JuҨ*c4Kd\6kJY>9VLWyI`CCJ{6B*o\]6 4 8`?JLU lMv= .2dJ: i⫑Pt,R3+5r %?dcxKť6X4Xjqkh)f!m,GJ!iև= Ds w&]^l*~%L=r[o6" TFuL)$ 'z> &I?I1y<ܶjš ?g\/F]+{']7Bn}d\Bf Cf4WC _ hz"H[=0 *)Gj.r_>$]Sq٨ǵlZv}ALJD3eS-|H@[Q?ZCB(tm+8$PRͮ8答h;]&9 5)yP?1;1/<cYkzMW m0˚vBt'n( bUWd~bHK}OMlv3%pؤI({W|3I*!k|6Jԍƛ*È6_"E# 14ܵm޹y! r˧!ju|܏]%*8{ex/fb. W*X="w[> pSRw@6m:mWxzƳn!T ' #ݤXWO=֡\܀)Zq| !OtOL3Oa^ 2~k%/eE@_`{q< ye1`@5>٦%噵ږS!Q[osZacFU(P' =#D/8BK5PlFVU:#`b_zP[WUH ?UomyӄfP;y8&n:kϰN/M8iZN 215ÄA 'Li*~P]GهexK_ְG3^)ZuϼI-.< s {V_ y00m?9OS9 :F%=<NBMRWie@j/SF_aӣ!Μۡ)W?XqNjwȫm2␉C`5B^r#݀5RS>M:9U/)-jrYjyJƒ&4Wڃb$J05D}B{[Z):hIjoSȷ}4͌y z/GReac':uK:yE'НT-@pĞvAow#)c$Z N"i JOwaֵf4!z{r~N$>lSvM?Dp|\!#S|Iy6ZX(rT~ Tv2Ѯa 71uo:\1gT#tć*o'))E|Չ ] 2}?A t|BKJ@m6_M0'#q45(i+PzSq CfT{{6KOocO!')T#"/]ٲzV^Z#2YQ,[[Κlp\? 留<,)ŶW%BO0l w[Vp(yU_"vȠSI WSj.P0Z̻UFkECq^yCXBF/p{E)OoZ H$|_G{֮p[@/Ǣ+d%69 SHj]-N:esR#cҼDK9<8cIg>E.hcES )<`.:V~qQyxdSOiz=W\clX\m> _@;:>Ԕk@':/]9Xr(Wja^y?@`nݫzԨã:6YX#ظTOzrT1;}sH^2E`^Oy'{A~jӯ*\; C ,1PI{eA<BD<*P==NU*3JqE+:\im[^ rIF? @\?W6|_T7:r@\tTʤ0ZlIɹյٛS:=~!'5z*0LH>J磿29~^溝YRP6ǯ6_՘&)KT"{Q&Dr{C[9B&-/H Ш=P{Aء#`PIke /dٔT)̀lo,tx<0*|DI&6JYR[;mF_Y撗"D13YP djm/ab>I[[bqq}جyڞϼ0?Neķc\ bOL|Pۼ,Lj1zIvyM=vM#`ҰJ#z7[q?q!*>Tvjw:UKGW[_6"b) 6IN(6?A͌n2!n&ULK*k)u# j/R 9fT#{ v& U:~r]kAx=_wMjE$V$3t?A@Jmq>c<ؚ>_GIO%hsSnڈs^EE/Q_|-B'm -зJE!U/|:tSսPX|}&Վ41/WL.^CNJyHYĞێ\B%_AMxds>PsЃ BO.ũ4׶ @.4*ڸ"HșjY`bPf! 1>(5_ik_H#Ả^1i^JGhn(*@FG}}6^{@Hy#%C!8z\5BAh[5)wB+3Nt_{L8J>>:&u"/ia`\ieoY X϶I;V <Ӽ+CCG^Jv ;dVAs+?7١x# 3 lNzn ܀šR3*qڛUv=:%4t YW1/XD@+B mxrXeƥy9g@/bQ(* _@󱚪y(ձAUJϿ|egVY :Escb >"ϫ\B ct$Ր7N X*>U4"[|8t弘i',}3.ˌR4hY\>³sXRw!{dn=Eq;#|v-Ϥ0Cu}mXM/yY PdӶ<5:&@&vcQo]6ܲWl3^_VlEt[RvZ Mژ)r63=%I>q[( nNml^Ε-I@e5emW\_w/`ufx/UaR1idyk"= |:XʘgD@i'_ڿȡ"f{OI/,x%e(<;h3^(;@od=t#Q"Ꟈt n.Cڬ~}Vuu u DI涷eF}Ly{pL瀑 kbκ75X@âezzɵ{R2~jw˾YOnd<9`ɻWvtW1xAP%{IUeim o_zU4 `;{!oN=!hלM\0Qto=oϻTuݥ!{/䕲= !KՇGSlAVU-n1pSrP%霃QKEh{cqоNt81DE)=uT^,Ս\U)?u(H?=(Ӫ$M_d:2ʃI/S>"' e?$=_}7xƆR9 F&ڼUH/U? WB*.?s엱F h Ǖ?v4bjPR/[\l P n"ˆT&u#*>1^~в_tjE>Ղ.I~ ꐠU5-~; YojhN˳uwG9E +=4 k/r"s1d}ưcpC^U8[rػ53![8JcGA߃{.*PrhZo9sF̺jDyR*th1HeoAiʶ{0YAGTc# gTГ%A0شFL Y;kq{, U 8!89Z^(͸D3 Dz4k=&3)4> ?*k@ *oo8j>fDU֝y Z>ϪMH,T \ނ< b=Ѓ@P-"7#Ϸ Ky©*h/|Dp~"H iZ"%6>ҟ6QUnek>.V ^=,t~Z9W%Ϩ'> W"0AAY*jI3H6pʼnoxc3pAtk[̟c/ j 'c{AsXE:"xV:ԟ#& ߡA%Z>tكq;peBwY|#4QYWFV#8PB0]XŻievPɳ1IeԽϬP6|hr G~-{dR}2u "԰#I{@O^8><r($! NrZ(! )nN%sC6s,_z W 5U{V#ZodHe!H2:-T1x]|n›\xaitx5"/<+ZQ)UAZ.eWڴvy;%+_5N6Lsx/e/CSeOtM.} B~JIPa[|uFMFPXq=N%]Zl.?2$CPA& @ۢGWV](`BI)4U:8!L5[>'_൤rh u곡{^PSgvQC[rEօSƛj_zOzw*j(چ|W8'z$noڸ ωj'젆`LjP~XEH~ !sؿ$h꯿7T*tƈfA9?F4AM,}>Z5(Q{#yXէt#0qxl'ԟʠ/u]TeuiQi*.r[]8{0U_wKʎ `PF-UJ-F^!{$B" CQ%k='[蠝OZH?qQo_0{waGnIhn5"ow6]T.sK#+-{0댯E5]\S :`+Wm៟j8|H1@UH,dUOMK?s أ \ M{GOl,4]Cq] dk懲5@iiA|fD'f0RYh~6V)Y %$W7ZФРUWkڂqzr6^4B)yA*WuW&{d pRa'[9G ]f=ERCuɚ+7My5\>Y'UKZS㠆@ Oצr¹Z{R3o-iHcTqn^2g՜, #=Ĥm~33m9!IUj(6DQg,w )O+l*Ž d51%*(mzHL>O}GL'0sJr!'·WO=Az<L?1@dVq]??t#_qA|M/)I^] w0R޹J=i8͌-' iQ%5XFk>_R^+RMm&aPP`4bJF_b R"cW]0J~׃f}oh|K|**EMZ#ʐu;(EU⺍ˏ"~ߚ*c #*A $c)ɱ;T Mcr F+̑vHP6̫'+i à+lּ+ݓQfC, $m=#"ŷƻVZyjm?Aߴ"P$ UԼ:|Il"87yJ.3-i,—ՠҞ H ?eķsԨomvȖ?OVe|.z]YNy[HJ^_!.Ut<)G%~JsCQbȭCJFĴs/t8à5 DXи>ʨ`AW/\=ؖ~C6›jO͢Gt+Mƕ#숟 mS orqbX"|6nܐU} T+Rkx#P`0(ehYiOϴrYMX-kNM)>e@Ҥ:yOc샬Qe ~->y+#a8֠Eo4XzB"xK{ԛ%nO;#cȭ7*Ubm> E)oDaY'cA*usЍ]n2ijym/tbҊDXf=)`j>P5($1sh8u#DZ)ېc{5EϗU?"7dh u`*vgwҫBY="Xwڼ߀E 8ńXz9?(mztC+r6k]ϴW4Iuэ[nXmzN8!`O zf1 Y 햢}gr!,U[Ȱ XJUr`[k?7(GM%"_ >5)XL*U7h"=ZRGx=fȂe͢} t> k9Y&{\=PwpgtU:=}ڃ1:ۼ?idFpC庍ҧv!)ÂI;=:o_lfJ\ȣ笔dYCXmݧY[3~\\fXDG-Y &lHwD6)~PPP*#+,T-4{V CvXhwS:554Aӕ/=ՓoQEoGSF"M˜n" *bv}sBF@FmHǬqO"AEƵ}^?xT4,H~XģW;{ޏh Hjk'C3]`$q 9xR𦡚|┷Jn!Y<ۺJɏe6Ws>X:#q*>ԞͿl {'u`߷% 2ma"J`e9#'tP xjIﴩVsb`/^S1؟Cqs^l-ҡҾINhVvbzوW| C7m;zo9U8TASKqy,C˂,@?ٌ'TfO썀?AAyTݽ+چQk{9y)Io+$e VG=Q'YD^K DIcZx! Q\ZS✇-Vg⃢& 8c/>=ЍJe(T iE=>/È&{ک֙XqYݤw?W=!{2 :rмNą}agy$t]҃Vo=0Y}R lXn?t#s3YzxUW0t 8 he0s6 |C59D=5 ߜUq;j (7wեjHrCV!^l|%(v̧r Fr駮8 "i(yZ־j T8r|1Z*d$??0{P(SHTs^XMK 9$0JvH$] ZyIHSԸ~I}Y)baszr =UL=Y|P5>K|RKnVH6!R#YRfhq`<7xJRRz*kt<9%*|=tb3XMu T4{;mbu~#TlXG(nwؐZo@hh;{/g"\K~]\645q =FEZ$Z{C(Pj9poP.4|o0 ٘b6(!h`x8dUOQzVǎ:^Z? (PoBө?^-5D:N]qVųzy3HIMǧ| [U23Vqo;B;)eCt΄(/MMw>g!f=Z,PLJf*3Gⷨ=F&]g[,/*+I&/pX%!JI/{1?6;sw=y\Pg`'y ĠpMY_>lѰ6B"B@?h/d^qGl?1(Mzm#uFJV2nZI&4@w'm'0Œ!T)=]52~~S?>^IgҦ|=?3%]b:-b\P =L|%W`P'>%C1hs`b0h$<".YW^"RyxbFa`~nϽ9hÚd1|v2Zrt#Jٿ?yȗY%)],j޷zϛ!`rY7clC6`RaZwnYVf͞Lrh@{,6}n;'g, c o# SBҳdf-0X*显sW>Q}N XA4XZM!K3=*=7q/z߸)+s~}DoVW4n@GY#,[+r(R1Q3>/6=;!hSNb[I9|>?۱J*TƏԍʀ0aR^j/PZy{I(n_7'p7|Lr@[L ͰZ|A{lG U4HhPE6ozn@&:] o|C1E$hܲ,WM}/rh2K\Ww!rľV۾y(=e!K"\%O +2RJXI(HjN Āڟ¼a aGAr~n.|?ʃ8.O8t>Y|z‹uڦv Ckz{@~qDKQCǣ ]қHI½b0K"=C %~e O*; -Mtd4?pPjҁBoG'4ätl~X)+[N$AEMiؠB2kTb81 lTOs8rEpcdh+ԗ? :Ah}UIp{h6gT m{c5nj}\-2+0#~8sz 49AGr?Y5S7 `a`8?3!4PuyWvod-3RT[}۳}5Mٲi|+O 4?s5 UMGdP>ST2lo6_BZ/~VQ%B aV[aR+Ѭ[^qfh;1y=jJ_~->$%\>CA*,?ן*?]Z^(d!i@˄"Xԉ}Ȱis:xp{x^4 ==t)u >U}wz0yG3G,,}u`D sf+WE"/"$%7+b@Ϩ%qEW 2%܉~I2A qﮠ_)iܝ%"58++⛶)=tA~9#X3!O?;Zf EJek$"Syk)[/x2EP @lp۬0LPSk^f*IQx}ߟ/r&a(F|gWvdICȟ_bcF;VcEpXgIo`Y^Å?JsbZG60MIyդ-|aN)E䱄ń ,EMΞS^@Mb#@2mxa:9 KD5"c͟߉xӜ9v=TGfaP%5@LVMv.PC<j&S{U(Jwf[brBzErc!&3W1lOIS,-\m~K\ 0g7.C az{\pFz'0J-UM@gZqbuwix'NMwA576-Ӡw=+Oļk]y?j6| Y㤇HbB7bzjCSe/Y\6sv=hGȭR;mw>b2Dk#^yM#^P)UIIo=~P XLcIG5"7RzWgoH`d oNo'*}{?PU]D n=FJ?R <#yj\WDS~.f8`u,-Y~:dRk'1 Qx(A AgJhI>U鑰d qy<_@P{6@QEr8c?'V859"5%g.DgGC [ᓥɱȳ !;~1GFVqXr@_yI=޽H)s`Y'٠đw/@7h ⻧y[(zx?@/4Vև"}!"C*E[/?1! 8UVmnhk{<'>s7ԻzyXs1t{|wB_N Ps=QAm8.1SIX!|x4u[' _#R3޷GsٞCA\ժq9вVAiA>?#a}^(Γ&קmO6"v3tCq4%yʗ2/r@e[fB.2X'WsnLV)>wG+&r}W&۸B7 @WP{i$] bD&"~L5.m sd"+?O)P]DANNCɻZTUh\E*tx%)HNUΑCHRʑi<6CQN?=ȕH7jqr+F:soӣ~P{W0q"ڸ.Pk0jF!,^ Ś$L}v{鹎*M %CPW EeIG:j=XȯZ: h:@t|Ƨ*Tf =r^Xݤ"*Y}}(m7'рi>!y_d׆jeAV_LbDu=*ChO"Sz.w|m}btޅ > _`qݣ +Xͥ8g)?sH'm=  {=']]~SR)Lz-# `'y;LI>kD* נZC2k$2%sJ )dg #AK1e0k'QP?f=yzB+=GTB9U ߆0/hK4y9Ԧ#rCe;ԙ I mM:>|;8<9D;tӐKVH1xVCGMLSDya˷Ya)#mFAWQc u >"uF!JײzcIF%65i`M=F/hmâ&IU"(=]A<-B$7'\Bm|iP!9.(sK1{YA׿=uAw৞y/# P{]q`sn7ޓy~'lL:׀x-gwӸNj^{d2BF>Ɏs2V'u?(B̺FyJƚ9"vTZ~4IJOC\5xU ٺ :YEltHф)ApLu?'Ar16!  Ve;\k/BrU-qkئ1y=Ԋ'I3 5,(a7AA4 1Nm)VYEMr /jo=j9{_QM]&#avm^F+X>:jNrNĀbiOYS!(oi{_/.Jr*1> {A ЃvkǦYzJMnx/J< [C`{.۴жmݦlQ/vl{ e$x>'Xj![2alj Qًaxk~ *0"joWLٛQ#σAMU,-KD@F+<.!m>koyjՏ ?"P͡xx%LET>0DaԴ-x ۃdj{&-PmN IL*gd;]v) c}"YM%mKh[RCߦJ ȽԠ'4hҎ&$?8\PΔ7a]$ir/ X䉟Jm[ԪL:h漼\ьC !iE'NdNc zLF8;`- ϾbiMc.EfPBдFk x J7|_#UyE_T^V%{A^W'j67M_E8Oд m1*wV6w$C|MYg|!HJf2_ۻz UO-rX)l=VLTv*a7EA7x@%Hm=uw4/QGQ${@<@X1]du6<{2b%ڠf<č*(t*۰}W|œ:jR'[ToԒjpj%~tV*(!>٫OxlN'8ѺQ;lQ@.9fK܆b#qۥɱ9z2t?ТyLδ+,9*m:H%l'_܇OzH%,ZT! 81$gic;%ȖjaA]]9zlT_3!CA$oB?#`FcHrIG@S{/%^,)7-=O t?o>t==},P%;]hӣJ./0r#R|DHxaAHTݽ~}w\\/l!E*O1T;zj/ dJ9ADC =, l Rf%5W5Uz_5]6m?ICM"fJGtкdJq?I28Tz!QW_|ִdŰ=ɴ#`Fa╠x4},DN sTM#l"+V_BZ~iYp.xZ_~ņk ZaXUX&P"nP|ql&ͽIT>dZ)0lzk ;- cKYzje.;6uC+>|qBcQT2.ް!*R5tyd{)vU㲀jA5D;+h}W}Qod̽y }UuJf݇>@^e+="2*UvӃҩrh@d,54 _Z#P^|0{@A&h4*S@7`_0~9ߒeOYJr0p57r~R`0dCdCK-9 ]#:kr;H`s! Y#nWyG"antK|X{P?^ɭ3M^部Q¢>&?4v v1Iӂ>KV?uRUtE!0)sܿvhnC,OSB e4hQAPk|RnDeZ' dzXNA9(v5֣ϗI pnHx!`J{Z]#w}(@$Հ1*{MDR76y/#Y?| '(]CKݖx=0l\F>0_Ab5ې|O+O jj1yuZi֦dzm !BywZҪNw#H,vHԇQDu?ײyd: ֦*՞~h {(Yfܬ#>ysMAAiź~{Ea9{E@bY;GTԢl[ZXkE]f0qy;$vtf>2Rc3) ><4pǟ(co$#"1Z9Ɋr?(qI9 OLYjRżP!Ue8( qKYFU5P˗ߪ}SrPԗ5k86h u6֭b(nM>*YFrUgqR|lU18Ng>?(VSVxǘ 6AUmU\_̤ROb_U-7ώ2; łGR46؄w):!~4\-B@8JS2uk ; v=@ 1zyqkPŻ\Bu5DKK׾/dm)2?$=  sDB>G{D!~RT2t[ (RXh"VCATI˩>=묅B`ːҴ䩟y+ZCva(k7[&b{뢺yr$kA wTBj3  Yr*E &MFvbT#-CYOؓSvsDTf=Xs^_uW9fb)H;Rʹ@7˙fEICҤUa-[ Q*$6+OWݜS|kU4̽Ӱ녒WVi#lYwPlQ[s46*PNY}3۶roi}&݀IR&U*^{$! iITJѶ8EC6}3A/"d${vԉT{ntU y!^@}OK39N|@g4^JJR'ۣN[c6z.PϨlG:.C']I~(P1'w@lb"'˯袚 [՚J/J}n(4RJDO)(e oXPC9͜$*qbUߠKz>pCU1h-Rî/UTZ=S~}MQ{7Whg\_ -]n/Ƨ=WEM-еm/ pAԗP"tۥ_t.=Bi" M6ߝ 1->ħ *=W }!}ooDWMm< 7Ưiet! 8 /qjP00H0ot YՕB-YiTWE=Hm,tڷ& ;犓^ds`ۆz/I_IaTpLКP<axWWPnez֘ .g~{v!X ty>NLZm@^#8RL) $1i;H~FS5Fz3!=Zm| }|F>SϨ7TSlzd~ >5%S)>X0( $6Vttl!-9u={j6 +7P\!72| Ai.bctusNFB ͥ|A7}*eaR; zxOrǗT##t[[|,OYaYZۦVl{wIOR/ EJ{gy7}f-ddg;$ Q9yHo1#Ҽ.?C{tp&bfZEG'y5Tk{O'w9A Gцxϧld{P)@U| N!$+eIlu:5A9x_5kf;P#<#En{Jnæ{E7ht<ݲ̄BUQJ{ԓ656"kdn\F{e}!j="a0i/tw D!*\:=@=Kض^ &q88@{/98+BߠJ15M9A6>[ y(}^6=_*Nt{DI"&bB i? t4;8c^Ըl]vl$HʖjR8r"xY*C%m ϲkm>b/;@8'ncyȃ(u!^ōNޅ=KVNvHTM!2a4k SX&j*$s/A&)V` ww֩!vH 0Aziot^IXyƚr`=O `,icgJH`YO Xh[|}1+<ҚcAg߳wl b <3fke0?#q8=E)s|J}wZ$ѥ_ 6M۲M320KTXz#t-lq^jP }WUY5X:+XbVr8ITeɬK*ONl{Mڏ[|` hw˫?vx,g g7 [6A K 3B38<RdmUYf+|]]/ 8h|Oomc:^] AԱ]]n)tly:HTO i[Ѓ؃rJEf5v*社ט!x;32uIM7!V!dV El&wA5##(:-j0a2Gޞ 6an04o6G^ Y \Y@7TBuF(s\A Ƣce+ ,%#U{!<єPF.3c9hoBFN5!-\0+ja!7L EVy3HjNz:~ dB31IE~05iZil If9К͟H@ c h Fi {Hz@ K5S@k,ȡ|Y@!As- '@C P[p a iEYE8<2/B :|!wЙGzk sct" MyPt $VТjP܀&@s{Fȁ6dA Di+3͎(Q2}*6>VKk}N k?: q_$O3oɑ1jPjl玼 ͎6` ŵ ?ՂX%'S@n<:h֊h wICɧPj?ςKAcA'ȮG6Ig6M:5{aFW~2v q#6_hi5^SZR|%SAWBIL׶l=88 g-\]I! R؂ƒ1cTwQhwaÿ'Y\` ,RPBZB֣PD/21'4f=AF 40[Ί PctOeYŠ@/T1w^1*e-6`XTݡG.5`а*>ўԶ?#o#g_wlD֚G2r(թ3E&y=\dy1pDR^ (r!)گ,EdZIǐݣ4{3D,i sZB_QyS=KB,ǶL= %MA䕰ہrXmo ;r#+N} 9XmCC$*ewxe:¨g=xdS=P|QS !SSϸ1\Q D"vFAa2>օ1)YRAi-؋:>F3̯fs5#n)zTUH!,}M8ƷQOG/҇-*K0ZQdF^]oQ {az,i TQ 0 Co$_L_6kן5q;sEN9>oFfK0dYЉG.Qm l˭ӿѲd]I!hl҂7. Ai،Q a!צwOgP(w椴DЯM<@:3 R&KCN!Narp(gWof%A\-i')eo[ bIRޮ\aȩHg<‘b }z̐ 26bۢqUK%RVvcHI+1@ѐCMrP_< m>ZuxC wg :ܻG d;H} b@nִDZ 2h^_b .d[ T NI8'\gڍ͊5抦" 7p"+q$U.'Jzn oQQ ys2LgEn;fo(F ծ#$Wa̞u:7@?J wWR}<ןzGL;=#ڂ 4nEdW}Q V;{";~M\"^/<#ңvTNw-~Cn?@~F dk ͟K)if-$;;B]esSE.22v"sяV)-p2%$uzD~-{M`0&* 7Jz Z|Mo&?\ Dg&X}&\x!~pbF p$hd^ ZJHL'ojW@)|&9XB7G [dȢ(YpT[ dʯLJ@w۽h/p2[&L:uQ%mR`Q"Tm-3 k?DH҈ 1m n6c<)ō_c?k*(yuu`K,{\Q0Do1jb-iۘ!CTӭ Jzxڄr `PqіsOzQd"cوV@! 5=='y7և MVtɄt}YP?cʞˎ!l#MY8Abc[ gq @A_;M F EuoyڳI,s{n&amz8dI8Fo- 5,dac/_7}Ծ2۴<ePpКgvzJAG Y}r0Af{V?/A!$i,0JtA=&<qyȷg<fC'ʴA]U!b*vkO[TvR gM@1ݼ/Iw1Y7.y+!aP/414\ 2 HK%C_6Z!H-;ImyγDYpN+Yb;z ~[eRGMDܤ8`qV{ =+!)3 yVXht}~+LT"[FґVӥexI!VIB(D*WV~DPպb&9ۍBVCJ!FԅFB/o$$y.0+]vV8Qz<ﭻ@@I(22ɨUە"HI)3dGK,5ݕslIz0XgK=r85nHe)$/s\_#J#L"0"g4]΀BRȖW5[I/5Ig?<h^q3z.”"4%uk4Cs`[~7;m>% !fXwQ?sŇZc;'FԻ=)1 j-mrcz>s@=y {ǭ9vrE u҄:hqo R"Gу*UObܳr8[ :$x;J{zZҵ^#ũmW'e@E wrjvBO.P2);}bYߤ<,ڶj{;xQGceout9ɀk_:4h:F;Ix?"W~Os_T *$2%fA柦u!@Do3SatK>/P+|wCD[ OAb0)?yj oGX3ؒ(N^~;C3?c#LoDZM_~RZoQ?? 2 "NNb$]n 3Yq "$ ϣ8N@.wh(*Ms*S`\P+gz`I;E hO353H?׎Uy;gu2;eko~JkLBb*'lDk`/zMoQ R Y\C'.5f6V_TeG$>;)27:^Z*x{+lͳɑî,$7`_Q Qץw]"[Q“uGKC <+Z+b& &[?gA}Z6OT6^T0[Brgf-J_fR5^OK 8)i#?}Lϝ *Q%ghB[^;JC|~~ܥ Fba|=ef;79dX`PT5ks?OɨsB?;L[nplHUm!A$8Z,ѼDf<> uyEBL߉|ԧ|`e:2z^ =$8r*ݍBNd%:wt 5Vm>WhxƆ͓Kc׻=P-b2 ̫oŸ4,5a{쉳[CkX *ƲJ>+M`ePK | @ťiVM/Zyɥ0Gz^-O|3̪#IzCX"AE:m5O%*1Zٟk c=ʼ+úK;)b,W&Ûx_CJ%KI׃m1)#KEū|3ōbQ'Lw=\Ip!3a}܅v4$+NR/rH@袾]/(Cyi[>hB?ȣz[> ||i:RVZ64e6ϊ\Ie;5~,g.$zb]Od2q1J\^?%\{ FM>U**"{PeYgw$4;t>#PW(f?|s\3ws}TFg)|wEk#~ h蔠KXDѧ_ gW_[/l~ /[ɵ˶=@KLiPnR'&j2h z-14 DFE Q;i\PϓVh! }}drh?;%9mjE0ʰa41V>'6NHcT6üƳ4_ReYT9rh`p{B1_qwe:`ZyZK ,Qc HRpxHC 2*AKDri\'KG, @֘|K+`_(RA_ZF'r__oqv:{dփ۽hBCpc$K3.o_(EL^lhR߾R huN?1A)Btlh^pޅkz 7:ZSL!o]#.tkm!Y|ؕY9(Wy-7 tU3*z`&slu.>6a:dk}֒|i=i2fڛ;! MEZ/D\HL\<%: x-_[C d"`0U֑qSaFBծvEmk2TʣFi'ljYG,97jFGZ{6N11ABƉlt'J*ZS0N9k L+Šuy5SQ'ʘ e1bx}?A%眙\j~Npn#s^ ,:=Y6k{*͙Πݨ/Ea-M[@^>r$ϝnr_?Pg@T1]H,S^tdQk-{̮g=9_{ghJg+p!C m֬پ{9^SRk{a t_ZyDtwC@8BO^ЙNZXl͠Q3WU0&sK6 ZGZ+ @ѝg»ۍhq[' [3kYu/]$!o[j?r܉R4`{?I][&N.K (hWZvj-~ӾٿE^ZQ OmD1G/I5sEj?,*[6wRڷ=ܗ=/q3^F~pӮE+sFZAHY?]-;EGi-{*yLjlyR:yXND,4+ާcx^Y].)i5*k.hߗSZ6mu Dg\s\|ٳWM>Pz5Lbd{`[+${5.~AHYcT,:UQH]0aL*Hy9A_?[.aͤwM>y8V+Ϻ8t 뻄u8%N(4YC RrwE"[Eca` [,״> v^KT*UmQ1L;4x;^V~BmEt!M:_IĖ=wG:Zp8kpiF"2=OD]p:3yfTAPTHs-QJV uB}|?R!J'pܞtꗯD[oM,!]A ΒۤF;Ǹn3vzagд1+liYcwZ&EVa TUĎ'J˧L9E/ϫ["u\)\o'k_ˆg $+zk|D3>98pձv5wr<#4'zќt-488>zu٥hJg//}:mpMYxs_9Ƕ:EkUrtVX'jQ}mH1/YP/|g˗ e0EfhW v*r>ՊR_^5붅;`.Wd.}Vͪ'Eodi# Q-o8.˝zYdXhk#-o9*ZbPw /5_:k%/%N8g-ʬ9~њ㌰v溇?kǙnppʐ[=I}~n|y`@R^hGlqzOFgcp[NzIZɤԤ>Epݲ'iHnIL zӿ%YG#Mv!π=7,#mhݨcȗVrj׊2 gKoT4@wC/ =à뒑 s\k$tOY2AF䖋cm,De -loK ˡ(~vhpmd@H1j!)^R\+@VQRԽ'v?D C7:Z \U ܤ1g .'|>_Q y&s^" $i<-?KRz,'ՀH,VHYeZIgug{BX:tȒգM;{FZ/e!@Jt4_ е#}l$!10 kS`Ҫ:qa:ApkVODr#M(ʖ\ȸW# IX',GtžN=& OOq' vهڼ#M8gvV*Q%a{NqzI:|ܹy ?A|ސs#^6-Rc)WdրXeZ;*u[>":yϻT(eZsy\ȋ(FHsb)X:9Mö4WSߥYJtTi<@|ŒZqQTƆm7>bgp?_TvwǨ ,`l 4̺K<-[Z= y{}{%_VʼnT99+%ߜxAk{\CP 3| zMEν9sq =.uh (eAH`O pP 3a Ώ⺓NnW2TTNO=< (fmkBHFC nR{=ߨ58luh_T S{ >,47u`zוa;w{-P\+*>!lz\2>^$%Pz/ $D-W}@%pƢ!zu!ǥ+fa핢5Ɨ*8{TduڲV"S\$b$d?[ݯF r䤂ǴYZRjQbg`I=6az/sF0buԢYOa ~UѥEbϳz%z~˷Dloi\Wf͝1͇=2 l<7U .xgzd~BU2<KZ2"[1`%\gKv`d } yXj2):&bpL7lg/iw^QZoPW ƒr$݄i)7;*OQ!(GKwԱqx{!a.ɬ3^[ԧsA-kUJ]w_Ԑe~&vuCeCԝ'̈&%S?]3eǻ> 7:b-$Js I)9ߑ Tr{;g>Clqd|$/~}Ye`C h\ROi6lӳȀ_o+dAGr)A j;Xu}IB֫WG,)я_j*28ISɳ{qNP>,}MruD+* ,2 Y$vY.و!1_1CPK&hS[̽zRH`9fV'0CxsLnB  u,Nax/- w0C߼n"mCƘPu]/_o.cy[u5t2u6qy~@4_tؕ%3sba@؝畣9Fc\46^y3b|]w_ߋVuJ6M,$Zɍw$3j%Yy30HJCW]Rd$?3-eW-n) 4E#1 XDm{D>%m<'OE!Xdn&xBE1|J ʦDv>2d'~^lkKC#1$W󔼱]TEQ ZG; 2 dJ JZiGYgM?Uwq7b+<Ԗ_|9hO;xtc MS`w2}P}}XCܨS!23*鹉ە/{h} m95wŚi1T!xEؚP40غA:dd@u8GJ$/Lup9?/Ġd*ս:4ܨC@]y֧F72UF%r1 l5"g@j8{ZstȀb4}gVK)¾.H _ϤJ ZKhuxܝ*r^W*2z߭樛 ,.F䭠 Fh >:g*0ЌMjjx*J}Y4&A̪BVlЗl| W$RzM#ŶR˅nD66;4Ir}ݻyW%?xZ_J`zj#7N n:"?SIwY0UVCDrֶ&8qn9Zwd$)Y)ߦƝ`e2[6{+e.*B dA\Z0&LCIc Ң`g0@sVGfm+R3b'g A?3:c@v~zyq!@)ʠgV%!G|窹Urded9pJxV w+h) ,Z^I 1>c>8s[a3L3Cs`Фf~+Ǧ&Ѧ8,fvԃch6њ}'gzh3"SB[=۠Y̻ @FjfMi)yd{6;N:| `/% S?($Rt|93T  Qσ~^fEH @ZbfGAO1bh VA+խR#Ġeݔ.e{k]vh!Iঃ5s;%eg]w].ޫT18'3vHCN hAGFvextɛ]Wԃ`awTaF0U+H]t<"iO{KJ1Xx$3M-NTao  >ZQMyu&+/ F!ɕI tǥ9If&6YKN79( YAQXsֽh`I mR??CJBVln+D=.3uՒgac*[f ^Ǻ3PNU9b~lvr_6ԁQ~ E[4 \-B N8禍ӊ2nΙ\WAj)* ,jD=A41꽒REx@({⣇4r`9 W=K.vD琯opQaiI]b0ΜW=kaw.]a=ھ/߯A h֭(m^f(Eu7HGZI"*goQ_ '>hd_?v "|#=a/UA5zwHEgCR[|Z'6+bN 9`$ oy x Yw Ru %nੀ?wj-  hO,(QuQw39D)Z$eqȯݙ$+,[q̡t}jq~ dY/"i;'үX)g'=ZEXiD`"C%TݺC#cRc ڨ:ςg9s!c=]iRy P=lZN0}?\7}%Ya ;"oo [g[!};kݨU  My)cĉ\n<AĊ3|=ly{RfVw;itSB,m f2g ]v՝2c7Y*Wc;~ք A.z my2îȵ ɎqG+={Ufk pz߹,I(i`ɝ9/UA{ xR?P?= \a[f]enXExXwGңU_zQKβ/V=npޒ. ;/ҁrnA9)+A%\C~Zp`9!= MR$Xv&Lu\ئҗ<Hu Rc*KI :%ӳ_x|j>0s>[dvд|g\O]IL+׺"狖6|Y (]-])t$ЮlltG"}@ua f #=WoG{{^.JMht/<+{Y[ BcTtw/זedn^AKF-?(50 Z+ݳEԷfDT3w*w<+B".J RPfCEl t,9K/rpfH%jQbHw 2ݮ=tGgZ4dprtjά|~.\2jI=J(W|?|hk|C6-7muLg0)mP"'M4Zd0æFvAO~ 3h7Aedl `jwfnVJݲQU8yT qMd8!ˍYt|n`^m~\(5B.* yfe*,;\>w a=qōZLJ,_dE!E.y! a0q;Zzm.Y.dPsu+Shv44h2-TGVVʿֲ7%V?^uVawĸj{FW[?Fz&ؖY3zF (1\Y^;3v_/V"AٲFF;+Uݒڪt?[,ҹ:? gm2 _eX,.uJwzy/KpLhqUoe" N%#eAr;r;voAExCrКZUt&lvSnmYIݩPJZ@*0QUN+` "أwkaa|d;+*GI{aALgd⯺V"!O)鋟< e_jNuM? ~#2KcW7q+bJ[]v^oGT%2 ci-jFvN^KE;6~j*2P>CH1,%1mJViVsP?~XlW{]TJ^IM[FmPŷwkIts[^x/- w2A桧O(DYel_Rqt^2Xr/2;?ڴDxrgXS{amפe6x Bi UD$ ;XmcErc22Hv)K"g0;UޗD#=e+mK/{^S~m jrԴHp (syI=PB$.o$1<s˘rX9g{λIAW,Zh>ҐO`xAޡ38mZXٞr ^(6Դ"ZEV?;wԛ69aePԗۋAeV f2lG&I;R\rJ4ڒuʶa` +VȹS~wϬb6oB$?̨4l|!NZ 5K ɬ"4M['l֋6#O-o B3*=7ZI}feܲ1#)nQ[ iee4w хnӡb>Gҷ uK̆MEȅSwz{39mLt϶]B/ؔJh%-ok#\fq7.ќ5qOS%MGj/re*M@rgzUOs!z4Yc"["~ kZyěY~ntG/zE=WqGoyu1 kF* ޗ/HW* ނҭ8JH+3 9Z33ftеSg5ִm#l}S5[ז}Cv jY~L]TICntC|(0sO(5M%Eωws%ɲJt mZ7mz5m h2 >.qbFXR3kȤ_3J*Ne9'\n%LmqiQ|I.eOae+i甀nN*8%:fQ.c4"x&u]yvkuUgw:sOiVΨC_VI%Ǧ|d< H3߹ &H>E!V$D]eWTs甡;s2|Wkwn#&^b9[ݑՅr0N4N21c֝vӏ 3KL6w7;z$hz1Q8$Vj|[}@MFib?@Tg?`BTIDU*| PE(3lZ|U )x3X,JU+gˮv_V38[6s[Ud WW;=E.dHM{F핤;M(FdޟHUU.yyElcc\?v gA0̬9V{*ylj@wFeɣH0ܔ[|Z-Qx/W-Fl-D(l낧e|j30S(ã ,g8/.r Yˤf|~##- 6X{6+6:!s66ߜPRΡ vu$Zɰ֌inlB7}6I CdT,nLF&G~^FMDuI-V:EV(ٶ-NSy n?18hKBii)VOdzhǎ%kf9 /v'"Fs6BȺ,9}NrFCV^͆03j~n]OB6!Mcէouȉt!!ζTD@Z:\wRx)B蒿U Ws!J)͗U pc.Z7y>nhVms\$\+61gMU*. a0h3nh@YŅdJSMyU)4;ˌ/dQWٜ{]`Y%m֜w(Ѧ7Ĩ~{;_"HH;,_:{9{ `{ǽEy!e9'sk1~x /\{r?2T*3DcTlZA*hyZ,H‡)NB^#l+#nf$[ج>.ؘFn+KB$9F/VHvܢjMV4CߐF{d›=PF!Vu!f1ä 73/X붺o2$áuPB[4T-cm@_2$SE,5jep~#nx);;E e)!"zu܆s(G >)k [.=ƻ?7l~(Qy^i}*M۰3H §wJJF3]ZMz$:^ެ ?[8PN#KQiܼMfQ?rQi:w[į[8հz|s949kN4UxLFqYP/Eo(Kvv[{k<Ig fԻ̽?`𺵩\` 9";2ytU{ڬo f]H97 t38g̦KBUMrk۝~س.NUZL'H @ʺHPu]ae]|!aWZ%^t<[(T1.J&/hۅ%9O _v1+4cTȍN5@%}N$rjRL 1U=O]\rJy YXD4,x6`T!aS,p9{vnjsu<<( k{kkOA|9괝N{lmmޮ~ ţbCƳU+OlrG$C!eAs+GtJ[GM9[]TAG3(IMzbԉ+)֯T6̶Ų"*\S`Acþ-ya Z<[Ҵ^8-&ոuz z^ȗ=Mz֯Y MzX*ů3Ajv|cqjkO"~vfbFU/_&a"/zM dpN2qFMw'XzN ,]|}=Vٱ3"pz.f[5a‰mRPٳv("<ͦɻϽ$Y,7cX]ooiz+'> ]3.f`/Wؙxᣇc]Wi?!91bG꽭:VaPQUƠ1|W=MzM~Pnl"|u`}M^4Fu6`ޯTm"*#LIdwQ[W;yH d[ DTʝM?%\Gd6zy Z*jCmj"[|HGܽ}eEuSmV,}װC2ao Q/,̚IUYO[Ig7-1;ǻY b:'FJ kD~3$lF BmVָQdFe}úsr[qfZh_bAc6VPF ֆUvuG ē\;2MQv@У ff.@ZB@O4@- K2{U/xc"7 Ds5T9ht)3 a<@/ B bꁴ"5V@CvdK EǽWQ=gNNi'^ m_e p2%K·bOޠ0]B^&8_(7B]j&vB?Q:ЯgZ׻#,6?VܟZ r:Bw_VVgԥ2^trv>)Í67jQj{j0;ǢUBhδ`^P't@vƖc#[[G.p b t6RQqoII?آɛ{w T gQO!e[z/% Ը$j0FA(Dɨ+&۵L^u1yZyl$3E6SA˨gڨV짾0`^5՟0c*#T]9 MZ?f 1qˉEBLj5>NU!x! Z}wyەET8/ dM^ӫ㨙؀yE817` 15Y g 6*̐{ h_2 0-#f(k6[ɖ7!<̍5lYEs,/ƴcm [pꏈ1-$Vy ]FD13ޜ=q׭d}?YCCҧ;okSNEZ%uh ђȠY]{RPffhAAv&X,=+#% =]<[Ǿ2suF5SŚcfFʀ.=]6s|-a1EWosEZ #$Tha~hr ǴA_Yٰ[UmyQ!YWyF_3jwj6nEpP.Z!z_@(hInfl.6TS U)&DD o + iI]%lQ>'kHǝFE6uˊKKuGošvcGLL-n*3-UPRԏʏ?x٘)}߂+F9c'KH6NC|[Zr/ܰ!r%>(EOXCqխXU.Ή[OfScAo6FX.s5/?˼V{2qK`KѕR{هʋQnhѐ.h{Uj[\{.4Nz]3Kͩ@فQϧ6hCX^aj׺J!ƐOMO$tu,>d.rlɣ0}رk8u^Q7}|#Ǫ1 p^Lv|0x6f680?rOV4KsOh$Qm2P&-sŋ4R^V7w4!|7qoʉB;O:uF:^]I{$@`0ɔs١~7Vvv-X}T~fL{c le;Ffo9ʯeW2BQ՛-\˭#CV{RYQRX/'ndR)>sC~:7IAGn)mPI``Z26[R-^ީb/BUQ]'8{mfBSr),Q#h*Inョ%z]Z1?{z}d+^3Pj P ~;":/(C-Y>miz:Bؼjwx$;44 y'+!#|Zl̯cpۢ9ʜMJ=gm!to6%[iq}1}n2fwyZT}WscLQ#*EUdVffd3v<5^Ps1t1k1E))ٻ-x]~9@e6QcXU{~.d[9>u 9P#hm;J]"xCE*}AB h&c lv~Ipzn?xc55j^H2[7JTlf֙#š v:VD| Nƭ̽[?:}/ #Ӻ%U[, 3ۦV#َX34Pq]ᨄ+Ε[# N>ƽ@C!}l@Lx! rIp${^mu3^:6VVe9܎И_T@ߚO*b6!sk-[3!3th6]C[CB]!!j4m:?MK3F/hf5}5:v- ~Je_?ܩ\lLѫ4T:'uP(ŻXF d1sb:#^8$tkqz@0Sϻ ;D="Mb\]6Ty_Я8Ds׻WG@A~l<‡%TUϹ =U<;cGmIܖq<2UsΒƔ[#:#ϱbҏ$W ,~F憛Vy$4 NU._t>M;w K?V7ͣ~YI5vj6U2ʎ[Gmx95 o{ﲐHW;ffuyUo sisF*;vj7>IHHu̗ Ƌudpnn^<YCzXNi3ugiŻ,ڶ'5BMs`N ~m5S5vH 6r74!4(w;66 ":M.`z\N- QCN=c,sbfACO޵<`)Oˮ<=:ԑwRVE.b*k'*n'so z`ut:p 3y߽Q(J?ٶ34?pt{{e]^ y&Dv?-St~DUHyo٩oca(Y OIT2/=ILK|=1NjXD`phߟxG#ֻFpEL-`j2ih-&e ݂>^/-[҇My5B}\#_J`="ޞ?\v/G #p'E6j[RN Z81oDkWsR[3RJE{ǵB)^}EFUܷ*_˪p6v!{T/}U+M&׎C`C&_W}y36 "7<%zfY7^j6FR4O<F (+v깮E ܱs1Fm.651*_N1Z^dvz$*PdoN6En=vUkѫnA r"}Àikۀ@FD˕Hv̑n۶+ͤXوȲ葑˰cc]0{1*mtRሒBqHnluI-> ܸbd)wKHwYiUx1E:TiVߣ⸻@4˪׻NtQ]! vJCJyD1?Qn@<V5gQUO#*iI4C&%@Zl@hhˑ♚`'T .Wj>1k]MƷR! QGќI %h0},%03 51M!yحvV 6`4+;6i`zsۍ*z)W*#'mM>/5\5S d̋4ED{!n7UC,>jy%%Q&ՅGtG=^ ORIױp#҇?iAUvvUXoCQQcTr귍F[$a 1E4Vm -xlBBQՈiŇAQAh[Y˭{@wonBWYGf#Y߈eVH^x:'%^.3#`; ,5=v=*([dUfc t5ޤ uggo)zހٌ&VGB`'Yo6xJwֆ=E(۬%)*}*Zn߁vcSX2ovt\kQJ8KaZ׭sMXV7 U5ezyFa "ĭE[FCJFlx}#.8`땵ܢ~~ց[yFAj'9śeJ@ґ EgU~TO` `,ut^嗻4z66JKAiz)aUeho_U4ɯFsь05pGQqbܓ-oKN~ޗ,Ԍt"n255G’7QQߘlGëAgBܞ7l6U^^o\5Xb#ط{>I^b[Ef/xԠ<͒14{ř6'֬hxmOU)S`qb5,2r֗UUdBhєk_݇q84xmz-˄f7w@{G^5_."+]HD@";y|baZ954InA6Yž\ѳS(8ltܩRx%D}yf\B@hul-_G}FXCsksp_6;@Qo>G[1M/u1K-<ɁqİIcKy>;q"*1ą_;jxU@Q"*|{`7W#: w,v#|2hd{?5EG5q ߼x5D s~_8}T'H\|]eIsbA4ʍJd=?.[Ϙ&oA,+EVyg[`A\Wt]CL+2|FtJu&c֭-D7>U:6A+ZOdO0Xo6iv7G# h1T0-VsR薡XG?#e ]g//j68!xYCtQ6]yU_='cAE{XA[8rfgӕxh|Cxa,.K}nRƣ ^y ů@,TlgF3mq (cVhʠk:[s7Y!rEuM}BE,l6T>*)̩d+ܲa(%>]x!ngIuoD@0J>y? *[R%S5᷷6Tλ]Yz>OWS1 X><,>MnaX'Bh7<=:}>ĭkjUSb>Uuq݅_' ":nv;)N2!4 #2=g(.Zn.4Ճ b -K%h`kQ.TxE78OL[YЫQKdi ڵoig#tdK (c&tMX$6b7{!-Ô([yQ拈Y0-H&?Do3jQq^ 8g?xwL]b'b8w6lH}7^sGtAg-D;=a'wvG?~1 XǦne]76+[&^sVAL7nCN ejW&c-Z^n{<;{i4Vd[ E4?M!1F.  ^3au]F)){gX.{E3lM f/F{FI/qJrO+MF.X8F`ԩc<_OM}É1}kfoP@蠠DWNkPqsgN#7{w=A ʬ(ۀN. A"OV og $WsA~|7+Hc~C'csHjdZ"pη. cWPoDs1xDJR#`7;:CZ߸Q ]SM[J4r ޲ {p?5JR%VW!SoO#jJuˈڛ3z@<]VS_ەg":Y(HȻ{.0od XmP6 WC`V#:QgJI֩?7.OtJ{_BQbǛK:nnh6O{od]& FXV bMbg?BglB3px &wG5D\;$0Ko% ֊W |?_ )cNgXK[}%}v 'n~b{mz15nc|MWN$Acu}s^1oѢ-kT&=~3v R7JUz`pf=+p?FƎ2VR_D<(5D5SUd)of.N8"TSÅd޸$v eñ{Wdi[qL7]޾#&\szhlg>B5K @wOfxfŽ 1HrxxqתhMi((-̳n "s[/JI7'd/  9e?B[+ccOeC#1g^m /il*6\lU(yhAOh8Z%pjkHJ|NL >]vv&J(I .ͥk4ZeV~jmx(m{njrW#m1:#4e/GxY4mǦ,Nb!~yX]]^N5}q$vGa$o>cGd@~Ve4ĥ_5M/V'cW-skiٻ%`JCz'\\^n#8ƃmy4l}ph,G%9;xF-\ 5F7~p6VW ow]gkAEk 8&YA5'\7ۗQ,Jk 93;q(]6V-la 1x}L S]0wFI! v@oȋ'_ ^HZr39cD 1I5q~EƷc,T9ڹA׎UoֽF?#38:*[4f%ʮ#;IXC>j [:F'z, [83ؙՍOōBuΏ?iLhWt⧛T)IXcbȑ^{~EmDD8DsE;Y |@шK^fp@ܷcHR*(ĶVU˄Ȭ1fޱM5ejt r omhd*"mʵ֧g-ؽ}"v0U6?]9$5tqr.k I.nE`]_ sSӁM"F }>.¿Y^ 6fdo2ҐB70s-m^ń&P#TW\TR{'4IhZ`~ME6iAp8ހ~QyFyUcG@iX(rߞ͓# ڲ%[Xp{??V3!וW> A^@שyhf=/4*26Nr.^,waZ6悭ƐztjhtUK梋Ʊ8VEsJd`@꾎@@Uc.o2b3!f}B@kXĠ 3aKCy"p>KcuԝOk|5(SRs+Gf89kQ?yc'*4>? v{A*@VlXn*`Hs##ծVb1O:! Yd?+\mbU3IlVW,-hX? eIWGZT^fdS$O2#xN3U.j]\/>H|{Y6%:elyۯ9CYơ6j*#S]~ )[.hiL~B&׋O#{w ZbO{=))ѢW-)8p |Y^h ĸ>7ECc }{Us}s^xٮ$̞$y(Fv hPK6]r;*"ЩoH:re?Q_(R]eA:)[RˣZXgF(f~\~†3[R%Y>57nXV:yX_J$Kj4Ĵ& ECnIrsYC6H'#mSȳxIbDP`GcGv/!j8ww _ň 1~0bkUTͰԵ傑WNm,?uOh SJD2٢a Utv~t;-"oخ(sbGbevBCh#ߟ1L챟i1[[a ;2Yyzjd_xbzQY=4p~^G1FcCJ\wok5`|Fe a1D} ZE9>WUX"ʡi QѸw+pxkٰ<$IO$EzK:[Lwv XTzJc׳Rqh/ּŠ0 ho]i9d8~bϛ:4Ju7dNcׇk3'D`6lF`(ljT.QM}d 1@,)Gc;nz %ڲXƄ1I97u'[#j4{XqㅯEVFqn=pcME?ԟj_-^[OY^[+$^)!?̬LVl#]>/mb%HʼhZ ,"3DŽ^^l0H dM?zA=Ô/hP|֖S¯GG|lH"x'׃"HC0ʬV$Yu|h,>*`yzVJbt89<)+ m[6h>1ti<`hjr݌FICV,ĞjIȵ:,/Fk4ե%&_ܨF1aOe=:6( pU=,%o`νZSy=(i ĈHnpģmٔ7JKl,wzǣ-&qBuSZy=$i}{3lzf-Z}ۀO}VM=^?b2+Рb}+q/kJ !K?cN]1uOq94ꯥZ"~3{)O;6SӢku~~ddSB}s/kFz9Ӄou_0ػz/̞߾ ٨&GW{[s}YC6jo8/N73 Mmt;xvnp‘L5-$:_xEGG,*SGܷfbi"r͡>S:r޺"S\s{O^/ˢϕZru-q,-+%y>\/k&Pvk!O \< R?]T! t,OHC`wED#GNcv{R 4)^֐EޣG,5|/Ic c} K/]C(_4G=}65ztpUTM ]z?Q)0ql\Io_~|j0!ˀE$n/nōBv{&5c50 gbu w9Egʛ `0{(^jno@/6*mt/bl@u7z?M}YNP!8R;9jLO+-ԉ._~(;(U6" 7R'!_]_k};TANk&jukX0yd i}V}ٍ2sQR~`mܪZn=V z劸VB4ب>]M#@ U(^Vtb#m~ih0UtP nHciztZ՗Шvԍ~ XoTZu{RB?fi؟Xk6`#?kiRZ}HT3*g{CC"}%8(_y^W1* c?E0kH(O%-T`F]Z4cpE r7zMZ>0%q$ ^6!Vٸ>t5Кؓ^@@!J9ze z( DuWP-eύ݈dzf64+%a6lХ=FPD;3QO2WPgb pК#(DX?SDE'4(U 9eh3T>r_=n!fF4jV;2D[O0!4-a}z>xDVu:UQfֿA!?#Hj'oD^^`,M숧q~Ԑc*|4 ho y~0i`u4/VՖ:K0&p!hu)U ClXV`hv/e|Xf]hPXw[egc2Ls("uG>>~XC1,kD-{'5ѓVyS1]~4ތ: H-0)zjϯDD3ē2Jt+7S9tXZ5]dLŴ-yɂK =\NHVo2m3η_9-eIџ;31kd Z>+n|̧RDxҳ8j42` 2] mfX] ?'bB9z ^P|6 H/ l+9Yw2H8Yl)BBg`-kl*gibl2LRkV` m:Pu'Yԏ7t <4,֣l-7r/= 't;zzIo,j 3۫t~n6y76=U9c;;BfǜI. qxRguh2.n%?Ʊ5ȥY&ghK]5n 畘{'5h߁srTNl5 eZb nB/(zN`O:UykOR 8uHٍ|^d6<*FA I 7yxa2.IA!-zϡNj N )gD@*o,t9u5Ow aE[{t/b]n/ z~vrNNRĸpBk_Z@ 0i =!gֱD)]{ϷY 1X 6`ϱ۳=ڈKƸ֝Ⱦ>,;N:un(Fi?! a)Xc+W]?PbG.+ߋgnT-n"J~׉ ,c?7#7|XLUCZ{6a=H*~^n.x=> @bBƫ̻^Zg٤X*4t{r-Ы#!VAyv12|G6ԤŸƑ2 yIޅ\g`DB[~yOu\3?9?os2;yv}~9/A#TEBM9?X\lJL=|=r11OO X5F`UuH>[I~,`J Hi>yqGLX+1`=VjKNWk S.r" &yyy/@E=Kz t_c4dW4=mVz$jh$4_~&FA4|ғZn%ύ&A)<=fj t32V`?V%0v@#J ЌFE8 ,<}9AGfyuٚ bPC X#s^Ru(BX_7rYi^4#ƝOfI" P3ߟOT߯5qs8~0x`?y\[K@'2z_j=8dЖs*/ٺ6L`Y2]=#tCW:& W;U)іghX/y㐰K٣ RGR5W(Bi77Q}mߺ;Z>6j4|g[? @sSũbz4sѕ9n_:A7*Xʀ.R=`HMu|nۮy~6 4ʣEz.z#$ }2i(yqsAHO(Y/Eza'aC%e:-tAZjֵ~ T.>k-YwAS@^L]J4+#fΦ9Ks$ 07_vOyQ6:½7>f[\u8U=u~G`R#FA{Au7>I |/KGOF{pC!4 0W"UI2:w6_,:mn }.ksvҰ EhKvHsɍZf,1f=jo3`zXhը8 jtVڮ=K-@ci*BZzq΄Z9IڅkFկ7c5⟹; 4<"wS-A0hxx;h 24H7WL/IS޺G$u}Ԯ .B3&T]`Opt9(47eHp#(->J.E Jf̿ f$OQ'z7Y Qbp G6=JIi }TjM3iS淪+"x\$4zGv6*>;k&Bõޙ:$m]~|&h$e*lƜ|4`nZ'Z[8J xC!A"65oVƂM$]RS 6wJ>І"ĈDyDRyKCe xc6AƎ};oxqDi:h9ѦnolPRtO3 ve{L0v=9g.^lȧh::yu=}$QyPݡ}iRZ.؃!+[MК̤Y^+2kF8ڤ̃<1sJ6t/:gy)9#Ctpx5M(-ov$u5ne]E {oWӎ`A8lr~h_FBa$chKsYu0^AhV(4{ D㥾4ۢRH|Tg@ky1HEiL z{0[Ɣ0R~=0v:8c5reDYk~6 RW_}MJ,8}І!KuytԭO&7[;ra\9Mv%'bD)Q^pI"J5qXIGlyw-#XDU1ḱmAh4@w-rFÆqMOT]:,/LaIOhӆ?fCj6i13%`l2Lٵ~0Uzfg;#%KJұ΃w<\a@ 1v$nC]Y „BC?4dhZv(,SsuD@;Eǧ|66I]L-KabAӉ461=OԶA*h- CI\s^޷aZLwyZwZr"Z~@7,;r>wOx:>t~yեr놾k])p,5z spvZ (deۤ\ppWv MHPf6I$+@lMSSeN]mѢy>m#/nRƘ]}Tq)d`Fdi6 ҠJ|[ޗdi6B'#2507D*^`WvV/]+dZ8&,emP'<y#~O0kkW YL4|\ hLjD튕PgoAg:H`n y?2u \Ρ巃zi^U`0].}N=h=D;OWq$ٔ_>TPo.th{sajW>ukp7z1 %]єgd-ю) oRע;囥 H0NcS O;+ %|;ˋ# Hp?먫;LAT~4. QI0o۞0~ʫ monnl{ A_Է;z[us~ԗĤB>vl˼%4~`H*YkQSXܟQqRP`YN?H=ܮVJݳi9p߿}$ái;EK{%HS?#D(u9Kn/үDL0Bz i""e^/3c[. lW;_.ƪBDŽX90!㿦.:uaH弶Q g~wj+@ݚ[ml#@3BcX 2[z "z}KJ.(pźz23)Ŧ釶tE1s#==\)3#r7.#nn$vE2~:WlU>#UJ¶;4#{^t$3|W }k; 15l Qf4,;s3V'n': 2l*&,plJ";7#I:ZWke0uu_(n_u!2iOv bڑx pi E>{6=2i.z3AaapPI>AzzNh )O=w6 ҺYfn 6k0%$ʯXh3r6 ֻ{IX?p lԲt'?B!%տAyhȺՀx[!9𗤲  }hOԽn,3碤"GCϥ]um#蚽>2׮u#CScn֕gCGMF;)wY)&!`zn]c;uV=v\ܱQi/$RZ UF쒻.`M?/^$Z,|9vKsRUЖUw:muFvN\y7ֽiT|$UE~7JC?ib- F2GwOu˖]MS0nǻ/ AuTaP4;)7:{LuR;x Nx_@},"Q`s-'ӱ|x>zSizf'C"~7E,iL*|BhϦ&Z GkZ˦gU |)p] ݼ:6;XTkBʓX&jճ#zaXJWt;~$g7> MFnøPzg塲@a0n\ ;͵8B-L moyLJrj~aEA-Dպ+{mW!U( pg];ݙ ~w&߲cS?}gAYAþ>[mY'ӑJPhrmZ54l\J]Gj `_4I#$Q6|=m*?fM[MIK QNT.C:]1,wTɱOQ#MzO}0 Hqptp`h"A ;;)Rmbx5YB3uIjY6y=c l}R5&{{nhߊ;FҠ/~΃m/Xe&|?o#1p&F|ކ4K^/I>4;@Ÿ_+r02ɥ+?{y8/s֌b :wjNK7=Ih_ Gn;Q& 7ǎ]7vI#:B!-]> B@+ {? xoּ 0l}_?{s[t?M3=NcQzU{i6t@/j.Xh/\2,p9aSͯ]BJjCyI¶s`{v[l>Q#I,ɟũK;+(3=($Q W^K_ށ/>`KBu6VCC&>Ojt &e< ,J.m[ ]blސyOr]?H,wiá^{nuȹ%jJ "i(1omOzL˯nK& =Y_v>`mL=_;D&_Gd Nv2'xl:;FUfu'z ca>`??f-V ]jy.CZsܙ358KOlMT>fYjhW4}ػ/x;|.ѯ{$/&}DWy'V[ ׹`69g&MH-Vt;[ kipul$|ѯIAfITf KA;)ݲ}˨aq۵I?U.QW/ʝx]2#`/{ fw"Pm Gn e*l "Zمlu<M/Yr/$th9>EDzR~r~};-7]Tq>wڂ A{VjǺ[rLbҐ37G7IzѸ3ef[29ؙ`M}[;@9ѣlmN&џ:G{dUWI ?0TBwNWlr.3} *yIFт=-|wX~\9tg} ~`0 7`5V@WuGSך/|}ІAcǪO:Qi98ܥ=4{::h3{mQ@`Ul?a$BGSFs[_W4\x9ʜ S̴ֺDO-f00sl gZcr?zRVH{ Cʐ\y3 ;I$:!Uhy@>>Q4C"^l$z \/B}jۦtxDEu<9o}ָO: yAl4u>u5=cuD_YH92t:v_p26R%>#?a%ŷb_ҿh l˺6::[6MxL_}s":>a{ p|<^M,Fq(ZB|r1󂟠9ֹOdÐnzuU=&i27_]}0LG(O|xQ&NW(b4mKqSAȻpH\'_jxq4/4 @a69$k_~ݴTp,Xj Ovkz (IT>:,͞`%!|Fq,^y % F:ݯ[E7R-&u⅒*X##FpNGUm{QghM~o8aj#em=#Þfw|`h!K+ ?[iq73AImsv*1߷v./pA$Ms0qKnGmUҿ/SF\{x3ɖhH*ko^2ʿo4 -X˟h{ $I [s9>ciqR+PaܑцA‰(t^Wu7o 3C5r^v6K#йo iO?"85a!YcK;Q=+ :# 5j uVg9woae~hR$(5tWڭu+r]mR'dX;k'x`(k;mV]h 8>hh'ĝ8c;+Zl/8vr|<&k껑9JR&t-)G笵]b.t!8wsycY𷈣jzgc9)W1fI-b4oVPޯK̩7?6R5zKh|I-ރ iv>imDcVMt6I N[Kjmw)+K}P*풨S'& +BkNdӤ[u;5wn OYr={Oym{3#էHz/X@CV?M'$cڻx)TZ0w;o F26{C7s@IlmwC>R6 C)T#}9ջk53r-G!G^:ͽ2 5Gm(v^6r2%st꽿lLT?Us{뢛cfy(?vo0yRk'ܵ|gnuճJJ)Y^rnCR\}fVXWNy+>Q(t]DLL%"1G> U f^-Z(scm7,wQT#&`7# H47V3+.M1 ۛ}%Uۡ0xj0{aUPcJ |Ǯ,8|ߎY/&;+q );FʜUH&j>.O腡vE55,a^%V1ӆ+hd-tz $iV<9!E\z#G[MXQDhA;&{ku/ ':fh#4v9=-8~X.{ V@!]4/KW'Lc4lM{k͘V "%Z,br^l['^ CDXn^ 9aowE0D5@=݋PnN7Pd@G:ڑnB]QLaH< iTʢz!:'`2=V! l.d[`x~iL n':C:?h - PS̮ln~|ᒌK>X0WasC웉+10R2޵?%_ְP-U^S ֳ&)NBd0yJ{[ޤ\ -??\seM,0Y}bQmqb+s|НI&Z67`/ 8WyUD^cMҰ[}خ_5q$u}"#эwPe< CcvF٭ÈSF=cv^h` QuIu})E'w O!|?N:r8?JI0\ݷ>0wE%=U9.<jK!ZՀ7/:!2mph &*6*F h1m"Mr)I[?lZZy5R>O(f{9T~WSCm$cѽz);V$A'ؕ^IAH3aHMᙤxcЗQ]NB1"Mڗ &?߹,~o0[E]ǹ<]>!U>ofyYq.C~u%ǎv!M+b̓R$&m͈0coV ¼HQ^{B ;DgQmLt?53ѣxb,Or7 擷h?hA?_kfgsøkǵ+ Eg? Ѡp3^1|jeC|')ϮzOq1H9ٱ佽eM~6}Ъ!e 1`MNuit?TG_=?q~ժvn# Ck3F<\#{VHa +#꥾0!,C3duw2Jɹ㥐ܶϑ Pq<& M0c(3觛wo@ ]7]4?ϡw+Yi؅Λ=-A%;Qc1YrC,ivג [V+ M3ڑ]Ί}5#)K|.u8jk4/ncvW͵ #z6u-E6U-JPM7za.Y:EBɏ*F8j@pjnNK2H3N_Zal woF+rKMG9[ .wսe0fdc9i,sC. 3۫ 3=.n hc*9QlÞwX>Ro{P~{ԮIrS0G]'s 6R1]wF;ުا[@Wv+b|(.j},iQvR8'w?O0Rj7#{M]]h2mՉ}nGmɜx.JR̘=OGuI6Spf_!+WGYm^u.I6c FxVopZ2cE݆^뭰œߤ9m[l]ׂ)DpڮRv^o͛%JUj ˫:{ Df#{-5s]G "v?1.\Jq=E( `u(fndzw(f뺋#xAd\M1aŜaw,+}S:$}G@j݇f Wx*xC!! A2 G{zٖj·F+VBs횽W 3=h 7mB\b;&.FSp`HPfd}?ˎF`D1cyB:R ~c$}k'+[>I8w(^yR9"Ӕ仕du켳V5l2L~!-=˿B.X uȽ}(RAh6Q<-/ ?Uz1UzTRt^_ǐ:@ }YEu܋2?(Xg-mr37XG %3w!UshWTnምԼS;c0cm C[B>˜ zPy=KzUX\9MgIcLsP㧬_;|ӭ>$wrULsjQ*GM~ -t>g%xi:;߉FhOi+MJ>yUg`qPgx.ۂrqrj|gfYLC<$B',9GnM/h{E3|l^-wq$߸" QJ=W;]|ɳ[&nPM6 i]X]OW^oYdLRvȻpu;~Yt$D`M YM(o"vR1 x\'xg~_;NcqP뤥-5{ YN0>zُp'uļsƅy[u+Zt#:tGYǣ2g[i a;̹Fi 9֯ ں s ]Y⌧Ǥ*;9<`H]4Y_ʡ|X |S=R[zfx0Cfx}D"$}5/SVo`3f ]SξP%F4 : j6XDϒǯNAtu~$k~]pSGBj ;オ~~(u? SN:q^K&G蛆 >uR 8 b@>pRn^s(F&NOq,IM_OSwFդ{_PHz=Ry)Gqk2,Se1`aY]Pgb@F+j` ^qFgKd[ D$o Dp ؐtqdE*tg+1(aCvK%r`J$GpԞ)0.aSoeVw#jk'eb ƿ ߠq Vz%S,ZǠdz&|+RN>;Z~X2"O i,8]mo n57sXcr+x::c[ +7'I }  @n ('BSc\ lnnC1r%qcPFC4]X#cc tANsҰsI C d8h~Sp:= 2" 심<:@m00Hmk!& p&5Hn`?Y%ZA+~ .LeZ~dn5022BP4EP'  62c{Z=hnh+.(,B bC-lItl[:d{*7!B5zCj.sRrWd%WԦ$ҟfN*Lk6z|D;Є3z-צe^\!Xp!tn# s5/A6%0Da xi   )?6-hei~D# g? ~m*. rΰDwyWy{?OG#^(Fed܂tF#=m0j|q(K@DhRڗr2h0@M[F҉X%/^(/-ZY(ٸ ߈1PĿ "E׃m}(9yl;}5SHm$2O@֮\mF̞\vSHQ;7&ZNBk-exch\ƥjqbV:2Sja>z٢1=z)N-DܦH1~-;C; Cⷾ [7HĖ5޽2wAR~ hlK(fl=zF!OV~;Z˘|*=c;ԳqI끩}zһGoEoFR^л}G&TFC=,3S+XCEԺU'wN}SBhSYc˛s6 Ѹdxv]oc2| 4IUsݝF󽞯ݡ <|1A7i}\;5$ 6ᇥ G |6]H5AsF^Xe^7YU( FFVyES;$K9p-FUzzj9%)4?iGw_PFݢu<8{i%h>/ޟ{lC.6dZƎxIc.p%/)mGg= b<]7 ˥JGW&2A5ԺJDݢo.w{ TcVc8C#ت炛4՗+7ﳤ< UHCucpe$e}B_027[Fgd;gD#􀃺l~ZŨo% RW,HANaO.36hh4(_~8SZMtؑŧ~2ѨY=;TrXEMBݴ.ջCƈ~z<%?6fgprwz-CپklN4!ˋ$4lTb@1OIۯfgh_>oWhMExdDm'}t[£.Wi;_{Ӛwv'iSAȷS/!su[W6=WŰg+R9.`h打?{Q݊ה 9F{zMپ"txg;eiͿhx8/̈ 1#USi_gaˢEAi7QZ *b#mw:@'=tB#C3ܿka`A.4|jƋ@1 #zǽ=z{.rG 5*X>aKֿD Eξ12zffOu~FhNi2ޫ$hLCSݽF`'_ZZ^?5yWZo&}hfu`zY^|#0A;]3j(J8;bU=N{+^S: Q? ~fQD>}r{zo{OO/z]% wVFNy瓙xsseq|[/ 6%=w dN ˆ"'Ge,^W/|CgUYs=ok=a-VHkJ Ei7R{Av4B}'˞ k櫔Xmc|.&00tkD="߇/Sf+S|Ѷ?3jK7Rr\k<0֏ W<2hNU%:Zh& "[9͛EͶoo5ݓ_:;GtDڨ|V|F45ޕhs`)]qnpn*a+ ȅ cfNWuZGAϛ]>5Hit%Ghm_(#ϵQЂQ|Ze?{Za$¨8ܽ5.gxQ* o0 TFExPdL M/.{gi?h ,Zxv)thnT zF8in,c8=^pyj#q KMB{^:8MS6XV m\ޕm.{K' +H:dx_s~k(iKfߙlD.4(lBR;P ^_'Bٓזk6SJ;iދdcYM fd(YYЧO\TIV} Ǡz'a)$̣ 6^}rjצ/thaeB9Fjm3ۚDl>VӎWIUHBkiYg^rnEl2|턳wѣfQ|Y*g7IB >TGϧXel66΁ qvd' L d& w~^=ٙI1puF˗~7HFu r ULg iQᾳ7Vhi#z}gK.FbІuz{q۩:5n 4Bk@ ?hP;!-y?'<_Qe*/!5Gj#XT-0ZQCbN)߼ߗQUZ8T]@qO"I{sF 4yT&UU`՗ |ms $MaF=LyH(,*zeBp\$ʻŬ#Y?mA\KͤV?}?0*peGÓASqbe; Tp{lW?ۡȲ^qD7e[c{t[cqi yt#mpRlDxu1]gю>X yj!_ܮ\E^`-EIA뉤F6ARGm.r[{hhHa/>޼Ȋo7Բ5Mj,GƏ.V9OQ7*0WQjȘF:]@Fұzo6t[ڷؚe,YBPpzCλMVםKFGI`8F,A:%ݤi=2X@}39+&hkuU؝@`f~M0]Uae&5{WA9kt2vD'8A{gI^ۙ+ϒ?hH\m588&7[Iė.6m^QJgv5=l?}Iy?PeAj2>HLξj5D_/,爢Sz}[/LyIGjw<腑 ds:%M.ƏІh#]>Zu2albI qK{0RŒXtrfU¦:/ղHƺh8Vo'0",ShN1[׶Xim[kuJ{a6w%_js`t=M=.`f ǨS47' 0Ff\Ts84OY}\+ =d/P%]duZK]#`{j(@G- DikEk%lYVک~r_]K-byߞ踘|Vb]Lsi}ҫ{'hh9hp;t $0vqr!|"\Aݡ kӉSUNz-\(OWMCep{f/[@^(d@BW`yfR ++ArJ7Jq.J%d|-"2~D9b20DZj}ao_\QmٔW;)UUG̦-=؄LSr8WwFiWN6 +:하ZSƵ;`E|so>݀xa&1@0QjM`b/f]\8,/ٟm{>9 5Jj=0OYt|mj,a2Cu.0R|Pbk=Mqяh[/&z#`>-k~j}r9VhTrFr^}1b4 w1-uz* oq?0IzԾf{E,0˞ /sGD5P ?9ޜ]܉Ok~P;p;y}ޱMrZ̲q5 2,ok pt|1 ox^G@>_ELԣ@ ?O,IO#`)4JϕňKV|ArSNh3:y2 !bu"PkU IV= %yeS[(]û7)3wf}jAv.R}Qu6R tA]>TK(Mt=9RF<g;}9*r}ezwٲ惻EvxXӷM yK@ q Y#H9M=:W%,]#]yz:ڕ.O;$OwJsoq8\Z`⚜N4q}=}"j:5 W_=̟;aqv(KW\QMj┰.G:GGh9dZX竸b?~r<\{!k):uB\ʵ_(n_`~w˼B/w۠Tg#(ݐ Cc9}=9|n"-׉(}dpyKծr2X e骝v% .h=5UR"l5¸ߎHw4+avy[gec򡧞;z\j!HvlAv=}}Xeq6 +݊8F4DgT/ 0}?:ilp䬽m4|N*羼 v9Vx)E (o<=uV;]N !y-8~eKޕjhrZ3{ƈwOirz$61r;{s_T}o] av9ӥ Ysv H{'>qi~މad"LM.]u TLwhYz:2ߥ$\?Kn::5Q)xiTb"X#̻ :H.wNjrWEeMta]:6rB{(Å]U/kc yGI7T N?p_!6=G/ 0fwz)4"bĽMu/ qQT x7Qc^[*f:.].b6Kt8od<pe;\te<.1|X9,=ը=J'kQoۓLg( Q5L^GL)x+Wl#^ r'%Um;&'M֭#f9{+bAyVSGb8K syHB`KRqFCfHH4XaJZ/Jضi3YO|#+|*9ȶx[yNK/zmc͈K'ԭ^ljB͎Hq/ FDή_ jE'xQGrCbk]qz^usa"Upk?uy4* #o;}ۺlh}Lwٛ/:_Y UǛ\&^)4U˽Dixu3|79>AP pZARXLx> YN]WzLNC )*^O#._<.W-J@q5 DW!hrtZ&Wi{;HU +b@$6KQMi;mkQرk˼%touJbA e9.vwz*վ̑ef{\]'fEi5ty̷""$fN IL3jƽѓZE̔S6?;]|[Lԍl-{e |:y蓱8ܔWCqSHW1nzjtܹ'G 00VjC uSqErww+xav9 ػj,t'Ag#y<z`҉h8&8l|q A;X7nYdIb(= wmRMqA Ү?-՘s}ƫd4!Ki:vK?3)#BWO&˅@|+P2 LLeHj* J^Xhbn*dϳQO>$甆b}H'D[AȋKjkPUZsDf"++%v?u>ՍMY o˃5LS)ձwaUWƿ&'an5\+kuԭ|IOg_vpvg=q Yfz֙+]TsrMqc}=u}n ~]l~"#ܒ)Od mY 00]ȡ鍜o5a O,⌆h.MA8ĺkRK =O`ٶbv !0FV>ae.GZ/*J=}^ i*a=+T}s=(;6^B4/KrD]3QNz._R?]ݘEa4x(m B?Gk#a:gÄH~/Ql|X~ׯ/{-WxJaKH>fw:7w^y/ήoYRڋw[#ѹ@ LuYK4$[=okUޗܩ€Ϸo@n j4=|v\ty vj,摿0|w" W6L3',Sp6şNVt9kI)N4 /9oQs(F7n_ pU!z>*lN8\R{&aᎱe e!jGd<d:ʠ-*ˢ!v~Kq`&g뉇5rQÌMd$= qmIC=/UgжÊ4rEGZi e@I/ Ju+* 68qƯ׳J4:q>׻Hl,^%su _Wy6'tEa.~ĞWӝnAd:X/yV:pB#BwSPN$esl_aWD\lw2y'5y~ QZrf%!g~qv=m_&RԌpzsJ.ףT-ziN7O4K$@'׿9+^Mhv,}~߾=/_xJT.ޢ=/ }fvqF\ !OÌ[aJjty/~ s]ίy|upWn[;`[#_t`C9[D؍`[/?^zEJEK7Q끬is󩬯,W{;qK %VAN8trmncE0]Bg&Mp#fGh=<~e m{/5];yֵ@2mNq=a_,k}?7LtIFz5?F(!YU{EW|L0&Zx)#'U)ealg^&s궲t=`kT*8epVk,N ^0ў[r~DHiq+j> 0M \2X͗2!VP듧Zp<@ti{MTK:獗OJWOX%dv,_h98\׿kӀ2\$s6ܺ(AwYP#pT=[Zw~t l/G!M֖]46b{)V?#&v)Y+w7'\H+QТsZH̃kj8RQeG13/Dx"6;iRxQMvxkjP6Xe^Ӝx.ggSi0LVIQAtt05wmjԞ87j[]v>F3,CB ydb=a;5,UdyZ`Ɋ3떨5_<,EӾr _IC!bC6>;;_]N1j Xi9A+|#k!Ga[}12oI7+=Hg;d#깶JywrmsRY2sII+s q*n\ Yv[=L+V3gׯNSzuUa)Kdlxk5N)B5k* k"tB, Ss=~v",{}X\hׯe.p'm)aаB 2Y/؝I:A*8D..]#B /\ 4Pa ^0hE-wOiϫzG6Pfay`BAU?i5NytPi:4Am5Ŝ+bElUճ/ܬ֙H2A$sNKtSBS}mPò-tȼ+!C]UahZdp1Q Ґ^xקCP=(9wVUmES9c>Dx@}kfmL?},94zgAW7s TIK:)Iñ;o-P/p_d|R\wqR% 8'}wn&DNw)a \ 4T.оAWnLøtBϒI3cmXSˋܠ%JR:n>s.@[;3H"ιݐdj4RLky[7|8֠X}xC j,0hЬ@5ۮ੊O4=Al%σu{kHN]e¿*7OZRc*nTm"7vLξ7C I x=3>+s  2Y5ܗMchP|4Ⱥ-&r _ JZq{pѰ;HhWEVw`A7 k?IH`J%}2J{|8b@,5y_ק/E.ڣqX^†ie]ѵL$YW N}>ei@Il=N:S9u늷k/rD#W#" @LTk\Xyʪ5P?+v+U 8iVR2H%Iztߟ&mߣ <}9-2A5rӇpCL~G] SjU_ gk- xՈ<*@ei/rT֎,uy: S 7VzP I7]a}MI7pp2`޴2|pG7؞*əE-x32Q)jCwilXoﵫ& ΚT zQBoxCUB|d` 7;(.6E(KH f jS]Wqf)B>Y-eXBl_d[=)nl{:r5>؈v ъ;?qjOIinb'aܰ]l6WS|| SNzop,ǬJQ;GS4zNu%}Q)>g[ CJ9Av+NV.#C~ 'g5Z*N܋5!k(9o.^$Evͼ\)Fhef'sޯ\K6buXO^3zwqr?u]+*=ЉF3믜/uČY)OxtGZs~g#:geOEB"+'Ⱦ)יw0t&я[b XL| |k`T,6c~ɶnXsrԒ,#zfbZ#ӻ`O\Yd! pO RvE֯\fOtcn ofZ5(lbLYXܬ wTd@CiRjVףLw_zpL:P~~ u>rB5@D1t_\JO *mF3ؚi075xxQ8HHR5x9_*1nŢ'<VZ.en^?^JF Y;ys][ AÜoiZ3F7s}gJYA` (Pz8_yorbVkcQaGVgJoVKwq7fMp!y/1^9S&C@U;y!m=_jwBbzsO382eX4go"OM!KT.ξz Њkc_D6p5#&~&uv0x5ɭ86/ J8R#n::K쎏tP41> BpЛyL\P1K᙮ ѷ WuǸ8 6znyd@rF4F0(>*zJ<}'DU:AA.FاI4@'{mn i9@H!zZުtmZm i"lCM^;z0ȥ äv…Z'M;pC-/r3Uv]w=>vm)]ֺVq+ҏ ks_5my[Kenbt#w -?7ҥUblYâT"7(~;*rE#$3B8 ȶ'"zrH=۰RV/MWW^ Ψ!AzKN2.#C)#7!ݥ3``v4D,,b` b&x>q|QjoDy)rj?FC]&>9LRY+ZkTxadSZ`QlTBZЇqGBqjدS] D;JJwhPT/pb*NYuă Ӗv_QukB0z;B5N̸90TAt˸sԶDU>=%SsHź}("):07f}4}=K#7`]uxb+U a'Ⅼ.tMڪLhE(yyi'JkK'*֥g*):x[YQg=6=M:Zju3{z=*~i / *%V ".M~fעgd'$&3m넲rs#9 !&vpV{it +1ID}fMQeJQ6N:(5U)e rP~*ޠf=gR˻2~=ׯy}AWgDA7do $42`fݵՈ-Xɠ)BwLV$a 0$BF2C}C咙X2A=#5畂9]?wQ=~#[H5rЮ_ȯ܆uO0+E<}w{ϰ^^s.w:?{˼.=g++=JW`:|U`Q i١B{H2)!MNfD]?EoRfrR{"A5S `à=Vunm^N{[)IUs~P IAājt@MƁ7f ,tD]^2~^$sR/D?sB@I֥+-|<3oj0n"`?ã <}ΪSv9Ƈp6/!7&5yGnDqWRZtԷb$+,J//ؔ YraЅ5¾ذךOʒc߃ Cɔ9;͜tY>eAtc~$)|rv'O'3t#j TU:](Dz\"UQGFHI~^TF[>Ϥ CgSgyՐ;[t^ ;^:-OF-D$m%0j1FR"LB}qCq퉏-+$qpDG~J_d4,U~5i Bp5P+g{km9v`^lq"wpG5/zq}}]*;1;œBxJ)!7ݍCEA -;>LUժco_*H>q]&yz]!];s@^ܞFWƑ|i8jN_dgPVb'Z|}Aq0Mfx%o)),^e= iZZ}y[iW?e/b[K%nUh<| }H9䓚2߷jPt"F[dqNM}Ph>YKT7rgM= %c:j8d:I]{;ZMS(b!Gc-]ЌBEniH&` SۮO)#u=iMUuco3YUG;y;zu QK& 4ێs+6֋Y##v ÅBkhD/;8󤻂{^YinGzrsPy-fMCa6% Ȭ=(D OV!:ۊmN%ۄNE)x()MZf|cO's9I!=6bPpmˤVfPyhh.4of1&'MoK]tNv8/nYV7"7/k#'ID'M ;fɛ%TW~$J}I1[ޡ7p58qS_- AdBn#2 ,$:tijȎK&A\ˌ~P&)R`5!mi5X5\j"v -ˀLGqc34L,8Ey솬AjHt"Է}_gWڶ ?jS> sS,v-kAd(|ݠંvD:{]l~uVEekmoqkPCS!j TK RՔ5 6W-+YgоJ/K^!b~lp|g|?aM`(h-B@"1ܰg5=zB(Oej(W n N)91e!I7?/9@{io%,N0 >n  k2D*b,XT^UA ZL_P@i_krZM6r9p, Z(i%>} 1hT9s/>I v n,O ?|YtQ6h7r?]d^<8LFr^IX5"|=}K>̷-ZP,<VH\myd& g溷nx첨e\Jr%ř %&Aj|Zg[# mLgLE}﷟BS/uIa!WubLA㕦]g U'; Ρ|Aq  üUdP`@o6P7fi 6uWc8aTg/HtUz;:'rpUCoUG[:U ny@3E ,,BzYMfVq\VBRԆ #Qǩ#媵zXeUʽi;,k3bRaF3BOx[^&щj Nhwn@b ՜c2})Q/+P6(\ɇ(x ,ܶIg<g $/.PixeN_V1s?jAx7|Z *m\8"X Q:E~Wi#`S*^zȲ~O(Q}shq|P\r+6 0A[RUQ|Ɲ{fi!0=#dtFc.Ֆ{hE;W9}U8dmDe%>Mv.apЅhzOF1o}3r7L"G WhcL 9'*P5 I>U9?x٬E[;CH9Xk+: T1ZT`H p=B8T~Pz+)`O6IE|ͧ 0GmϬi8=ҏ[ICc|B^(wݬ54Kț^:0ͫE*wV47;g (/-"- "UūOܙȊFP! LM{{LzVs 7 RWA6#aOfM7i?ܪb7Wfuk++Wkth%sS/g nX,:wNJo#k >ϾBnwh -{$cSxt9ne>#ՠժ*Ż=ukOm36ȅ6lzzz>i!"54y,q(6ztڬqmQCj -K3nNLo5z"VBe(Pz_K,䑓gKr&=4M'sUN㽐[FZ,3՞wʹ}6v%\V fŹ,V`UR}a:|_ E ];)%Ea){ z[!GJΖշ;TKU[FCM ć꤬!m:%#H%In騤X.ChҪ0;[DҶJ\l}q]vLAJB5޵|w{cgI1^ k 8BC?E7mPVD`js)=Ϊ| ?I$@6}eu:] "zK,E}X;CcefJYıeo1ͺlt#('A :L5vCq =cԿr1QrBi]BXđRIW}qݾT\!Vtę5$3&M݀d"SVWz?(Ϛ?PC$,Z!rw=Τؚ- Yt}򠷔>Ѕ*bVglx=E^!4CMs7Ϩ/9vmuv\BNnw%!b0H[Η[D4k9fl"IUBroo_E巪F @)dw `]B>j3=r@^& U6[ w àPpDx=Qqn "D ܰ E@}yG׽Ql-\:`NyWX,:[ J:/|q槺8F̒p#+RYfɂ-CxM>okN"H7h9\kᨸj.O?%]WZʤ]|>5'5ZjKg `{y/(Ѣ﷛9/S Ղ80գ$z[A`([/E\\V,B7JIg5 ģu~=&VL /EgJR,qԏS)U: H*ϯa 7U)-Q>U˚,(;1hY+|  xItOn%UpB'%oVb} (_U'⤈I\](Y EIIk AoI̫O_<~JfZ!bzGjYt*l:k*lF6o+|FCFDiJ3e04 mb>Ӥ"m&sw_dhPqLxk+͹8o_jٷeZ"wU7yj4m |@=*ƈX 7"IWn(e"}ʲ$oZ\BMmv@Cf(r`"m5$%)zӴ1פl$Y Y|w e 2a4@"@D ^@- t"vw k·a@iUYkb#T2W$%D[ S9 g< @FJ"m>pp1?@y 1Nբt#RNq^5dP Sy/P Ab!=޳bۜ̿]J1U>}QM)BG\kE!W,9#&GeyڶL6p{U!hUc#&XpˡnTI)-f2{ G"WLZMf 9`^}w7!7TjPʤZmμ5 $+1b JA"5EjCq#hc4bXCۑxkN‹>i{_}`0K4^ɘeu^LNj(ҮUsEݱb0 | |@ULDoR>ͤr zdDKY0A*6{fQI '8 %v_t1TQq"yvt7 )ZB@8!Xp\u=M5=t%~}<77ϼЍHt鎳:^SG1֠K5hErOgos{jQ zL-0ص&i5X{RפJg$ek8 O@t]iQ̴AS̳](pr"Cob~*2a:$<6qέ͡w4@7"ETP+:+TY]}ҒfO3ALU Hw9Rt"2=tB/4*%NTW.Nv:<tHa]t%e]*G Bשr9pMA˄,o\CAmd ZXf,\}x%6 ߥbm s5Aa0Ksw`C]yg Hb.wv_{qc M>飍҃)O%Ǘ/Qi9 jDiu~"=$*9Vw1/xDi5k2jRkƍɦG9&Gwٌ/zTr>\ IvxceKRy0 - y8ֱśoZv-o1$xċ/3ܵЀ#Sj?13*&nuŵ>5qdB5ϯ{6&EЌPC{IУx CVS:sg@d;4ɲG #Kۂ~Ο]wE pjJ (A23w=C~XބjM4rX*Auީ]Vpy尽Ѝ`0 $hS8H"5 {;ݬPl(J+NU:sv8.l5,Q{W vkkvPMе57|ͼ=kHO3%(Eey4P`ޛvQJGYq'ġfAU.H@$ mq)bR/:I$ZfUvuPC 3iS̪R0biHW\11W"Qp(=bWyIQ=R/P"e2~PC A(6ܻSEH=R]ZURR#Dk")HU )jRiUʁvwCÖj)"Ye]σ~_ H=|;H4Rl14aҵo{&$R1d`$Fpim[.lab0@/~s4Gv% .&Cbe'-ֈj)>A H3NJTlj7b *[߉Q!ۙr5A4GhGP٦~Ɉ${\&YgB49 ͙ 6Pr9Cke: Z"7 У6@Ken=zE)R @ -c` 229LcA+B z!r~?G5!kR(9T/ 逸/$)*8(%y^"bU&~% RѠxa<3DgΆL&Uŷp+ո1nIJT"@}n!zuQ*~4^cz3M^ s@ }>.C:X9SxijnUwsOGZ~A/DAM2B~:T hŚbn{9{QL$?H&t}&(8`-@!)J6Wu_͐AB-MK,Y`uXcV~0l&J"[만;hq5Hؤ/Muc"ƉY~W9QM1Xit)D%(-$߃9O:: f *+މ( t*fT^x/#Nb:0Ȧ}S= D㜦~BVm5Gj!qEJ㿏i`y|B38L۲HD_֠_^dbmꌮ$]s&7в1ik:ME^cX~Sj*w7$I,HR>IU덠ms3/:չs񁣿Y <[{F衆 _}; 1T& w 23 ԷAKA@ZgC.Bg6 OD2mbluQ)KنA??1o)/bpw;ЍXv(>_,3V2-)"L〜 7t#cjiAo'`?PCPpK\F_/yM 2g*, )޺ M`vdwFj1/4:a! 7WW\~|(/8 8F0=cNһnNj'ջ)$&+[CU-̪3䙠y>x̤A-?9g' ɢN(8}B̠,m@Q #g&A_58GaX_+ 5uǂ'l J䐛OEjU"3s}K"f=,M%s<١:E⡆ 9CH"A7B*"eY+֧Y㒘ʬWJ J1X-bY+'IJOZ1nF=k3F45Ձ b9fl3@$RaH|J| Ce@I&(ϗB ZޤQpꊳNd4J^I&Hלq RAIw |B='^"pgpE36zBTeTRvuAC꼪7*dZPC\˟izrҝZ3V0goP&L1tbKW^ƪ}gߙ/֮]2Q:E\#ލ|4-ɴ6K6u0͢\"vFuop"t!pULl>vq|]R+RU |[]MFL9؜d0"lsŘ+zc$?ۚXz- h0ʼYs?t8(!,uRWag{\(PNpaY#ed kVk$?U8xA(\bδQ _eյzyWOѿ 8Mw ꘤7ܸ mK@ A$`pQ41O;U ]掖ӭ#n;ԱT[fYk@d;&Y MTGRLR6SFPkPTK$ˎ)fQwjֹ`h줉XcBL&K>yw 7L$Jqk;ZOY 3{C, (>^Cz˷MiE[@ }(EK5D]mAg"üTmq뀲eA$ aRwMmE(SFAu_b285C+HޭGYvLR (ۜdo hU]^Xm!Mpș8JP4ιMY y9wE;]"P4eˈv`1"0 'qΈܙVg> ǵ z i@v=6n+#froȭбTAmOﰕsGKA+?g:~5)+cmwVCdv]>:.@2b)Kޝ"][o5W ũ|CRH~BA)=d$jb ktrHp=y*-[υݮnr'#tb,G]6€G|oj R6Hg[E#o1*}yTɦt8& ڟ3z@NXԡ !5\ԩ?P9& =&.O꽐#i5EJddy#׵ѽЍ_ZJ]jݼM5DV-;D>/h< ztr-7z~(جm5!rcZ8"B!ɞYܡ"|7ìsƻ*ʹ."ך r!O×XQ\ÅZNO! QV? dX%&oVsU_r}!Q+  m7R Ē"!XE. ۬ס+=8dFo JTs dzЄLgShgzdE$Dk7Dk`q)6qlpT Mu΄O\Z#񪻭7"G-EVg{FS*xʲ Yw#TߎI1gj h봩Lǯd#GAe'߱t"1U*66?hehD}TJŊG 0?|{ 0 i@ wi]S)vD.wyTw{Lj sFʭ'E,jgL$EkSm nfbTAao =aL>-ݨ>w_(`^6r KjK%,X_꠆o[ ^B3=uv$z׍LՊu9.d 5hva IT"5՝y|𽶨=iVIX ǀ_ )Dz:HDi'*9E QAT8vzM!`ܦbEsݑ"CA80OVࠃEpQnO3Fd$xw5dɖ}Vi!PȤ^kD5NhtJUT/ 1ui'ܵ|?nK;!TF<mtr{fI{hg>(Li-慙 Yݒ}{IeT8h *=A7A /d64uyY,x t3R7B~_/M=ZEu3}ZѻM>'?3A^M&$= @6 UY}#pvT[@=N|d{u*@8*dޠ o$ZoiDN#:ѡ `Rn(! Z-PZlnSc(W Alčݺtt)!D?Se@gכlOfs{O$]kڈ5@_:KuRF}㲬+;Oڽa=5@hWcm#G[ţqQj^̝=19@B5 臯 EẼB+ e!4= T'B**?*hߥ({ =Gi},I!VkPnaf;i8(ZW %;|U9!LE'L_u7 H`LFLdjSw]>yH!46йc:xH Q8Ns"waXX.Yk{j{RzW?b Z4I$_*&_Ja \XBأ3e ^n G#9&:ZF'"vyDG˜tPvFj{uH[?*Z@Ze}-h<@"uMMe>Kq6@!vzleXlH *H@Ց|hډZrBP 2|so^x˭&c2M``֩Fk豥0:mWJ.Cg?. a)=zE6|[J ҵR!{aY()& c"~+;Mx:B%wn Z|lLڨ5X1qS7>0}0"|2yr<)E\P8a}g}?MX:!lX=VlĆ~דZ\vދ_M,"4.ұu{QD1E0ᔸHsxP!Qէ~2Z>!hPCdZ "zy! AraR1JYViVz~,Fu(G&2$8!)yEh%>চmqV[}V*K#>3R nߩSk Ir8YCoŗ;:baPvZMERWO>M '3od0iqGEڹ}HKHq6"`x|&_C&os)slPvy&>Z}}N%0y$rιA2xDn6N,lj E|@H7AdwTŘ3~º+Z:Jt\KtAQT>x&ydJ]ϰ+k5@I_<{rv%xP',؄/T5H5ߨ5@Z2N~R:ڸZjLw~ tQC"EF0y@4Nq$& 3.Ye>MjmG-ZԾ~5$x{R9:)Gä'Fa>~jdJ>|B-8s ]xr&Y=2:!KAO=32 PuL^(OT!)SÅ:0a2X챛>>ěo^Px GEЭ(z 8CrS"}={Bd=Z8٩]--w¾ W[-%@:Cս ?wmNS~z[G cS{-+G2 ?֍FȺ'~iƑ^3AGGQϲG`=X DvD*k0@򙳇Y(0ϡ>-Ń~$zD莱ٳT5#}2T2ϱ(}?v#zwMbF[l8zfB i_sVBx}PC0ȊRf"pwqf_3B(9~+tFlWpZ=5(rUjtWES48qDi! KDZf#+R&f}xvȡۉb^ gΣGFcXn6F%YWT騠 -OR:ty4H*[.!OE.4w{yB\"h{rZBnhHW",} y|}^ӿ]kYn 8>E|ȚZ֞5tV o'9pE'2>6̳E2<\(7N8vKDvnz#֠ބOTfh2#c⩤"o^Fy@t2=ė{)5TPX$UL-԰|*Խ/ S1B2"?m߻N6ck].q :@hI  X+~i<z*E)B-(95{muRCo(8!lf'\ A0.):vRR nR<1h*e꽡_D  '=f1Qy%0rh1:HW)um72 :v9$DZII"Hoz L7!/u)=&FRARXʇ~S,Z6+B`k@7b RYrYNƅ 6o*H [iVi"A湠9BE/JwXd?h1(%'(zgF;Np5y8t]Ag")"H/,"=bOJ*ul,I 1R"udvVʪsri0 " pC6Ljڤf 1؀5:/(9>ShhѾj?bQ3R0(24cbuP4)*~׀5lhn3.jԺq1:hP@e*עq;2t# *(EZ(^XJPm>֠7 ďgB{] WS Atѩd-t /wzMhtuu#{ mIȼH4LdX,^PMyTTc (QnIEC bzK_ fJ+Ġk:mCj*:8斪y86d  a6b}'XCgXLZ"߰y`G -_hF@JiE#mM}^cӃ53Оb7#Uk|,#|党$ jNTGČHC˩ |_0pH :x;þ fi[bC*QjA:N@qͦ4Ow>pCQbMgW/jgOnq6fmTI>ܧ0v@:[4| ʞW4C :tOYNQmJLϬ8\%\L3 z[YA?m RAgMxd:+R'PZHgS%ڈG A3POSikuA-iФ X|S~wF}$hA{l!RR7Ā1ُ`zi5@! % 9qXQGHEQwjwl"BH23wngjfn(踤(~獸<,]{#-VR؟ lmI!1E5hpkw\Q٨E`b|=/r6]r9-RbN`f #ܦq/2aykˤ]=lc9iYpT4ވEUY)ߚ}RJ) Zjz6՚#Dr5eY]:8A7MRjyy9+1yLxˀ?V-PwSQ=t:/D 4ElaF#dZ[aR.B tp:|GSGj+|lZ>Y%}F@k6MevɽE8cs~Jyr^UjO.@[70#V[HbP7SMYA =-X:)9BGhv@f}A=;D=IdAYd\4̤>ٻ)f J  Iѻ3X_bFpszDV %ΗUU6] -CtۖYi0ZHć/Rh yGL/}٣|~/參 UJ[,5uMTezRh)$Z|>Di;kPsDủVllFT?RڔO=,ٌ㇬R%H9#ri'<_")xR] ub*Х*NQܰ,i)c">PWAMy r=z^wE2/"ʀ6Nj^{y%Y](N9Mh F$WJġ_Q;5IÙ4#R)HNyT1Ws핟Īn*Ah -E: p;BuX!sIlTjvebg"IumZ_ʊKч}31?wvꓒQ}csa lTA^xG^ {1 @t_.T3{Ս" _VAaÛ5^wQכr;5̧P^ k| ,=dzwqYB}8-$>6N{v[qM\-U>>@2X`cȐQ[ 2q,OIˑ 1qX6Qr}5DtԺ~>dBwfC1H61q.[QA*d|a.ڽϭK#},+&)UkDMu< 2xWRC U80SI7';!PͻV|qև~i ?N s:6,=*N}P|}q`P84(As'o}+ !P塂`Dn,频H˾z—q(:2_guS+4w7:,;Ϊǥ2YcQejߑlV8 (ڙb{4mGkh%gVn¶5@hQϾA! %'í&#yox#Jq[5D_9o8f!UUWV:TRRh1!ٗjx:w/{ @ǧ£YTc tR#wTq$]KT!Y>EK5CF|$FBHa/0Kc:91V(T@Gi;֠`127R|sX<* cش Uk⽞y䩒5x!Tq ;|],w`d4 Hާ}ӌc$6^t\a ꗥo<ylU|ý f8xHF́K j 1-/3!S3Q>=Sn8ﰛq"nӾtC^|QTx>ɍda[GmQMjܠKN|~5~t9tlV^k01vt a(5F/U!}cݯC*OUݿ##/Q̬ZL&@Oc^nHASBݷYeCU+㳪4zsQоd,=}Ƽ(/շ0 洚\=l5q$lv`0Ud:T\3< İX&zIK%>J4CXڑrATը5 P㊏_ _:@RVsMۼ%5D_4h9!`L|ZsM`oRmT"4|Odomr?Jz"5;ξO%~Qh:D1 qaü}Y[{ޫ= O&,l!o4vݹȺ5|.;P2|MՌ.g´#ɯ H2vf!G\p8Kި{?tHPjsPszIKMtam;Hq()m#~&4)Ujӣ\?h :wZ j;Rm},s*i^d/:F+fFϝվè"$DMVdFZ_tޱֳErwB/kq~n!<A! 0Jd "\ݞnRWfя W_6MR^3*l<΁Ѝa\ɀ5,n%cT5hX.=kܘ 2t|:B#K+M`-TCN$s^5-iE~=/@"YC4 $#Ը2@RN4҉`]'O͠D %mN!H:2K2d[ EGԵ:Fb>b֟w/"pҚ-V]iiՔؽ?t`ҰiZ9ΛD #Ћ"wÒ˶7ߥh95<檫nF|r2ܽe c e˛~纉j;4*C}zV8>r4s!Pf.ZhڤgΟ=a<>1α-Ơc&ƥ1!} r>mq_ԉF'轡e!Uk/3nH>$&4׉kku]6=JhMŲ^#V~h U/PA d%uAf)J{ *,k*֥cm*z,L-GM Uաd@#&%5Tˆ;R.1> cQaֲs_!?*WD.prx˶;(T«/R0}}r86s]ro' |²0.I8P4Xj|l57xfn'g*Z|^QjSIډ]gn9I뚚p v,;WL*.(6^6khN7}9>&\]Ebrts_D~h<ĺXWGhѯyՁ`}l3NPT>oi{IfR7Ҩ}2D Q2{aմn,r`\ ȡ{lxΧt: ;OkTݜweNhGKJB Yb egM6тhlq&ΤϦ/Bu2m5-G t"v TakbZtu@|L;H+ltS1NZ1,-!ZPdNQ:-(MkYuЮ L p"T1 hSH v^Nk_蛭{,Ar! +7̜]gel!x0My B 5FUc`FU.C?Joy/94 \]A { ֢D1b >h9H㟖ȁڋ,/br=ogYn^1‚bqva,4ͪ!opQ8#rj荴И?]сl)8˂',9dA DJŚ?!B(UB2Nl%4mo5A% r"7x-Q㐥Y*PK~>:['ц#9?DytlvwUJ; "BiЖc_Ӧf=TMZ(r67wHYIۃ:7%&tIy'+خ^'{sح-u=KwWg GeHrƪ2u{<Ȼx!|!H \*?LgX!A!h]Aק̊ @ D+ގξmꬄ^ 9pXXЬ:Cf{5 K׫_D/MZEPe2t=JMJ^jp[l[2dʙߒQB2^T5P[Vy;4W=2F4 E+x-FNp @9Wlٮ-1nm|%P/=nb rbXHb7Ls6-f녍-V7N߳mM Fz4ۓ{OӬS VJ-EW G#z|duu#:m罚bP#a,ioיGn{͊ 3şYE0֎*OLrCH,wSzl(ϣfgm4f$hs’[<0 28(ҀF'u`9׿mР+hu.P/Wfb#yI9֣%y3uHHFۓ~9Ǚi:uY nQ% N.Ϩfeh~Hƣ̙o(n6 RskrڸC<)Iy'VH -ruOe 1 d[~|gӳÇsT<ړzG`ubWcyzGZ}ܪotɀ04.;ujYt*w`=caCs)Y5?KV'*SQLl}5S*? ·6bўqKrl̃V'e#I>#Ӛ~uȧ= d翋C2X<''x3<} q2Ycs4A%)я9{# ? D{i}ј(5oIkxYEŜc1j%iR~{Z K$o\r$E/m/r֋ d &G(|bB!قҡؖo#ayDTD2yKl J&}0іQaFɀC:8w3O}{tD/DyefUvVbAVY,up5BPy+], F@LFLYJ /,m6H^o^.f`:z$ݪΠmȬi`h#VR JtX>N,.Ni'Ƞl[gs)r3DykXIFa2EeaePe:8lzd^9~`ebdN3 VtZzJ U47*eN[谔?Zh y^/G 8jH @J!dbVhdeuEgdׁK^.cyo*#ME쪋T,:gN-6fVE*{Ҭ}@8y-u| j|nen 8TF?EuSV-_*{) D YŒp2"㹙.P#l^bA7ZR->"d0hfԽ/ QH9hVf(!p`'s0PGm+1.~;AѾP![DU3QYz}'cL[fM*A:Ka^ㅍa0="sXvWAGDse~/(UT?^hMQh7D[n~,~zNfoT9`=*T~rW-IbU#oTdeDx/H ̤w pP2e_tdzxJ=bb@(oj*L9yڢMt!+(FA&V@mz}Od dj?of%@RZ TN18 [Zvk9z8sxBCc!P= Xn <+M!1 bTy /Г[(ǹ,01sHi( -t%/4P#EFXFf؇)y,Nn&~QR=|Z{Xg>b;5%Jg[ m}G;`cζ*4R}|q[E$Re{ɛy)e+5-pݴ*CLk< 4hqDW٩ uC64tX|tH-n~}jβ=yjoEI$ |~)f@E%sJVj?y h9FnYҝЏqg=)mqxw^gGRACϣڠfP*]9R*'0bpӮ =zFb"!h*G ~d $iAV\ԲE!j?Q/5˼[}h5EWӬ}7kkňwިߧ;V`iw)'fgX=i)yb<f2gzͭoU@+ʻ̭Kbf'Zΐ7xi@T^&9;(d:Na I~Lޓ%lH9#`?z3o/'}wΣGoQ[7XVvʋcou /,$I R( |K7 vhmcn${l͚2х8ZS%,BeDV~Yc"t4%)ʓo+d%̚4ιϣ^Z&oEK^)0>mZsCUln+#trqs gVU/)] (ƁR*2㷉v:,GQԁ9sOnde "T[UNP>HXTrot jVu}$*I&\KӎEw<٥ɌCZ3.JQE\nr_qLzԛR_@=a|OP= |=wA^S|fum5d &ԫ=2ٲ?΢utcOH"d_g,[@YC2y؊5!khr6rߙ%E褻VgRdwЫG"kExúoϗ-%t y8{Ke ŧ/k Q=@2\&+:M{h ^eXGD6d@wX J_7:j?64f@8 z[y z!zTA+7 $\7u*߀vh+%-7J^ XpذZWH+$jYS5pͰPOF`GPq9(uv~~7r OUAۍC:WGWhNgit[ {G{VSi6`u`qz(̽}|I nv4+|ͪ6P%֣A̴W?( D_3zEy]~|bx&TxzaY*;9E?S`>7&Z``f]oܢaPXMR4[r:zY{R1r߫;SԠK&ݭ0x̛& Jݵh5OeƽS4 R-f~e!-1̅үfm=#7a28Uؑt/gJH9WdOFXkQ Э4ugUdgkO&eόg̣I<$ҽc.GWkPԯ]:#kIwn%iF 5my|, 7m~> 袡?JK!9RB;( Y膖Oz7$ _cJ \κwfYVOd3#H8f|p_DhP;F/ms!4idf?:k}٭:(7˴wloҀ/j hjA!UaUp0ڔ{U,/G_9=%ӎ)ϥ;ýk,5he A-Ng]HD_v(I˶<ߙ``+(;:rق%_(m4boW=rbIcgyScLS Ba#*sݒtSiT@_v~al6 JO$ءU~}h0eWI[dCeGd;A*űo)ݮxXAxNЖAܕl7q!4nv;kO_*JydD;Umg|Yl]tuz2+^+^ lt@?OHk4m b5爦RZycmWofсƔG_H )RwUXY[ItƘ;C7Ս9PyZ'YM~F#4u.Ja'^y8W<_Ǖ5ŰeV4a A-L3nDY1r?(N傷<  fD1zF%Ũ%d́N'[} qnc tK3|Bfӫ"Eװ尮%$=/o :GW$)Ӑi;/݃P5%0K({[S_+KV/%]Qm̞?oԈutو.& 3te~.-\d 6RKiMl4S1<緡qxEfߴF@^zpxmw ͨ3<yN;QԊi%t/`qxdqr H)UA3Gt7Cv@dDb_rk)`i|cDg֟yѳ8۔omrխDɦ}YGmfTjvČ^deP^F1TdK\qv5B2|=Ofo" -jbgCNq6m&4 ۶eGSO 6bj:O\-/{4BM{{l#tmhu7vwNSHj@]r?XsТ}7%W7yX|dY8kIʩ(NZ;Q <빟F`[pFo<حV 7U`y%B[ϔnkn\sn/37 {EAEUNYLv=Hd f#礙RŊRskL2CV*!_ GјHy{m~ydpޫּ*VYGFɠNveb^.(E.M3Yo^:IzKч̪_g9T DUÌˁmPR*R.vqi3u"[WƏ܎%g0T6H(^KhaX=_ݟ| = Ur̾>>?֐A v6O3L7zvi,).O10@@Cg Ҷ;Q#T ) ]*"eŪg=$>,gl[+ח5LjӳWk͝гMە8T 8`ilBtNC]Ōo gcJΤ.[yE5wȠ5T-te'eyJ[緞| VS:JR5KezhZNX?xBBk/UDZroEo>4Dv3Je3[\lnX'Zhp6fcJIؔ9M!Ƞ/Sg51Ҩg=;`?7'MwvҠ̮+lbak]6lSŸ0XvcL>S1&X1[en ( kx4sQ 2Tѐ]+P-c H-c7Jz6#: !}CS٪3Eږ?5VIm8f\w5^1-U),snNMxu{6ɮ=?u$DQ3v q>~`Wm >^?^. JMc5Y=9J}!'բ?W[z:=fʇ;m:8mH.reaݽqOtO" j$ XmOκ5%mF rnEгmᐣc*wQJ_|.)2t˵)X-CTnŘ:RϮ|!(tm$I^fX {u]rbdEp=W fbu_ImQ )7?Gˢxx›,Wdx-ӞvvLU,}n)0h ;Śi/}Wڳ?') "f[Ҁژ7f=ȀSC1h{5-z@a)uIm3xKp(]yb/=2*^:تܰQ^vC=$tR@tgԫFWmؐK{UCq3XᵌF!z2߾:c͌X8X`7(FVWhN^)_ nb~+IbwSsl'4syfݕ'{s>ج_ J9̝3яC튢=]_<` "9oiAѪ6IuyIJf}~h6 :wV(ЎV$h3A=<'EF%rtWdYTOV%P#4 bڊF.JL@*yV)hI2{>m;Gx z$*X&-'dY=d*@BVƒ|{ 줕'Y ^uh@UNkMQ+tCpץGKTPW{(:B ["6 (\r@Lz9C /ec mbXn$ocmNhr,˵ך󅝙>vV7k~쬛Ô dR6kYR30GN QClC SQjM4-9 U*iz[+j%WٖkvilVиQvUZ!SLG`{`؞zې̤*`qFRK˂fy#ڎ*_Qy܌\m֓gfO|ZS_0bζCNZ׮J "fW./*  :ߦ3(ݍ,su"90Ǯ9ͷfDDcܬNͶp@+T{]֔Y+EmͷZj|BK2y§wNSlciY|*Sgo@` с;OYP+ iB7[<2شVג[|_J'>y*U0k'>?B_APM T@ˀ$F|,T' |*hWqwSge&Wiٮ+|~7kiƉVlPn_|ɨJuDrl$diˍ.x"F"zF͸M5i'_N^.IYV8/w\w^'(QIv1*gȡy>?;)6$I?g)]޴V 1vRczYx?Hu[-iw{4Dpy*8iCΖ>>dggZx75v|.8h9RxTν?~x6e,-nVxYDF dYCc7ˉIs4rUɬD!—AJPwP&bӞ5 f]CDHGݻ$~}ARӷz/r e s/9Q--9 ivLi+VWgcbcM %;3o?RE5 _wfoUQ#hM;1o /hI=fUB*MC ![&Mh|m0mb2g Ki ;~< x&iWN ,Wca휙G#=݋NL:(ϸӲ[6?~Γ*,RM&R\Ofe:(L]yTƫfzL36=:<۩nE'AMSU<,vwqV΢ffN]gmZEf|=v  O~Y՛E .Yض!V/5<[IYv[8M )T+c7Q5nhAӂy71n;va@' i/o1A57zjB`œrҟ|Nǟ{,QJ?V|HԹ dWޫ봹 ~7 l͈OʇC&c0Rۇ3Џ)ւ.,b?vҕ_/f9MPlj1"54C08ALfb| gOK4ބ* ͹iح__2՛C?ޱIhQ;*j`s_w tUws B `֦zgޜׇ ,MK<+=7&l9i#?X;pɇ. CޥΏo (gd#"!VeE:˧4*a@lw~:7"VEĈLZJdEH)\V ]axZq@`k)z]kvruؑ[YϏ?!s7O}M[QT!Lj9P*&#^0ls95X2DJhXB_bZ5=@Ϭ¶wyAX(m_O-*hT%"lOnfnd {z%FeN#L*&VDeU"d]ŌV5*/I$QNLVlv!DD'`2Кg{HEg0%VjoMbRt >!A3V{3vr я6/k-e%(<g :dyVoht}YC-{fǢwjvimHB&{ӧJ={a5~3ɸZtO SMKZpu{Ao^c{YC&/ 8b%:[``Mc[;{8l)_viTh{/1 {EY:԰I%VhO6\ޮKɠOBSNUhi'8kk/ګ!L~/ѬBF&Щ2qrtd'̖Q JKЂQx~F վbYQ HwfXhy5=YCd '^!Dy! /4 w=X| \ˌ뱻KHl7jQJ bsKEj5(QXDuR,xu=֏@'%,?@#tnN=_\ެb߯ݘ(Us$ aPs=dW)(KÛ} ֲST,fYC>SׁNfr1alP5ؙԪMR8}H5z0FK˗;!_,ЈEq*l}wė]뀪a[3^; ]յ]c|c_4tI )!Qnapi5FיUBrh͸&bb?nl.6>| PDEM=ِOsmvr{xlhFTPt +.)B΃wGKk/kȔ_ԩ5VB~[ja>߾($ @z;>tWaypv:lMM Y5i @S3Oc6r2h(8X`ThW;3z-Ax_ǀ߷Du>C(|5Qm' q{kwFӻPz2IؾsE=u6z5,[]k PY=bHT8\Ǻ2mHOfowJ87jjܬ, K9d=Fcxn^l3C A 0q}[!t` Yk`W6NK׋,q~Ƹ4B7EӐϦbۀ@Υ! {J"o"HEx|ě%mE2O ֔?#Oh0so՜"1&6{{(zAP@A)4Ӯ{pEhޞ(6:8m/bʠh ou<qƞ X*򥒧?! Ch"wŪ( h5EVO۷ppK<1XziI#L}̟qtbzŴuvܾ$TB⹲8CZ%dMꍹ&:aJ'h{7:ErČT-h3TY\4Mm[wl<6x%tQ%" 䨧d䫢ПV ) 3IFpJci}qM n5jTk)H+m -~&iZ&<`3̷U>{;Z*-ݮfZ UbpoO2N2矇dд}oM2}itY858X=Z-chuvZ~Ek=emѹi4a?ODJ,qHy޳0!gGDs_0~i2d[Q/:IMljzzo`A//^عi쩦|VӾ9%3E /Ԟ }/kzetKYuraŊؽ^W//UOH8oކG# ,Զ.%,mꟉ "ѨzJ.+'6wrbֱOjb~CQy)jI[fBw 6P7"N QU/nygޢq*?\8!^+RMjB+r䐢u,m=tN 4'EVO`7DPy0F MBx!z<3 :byBiX28@gFIf큐ШqQcn0cOAnѬqaO*w@4ZwVfU RڤERKi-~E#]>%p_)4iK}?t>( zݳk| I[bO'~<"S^Vj1փud$Z hLEwTk:/Q(toEf.X~ݨ6ETR~7jQ{t_l՝47Az/ ܒvOU.T@w1̞}[Dbl`f9I7HW5JYYEءe2/GzE5dVjWEv _,ϖEQcգ ۑx9"~ͺZOieB hjA4w+ 293˚C({ws q݇gv]"ߘk54`fO}QQ%9ZmjXZzC dpƅ^en iѣ&T>V[[48SsRŁ'cS31J󐭃E1jzXB )֤V{I|i]Zk{N֌ ѣ4h|FrZ5CV~C^3 4*R+ʭf*-oϟy Y DͤG-׭, zQKDe^?BTKM?_@rTH_y(d0 {L&C󱲆+EKqX:j}5c -ÂEk9z)d?V؃O ǻn t']M 1_bXA2@pqXp1CwF4'V,2gŲ_ 5to빩[r*BMtK`-/ ]ݾZ=E et3,gC_Dro|N;xoYzS=fxÖ&*s{5hNj2Gqh˲Ćl.ѥ'jω|#}UE=&*SbϞRص(#ԫMʔ6LܞtcǾxTjh|]p+iI&5Œ~oP?ZF:Rn* f:|YCHyגW-HLe٠mT^5w(pgSٱE?i}$M, hID1SyP-ˍ" CaD59ϬUYP$_ARGۏ܍%vT<bKH#V `q-((,uKg(g,u1QzIvuO` AZj>^l}io|K׃GN tZ*hͨ ʾhn߳u`!zԑJkΘ||%L!&5[g홽+^"tShQGfMT:^H]#z$|ɹe pls)O 4[ wЫߨ* (݅S+f+8&i#Zfُ0GѲm{ŚqsmfogӾ`URl}O2B?|oq5yR/o,9u#6Z.zEtڗEbxGǠnjɃ[R&qj=]Iӣڿ.7j99P0@|ipO (rLJ/0M:+N9A~%#h)âыV\ _(E/q_+&,)%zUU[RgOi T|g{hwfDVs%^-- mP@87;v>^Dj<`hT=27 0n;F(vW/E_3G4@biЙQw,ƌh[x%k v/8yFn_hdsN|Ja5V'F"!9hPB!nw79C59a `$W'Cm`Us^]! 5V2:Ftt䀠fbCO#Z~&uSXyv1ɍOs2Z& P%2^#hQznT` Ǵ(Mzk $ֹcY"K}BQIy3w[=fwwD˚1Z%iA& ߔ1.5tUjDzl]O%zfZCTǪ. At󠮈h;!2YRz4>d!<Ծs&Jss啓om3229ΨImu#тI|Y]!s&䀐Sz״K)|//j9@L^὜ ϵfPM<>֎wN,)y92GIg_=.: Ȁ2uT2M-DT!YA6,]fb?o]t6SzmL<9vB|[Kgr'ȴojA7§_d } ?Ԉ%/+_nS|*<ԗvq OpPX܋0X5yMhQ%l!LeګEϜAZ>[ܖA]#* ^[(+:8Ug2:`ۀE$ZEfƔ"GX:ҪCBMVw;# 9Ԣ#rX rqƀuH)c3ٞ 0=^ ٴE h2~[JJ53Ms~~e*:(PGoZ.)4N5qR<"2JNS՛+K1W& MKd0p¯);"db3Vھ$2ZI\qQd)z޳sG`tϤ Hɓz;t& ZL-dE.lSof-_UD"  M+Y ;` ЅKHcCXnuE/rM-274]ҍr%|A624C#sR6sЀjH6%fqcAK PEMUV"L 2oG{5=eЙz!Z@ 3pj6G^T ,!k B\#kz ΀B#wK iAL"i2@kzA1lK Tx5Pc31+oGa%&4@gE 単n/؞gJw @5T%/[q=۪}rECɢ¹iON!$2pvNC`4u汥R~p#/\`[/HLhZA:GNje?J3  a]3J m6T#*A o;<pm?C foO*G2pٶ'ǸLi}8 |=FALH (ls6Xc5s9,(Y#pZxm#hgp9jvnݬ+[8:&-nDƈeAOG =Hh4&eg>({EZUc?(]p}]Db٭ 7ZExB׮uմf673>1Ͼ!" cdiMVP"겱^*_vR [AaRG1W> )m=BP.x}[HsgP`č޹%+c|iJhB謨b;꧄'zl{76OJa##@Mwԡ+( _8Q_V˭~\[ Dהi73Aܓ:0":>( }]7phkw\b6GgB Sbפe%$߂:a MOKc{1;\ HJpjKBXwԢW$3{~CYwֳV)m9<:~ܸ$fjevmCv%Q4IJENOmOVwPLU1;*稺-cШZ`BCC]ʨ[zjjA6_tsjL5{[ǦJ:|!VFEnq[+~ŧ0ƅ"߱n-,#!M)@Mm'= qr}؅{ )?NE'߁"걣%dI }pu*EW#G*M҂74k0mp.f륟nofdv~I`wD#-jKE9NM=PδAdS|yKF >)j^>6ڲ_2G6ֺp freb ">؛"}ˤpጅww m]^SJr#$_)m W`z.FCcY)B[}fqP#8M/DziMk,-1\kI]dԵOUPV(;~=+Ƕ9LgRz 5x&|Xww 9b<g}:V=@FI;FN=NOs~phXL{{X1P$vkV%\DLrK*zS$/J}y"?>VaOfq6ykڀo}v4}_׸ NqB;$`Eʠg> .peڙQ>?7촥Y]tk;n'FUK+ RAA#Ѯn;N=(SY̝L2q8*e~&9HHurR'{m ]Q͍'܌]?4f⮼W9B {U܀[XsHSpM@h6PvB'-|Mp#@T6G J[AZDff +^Ѝ`'[kqQ’9+@+ ,EY Q MVV^ thi^jBrl[*E-'jyC;v%֭/1zMi_>m37S>!5 Ʋ=пڃDà`̗7n*}rrɫˑ@9~kq3UbKhrCsLˇa-\1n;h~=>+؊.U2qyq,j6PeK4% YV;|4K{Iϧ(˜t_BZ:nrAc}%lfq=/ЇrԐi|? :`*UY՝dyԊQ;& Q}{O§.o-2h: ~''GwD9r,ouOZ7+RV{ބ.3uF/E~B<jA_WsޖX 䶩5b{$6㥋M{nE/ueYpO%|) y{xV(=b}w#OU7՝vMΣJ0ǵ~R,q79Na@g7h&sԒ:*DRAlzƙca0QO)~9 c,5RD-&!J0XS >*P!`ZDLӍ*Kdp)=TB9 YVϳ]e Byo󩱞 ayC [k[hy)E[r̙OZqjOQ ijH)ܴao@.][moV1ñA-lWmKYE94uywnnHiǕ.C~qS7#C39xs_lz$uYZȀ'C]C[#  늁y 洗бChLaC Or@Ӌ&: ǟf 45 z]c!b[fyTɬub-joZqT .nt.{퉍:y>VIgĄ)Q4@ii$IÉpѶSns KOSW GKbc픽joZ9r'{ ӆ6}  8۪3YV]TۓmŮ"JU3$'9L$"QHMzC7Q-;u0}W(~=>۱@L'fRIJA(N+ 7 u'Oؐ=XmmX| B@ȥ `DZ:>&z F1Kǡ dړMe]rYiJ}@m3;NiZOka%$+VLCbɢd'鵑7L8mdZp!_Z CHm I~>y+zIilYDͽZF袞%Ac޸TiXq :ڸfE=^0L {Y{*8~8 m!Mπ=Utñe%ekNOLȚݤ6*};l{YCBlO]oDt[IN*5_n2}Β˳m%GR=m\rk}隖~1Im(8e. f+|zU'\#/DŕbK> 1I"~% =>fOx> {*Ds:sy3YXoZՋ;Фeɇ7qbQ ŞYgb~VMJ(VZ?P{>g3YKB-Xrօ懗#'߬dDtQx-RVb:$-46}@(DN*b4υgxVIEZhٶ֢o 7>|pKyzJFK h(:"jfv5+Y2("zQ>Lrr>~WR}>DՑFxN\Hbwy;]ѺӰϣ*a\!(_[r\/z\)<*AMd;-: n3) @ @[*vɼeY0 ,zĩl2v\4#ޱL\t!nqi?73?;Ha[GrƜC^QD@GDOFm H QP,h4Zz|n}c AR|Ar K{J%Au.kemy"dK![K2q?`dr9x&"fTn^=CY$^ftWlN=3̟:.;m΅|Ƅ$6_D8hxJbӖ[ŕzo!Ee¨|,{i(})[., R8u}NrOa)z{@HAH,§xdZdޱA&IE(w)܃,S`vL6iIG-i6:,pm+B,Ul91>2{cЂv. u~ U5h;OІRZ _VU_Jƒ뷦y4_ "yωbX,ӱȥJaJvY;n2g5FVT(m$xL"c5??WD=Itlg#tn7~n-> %xwV R؃FB}^ :J}f"h'\b4&eׅu6hX &t.(Ӟy\W~\ey u,VRgMEurоQ{=Z0hUIX)/Y|6R٪4fIլkoZgލ`'JK#ީv< ;QKNe>M &Lv=@Q'nposi:DK<-?WIfYj糢-7hN: |t|*$ETrqn\I{JNOcOon\I"2:xvM!m8w~@@\CZ='_VQT6hOm~;g30v"&\AgL*ɘ۲zk nLdhtA#oG$-4Qp `@E6;S /-`A J3"AN-{xǴ&,YEd@&üR~D ,(У ]@*01#9^vK4;nz6h!I ~iϣB(gK߻nEَܡJL r:A.z4ZN#b;ч*״&Y-4650=Pײw e|'7hFYeoGlY0{в/Cy31߲ߎ#LUdRŗPqbsEH\B>^I we_ obd2#ǹZi:MЄbf|X-_]Iqqڽ7ꜳ|YC&)6R2ղ =K6lrAQ4&NLsɋYe+1YK]d`Ik1zA}7_s&qj<,4~+KR(k[zvj%;C6U- |7n͒ÒJM ri1JbA &sxfAL0= 06yd${q.%~MU+5FU{Ƌ+EL5]s>I06SNThzZ*G.R{"(:YTY8ۃ"E[Vݯ>Ud"7SVr{7MYݟ:9~||uϬ3-E̬!Cjo wjQ,H l9|I5Qoi0)EnU.zYJrXdeE4|yY^GچN!Oq0m=aj_(p!Ը\-6 }i<+t8L_D|$j g./9sO"o\n@Z' ~3oB{ن5yosF7i+)ٷD=2;klUI fѲ7̲$mi6jփ5LZRpbզ/U!LݲϒgjKԑ^ǑYUVj('lOcːNMa6W\l" ggVFBb{N V۞% wh?er{}$͕D>*Y`3m5XXnU}?z={i\.Ѳ+=ؑԱ{$ݒ[ew5-Ek ,VURN>{x`n-@8Bl/4&^͜dCG.m~z4w鰔S81PbfayVYE&mp\N{M<)#7b sPg{g%j[ae u^oQ(@( {Q/yXۃ>ic]q{);8\0||NR_ ]s*:"zrGKsX7HYIͰ@v]? JO˴_ǓK3Ւ^4x&5QZ F1%Ha-EJr>By^).]=aj%4ro ѭ|ܱCi &z+>s~{| O@ftbDDz0AЛİRީC؆ٿ0F<ԥҍ)i> ~L2VzY0S 9Iuz^)M/ܧݭ|ʰ3ǂVY+> {}<ճ>&$6i#\kNBcH1тrΩy)- JYs[~G7't"/z-f}=?.(Bڜ-ɣP՟8)N;TȀRunT2`M낐(uN5ndɷ~*x$Q%?2.F dM7[O5d][ b^FmR7dKJQLk4J+h7t|N un>Qv.֛!zWQ}k{2IVL^ѳkLؕ/ShTTS*La6/K{k{ @A[4θP?)NZ6o8_xfkIlHW-lRIG%b c]2#P? Ύpb-n^Ns>f H J2f$aS 1bL9P2 k5 UV K2p0P98,-A[LMPc[@i4p3XN`@LV֣'^,"VV{APgU/e<~\ [R쿱d~|4( Za@ܨ$6 Kײ!4VPV/aaZzcл t?z=vz#4ۣj:0eNxL`,/&bDIƃ™qtXttY~X}#gPfn"nj<V a68v~οz^l1VYV(7۩ڠ*a!ulC/5M7IR3c!)b~{.+h|T7M,{yys;ZM;;h;8wBֱ +_EUa"k:jb?~dŋfMe~W)}%_PwΠ"߬\Uda0?Pϔpă.1'#*D* Sӕ^4co6k>x^ˎ>DlH țu^hqgs+#TW}Y^(#8ld]z~X%1&?>䪧Fyr~XoVGI-㫅Ca,TĶa49 ]<9iPU!;EzleʃM=zIRyy~^6ȲX5ܞXp{hQRIg/͖uCH;[;[6F ȵ [ ʴ_]eՠ6]I(S4uYwU%"i꽸S \2W~jUԈePR#ՠQ?u UC{˿CW8z߰`t@O;q^7v|zXE PkXN6,/va!TO'{? ةst]WAjj!;Tۂ|T5 ˕%jټI~C))#ρ؃K.*o&8/]UڼZ T4?W]p_{X*.XHvt b]QVg#^XGt"Giŝ3Zzϳ~?j`HILA {i,z:q6Ejve Pg :}j2.爉hn2USQM9тzx"F+4ٔ?EPͮZy?+2^|S7_t{=)ʛֻ*ܝI}^7W~HȒJ7y,FSxٛ? ]MOh+ź /`auL`<4>ٔl bi vὪaا,:*֑~"n$5׳?u~:m]ZȨ>@}ͤAޱgaRuָkH$lc|_o=gƎh=;RSFx_b^W9^)Ld-ڙ`3K%s 6iaٚGB]ߡo_ݏBi3sfG>D&֫ocf$G˂Lc6l$D @6k|ugg=3M?x*87~l %IGk.U'c?@M>RSFa#w*b5ZQpY Kwـe~Ԣ.OZiWEgew3+~6խ_oCh^YÞuY"#lDjmiheʐ"GyuՐ㶏0Ͽ|gJ!6P6)BTeuB,أ"}z_t*H="d]UԤe:l+ޗQOc,ZJ4EC 'd\Z]:}yVF|rI#YBm65;Po8!*Kѩ]FSkyLXvub< I5E2b)b4ҊMq[5!Z:@c yrd+gF6@ Gt-Od Ȱ4fj"=N!LT]A !ֺh= ,n(t*P7[{]1پ P}PZ:ŝ+ ?#K"{\qi F1d>d[ EGtת b&?(Z$&1-趲v73ZT Ga:ݫ\ˆ*qcɴ6:MfM99a{A聬-6izc;L9kﰥX`L1RNʼnUQ,-L' Oɂh *Mg# KA,3DuGQp_kXbC󈹷̮40.&g^l:A8ʞM`}HcZjp I&JؔzmpCnE'v!6'k)3Q\TC: i>,B}>NS:"h'G WmF[k4mʐ[&ߝ;DezOd\Y^Q#TS\3MVKsc5$5ޭ<첚*َm6BRr=xJn92Seս0=5ԈiQVXGv ck"H/(vY7 GL(+Z3guHW'- (7z^']p nV9 C~d&)uffhA =btpF˜A'$cK#ȥ hIEõU K )2sTXs<,1tx%3dA Fc,bz2hbDn}xdKc v~r*Z:Jg6L԰nOD)lxݲR@XreX5a ?.4udI ׹L޷ ba Ӧhhyi׵l Nӭ )Z+]Ap$(ǡW1~s嫌B(\q׽ld}JhL03PeiO,t'jA̰;젔E\ȳ~o!'c2?ZyH ,'ZTAQ=hG^fB @lUڮ5NK Ю_ئ>:2Z-=ޥa Z&L=r- U}^Yyį(︯1'֍,۹+1ܻhhUQ廙,_u-:a1TNUhXkno'f9$\wT+Ѓ2-j27Ȃa< eE\K EM o$58srEyh7&!Jcw+|i &n"aa=U>@n. %5Nsxsh(z# ui2!%5|5KȒöotF3W ئx~V>8 xUú040y2U¸ #'EW[w%>%y J^ =\GcbH®aXe~7qGi'Q$3YTޔ$C Dr7ao =;U;v*/,N@!nF-5-jvlm0S*!<kR45$Y&z-IMC[DEʙ% g :{cqu dq!'` tSoĸ҃n3Ⱦ!T*>(M5%25G/u3K ^Ѕs&`x juq5V 堖Ơ %@;sQC 6_\Q Bd7+ٟ?`T@4vU@nӦ/>ŃF&tdG[7x⿈;f%PK{23j] G:M=~Y'Xa >@pKCHn\3+B m>1T T]&KchK MVz F@@eJ~]`nSC$eJHZ yJ`/L] $(b9^>$hPcgB,0 Cdwìb*.)Puُ$veXv}]5ک}>{g.8uޡչP- !h3hE۶L  d`i6Eٌt58@3C279gvHC %^AՃ7Fz,PK:QRQ͑m\ @v1\Y ETTƞB?'$Vfs5QJײOT-Ro\SeQ)b97VN$:qz.p,cn429+(7yO9Ͳ`ʞZN~-P *m97ČbOya b/[r*;|SFKWVOr*jt~fĺwG@2D ( xIfmZrY lsa Z<k]/x0 Y . -L!'hr3@ :U+F=~fH:@݁uDȽbNȸ*n^Vb0?mЪ2dI* ǵ?16O\ 'Q(Ө:Y kWZM p̨ ƨzg5ey?eHe>|Q~JPJ} i=䠡KXaMQ@fJWU6՘w\r<]~.Goh+]3^]i0"ht.m>-bK-vg-LJ 5oU*dɵN0]wGg:+jZVo4ی@M:3Nݵ:BK\cLyKOTSNLJ\E]HXn>9:Ze:zqRf`_r$ l}U'~+>q7Gkr'tܲ͠iYS4 ˲'DPR#-i+ϵ"kXc%Tw|I%̸Mﶱ\=ַjJE->X+D z,|sfy, HxY ڡ))aL hݡ=N Qq6 ([?ЁA?LD_QWQ{~ء YvvE>-\9{zJ 0 i9$yDPJg X ԡ#/r~ P@f|{Ok~.qk`k U10x߈YmeВ)΂E|NhoB9M˛ 'oPe{]M}۝w"t_MdŢp:P!.OdSJX+,ކՖUY.-fFKC3Ejx$ u[cnû9Q 9hyRJX`lǁs/y@PeG1ebyt~pt>gisbnsy춼1;":v{J UO_WGx*b9D =!١DlкC6q 5kР{?2.57@: qk^%ac2& Bj^dΎ%X Zako&15|dK sF@v,: ci9lozKwnDt,cK_n>s#j^(Am߸XiX}H\gWQ;2Mde& mR^ ] Փ;s`K#R>Ĭx[e ^JWhQ(ò h;~kbLg ,2Ԝ؅xв\M4Eg W<4Sye~' n+}wTo_l9m?i85P;b9@4 A7ZIr፨9^e 5ʪ ,Rq״G^'7T b%@W:PH`{hF"ɮM/4P񎺎*a|ei ˈ\/)g;pQ(us ij}]ODjƎ}2(S |=1(8l{Po;juT>ǾosvN˅K]V^^}o*uMQUN,-se)Z;>КvCm6uZKIS~\O~N 5pŨՒv9]{EVHX}s*??5u@kHӱWG^BK7˓yUzu"%AOPMN91l7^Gۑ(t}LmG%4KX .cCGM |3ټZ1\u\I/Muf_0\?dA TM@m/kQ $P3Eϥ6R6TTzgsYPV:>uf(6uIݦ{%p"E;s%c' nk_fP4B9q 9t]fPkr? Pl[(X6w?×®~PwUƠkj T6HK`A$lJR`A xLP,ɰy$MuL]l{!hK$ |acکcyW8$UɱɅYP,hOyW^D!JہI |R]ߦN P@Z˾ؠê;B*4[ !Yi +5z!#G{1^z@$7c_3aV)|^Nc;BZzy(9&f3;;NXRVl7_'ߏ"F~"^=V.Ϻ:B!"fNUW T%-{s㯌݆A2"EX!HE;_<`HsdA}'6 DG`3R`PwBCUo/c{aa!5 :7B2#i n=:jCRā{R*X ck* >c͑dODd>=?V{^IsHa1 x'tsF^*k9Ʒxk꿮'uvTaKH#7h+"@ ɨ*RMcP^[ H?b, Cty%:gGz-E D7iC=Ɯٻ|y5FNj0aQgfVPL2\ zpR'3§hM'-{%!cπ\ [v=#nI=vo6D87W #8i 5B>Ab'o_9F0Riǃ?tvJoOv<;fiC*@ Y,\.@CdndgG4Օ?z8c\gnml$,Z~2ov;&dPu4UF7\sOXK1uTr|-@lԻ#➷dn%4[zH6v(Xvnk@2% sS_MmAw>A듁3^`:ےB6ۭL=6a[b}ݻ;+?0eX5`CmkOVX[1 %N?Q =TG|'qH'f={>ߤ3A#za=UK,] sŬ uP,> n5_hlV.ld>5 o%&+9za 6.r4/T@38sTޜ@7Mj2.tحq#4p]'yg@x0R|'0B;s,בi B&RRi,Ky0_,k #8^8Tז,%\)q!{J ,jQ!Ԏ0;]R.zUߴRgyw%7ֵX{5}gE0D&2ںZ呖j?<ו .[Zes_tմi, &nSpo5&C/> |2Qxa`]_ُ()Bi<.ĆNW9H_YM;`HRu+x%5q%g5m7/K:I8Y?W {؃lfpn4 L|2dOU_Mϗ MB{NNM/sxT1ng]g3]ymј^aqN'؝ $ H#=]81n%ADkޯEJp+PEs#|`V ;!Kޞ Gu}4Ӻ c݋xFFRXFzQ̠]<"amat,#KAYz{!,0&`a1`ە }9xKh P\=jʼl.eE0:j:>d6nӏ!R;4~?+4@٩Nwa36 f}>ϫ^>ĕgr.Κn\`JߙcNO|&%)5ί^m~SW"u07]a#RZ'>[ksv7)V)D( D]CQJqBZf6Y-R[tV;$v3~zxI.yw!e!*en7$Ķ@{t2.Ƞ<-DW~kȆvKm)xІDt*{=>Q~o\z3yז 汾ɒBʥ4 nXB J孫-Sļym4ӤA:mGk i-Tɟ k?WAҸ\YhgrCIY7`?Wk'L $i{#:]T)Ep%V÷Fѥw D}Fˈ^iɾlA+N|%uxR\v<<( zu{#MG~\&;6]~;uw:Љa՗ צ6gBKE&8NFqA¥Ty3GvQ3Ə}x M״ P݌VkI6<;<J#>;*B/]P&7sP `<6uUq`YKx8\D7S}}{mT%yҁ  yoΏ5mңI^Uv$Mw%|ּՁ@PQ"n94n.EdZ3't0;`1҂]ĂE>;C>OyFtGP5]D4=GRm$CpK7h4 L*$qjcFֺ͟1v d9duu#mΐag27w|F4I4I62pNc3(k}H-zL]ê;dIxCI#{y̿fErz%b2Qh %H}@s柊6>`HJ걗XC CYMLw|_ &hB[=`AF|ԥ Am $YZA 6 :m&~c.I3z`h[ϋ`A$MuaQǻgi& ~ \ΙnNK)&ѕ]^ ކg|"J챹<`/vCMFRCwͅ;-~u Dh$맾]p6 2xfܿJ$ZjCb <#e]fWS,U?66jAF{Zѱ,u^u4Mj7MբI h=&2 1Z}AA~O}8Vn{ `0IIc&Yj7lUUf=33;1eu ~{g7Y` óσ/ѡI\a$Ӎ#f2v?h`AT87V'Lv~ӿЀ6 S4ۜc 촎Ur#,;02V~0}MYbYvcɵ3c$QA :υIMbd= |*O;b}F VkEҏzadĒW^}kR}?b-W/f ;~$n/ rHxhSwE3}#CEiт̪DW;k͇ 4>=/W*b%-sեo Bk,|6K't6”ahU8b $z:l"mD@ݭ“!HKhZ67#J3li~~t0p,|o7X2ՉG|sui^2FtyF_yYCź-Gt! ]qiR 0u4gj#SUo?}n_^я2Ol$D*kx#`8 m̀ Cm)c#rHo:<A*R< ;w)!;)S4MًIkt@V8wN0?Nȟ ^ dv %zï\0y"’W+hGʢn0w0ͤ2 m㰈XN~x@/L5i$XmtYPKB-@:'|P>sDA@slƊQG4; . 0kvTg=@kh-+a1TN6kvV"ziå^ffֺCYYosII `pѠJ1TrT2z~IAp؝?@L/k1z%V tYbpO60t)D -Ao_x6 :,v+n4zH!^GN!&=A$-K?`mz 0A连nj? ^Z,t:{ c T?e$GӢ^6U(˅~u{fX%Lt^[$n9kqA~M+}\Aٱ5c;'mDvw:t:E6-w(郦QS1ImmۈZm[S#Gld%Q;w MA][7'?`SeYRke N0+4kchOts/ܙ*H&ه6c{ ]`kmR1׏h! x^Cfƌw89Z[M RÍC"I#D~ۭYbmedX睵RƸ?` l{oqgNt (>m,է{ Fa6k"zUӼPYL׺9 2D]-z8fG ٵuL*I#|AYM:,&ͤh>w@dzADR5mKs_8x#z]v(l>$2ȯRmukWm>'1ɅS(fAic&A˾AzizBѢdjqD FʮJijCu@at>aԮMlOsHJPq4tI xWyɆsKxRy2uw^e,ݾбΑ'7Wg_V?@2c0Akn0 rSP̙C| eXyʝ9/TT?#VVv`Av7}uw0lw59RYެB1z"e148Ѯ;E^r:1B7s%R'0CUhxLmS юA"mʡ*R_]G$aݢhg<~!x쯘EYI6[9wWlzC;FhS35G}hJN]gYFצ:e.f%%s|7򸻷Z2~E; gSRkwיsGn9Bdxek+lIdn烛@x;@!aUTyQ1||+&ϪڙQK f1[AIt$}ov# MҴy--+k{4@D[1 Ӝ{&.-ެn`A$"-9$6=$? Odh?T5 uF{ Es(-`y2dZSY;DAќ)$V#vR)~aRn6-7$}yQ >d$-iOz|)s~ٯ.z-gp:!AA)=L/U2#pK01դl0n9y sma@tځگK(w  v'E#&e*!Rf\:ω9Ɍw p?4S@1Ȧ_hE\?0:\{_M'oc߯'wkxC!xG t9DՑt:HZ`Eۜp&t4|W4mط̃Z+֠y*X"i}lX +NʘtxE!=Fh]m65K|m54FIphF<6 GE]PŖgj&*m;ꇥz[,ެ]>3S$])`YzT-دJu"?jقHv>'V'J M8H }ǪPH394v[<6˷zLB')j2U$q4ˈƝ-3Dӯ{_ J&De+ip@tO9nV3)7{ٗ SD$ZYhUu?vi\W̟&7u bͮWșٍ,GgmWB4șyqY?Tk |9]EsY6zlcc \;qƥ䠗Q5¬fZVC~EӞGAg`n R t:75f5FmS/Ӥ0q<%8m sUXKGw৔@-UhKtй$xf$~B!u+aeJᑴ6 @zHGѵ@5|7[fz'+͑#K치 ؿu-^K -`_+LZ?74i[1k׽\-mcrD[WV:0B4m 0ϥWXfsWց )1Bl?'SͲW$&~6Ne3&їz7FRIR{83^;pEFh[U[w{Gi4*swHQd !oKj@ˎ^ CErn; F"^s$uԥDFU<3Ubzn zWʝrRP:Bׯٍ̅]d!&){IUO8%K*"TA~(0I0+<+ۚe_דmS`5+wc1 4 "_8Fѷ.MZϳLZ ;~'>ȭ auQ_}s .OI;<&˽Ϻ9DȀw Gy?#$- Xo,z#ߩU}/i+d4f|7RCbevێvWJvxGJ;HsLJ7. W *sؕpU:1\kYqLIQHcklQ<"W6Io~vB=S}S +^+.wK=hdv}/NvӉw;uI#9A[g~J[>0!l|vn]p{ ""pտ1']-EѐِR܃]GӁ6 ]}O%t r ~=zq ! ODlʹ1H\cA[$y Isc.1_Ak V)HOatѭؓ9.=uZ C+L;>ϲjf&&"0?d<UkȻ>\zam)?և@w՝>`ыKSk^20Tnhsɒ~v- ?iQsL^z$tP,r|BUvSo8ogEıU%{^D(aczcZRy<G0:`0`];?F Hy A>2 g'G7x> ny P}얩j!nq9*Fpp-p?!:I[xynyN fE[8ڱ;n?oD.~^YOn`ZSQX ZTo Te(CTrjs1;`0&90@=AEj'Q[+21ghE\4$1V|exuK^s < 2dS Fqkf4|<tu+)OqT=k>M#5D3`Z͜qy2(4}\H$]L_'#o/_g;~g\I9i@T2uR0ݤ_F2-z6Cח膐DKC\s A8AF8 72W݈Ϻ;КXҿ8H+eˆhA7]6wBD{#_hXΥ>K&b(IeWRR={ewDOIn'לX.=x޻=v&>ߗ#z/8'u_A9=6W"hG18`8 תO]cgCY6a^203$rqr%_F#~+z6Հ9%i{͖?#۬lg騟o|?zut$A1xmIb?})a{bRdP%H;J]_kB1~n @!3vSNK S;NV:%4jٟuA:d9 4#E[PZxe'BҏSYvwҲɍHGzzz1"E ae6'ݤ{.|sviF)ջR?BH"v|4TxG:9]Gj*ʈ,C;LAZu创w[Amb<%ţgݭҼO:v`zKf2xO^цYRݻzYq Ú.WU3 UBoU?T^]sXlwk! I467Bcc7rqY7laJ" @is۹wGCg9@g ^ ˺烗 /g}tU7[mW*luZ=ζѻuIH9ٗ"='5gKʡG?\w{*#}_j^b =W@0.|Ž]-z7zY:]QheAǬ?>IG*kmqӕ#o >m~aHK6qX)hyz'B*s=y-f󓺴aHtkoAu"O(X%3N'Ml(zyw[}pgIUTi-=q6 wRq=h<>XCPOϽϒs&C v"(klb&6J LuxtpYp[:ؓ^K{ZD$ -vZ˺m^En}xH5M/O;֋f=l,GWm3zܭfm 8~/Rr=MX6 [잎j9]:ŢOHk)_{`g5Pc]^SK|t1֖]xc<9݅8L` ,՚ 2wF_ݝѼ.#i<8z>`Anz%|K0" LS$V1schSѳќi7Yl9!Sz; ^Wh~[y&H,\n˝7wM1ם#M4v' S",G_·af`څHG=gȤIOye.ޤ 4H}*(zgzIdlYd`H`̩ԾOA<)3p.t̬L &ֆKJ1g5Shs ;fC톶C2·{ )* R`2$vo%v8 { #)WNwvaH}郣{acwݧ##i0Lju{=߿䮄,R;zXGV6&xY0Ҟ|ntvhw`?sKK~tCp|n0<q٣cu6ݿ> 4oevhJlIJ|GB  xNI0`Ih|]_ct+{z7sDp_1~W5E]^{]ovO?a"?I[&Ò֏iLV@yNT$-dH| 'Z6yI]5֎IKrJf>XkiQh缞NS2q,"/0&4隊e^ht0ȲQew4/_KцD;1po%QH-O3k~z8uhv?Q% v i6Ȗm~І1IzO[BT7#=yStH:~tFII[c'5EY iuf6IfvOJB'5{IWbwQK^ЎA@s, #iFijUۖ=iJ=E^kOazLz_͟p%]le#(Ūo,{H]@;!M]-hØsn&3K'T }.NSǘ7.Ziת{~SrMorXdc=YxP>OR}e ̟ *~IE-.UCuڧKD-oϏ.P2mp68qY4xRu?ϋiBV}8k> (q#ƍvzMP>D}24l0]g]b0J zׄ2ChF*Q @=QK`36C0m}r%n0 \e!@ S3X ,Ҍ-\e 6у @ Annt2r_d=\K DT[Fl;6C$h`dcO]zdOd X?iS ]iHa\߽KZ^`ðuAJ$Ofi;S1tIf0vXΰˇ]YHg]If/BkZ :nLH)f`!͌ V@[mfa]@k!iO[Z3=H3S3u>P#(Q-3:l[5)ڒʔsRUT|lg+'X8v8){v:;r_@xPG eyVZU#$ ٿz xwB6O(d*(b9$(/>YpD_pBk+]~n j͡]₟Gq8ꭠ 2^"ZUz+_o Z*&7|Z/[ER1L@Ջ+}BF]]崖98cuFߍϭST+j(uĪf7h.+LC b>@'Zpк vwꃴyH7DG}]c3݊YiU6ϚK^ퟑ r(vb PA&,}4ς?%.gh5~uZUa_p{bbYؓ ^`Ʈ,t{ѽj`l3}nQ?b zJ /EPR·l }8K|0GɆ}-s;_Cי|&{F֭Vz!KGA8J) EjOg BLj ӅԦA˧pѢFƥCrPt`tVu$-: [=bxm@3DUHA1;;_9혹OBW@~ PD~9! `ٲo#1b׀6 -;x`^l3|[F  j>g_Aj9mp:c߲4*Yqqә#PEQGE5g&\nx7UI3!vju7".uY0ZGZW%Ke)gl0C[d(QeY|N3q+Z.E=5n0*B%~ہQQMDNh%/-Y+OuR"qNq rؒE?j **4؍?yԀN)+ȟ [-B˜$wLDggw/%'-hm>A6OPnwOՏKtS'`ӥ^;F\EbfjaMn?kК1=1Ӿ6Ja?+~,$ w*V> ІU>\qX6sBT~#xahmEPUrpj]C_1C .9XOŠ_0oS BwFiam~}>#9b?9t4^{Ц>^s%12gdW?M<2ȱ=}w؁K WE`Iv$ZW%l2^ao (S:4 wx>}7vQ{1ѣ(PrU-qm~ R%0z3l#QUW̢W Do$Մ jw {CK29k ?{&WFޓgCIl]f:s9ɪ~ܧro 7msdmnxK({]/FA6wR=s[̇ٝG۲4"Þޔav~րo_{i!| +\-qA;=u<ܡ*|^}M[ٛEה#l __0|_M9R بC]f ӛMwZ/3\`OV$3WlDG%="$/Uu("G)uXD-@V'vdŊx;c|yVZ;aRXqak* ʵr.,YFGZa^a~P&={yg鶗__fȻ3™{, E;<`;|Xzc\.^g. iq4'Böx_*ijjvK?^9(}dd*[IA剨C'K.w~RdoGPjL̒ZWSa7('y̥Vh3uqzTMqqC2s=0,G:{q@߱PDIB5Fw}8;21SBfݻh1c#M̌#..QpaӿבeqҸhk,C Q>#[߫)wZS(bK%E}"@:y-@1 ~ܟ{'V3ĵ;&Q ϥ:tC@:zSk8ǾŖVqIjX5{0T [V'ik)v%ݗ]~Kҟq[($lc_?{!vq#H;-jJ>'=Z1C}QEaG0ȶ4n]uu RS*c#i>A@g 0jdc:%@Eiz IJgz rfO<ٮ8$Ϳr_C y+0'.N)(@).1"q? 1 q{e޺Sr9֔)axc?G NJ x iGRH ɍ- {hX`R7 Q o")-w͕ʧ :gTUy8$m oaC5 ϲ$'])lv@ХMrR"O#r?Syjx#6 !c V ,}W*v v(?G Ujqg%(Dն}<j+hzMNrl@<|T #1Q]}qnt V_n0kF v+p?QD,&QO}L\Yij2qeXx(М|Hc.GN4 O6To/:z $SLx9 >юE0{*ǨLw»W'd*Z^iHa;o:gU(!g՘^Q ό V)?9G 8)$GEL7A/ CVGN"^g{&;a>[S8;}8eџv*daT/ 1qÜ= \'OzD w0-%qbV_+xkM/R~!Yǘ:.PG Q 8☊b]u.^\+05{/1~T28S o}ڊ.}!Kύ~ɳ-VpJUHF顂" E78ZR2%Q0n+⨊7$gΊ"RBrR`=-RVJHѩx XQ=}aRSUэ?]j;eJ#抸cL&,Aw}lmAGPD,\^)xЊ \"Ǒ LvŊR1F:j=ddw}ե_ej!hx:$'٣:0?nӻ\TÑy)_Iɍ Z$DxAO7%U=)N%ٛ8I qK`GC1a/Y簘dPC!řv|1.WAҸS['y_PftT^>gXERq>n" ՐTeds\spVAɁl}\nGE]% g"s(L[,8$#_% SoUsc2$FGW-[Ȝ кz:gŝ[DPvdꈟ؛Cnud>R]t@By\6oQ%r--ZR;u!b7'>bnm"LIPd#x9TȮ&q4N*]'յ#_jgk!bG92bzTkHClZ^ʜhZEP3 BOш"nZK>3}q_J#z 9{Zϋ;)Q@yr'O(+Y CVe _69b><Zsdf}) S>&yp'd>2ja.QP,տuఆ@W/]wKݟsyN2T'"Ddp SJ IfCTT$@Yv*"'x(]tA) 3=硂nlASOG2;!wT.>d oqa`Ju"}+Y>>D4] "n]u\m (k8+}ӣxֿNrn 3ꥼdWa7Jo>GMeL=)b&/>1nG9X~ckoI!cW NYb~"7Q,ojVН(xϻq  H^-aqq b'mE4u0h%* [{JbkbfH D+|쮭): H 6;b$! &؄4ľxZ?YV[~̺;#T}%$ e1>eP?'ǧt;85jd3~~q$a|gT8%LLݹKpDKognޥŗI=hU] iۤ8, ,ޒ"1TCPY8(%P#.<@6GC5y;fGb1$9W85{Jp;5(7{Ab<@Q=#w.9FܭD;_NpsCÝPNDyM_ BH|O[a纽'ψ;>Gf$b?!xJW侄$25¤K̑a(X[MG1-=qYUT!XMOiJ+3ݧSқcxSR[mN5Eaq(>>u5wU~-.`D]|_$\&Yw_xA4U,k,28]m!sq#.p'gQϧղ2Y,H|dczo"qJU8TK rt zSwr;WJULtr0u^}^'xuo02T-Q?ޱюg*@AN*y '7B@[Gꏽ|qCxpV ,uEԳ^'3ˠm5m?|B>_A1p%>ERL|-bJoEUϪAC8FGׄ b ,Uy gNb*E&5*耫ǻ-f_jRsS8.0r['[Y`".ϾuAmK?mWs}yId^!{W_}hHDƲ3xMln˕7A&'}sN KĖT)MzD X;qi[UOSEC*%9'W`}z9N9r-}LPU/\*Cti6-aYR]x)_-! grpxS#_?8|7(ѨI^{\З)iNUsez\yisW}i.'8Oi=Ӥֈrx)q%XA~Ϫ2DKE[PXs3Db3W(5y2↸a'M7^s!,Lץ| 9k^l=Aiq`اH^wSʺ09[F1vHa&NiVn'~n3ekR5=(IuY糑Yރg8/tu8Brk{ëg xzM!t0.SB8ɼYBQ!P+hxX|p_!gq\RqTkXy3o{t$KU`Ѯjfp[8%+9 e*٪yd v$}8J M~Q$9"#rC>?Ӵ#={~Du߿IXhaJ_GaQTy[|(mm+Sy>]q)}6w_!m)j .R*2>CȘPΪiPGYE\+b}Gep_p#i1_;/`9QGnFS%TE\ |hT4xT?]\_K='c'M4.4(צ $oٶ*G;*z7;zb"lwAPE4ݰ9̶ᦈS3u:~C;%ŋSjL琸$B'-doV&g. 8jddYo78\VLk B;u'ʐbҊUIb>+)l'L C bP#^ũ;σrj8f)7q:+~?aL){>dbvi1s^ei)ce/ŷЍX5 ujxk.[0%R<ΙRN1l̕1!WE!tcl<< F!VUڨHDhh81eyxklֶNHl=, a6ʹMf! C,~*w4ߪqbنk]AR].{X,q1aχ[ԋ4qϘZd9\"3,fn.gw9HK)O x 0א.z`W'S;1SҖ&9}!2J1ފ!r2G*x+qmۊv8uT1H~I"a1̰}C|\=Wz{q8{>dG|UHLP(ҽg8{e|Iw"S1f0˫]iչ= pCfKP68mޟ [#vDX̖f|4~ft7Dk^wDoo͟{%W振oP(=tSV3fɔqb]J̻U辟wh׌nOT80>Om9-NMio!:XFۿ -~yNAVٱ?W,^]%k,5AK1ncpDs0ub"ԡ??kys3?Vz1Ke{nX!#7kݫr݇7 ށ4SrĝNջN!oq[lXjQz8z̧@ƬG̪xN㪜 ,AP (ڷzHx Lhj?Xa(AI^b%|hՌ,2'1_ŞApԃrzE9g~El}*I6(G&)%c9AbT+@s/@[`^eTg@J*갆!dJ_qyp||nOƼڝGYa$qÔP˧j/n+X# `8:xhgh3}`9\77f&pW{IeK"` `x;uJNpjrѬ;R8bVP_αﷇ}?RK\*mxDsp6 sA/ `䘞@+u`[^5O:U?G!OGv4-sȿݝ։AWY|ӖSVBYz^ޣwʇ;ǣR| 9\ۿ[I<{\Wy<* xsیk?㭽bx矈#$L׏?yPz(7 sK6WCywdUQ*xǀEǣyePw!xW|I a"[]lvV/nZUmqYη. n_TdpKYa82)S#Jy~JNz!+1˸('=Q$\vG\]aZTϰ&]i/nfAUyݍO2D迅ńqP㘗ji9\^DeL`=r\FZ.[b;.X(7~b.- Y!U֟,?qL 8-hˆ TL{p,ҹ~nn~pK%|GwƧɰEYEID,%cb6.ܢ(byp|,\suhp#48Q1-|Da.J܆[yO(jY4-0r^鿶Hk^aoeAnMq|b_G t ԝ[BkF('E-n{Qě%>N vXHJ[Gq,a8w~;LhJ#n+|\8WKqJ5JcnFUKC|h"cySE>݀An8l[]RZ"!Hcϖ[!dq7ӘϼHpJTһ٬{7 9+ѫ4GPpiKC >rvHEt!<#y,e!|O|o|EC6@5a `a(L&|sq92 5zV*?K} ^Ƒ ʇ[DK>$R$Gw[b"t-bh.rKsz}Ȯ;F])eg=` RSsxu 5ws|a+V9@%eAN?{cۧ {ƴ7T+C!ER@Ks>I,伖૪bn'C/NU@7jr3?qL^*YɓHqeUģ?#݀5n>NSDxﲤbxln@7#eYPfAQ\L,QP*4 ՚9ac[`C.’ߒ+"vpMiݘ SL{˱P=,xPqfCE0M/Иx ܷxϖN6PJr5n;>Kg t{{a' Iƈ $&`9b[sb~H?t;dS^~ Rn\!/Mn52ؑ^|DTLtpPKҏ!qB#?NDy)<0SMQ z=Ȓ!D+]5x:L3sfd*B|K9L!%cbT_]˃PP%,A^ߎj,=jx,#J/PWeW|3[RaD jڙI>UHv{}n!v?@EJ%YV>},IV`jQ> ˍN!:K?Pozʙ9XIpuOY$Ġ3b:1zL>x7$L+XM'sJ*$1(^q޾~d_ܲbPU w j Cʤ ;Y5I`睼)#]pZШ<9.g*Nݠ h", ?غpF}%\}f.'^0l[`>G/f7s;k;$yK T镹2Xm'9A =Y^X6nRK $K)IQ4'xz}Q<e? qyss>ݿ¶zy#7 Cx d<( rD ͞!nCP슜xUfH~ns|@O*r# URpRF-~5ٺ}(yd5&2T4P +-s)ND1Hg֟#OJͦTp-Ic|xadmSޠb0=LN V<0{χ܀"ev#uǒExc킇eoϒ24[=#$&~Hxfm'DMD5B .>Ŝ^hPxlmVŞs.(DA5j'J8k~IR -;F.02.8/y.`7XVy)oڬ)1'b+Pgt|) M0[YHW>-rPMʹ{ RT|,,?`@4$U}>_g|, C.Q) mqܬ<^jҹ2&j9}`RY^f#_}&MHOn"^ghZ Xڞqi\ ]Td3IYE!o ;jy;|-?*!z/e E"֢H)TJl}qc 871;|s! y_^x kڼS, O4D2O>yL~iuʖK4eӄ0-χ\ԧUt~&߭`qXЧ1O=q)B)i$TG|?+GUd!׋@;}qs`p|}>*R9Q#|[I\~ZB5{ nV6/}yݱ쥧%"+d_Y˫{/ ~GmqW %5hedf{.|ҰVȜ .E[f/`hP` g/obV(it~+,OAvWz`Տ|,% 9t{Rw†Gxm*Eʊ;/mxZ)Gh;R=)u@,RY'IK B`XUd%u>Ь:hM )$D%~|'Ϩ n5xxW*2{o:87عG> b%IerYPrvK3zteBr |G$O@^BqB% U^ou)lێBTAkU۸k- L{*QT|B5lw,3[=\^L2?M+G?i@8| RC_P0+Tmq)$ڝ?> E|=9F-<Jz[[skǙ_È R_;Zqطa $.ǫ\jacxdU_0ibQ Ћ:}L.*7]!X,E!3sg%2 mXk_/JaIּ/Eƴ{SI2qܢi}0JS=8Aϼ&qIеr}Ѝ5F'BDzf=~ܐn%&)F'ɻ BD<*ЫbfE{>% K0u:E A|Eia%6Tދ99BhDa_2U-1hB@W"ub3!) +% )dwKYs$b9H)8e4 x@A $U3g @ň8 'QzZ }kPyC8NS _˿= ̯z9Zi;kzA~E;Xn2龇%XJQR HX֟dkV#zhWa?%dxܠo--SQb?$z!WS oEjR@[oqϠ*'‡q>+4/`l(D'kﵽRX8mT|"o8%]~RG;(a;)8IC6: +T}T~f|[ /QoY}a+ö8PX}b hI7[DcP2=".hC[)c\H( ޏ5j2o< 8Fh[Im4KK3t<1VljE^UpdH-d]^qS>egoULz9kXs!rdFi:{U4&z?rS).x9y\iVtNxu l/1|ׇlD%0nLmׯޛ9i9/)?- Ol?TR̯aI$P?ƿʆNw#J̃+Om}/B: 9  42ȇT# .Rd U{%HJ ݈M%%C*{VM#JfsuCyUߋք얝2|;a]F ^y# e0-ź H1ҨW PiP~%EQ|^F[&* >%>`IWB"Hy K8nL4Uuݴλ9DpÐz.5{#v{w; W[=UZ]ef$ IJelj5A*+B+_*HC1VI1ylMpXޔޜ_|dJM>FGz<ꅾ)Wrȣf %LTV 9DDͨ} X*wCu@qyLZJPߎBB IA8l_n΂=}O-q3C`|VW#Հ2`Uc™EBg(dt kz/+ ݇R^p&"&B#7B: [ 32]mF'q̨^ ]cWv>`.V]] R S$D ^gG:q N& Ho6Ŝ=I*—=j̩U:Wpȕl]۔{DO; ͖2`i_().fe,{Mм&;a&(y멧N H>y h'e2J2{bj =>F| <Т ?X0XZw{`YQdA 25Tx:qWt)b{k=6IK]/@IˊDRAVsdcQGErڎ*χ" tҝ>iyg/崯-:ET׈Dx=-N߃f7zŠ_n̗PXm #J^h u,g߀1<(!S5-Ee ~Ae뻟IW'{Zu})ϫh8 v[z|77 z1J#۷Y7nf\2s(H$U>(ݰ4Wv:"lb?H|ò<7"ʨ͔ݠn='j,*|QFJnT #c[ƴL H SB<(@ڌVnO]uF]n+YҌ%ЃXJ׊ ܯ zn,AyOy8*-^|YYkQgMJ8k+nT|0(c^O>a@fJ,s>8x{#*;w @hs(+ueϘyJ%%:jAtEJ!WIV^Fzի%TU |TWlal-qeU6RQbD޴na&Zu2ׯWu^Ec[("K&L\ Ko TB ЃXnSfKoܣ:|PR.XFTr?PBkp7H'97+ƔOV Ifbxo6~r F' rzAZR[%ϣ_}-d1-,7-3N)n~5yHGG|)-{-ߒN;U(xh6VyׅXS₯_X^[U@h P$O-}^~Pt~L ӹ`A1I3UP4Ky{YuP4F%H'U$z/P)Cvet-#2L=X )x~g<+߄^>(Nҝ?~[nBk@Ya%L6MrT!Gٸn~[Nz3g] 9 Bb7rZ}}.:<hrFO.ũ*b#ő&+{T{FD}-e*(òBs_,wgd%zn.#D9]:dz'{ H'Uu'f+I;3CWOg*)X/e n UGMUt`7iڍד:gh 'BB*kT_3v)G lUqT,ohfo MjM2c^J*uq.S +Nr} 9)SQ5 "+.2`1/,[+HƳm:Wyc=W(F,ەSg3Q]AVg<b'bڧf&, -8Bs37i̟ -,Sw$FnVYt9+{^"p\wPPϕckj^Ad]&JyB1 Ԃ[hබ kʄGAlK1ގӍg#-N=Qe: cKc|@{iI_N=q|oh']aKJ } 2Dfu4ftZUu<*)@&[ȈH5a.ڍ}z',&gRsx@R j^gs.n$(tG$1 #ʍcޔtpe OGGu)rv宋YX_4 9Jd&LEcej7BpY-\/sVnCULfu}lK[&"YB5sKc VJ)4OAG!:*p(N{AΨ[طn*"rQ@ CnVVFY@F:@ۍRfH2J2ځY*i ëkn/@YqƒOpD5BTo§{w.?Gb{ӌJDh>'=c U8, GN{M$%SP @%[ ډ=y^Q# 5Q~IJAOYA"C}otG۷˙4Ror&P&؊gU~PaER9lJwbB}RmMKp2Jo>ŕ9 y?Ѩo,kнVP⾛WWzoiA`e1Jk`MQ$Ia.)kR![VWMvc.5o[WM6B Ac(1k:c ߈DiJ~RX.Nn"+K5vwΗGLY@ 6M@EX{=s[ lQ;xK rF^k(H{#O ?q8_I˕! t}K |hAALk4YŻυ'V's7Խ%S³-P;q1.Bn?he/EB-:Mv}[ tQ19}ýGm:B-׌S`[Ybi"9=>pu;ܒ (ty ] \iY&qɡ"SehLۉ>>CaÈt%nKx>ؔZY3X/".(nR1vcHG#Tn3`~=r*3_09@!%Gc~pJTITDʸ2%Kޭ5,UU,4m~ j '~Rk34Խbd 2E&th@1 ٍ#t#57qbN'e'@7b+]*'"ޝ}h E6C@:R/qzF, JX?m8P1դmj?1ϣXjlEBzk)؍F⟢g!Q1^í\lÎ &ju$, TPR>}U;G4,}㚘F9J{1x$jFV['d.ne5;^nrAY[;'Vi$?VGC JoQ +94j̉n7X)q#ueZۭ b Ӽ<]'g! ԄIErD*9dƊ -D$ӾzzQ[5p_ !r[Q@  eoiTa7ut%k n(]t|=Tʙ`mg,>5%D- q*$$if C(hìe%S5=}aGwSQ,66wCsQâjo"kUdU/G @IR$A:)"OMt{+ mĠ($3C8ZdjCxjJAPqgr֍*,m .#2hO',η\m;!v\Q-[}2 nN8L Å?Ԓ'|lߤA`mCd Уa($"l_0NGAPnU}#8qAz}@hEeY/J !y q ]ɦ#hɣrXXAԐ?<#B ;PRʋG0x=,ZYtu72ی[^~x!8WMU~V k]t|' Qٶ?!`~ |PUsP 'q:nE b qD\H޹[Sh@=<7"G^4&BᓭUu¿޺. a{ >^Cg.O" 拢hg]yn)dC'Kؾ|St`1-G(TPwմIhAu]}!UTW=:=r OQ(zc,"|~/!}ߨ &ǁЗ:hjOqإ ǢW>QYKx+o&``}UyML#zE҂je[e?/vc+ vO5>0ve 385 cUwPCШPҦѝXG E}9#GTq#gѳqg-z(GzyԢ .Up5chZLBfՕ'#s~z*Nķc|mkO.qnU4UQ)L|<, iB5e9 a'|0°o8d%Z Ey-鮖Udx':@厨5(P]|m%XG>ntȿ+?H2AVׅn@GBIݍQxdv6~σtftPCИ*=oGrU9]#+XյV[&a[\?U*el=UPjWarh2ʊS>GSt&s./VI漯G_>~K$KOA1A%jclbQmfz74~Mݢ;eǘaϺ-> &&oE-%'J@V૜O3?(⢋hױ;I|S;,!Y)jz5:`:k<(2lUB^Uҗ,ߚ 쵓}_^DEotL+BMV5ŮY-Dd6TqT0]g"PsuyO8_Tl)lERex+en1v XOM+BO;jFpx7T|#).nͣ#sҏ˞|Gj jYA(6_X ǝ[B2kոr9w]-ڌlЃ V8c'*aCE .|85/pꓭ2/F juw[ { Y -M Put֨WY0UFop 2SlVZ7,@j: &rB /1= t2k6$B [ -Q50-# ^:H+47RdfB9M \ CI0V 7_N\,C[h>."P}aß i$\,!ҡ ='+mFxXZ= ľKBzԞ6r[lև&Vt1僞;0"C0hE:5|LNTEeivn1GPPֆ8 YlF?d[Dk,a05+ޒ*mAH9#*Qw6AA2 @kDϳMp'Ȫddi9G5ǭ&8Q,Y^;03דR#PydLC9rQ.N~ ªgrzEW5""饲^lh:g}bFFOKf_Ogo1J=WYȘ޾O~kpW*xguSuw`[=jDwDi[{mE5BŸS-璍1np|Vnp+n s3Q`chk]n ؍u;J4xeiYCh-AޕE^_1ɳN 8IP :78pnR!4(3Ĩ|~!4 /U%#I,9XK̇7`&"46D/ +Xf|Ğ;''Lڍv*;e3 :i/ne>&T{cz\-<_]$|;_`5[_t8#v4eA-^D%ZY&/YY(ƋﰜKPvO^AR/{%k| ꨨ2,`3u}@6w ~>D}q=nW)ȣFPObZpOu?AeurL>HhsF 7)oh.XL$i0?ScjwEZ߿?tjI++~e|~^ލ=Vy7fߐe-b' 3ۙR@^dydn虪~$<Ž~;[ \wc#" S'i2xPDY>zVSxxFrkWT긥OU2UIbA{ōj!4aoe1[(b^ d:w&+hAL^4UjnJ!en2/@m%Cfgz~ cѐ gZt(9)WF+__'ci֔ɼ}{3<2FfK)_J^ 'Ǧ_՚Q{}A%ՠJĜ%CIN֥j-@dN# jv#yJI^݄>/y,d`ؚϰ(&wZzЃ<9 g\QNl]=:eGcO&tѻSzY DC{f)J˟sTUلa Geڼ-^_J/u$zŘ>ߺg=RLpF|<5yt&A*w1NVɹ wF> ѪbOcY[fM6h7foSP֓{o7E"lA xSk~_K^|z5d߅Giyg,8s?O#zE .N I Vs!vcQGǖb}X?H ڙv`}`ġ_J\O¿v'gIpBD&nqY_3[#FYc$A !I{-k.mFdj^cKtד% :O}B;4f$M>WjZMP{+5?CԜjI5nƴ"~2`}/ tVJ=\ ZWs\27ܻ;o /NAgz lF?dFSE̓bMxkXvNޤd}R_ɓb1$4j D )TEE?ԑ.[o?1U=+Iz+Zd瑦8_D>NJEʱU4y_ya;Box=)'r^,;UW蝕'l LtsP$7ʷT[} %@Kn E&bkdş7w@VӇ>*&w;\bC4g/T|*|N1xb!u]JhDrVxYm"GH)=YB/Uv-.<)@:~Ok~l^~ӽ,zK#}uӗlm F"ԑ<yEP_d?Aqjs{ӥ"@7~^}>I-×=3b7ա׮ΘoAcQمXd3)9hJg ;-uX/DFSlNxGX$:/MH<>^B)bzxיr!Hc4]H=ʓuj~lw;si"m3E,f,iG0pij<^a =Z9$Y i9BX2~vm3G3YҐ}DgqQ#hts 97ЖŎJQWb|tMnyY%"t=SiGWES݉Ubd)Vub~uġ?'r6D8Hd+"S* ]6"k5ϝL-ܔ_wGo@qCɄjH 5'ӣTc5*^kNv2-1$M_nE"Yo/=gz&93`i)lre?Cb bF3Ecu49^Al!hȋj.ãWJ^]wb}w^;6E(+(X[=d֡`I3WfOh@'BLx*bDul=RBuh.t$/.wOmEV >stI #LQ=Af.};h9׫R;OdžojrHȓV}zsoWn'${b~6Fŏp&{6coMT.2py|kX]gy!uI<{fOGtԘǥ~M]w?&9J|AyFk'RBД櫮%f Pd^ՙ 810lCu98镕TcJ/m:->q}˝*gYxI}npS!D {׫ ﲡðLeUha./Fd_QLR=m*Ar)~Ο1E𭁂 :߶G,5 3 !L003&ɻjvRr-_BjRO=,Ek5>UQ#:d@?n_H"P~~mCʛs 'I#Nq->Pt$XFp[Gh`Az20W \BFO9W0oudC "|>,P$&2ά¾6)[n}=4^ߌ򛶑 3%0LWy~+6lzOByݞus`%b.]>Q!X `p;, C`1{u}z<ϣ&MR9 CL~+^S(;WAVWaҨ@ҳDTƀT{ƃ EǛ<~aɽs㰜S(:ދ1 k0Q::> jڠWlK3VMs )YwOeN-vx^r/qLJw@F^_sIo̲>22t~y];tTtb+aߝYMc{#.5 2ӼXf6K*Y3}y"_4G[&O+&YJN Ϲ/Mi1'T#P%sܲS+6,D((TVzk{l"ãF 3F; s(KֽVP瑠7)]]nqFdnHN-'mIf>>Yo I| Cr'CS]rnF}ϡ<|yVt3# !癫j:0nFK[29TݨK90^IhFhEX/S#7Ӱ[CTQbeCb]MvIU~oAhX33yg:݊l@!].;e쒇-xN_zZSx.JH׉Wk-66a5[Bv!4fx~)2b<,֝u@WM#ڍ8ҹ]ۡG7Nc'E϶,<{Qi%'}R(%>\Ք5Yh g*FVdht5$I kXD&R܍ԜOM"ԣFИ2AX*2I/줔 B 5!~fo₎$>YCy|PNe,(vu5<`)GDjuÙRj69WfeIPV7>GNm5@b;F|"[6Ca-f|k >E{ߪoQe4-hDg&:Od:ex{㑭n}̸bוXHF 5^0,|b1FtzOEL|.L:t#Vܨ+Yd5b7lP:tl syegqO (u>,08Gv@b?̦r#f,Y̝>Q4ܳ?'󛓱GՌލ*F+ l3T@ȁ.*^sGRmK&Njr bd٬ثU^*N)O .粍Cth*_ VnTkn=*B+όq)[1;wD +K8`_,Ȕ>蝷]xԖГi`*")?N6ct Tj7%B"{;bVpJ8}}W:~7DO͹Snt&@Jޝcz}CUH.&#%+/l )Yrۭ0uHiOn[$%T =2MC?WmԾ\;vD<]t_C~B ŁqU:U5Ie_|wƧաl)5+m5цBR_v%[xQ_Ծ^QгG@43J3v>vt_p*'a(wezD45&/ fWrk{Ig7*YJ~ ړ#wbsh6{| zFf҇[J&iE7^~:"zaVJJJj+~?tj@iJ;vM(O;,b%$ :C -Rl yzOfGvthA+\AZ%yGT#!ho'%dnvb񩺠rb-XJ:I*&5ECy g[ѧE9`1Y7{؝rH\>mD$\UNC;Z{ XI 9Xŗ,/~ݠPxYL9@Sͤ7oy ;Ԉ+1yq{mT?n U(CDLo$BuM«%sYeoA)_vtPG1_PZ_ϳQÉ5k il1B >XM%dC64sY!mኮfVOmpVYr8!{?jFZ 𒟛g|wAl6j><ðG^z:߂yDg('Wק=#R!ɸ6f z2J+y+. p~6JͲӣ"8}-cifQX56pqf¡FoUUFw={3M&Eoհ6ġuj ,ۚ6ɷ)pʔu#}#%C|:߁ F^$LyDyFRZ^^]h*IMnt-tdWd HNR0p\Wwis곥!Vo]b{x˴o (7ܥߥv&UU/O.v1Q%b3vO?ٵ<t.SM^UOFsgܨòNQFLM1|%?-ě5 h,k> Q =ջjZD,O8 b:3|5ZFxWX㬏)`7z|5m)y I-?|{g8 t{85h5m%і-|H[@𘎝^)%Sa>CXWv7zpV_?Ԉ`#pn<ՈhmMjWUd*<7nLȂ ,O!ۉ# (([S7ʙf #JPrQ39^/PQ#nV/,#rG1K`Lobٸhu?e/d"okh"JsQDJ5C.6̣PԓxJFWǧȆbŻ27ǼuժW.<Ѫ\ϋQVQkMi>.GܒnP0Wvzz_]q9Hty?OFftI <؇v<{ WM=c^ r_ki#4 X8^ EPE2Br[5ȆeEOK&'JqNު5 mMy>dS$â=NUujW&ڶ,' 1绽H|ѦU5T=тI坔j7"5lg*P#hj+|vDHj,EZp mk]h T 01٤ET#˙N'G{Ѣ|[v{Ư \'eXKQ?L07_;=u5O"F$pnRd36~QHO_3OeY^SFVlJj:U%u|!u|`АnV$a1+SN^\uCGMu~QAF~3ޏQ.YΔ{=v> *{>rHZaXO VB~ݸm4Ϙ ΤN jeD%i{^|uχF?tH@T)nlfw|^A]T?wfSC]ʭ~Kn:~A4U:9!ΚLP"Tmik[lQ{Íڍ9$z|`Si@LY^rvb{b) !OY /]Tk>W@M; /nW=iې4D[ޝnǝG ♧N.oUvG[caMJU a.wgUA2U[2E9#p``|n-\K yBwn&D"T3EGD}ir/^k< MSYE>Ȅ0@l !CAv}{@CE-iȍ:a\A C4RM!32 ~{lW7ʫ: ~NJNc8N3ܹ@msEYn>Xۈ-htQoI+0TVV~#ʚs0]v M7'A^NP,GT(gH0]KoJݖ=|#wR}]hwz˨}Ted&"}a0/W-oSpG DY#7iRY]eٽ.sNmB-A vz'2TJz\Ғg`>Av&cɐ36?{a:М!1{֔_ҝIґT}`\壶%ܜMvc+0GMI0G]SkibDž"h1,glD0-64A\[ Dg-#x:Y{@. ?ci)fW7luZW2Ƿ05_GY)2т:ŠwgD ɳop[G.1!q, QFN]Ie6{ċ{a051(p A&ɀ|wopS E,܈U˱@OCӹ_B#Cut#RahQn(*kqsD rK@ge*]!46U{C>8R s:{ w *7hr*KNVvۖ+esSE'pkqD QDYOZ@9_.>DŽ5O$Íw3F=S3bȬ1UMbl08V.GdDH d 6>ۮ 0Jg1P`CYS2C9Xvi;nS%D %1QVmTeO%28ʇ$w3~cuR#`zӜ/0BW/ +re h,gcf9f/1,^|ȍсPtdgϝ} 7fhʄtGa/܅4j`f\HœK;B SfhXG˯D0/:T-]x6%aDуfyCF_gNv=(2hb\g 6[D4n7X+U$geḳ)P'8Fx~V\Ųsɂ; '} P(DG_BYƃ ?>>* WndK-D9z|e?b Ĺk4r!@H3<1l}w\׸ )irZ9*=YB,U+QJw{>t"j4 !E"RpD]jj1ڌju{H e;#pk~bněY :\`5Ɖyl %xS(]*{];ɎjQ].U8a/td(!vLZtй%8}jZ 'sx4^w~Ţ|ܰxA!PcKs=o>iҸ?9dd[8Ԉh8-HAz5efiܢ,ǞQ1/Y㢨N_OE({o-8]>@:R_:Ԑ$YqebpLύ,g6 R$Z hn:c]Mv~978>Ijj{]jj`4S}9%^A!EyBĚm>h~P|UEtaR/@GDeZAHGmTt|)$%P#htE, zȦJIտwOAٱRP|u(#'G ~Ky[8tԱYD{|IݢDQM/6eF J@tI:mCM~.mI)lzz=j(|yrR޽;%կ`KQoi]~P !Jy:&e lQ?QH1TB{ FSw$o Q5ez]2P$AOԁOW2{@q[{FKP#V?KlxR eu1/j<9ѧ ?نU@3tHj {wkG(9{26TXkC{ |ЫEls;=$ WAIa/YA&FAOni4S/&`chYǟzmt(hRZɑLgE25FI2㹮VS4vY UJ;3J65r <‰::'{5Mʭp•㇣*tO@ GegS>IO`vN)B B̟#XTrP310벯_x¨WiFUjYi'θ|@A]=#$ |IG8N&rĺEH(/]+9- `4۶u 9CАroEI? 8.:[>}u=HLy)`)>rU^Tu q`~PЈi#B@Qkj{pq畯a85j0W(M_PY SvT{?ܨmԁ6ӥ}lCbvdm˧@mu#py뷱C#$vmXlz^=LG1[46";:ԘJ[y{I>+B^WI S ט*$+bZ~|Ҹ(l᫡'!{v2YD16iu kJ"ލ A4Fy *JRE,m*VV|#N'YN<:=],(xܳ,̑-!S/gXa6jAyKVi4˦OQbPru)\&ơA>6l]6j1e6s3KX"fŵnݑq(R@b e82_ofEl\^$]{UErAkw6hq~ ٬<ʁ-5-g񗨝rVc(+G?OzƩ2DjK. G\9IMP%7mwQ[˪ݤN7K^<|vZ( ߲wIR=}āV8i%+lڡa h\9>^E v3r',tN d*f0Zn|^fҳ_(G$d[]MИJɷk!)rcGcA%bQOF#lqR=.h/6T Oמ= zRc^ۇN)*Sx*}(] θS.֜OBл?:3d7IY_=VJ$¥\O7ۃIu"H)!hsQU话SYNh4V|!cߛRv5a r k/YOzFWɑX OQc0ZZUyg*p XZ%ɒv٘# 񚱦 w>=h~iUWI)}P7NJdU*`+.z8&%v]^Џ0#Eg"R_WґtD@O{!vB4IN)MvQ @",Ǥ͋\ʫs)Y2S _4GLM7~<ƬFZ' |X]CLt3uwSMb1L*/Ie8(3Zhғo147 5^=t‚q&ς:Խ:Ifl%+.Ox!>Wh m wꛚ9U?Wפ@"㰣hA̚9[p U,l>Pe]b{dnQ'VQ''T$){d"P)XvK_HkI~EG?Z>ΐ+ɆtfzUMjvU"m  GndeTX++B~& PRbg;U!{)!b}W2hPꏱ'M%>m*B~vo|6UJO3&&_=! FSnɉLJϕE (ԓ}+FpyFF|NNy ^Dԇq& ӬkIɑG57o8d,L"qܩ eJbrJ*|&yߏ(EPPގ#8۹fyێ+9"~Ô~ [Ĭ뷐V׎6A\~Bχq{).F2 ڿGٯGD$B~}:2S4KvASU$^Գ/uKphBHOHvw V9^O߆;~y\d C=6?"y`4ځ%"ўX> |ZAܟ,o>V۩HtFtGD7}#I&8B "]W%/l%:m ]d^ 5y!؝9E/(RSh趹YHޡl eJ('?{}ꊙrٗԝ Y#͏e/<9eS*Ϡ60@J: LPMa_:*3 AmT}*<>I{"5^-D6'Yק9$ ȝwlaȦc!k,5@Fc iF .ŜlhZO|pҺA8t* JGfo Ib<uBJ{E =OIk9{.KR_-VDCX h05&ƻ߼,i~sԽfRfn`-+ @ӎSۓ,E)IHor0(71AA%lFmH2-|Uz67Rć)L G>e|H4֦aYW7V="cM~I~60xIytoc6R/WOUUMDžAc}1yHh2Kj*'n%yбVou U̓c`m[^QU0: $Ae2BC9ȶWMREӳGDc,\ov1k(&KvAY\㇣O m[EJ3[st;WHj%O=~cI*yS{}O+tT%΁hu` ;&gˑbaء_ ^/u:zR377ä8qMɋ Q]iAr 1G'Sɨ=)`5bCS_+$nE7 ?1GD(*wt&=ӅUOH~l?tE3>)찟#XU zNYmb?_465y>(q$Uh[hܚMo@x!Rn׆~563!ǽ)SwBrVBX3쌬j-Дꞽ<.@b7Uבs&֧7y"!tdU)H]r5r=3[.bBUTrtȎ}Bb-+7n;(J_x*SHQ$4vXFjwk]C' Ǟ&vjYj|)mP!ݛ盦{%.&le7jYo "pV" y'E+,8r+9o*m;_ANsKp$ǀy||M ଵ{ޫ6̡FШ"̾3ϓb[ep ܎Wux p k(RR~,r'6I!~ܴAs)t#Rў6-V:'[W clZȘl4nT9dՑ\sݛa~9JOnZ׀)k5;%%i[k\;!C[XdpDqqjMvZLl*\ sj)HKby`τ^iɇ 7${2 i @MuМ!jև2,@SV:б\A E7ՀI}` 9=5Qz+2 xZyJl1w(ShLL(ex,ԣ.n,'e\Ժ.7< sw˷rڈq|3_HGhrug#2ڎ:NŖ=wQRX"NݗJy+G,=ZLOmQ8.'wܸ9_r~u3!o}@ѿɵ%&ڻm@߸Q mx<ʹa(ROdnA~$,LNZ&u w#Bw}m; $+ DmOMҭ 6VeɅOX64/X *؏Y!z-GT_P"N׉*QiIĔ]|?U}a76EhG~b–F}`8:[ĈъP:1 3R8t5Oll׃@hG7Rl %N>!m4DC^Fn2m6T`ŬaSC³}I 3'ߔ BT3IPh8ia-UW<# x#U`TvmsyNOX_RC% |8ia!Qa>JZMLP%> SE: QZ*)\N)"iyBslY-mLO챶;q*}&ݕĉnuߤ" x}{2~p*~4&A7'ϩB̪׽"4^^;)ʽ^4?ףּ:Mƥ H$y*{>{R"mNdSi+IUڍ͢:\@c +Z>};Mz՚:^#6ΕwJ+lYrF*F4R֏G|7(lَ7KG.2DKf1= |{!mz6ƞt[7Bb!5FӰUnҬjVɫB%D'Mδg/5g?4tUc(JEY9oޓ@۲Q@7{f.hڂ[Q:shxWx5>'/Riԗ4q0Hi&Q!n_+M'>/Yd iKnպPejSOMDc ~O1MmBA#^j(=~~H?nz_r:m=KB[L;ϩ(2A }sj=""jDs:xȑq0\5VF!AKH7FrP`UѼ<)Fr-I M_.S2e $\\jLX'2?4˄G-;eaġcjhAD =2̒ZIjE?)R(j 3J˜5bZK\΢4wTFN(Fot<`zM^۽Κ~(b J \XZ8|Jm!$>#m^k%+vC,9-NM / /_ILHɳ '^"Gdz[?4#VU7h[rhFYG4/l! 2d<==&jV\U js {Jr#5oҽJgΜ%,pѮu9zr֫^tBD1h6PFDž!HQ^]lGI MBUR"HtN^zݤ=[Hr'vo7Is@c]vs$e} ly[̉ ʝba,!)qBմg<]d1!PoZ>T#MyWSС=ؑX[OA{aQ_DJNǺ](u^7u;ELW^^|?.6`uhC ~g`򴴫!-Ef֭X!S?處vozGF}ǐW^+Y/ TΤG{u!4OՉ=܂^;زzDg3[Wr}+P# ( D+A[^q_[#/j!x,x.%eblE%miZ7x%ʏqp0('#lǎFqeEK-:|ߖyjyAﳽʅg~_C'dm5rOjq`Z,ևTr"xdNkad?[H͌ W2cK dh`+Wqij^іir@~b;~@ziY=ޫ,!cJ=YM}Վ6I*bL0|H  F7ڕM(=xVH2S`<".ɿm> 2XhvE~2[H=l/ef.7Գnٍ,KO޿}/E]{auMiAM:ە,7ِoi-<`:4w# hy rK: c*b8 ^Y2kԅPzݨ7iY.sfMs鋣@hkyZY獘 ¢F()>Flw;װ׈o9r3N.ya=ВՍf]2ebF#[2PȖFXC"U6~ PRf @ u㞷 fSV6wa;"kmޡ4OЩ4?,G}cK̕8;Y9~(mI+nWF}6V^| W|N'j?z#@hg|fgnt &)4_Q֝L! L^e}~,'sؑ,(z3XC:5%[\%nvJ>:ݗm,~0@K!۶G{?Bt۬e a'? NИșJѥ.[#kCZ| ?vI5F9՟גL[E# M:_֐Wa_D˗7A UzT 2X/yC~[SCW_A6M 0nT^uV\oآCoV)ڣC[=Z95C7|\+ב3RZIoXV6>.*ipNg Nc!LiK'~NϥkBw-:$]e(1< $p`Se?f~6E Mκӝ*+ipD6j7b/N1~.S|k}VI8vts>TǦ6g|:cKi@ç-ы>?w-?| ~g7(74cЭ჏윯p4*/Q.xA {3Ki}F׍˜j3-^96|Ck󨾳dm3FAhYl"1 l !0TI/}]D敥r&FY\I,J|V]~C3xD.=@:*+ݏJdΙqY슕_tg'4D& 5W%o+ Kx]Gѹ q鎷 D=@je:B=Q Pph)(qoi=o={jOEh |z;/_[0Vף*/kCWJ+@ ޅ(,Cİ i=ONwE'/]22q~Dݝ4EC-^5@Z<=j!+X{)Dnix ut%"sKgU7FPWxd Aȉ^kdq'z/zͿc 5X$hGID;o;MOKDAR`|nVA݂lMA܅{5>Ԧ-`Zs -S{aq6TvqE'6H1-J1zͶ6˶7i_ӋQUp rs#Zp:P.A$qutE z/!QG];6`qܧxKM.UͲɘҡ^Ll~{Wbϒ;5 9O >MU.$r+ˎ.3"=1y@~;.?Jv~1!k{"'P9gm79/[% aP;=3ϯ5~ݨ7Zʱ QpC3RU$6R !Rx)ue i!jP/q<&+F(呺ԼBˬxX_v#&3o7z?FJ sUh~L!|+閼6WYN(]3\0H&5Vv)ݗ̴/Z*BBvhoKitAPZ /Jl[%Au]yLbu)]1"gs }٨s_=*6`Jyξp`W{7D[?R)$n Fn1ϪT,AM*Q:K]T.jfW?7A9tdw_;-w.I3t`?q<9/qqrͧܽxDڮ׳)ܨl3DŽl)W9߃l2vwGOi/7*=:XtPJ{/-¿ȣz,S*˔ .3N\K=2Q-{OY *wgܧc`y)s"Bs*9S~/qR)RƉO{ޓ\I`iTB"On$XAoA RެPc ؾWٿ5ΛTDT]= c0[6==_a[PC^`pQx5)E45KgS蟙iԊw~iN]̤mC~`KtBD۾H:BS EK"tRcVaVQcfCW 4[)ρ-7{K`g )ǼsOߖm! oe׷)0F.Y>yy+Hx3+uXf>ndfr.\s>{VudxH#R̄ybP\=D_8.FĞ[ɉvӚÿ.ݳ[)}x!Fu\Bn<'iOĉՑ\"~f'p➃4JYKH4Xaד`Qhk1 Y$0I^+ҖV+5Za6p:jzCˊ6% 52Sod׃ZVg 4"%kN;ґ"9ݍrqH,]y{8ZßҏECHR(暷wO~,ݨ`YzHWLe (Lu=N| ahtu)k#GAdW"q,}F~IsF0H}h(JnFΠ:ʛYM9f :{Q@r`bC|7/A+*ɱc3wG*1vK^,{aگ/.HA8>`k`z9O/}!{$.=lYxQny?n>ؠFƳS|F,q󤋟DT_TW!-1QQF;{}^(RWǏKf@Б J]a}җ5d-VmLke;ֳ5wOwC" +FwaU/A]gܖ7M8'kXrUkjbxә h"*b,9 kַy[iaW-#fX=8FA)U抏_%4 T_|8|E7fa'̬N{ܥ??  SU2rC`ۯ]? H,- &SnW1E0ck^#i_!34ͻy]:dE_iIehrzgpQe5*|85WMN=@grSt1I_b.Ӭdʻ KZb# *Pj=w9(jY)C:kֳd~ե@퓛<;-Y]))FSG\.cy"F`{tS)Il6完}>1JYnk}sI̢]|$@݀>_)]~a#c͏^wR9e8S-N|N~nyK_pijktHD:=i~\!ݴe痥>p7Usr5q/J{v#L/ُMsW"9$eɌ`/8!^J){ffKy律]<}19qZ~1O1tF Tcx.u$rOްO:jX]eyZ;2KOu\Jm̺ DJ]Qgnϗm[߇ Q}~8-OfŹ)cܛs8J^dk9cqVRVY$F؉Z$fr?p:Щ(kC uL ѴC͜_0nvUC>H~,%u VN6Wx61aU[|Xbl=VN~ڐ!/ˍQ~(Pg*S>2F_"E}Ji)ȶ &S>h*dIgdʘsd9~N_"`[xY}&YQh=vGެ!{Wob3\pXN6mM{mCBDT5Ű YH]y!#'Z ':€,OzOo}$x?&hT'_ f^`Ҽㆽ`ُ5W5Lq۷m'?֑%kiE#TEM7&;3In٠ pDH0yOD$]|)FAO;"ʖuao Ftb(Sc{XURJ٨=iNʏu>>c( }9ni>[uRިjoJ hZ֠h8_#QuQS ,}Uf6 "?QG6c[] XMlv>j^dD7w}t>Ny5K$鶪Vu3!xfC̫]XDdqnt͟qv(3P-yQKR_40Ba&nfŷJiZ=?UO/klEk Y41a0`=khkEzshkWfF$vy0{7P<)Zr[;.%\kVܽMpG>xGē$ټ+"QgbTYpTV{e?~ e@U,^-+&wدSsYCC3FR) A:aqy@.$yKsєZ>| 􇕀~D\xԞ!]n 242TGح4hB< Q=9c"G]d׬XюyjV8Q(-.؍hI+;F #R:iv|.؍t9S޷mJSGV>.`ҜB#zc a@|{I\rwé, ٌ5_Zdp~c ZÚӕVZz~&ٔD}U5Gkqe كI&쥹65& !8Jq=X6^;ɚDb08}-3 q4I#XKM;69- L1K(Ǐ&]]MU6\i;mSLt@@N-]i8wBu-j"]#b}T#Z:dύ:d/W*u d,=ӀN?/nT i/ZxfwIӉM eA &**}~/YKV]S*҂``S%yMIF!/q,U3-ZB,zu7vg[مJT5*W߿[MV%qH?{gX8 hf^jRi0Nr`)%G0\f f~n&fyn,|GzwF{'neNjiB]SW]^wk?W#usk,uV:iAL5f/Wi^{|_A`24 43~|{NXr` كm ?XmXC~3@*BG| _= H`}ݷ먜s U55_Ydu @;tFPS6+[ͱ;)PNbwZoԿE>!47=]7FaU3$6ʒ]V3{Esj0Kj~n ѕP>t%zHiAx`cE>È6U9Vxs(u∱Ϯ]muxwnܛF1 z H]m qQ ҫ7\}f{[ya{ХQs Un܇9+tb{^p yYǽ?src>F6hyV%F}np$VKaL ()5':SV]EH[%JI#UMn39"9H[< ܏8u,9l)CŌ6J#',;^7+%sA`Ҷl9(Ǔ3U*ֿ0W?ZbXC`x-(d#iI;%MknJٽyh{N"Jqd/GW^'n>]1Fp{&)1Ipo%8G˳;N%{RɏGl/_N}v`쐽~M^8-xCTygśVXG(ˬ%ZH}[5K?[qg!N5bǟHWr.eV "⒐{_ڠm75"~ލud^i?&rxv}2mcgG4s?v hҼf^:6>=hI͍=}8ѧrxc~+d3vp{Ș/MD>Ǧ8ɤF"oX'@(c2% |kl3{UMa8f/{С˲>L{(,z"wS)?KMZmV7gD\|iYL_L?% aiͺWuj@L:9\Z"R]I;>;袻IkUVioaAZV|r3J̛Y1v' $Q*dja;a=2hӢr=%ЖU[Մ" Qi/իl5I[CBg/ wMSBY8ls Һ5XRAw:rүns7gn!6דpke`bkY/vfH.ִJ;.m|LalF[~-{:%A@}>ٗUiuY +^Ϣν i֥bLi8\ OsF-Pj͂=!Lb-:|}AEQ{ך>Ou͊V.g#0 3 mTbdZ 8^쫭ڟs+3-͠ )ooZyy*nYޛ>Lق/hɴm7WJNhOyijU`Qkxݨjak[l흣k,qj8ӿ&,̫GLOUzW=qAT lPt:u3/jSKȕ R: )F%iUzxvYͷ ۃ\-M|/{j_-07{yQʤ)8 #ݾwˉ=O _KL|@Ar,ݛ"?u:X(ZhB^!ф=jOCAZ jc\"bWi] Hs8 >ύBSj+mF0ооS{@Wf#&mlTG}xar{բsCG(48h73r9ǜ!4r )}WCiR=搟w:`"QFF݉j$ 3[ۺԁ{yJʧ'=[u`jyQ'JVJɫ)Đ[{٪(*4W P-DjVР4ꆗkVF؃\x-y D]m!wkYlފ]nCeuv$r"]/FWZcL9KQ bvMM1GTĠVau/! 5d S}ˡH:v@jd|+h>t?=0wڮ҃ Ў kvvދvh +#Sa(XIT"~rU~rzQ#rOu*vlޱէwI^HV9cJ/*'$#pwNe?a1]6q#vCEY~9|Bx! ˭~¿s|llfY@{0Ŝ&c_0K6,!s#E|ڃЃUu:M '.nJRBCosOy7BYL^mYNܥ^Kr .ju%חE_we;ݭ2"D|S 7zΗ%AɊ "aQmt:!BP7Y jĦZ@jCp!͒l+pnݵbWPRGcN1X2ZPAf.2AS"vX4j/"23ڪiG,fnXǙu%J̤vim-iL K*Fj*(nLzT7*bhrЩӜhҏY]%qM4K%aمA*ą߼-Od (msTX { Q۝}~/:%)t  kPNQt=S7آկ1*WSك1]a ?5n ƙlZdg۾(J` 3?-@FmCw">ӂiN:tM ۺ_|Sl?{ܪm "`Q[4U7-dKG;w]Vn>q|[MTD؃&]~&'L(YK)UukN,eU4LX<(Y>RI oԮy("s yCC p FMV2r.t!@0PczDW'dpk76T*eDU^ZTCYF%6_ݦ6{R\c'Un2:L{ӣvlb,>=n2KڥFDM[7AK'V5m>G|}١j؁G hI~~!Cݫ(!e,^B8{"^YR:xLѣ {rfKN&JG+OH$ثoju}YМj{Lsދ%}_)p}fRr@^ܫE?%(㊣m;d%*/ĺy!Ɵ߉ j:tpU(1U{"_{`n+ͱ6bgbA{@^:HrA3fJi`!^{ZdZD{m@}5O;"0.ñ=(e Z#2ō$'yG¶z W~xu KkO-|}TN @_l;CGc뻌8ŠI6Bkk}/TVGۚ U14Icn?&6FjD;+"?hyLbPsmb~T/- ZLT}[(2MBA1\ݣ8J&Cz-3qRCt?hzOjRTXG{h-C l8`:ϰCU 쎭7j..=ƼٗVdxywssʟi[&A{-r5 U۾}7#Ȇ]ձ!ܨ4Ѝ*Tm?>߫ Q[5yTk_6z ,b(1$9( I1#Z԰~KY`s<=$WKknU!ܩ=+^|n2BiUNb0PG4ʥņYEdϳ:*荗$AMr&J 4&&9G$o_E+؟$MjȓS\-n<;UNNymďX}.!F O1XC M++&VU nTȌNNY?uS̗@JfWD9 aW]MA/nԐrvҲ۵I$/W_sYCj^Q!G#yskk"}CL9QٝAM`dovڇ#pYFG@u[6;ŨNϗ5׹:jvMT 34՚qtg~s39pjfцB693`JhĈ3Ng3KcĶ]~X:դc+߉ "ZUG Wy/ {Eryp%Hx=Z Ei(U"Qd#8gڻeo(I奭}OBnbV]fѤU)`:K 'rx$S٠n_A 9=f/x;=ՠہh{[oR9 պ>j_nsΗ'6) NE/m %7Sh%ʋ=NCK` W FDm&?b>IZ{ݪkjґ[M~m oS/Z =y6Y'_G!z ɍRƅVviR w8=[@6d_1މ(ǺnXJ^XT/k l c~nu8R_>u L*?wOCXe7uύ2\1b-&uOqj8@`QvX( >&o;WgRI-Oi{Bx\7NnZZm/EQ{Ixwk~KOTQGDt3Rhݸs6h2qubjPUs2knf##'zaisj( ][tO5'> vZ +#|)?3-1g0tǦ(N.~DݛO>[B#Ugl Nlb֛8ZtA28X _| dA D^W(-?.PҼ +;#CBAP`egP>|Q5@WG&t>~#1؆^B C8>?Yܤ3μL>ϕ}Z~Ҏ0$e%_eJshJ:^\ffSP2XFv LGt.rH¨lew~QelJk£nJ|SENTTl}4*?w1)ha,>H8 B0ԃeqϟ_6rd[ E{0J?I4xZGkgAͤZq.Wj@ٚ?a'.я^M%$KV]&4%F+khh“Ǫ,{Ĕ$rBكa5tmO*O:ٌG@ȃvnwnǔJ a*d7`W?S V^x3zh!?.<":مqU=?J`W;ִFOǞ^ l{Ķayy* }Ͻw65xy<k9IpN@=mvNY֜pei>f|DŖ3%PȠ>rQ"wB,Gч0$%;bR:F=6R0f}QrXE{l@4S }}=hU/?N;:ч=poB>}֌^_;NNi4n]fwE?,q AD75g,bU<{1j2gFG;sNtZ-ޮ:rիB.?`0`+x@l@"͛S~!7Ӈ]:}z̬O5Z4Ҙ؅؀{SSoyA Y߅$F+z)qcĀs5_Z:[}E: L;"( qfmqlwAEtliӹ'_i^|e'l jㆶ +"ZlUpFgcP ǴM-g?0X[oCB,Ѣ*e)3-s>A$h&V11hA;8UAlm;{ыAme1m ap#PgٟS]uqÔi%2FOŚ*w]`WOqu/^S"9W9Yo 浿PuWF?{-ݮGvGz=B0 aқԆ¡uf gIgEoΡlYsd*wy|XGpJx @{;-Ѐr {zlbɕjϬٰ3l劓XT/Ns) @_7ǒxIZ(.ڵ_S4YUH%iuWk郖zmhEh@({J<1%A3dyR4*"(Dq.3o|)UD$8seAKM\66aHb1F=vvݏ߉5D{rή4@kh Ɵ;]&F9Mi9!̮Z5iL*#8TNj4n.Xgl$,z|< zQS4i:W"ٹj<~k€[Yfۗ霽~o&P ?.vEexzPtۿ/q qօEF|'|Q q{*=<2:8w 3E\8޿WMTB5AۑL{Q=RdW67铖]#X;JJyx.#Vcsi] яai׼ٍE}Ēy;N+nc],ύO2!/Cet^teg/CC+ g "lꞚŀ:|%OQ糯mf^-ֽgۑvVn!><) 1T:DՅشHS]lӺl/zؠv@!*x ^v!RhGy|4A5m٧u{eՋ&nCCv^pSVR]]` O2`z+ W;@qv{X ZHs"lGdg~;TJd4>cH \jߎvl/[O4-\ڑtQ!F9ҎŏigOϴAC x2xĞ;= ~RBv)-?HioJpB HD_^ DRgm203@3lM 151@{ 5lY6@Z7<$eQʉl]kQIGlK& T8}z,( ;KOzsdӐV\,Co,1~xcfqX01jZܺ]<^ޱ9BzΔYfHۮQ'xdOeeM=j<ᾚjY:PCwWdM$FыG[ub6xIym:*ZJ?[ _,rEZ:ǵttúuy^v,.1aO='tSb\;,|XK+Vgc"+F`(d*>a0Ȣr Qb@[~|͊V{^~F>s_1bJR9"|)k%My =PpERPTK(\|"]4z`ڐ3s%`@,1+GhN'l WQ8"fbyOݵ[O!_jXRzfUiH#HcY%FCģ@(& eG۾+|1+N_i۴nR?%] eQNmA='8OG5x'VFx<-;(}i zȟivJ.B%w>Ϳ,vwR7ic7>)".$ {b# 2vQ8҄򯤫竫.}YPc0wï{5M=!R۾ y`lטDIs8+eF۪®g/*=8%MFeY>ΒqLS 蝧n M( *UW@[eKW~Wl 6njF6r*VF4NydM!;FX{iu 5$d_v~SAYSn{ݕs?hN2hZV' t<'eVrx~#林>󶂐4qy+3럅/ TBj.QO9A5҄8aW8YtnWf,q":dVtG%tnLASh Sd M%揊<Z.7e BGmVo%f37i6}ǁhMH %u6[漗YS5 C%kJVʐ:-3? Xԗ>F;ՁP2˕T>]M@5f1O@ʤjH"HvF稜Euմ#Ja'*,\Σbw;U)iOݍ|ԨjEv{ӫU\E=JfUѨD/o&7xCN+X&cCh5j1cOME)2j*kr﨓`s~eF2mvh'R/seZ&ȍDž&=qHWOMCi8jMJV&?>+;:_Q" o&?WDA'G>n,n +rNnNBƍ VyW\cY6#쭍 gEnH0uyQ#65 ˚|]`-shOmU#z$E Xf_Ϗ{A=f+[:ZgQ-0^q[(Y[J%eS3,bF5o6gpM2Y+~3kr~X.y]Qc"Z@a!bc+/P^8U)"#C̨#OTy!o"?y(߫ЭZU/T:){F`QtgT'ѯuAh.X܌ZQk=5օXQ ܣrSzd*P}cze!h微D0 2G.a߁ qB BH%8"8E]Rw' _5{75%>}[ބ,"m^"ᆮ1j~_wm|hL婻}YN{(dtǻ\c%O% wsҿ7[9+ח%@]QJ}| sghu X1YFVI-DUjTߖpν02vtu`+)$j;rkWBlJi!wZ9<-DhNJPuQG Y_3n{ݝcH*AI[-`uNOťuS4sai5B? Gj*Ccz\!P;UCxg@s(j{ЏX'WvۡjAnQ٬ J-:dwS [>Yj|WJG<$$M+A@X-Z^C O$9b}{9,="aulUa(]Ș{T""?Ch>Ƴʻi1h</jV a0Ѷ֥̈)cȝzyy Nȭ|/o"h;h%L޿8Fu&%]nТ_U>P2Kv泆_ Mfh%2:yTDXUey7j3C` Q2 GA+ڔ>t5ڴ yoܕj>h-OvL/KR2j!`gbnUzYGFw~f{wP}nv}GuO/ B"lݣ[ =AdI!4EКQ>4_f$] 3 ve 4#TQtҭ-% yì!`t5gsX\ .&:6ERGakf: +o>Qa7Tku AoĘިXw\gk>)U٠+t* A6 i  _F,GiVltU46&beVJ@y_hD~P%V% s ?9 V>n?|P#MN w'Do% \4z# ,eIef`Ũ?.X:g=)FQA;6?G9`?_1V*'~|gY{=Ph= [~QN Lj0%; ^l4XOEen+( p7 îzja)y_|/QüO= Q#(pÎ"-O/[Gտ; ߡ!ŰXJw( rʑx)^94Z<~xX~En֕ڻw6 []ٚcK¾vPlfѭUXLv[ FuM빥lnFT`u G[)>GJ@&t3fϏ%3wc9hXzI+2EN.t~XۜQ]gź?Fp;V('@٭ZK \D 5ݹ&AnBmzcȕŦkJ%^13\3 jD Z1)ut i^+7 zgɡLcȬ 0q4tC; V%)mɔjlг[;G;;P۞*C{0UJ,.yc:q5D]`OPRrLV(qW;^;$tSSKq ڥabmyX\%|~#%[CȑSv .5ZI-ѣ;x>rhJm m3}}VMd9NMۊmBʩT }ҏ#(]U]L3 dK Dd b:#;6/6r"*ډueMj*7;a%:o& njUoŐ:2@WZxbv gaܽKCPk9n F i. t`7Hb3, ;$`(e d]Y!;ѫiG2O^!AsJzAOׁvD-gkB<gI+Iu ]Bwa`Lc)h*Q૥A,˕Olh6hwbH~k2%wx8K-3>H'@lnufKebbtO׈*vF% u ށ;rU\%QK)t h0Kz#DZXN:yj# __:|jqa;%T< zE-O^Fչ. h!< qC}@`BiE>bl ]cQibݟdI ldž,DD_&t lLDWkIJ4h8^(y%7Q$S}5) QngbSIJxߞA,|?d( A$F2g}7i7uܯ)[A; @_Mسt}Ûx~^֌ޕjL?0A?#'Ln0)Qj.ӢjGo$N+]lw>ϵzZaZd6J(Qm/͖5IR<Fgà  UD#b&U^$yRNtʕz d#Osov#2XzssD(Y=@C]ODZ.m{zC'UͼM/mrb{u|YYI7.jӔUXPoEi! :R]KIsh/SkZ4;-ݓq2!t=s(Z8z@vOѩ I@kkxf'ep\)>◲`B55GI:]FG L D7F 7Ohw2,| 6UOݼMo =&= Eҽ5QC eݳEI(^28UhgZ=v30X2o|`[sn2S@Bt%lM;<'CXfzy;h]^oGk׀:},>ΓPAUKU=4!T^61䇼8T>wDd}lV &p!bH:y dI0 u`xIemMOYyf'чu_sGRs72o %=/uP6 Hܒ}(.Ba!}je^?K+"cXj%vȋY͝"1y/O=魢!tKne}>l $d{z '')'yo]r0tmyf|te>|[b/51kT^ym>#9ZGK-fzbw~xжH&F9Jaأ.`&>D|^q՚o3tڵ?QbZ7/Rg|:@ j!Y A6uk?Hq~67NQ|m3d>cuZڑl {g$3o=&;73z>CM}c޾A \=nP#ϰ3X>qt_ѓ'i_4YepplPg-::;E5 -;[9qZ|eOkGW_MS9|~~kN5E%6vvP:{ ;Ń"0ԥgڶ&ftW'"ò3jYɾ B}|CUl3)ӿ7PvWE;!hd>tOP5hߒzϫu>;݃R B4+Yd3ǙC i_fkqAgz$till6Ի\B;o#EQ٠\ܿ]ﯱR=[nZsݿZMyIUjm9j#i}쬦Qie:')T,TӎԻXG:d6 3r;QD)X6A)'UH`0\%-1ڦsȺA8R6gN~T C?z]8<4=EFH`\ |tٵK.1|Rf P7% 9d^Zξެg \2~}kͭmq[lv;S礤ZG]-b<9W30ly}z9ѽezfk'*L']r5WLzLB\p覼:2\{6b!YLﲾE/-Fkϵ :b3 UbEM4*_> Szc_֙sѷwTYv+TTK9 ucgS_)EW@dZ$6/=Z ]RWά*Et:J2G/߫Ye$\^xx5(^30zNPrϤ؋C5P&s}BM.xuX‹0!lj.vG\s@Ec9\4"Efu~8ti117,Ia>?xP $#P{.迪,#'0 8eXAyI-^ 8Jڳo沜Jb,qj ƾ^DW~0"_ؾ1ysg^شgq4}̹9.k-s 1҉|Vg!h@cgNH|˴  !se7K]K eμ!G4V.VB'Yzs٫;qzd}\ M.9}:ܝS~븺8^uݹbdv2xx;P󜔫#aĈlLh>BT"ldm6ފk +%M&X} |ً"V U#'6t=8dyONĴɛ@t͵е[ma;_U.Tu%8`9"E Muhi> A{tad bqdK CoqC"NbA䗳J)7@`bGCZy~`cҕݢ["j/jly,/Y<G"EasxR/hQ-dTX0]'B6ѕAHq74ªqP]e|nrZF-)P"u2(NN> IzkP-Ct'jVZ:3(h?T ꋍ ~Oh=l$jr"dILNM|X"AXTNl~ӱqwh&&N$weiQ^8Zn3-;1ڶT Cw"`ŴPMyy JifZr~ךR]ZDƮGZ%l#5wb8gدV"lp#a AO@ b&;8d[ EX5cZ|LM|%Uu=oUֹ@d`iWe7Of dJi0۷ b4+k#TSײk2t|p *$j'I1[eZwnD{U uwܙ4)8]r6t)pٮf.d! +&AW}t' )Om6,YK[qf/$,=~c4QC ΞTFXQ#_{zQYsx&ЯK@>Q: b h`VX ;MtZZSam pE|fƐKAGsvٙkVd Ld E3s*l,mv.z4L$𑍱Oaھ.SAp0CQ+J>Ўp\-.bq}%'b9d]j Aʐ '6׊ؘՖwC{ 鿑i$Pi3)Q| 9f-zȗm;׍=ZFOJ2rmk%4 ?؀/z\*;HV!r2$ N"g 2!_;n|ŀZ㈳mόݛ~\] %7Th^:ъ7p1k"џOK80r;9., #Ibt5\BPqa Ͳ½[r6 &oYwéjQ^𐓂Y|ɐ=Y@5٬ra[N@ƕB8-^~ "g_%` pW $`Ҿ d_!r_+=4n+&0ѨhU(Mv*Y '+*dЧ#TuFQ m1Ƶd!$gP) %4rV*܎2@\t=` p3/PWiBZ6òAczsa۠<ϵ߱`a<5gj[ 7AA8|0>iZ⛃k`[z!ZKAE1j52 TI}XB470,3_&a Ԣdp2q2/21Fx5H@' 9oVnP^ LF L-'T]A {n$8ƥX(LW_)lz.SpdՃ@9@vMW .[Q`V.X=z$y,9 ۔ipn*s80eb1f 06D"H727HW| '#uA [dAnmk9[]tfh>@:LA)bjZ8t%x%nvui8SJKbU ZPmB֧"km1@7$-PoM`wA}YD<2.lfi H-GFm6Yㄌh5U hPE+ldOP  N1D5oɊ˾@G1id] 0ϴպEP?IM@ûj+\٠{7 c٫֡*1 &.jʩڡ1XJBv3Moak\&T'?sj5/T CW211m ` QpP9ߺx|fdAHJ=ۆg 2ON~NT|Sˮm[35'\ kRÃL®K|CĮ;t:;Nuܬ#L̲:&sf|;=޲ ++эEmY]1\Y"N,8h%d;%~.`܆}A-I BXB|)ʞ{cv&U$dI $ c bd)8|dE- 9?dCѹ'nل5ӻY!00 k8202q\GO\A dRYbo^&L{s0|`lI]_k+q? kۮRYW%FfťG6RWnb zW\Q5vO*7Ud[ EgKqk6]h"pϓiPG 㖪XϾ>z;2-U=TlZ{8 \[O`bUAm!DK-"`!=Z BE_T400$~N.Fh\ESףfpiГ]QxMr Bu0Sen.'%F {!|ۧ7_"S^$ܷG+b *3pv JB8#36_ COu_d$ Zڦ& '["fO/BiljwlMo #Kï}D,s/5KEUP'tw99՘=4JĂ}qd?<:1K EFVTD3աeawvyv8kF.zm::/w4dE+;-k2p -6d۲ FhϘfqJa;H[ĴpH!4 iUtLCdzxݸPљIe}.0Zѹ>c1cqicAْ?T/V|V_A!TfSP]8ÛH+Gb&B?:H׎L;tAaCUos GTva< Xƒ8aL&JO ZIx.h-ZYM 5?l3%v+f/K[өsFn+(>d[O_t<!^XPO4lzFN $*1[v5"ie/ @~ūhF'Fr7z{P-i0n/U]SdM Fo7oqZH'=LhC6hA{!XG@ _6l7%Qebu!E^[ٺ qlPTS\msS`"N.1U˨̞t~?~f;K  MqT9%E> ϫj/͵2{ I@a{3F]65us~"Ǯ .2>JwV_& w#$T t OE#23`/wRh'o[D1w>u jCsq&_/Gؤy? ak36kOꈂA4]&5B f談"E_$jl;Xy)՞6(~?Ѥ}) o0}̖4;_uGnYȩ̺U8-Baq&qIg!<`|9LH#3Ceܠc`CK6"Cnj/2_ c,îPkP` (cB酭761D dA ,S3%`_M*!$/]14z摳#`G_(ȵp#vC-_CȿjGގ(6Ç{mUŽŦ:a$]=v/0[dEӳ<.=+I+.L:.'V/{E8i\x|h t˨C)>z3o "=dʖ?:"Ú% ,4}C4$ΥXFEqS2;d~Vt) H}y-~ ۜ}2J>Ǹ ^t<|^n t_chl'Ff̌|:=k ѱ3D|_+Y^ 4Sq<\v jU^ւr9G9rA:d7J6zW5wVhDU)뾡q+e׵ЎZ8(h"o7*CCA ʱ0iCmY59#*{<<3/idjj*lgjᑣhrk}^ .Ƶ@Hͥ!|fht[qM\rz ۺS[dpZy1P^J&_.a9?kn!5l [,E O--Zc}lзCР.eK壦 9dC}l F$n$pٷJҝ=yo̞d{ޕO^,t ^7Z9G[ۗ ,-$X{^x˛6vL qЪ>m< %\qU/j hU#W;Sd&A#a} p#x1ɻu^x3!'.Q{% 畇麭g{%sdJѫP4ߑD; .0fH38Y֏+# /ݷCƤqz:QF$v{alעpI|aI'xNk`E.A_!V.ج-o NF˕A|_\aw*ju@G>QȳG>U<ر^{\'yCE*gw|ww^_`)%˜&T cwj@_Iw<߸i|7⟜tK g$,y_4Sh>^ǍƈycSwSzq6p':a^UO 8yn9x?n!|wXd2vb+?he^b^7h{]`i԰Y+1fs" ]"Nnf S -13c^chI8th\݊%ՐF1ipEIܯ"WR;f@O*rݣj .Y,rE J 4q8P~pݺO1W26TXKw+ʋh%ŭ8 # @1P[x;$|{?*]qZCs8{zӠ fEcheo-cdv( 9{J VgTfs*]L$*<u)evJqZjX[ꡍZdia|wA^ヱJ J5 lxL=rɕXOfaݣȒ1m<:C}#qKxCUz4q Bk*ERw e.Z O}& G .sBߌQ8࣑LZnbR* _0\z# O%P'U5"zcl$0SL N;.<! 'IU%^Vܧ %JGsPm,o'< qݿ }qUUp=k -셎 0*$D#_Vg/+>[Hyo{ptc=^q_[c?@²IW,}JiZʹ>]_{bfu,r 1Z\12r*?Z~r@t"m\^Cπ}zN-DO8}d`7N#z1mF4pSb{5gkuz69~߇!rFWBT{6r>{$c.RvJT6r1ݷ2rL k4*':??`0Z^N~J@ty CJVY]IR/"閣T w;>२yw}6mZMSAgkm ƺ"|H] Enoz 뽞y hQ{fFa}IeYCϠ?,^Sw#"LG khYQr:xmGkT՘cQU F) r͎oT# ܣ*6cXȶ*kʄmKDP)o(QD֫ I AI촞M@6Г{*U˖\xVZK,{)'%,jZ\sC+pV`1ٵץ~a)aS6aѸ{U DtgtPMJx='+A4uZg2A<+N\֢t^JZ5 Pc p?pkOLa敯N *ч>0_ğgE(:\$ڒOtuZҀkR9]BzA8q#9sNZ2Cv1r݀ Twπ)AwK%Hx;Xsλ(E\PGlnp{znw9*{ cgc^9JL2R0I8tJ|߷[oi@Y/pK!;;VOo14\ CgVSk[en{#&smвJgOm+6 -r!e1-yn &5V:loQk1żj#- i.PNuV I!9H7Z,n5grjH?]SV:xF4R]318 Gm,wkF4sB2 W}c[{[ԲϘ{&_`Кh"Nw?ҿOmZ+[43MBk xR  O[QSKvCOL3^ K>j]뼕r 3PhL?ԚFÞzOI3V*|Pm/OT@< Azh+h,JmWŪ vE1*xbKd`VR1@IQ::QA9#;ܻCh[ĝ[9-;+L ksTo1 "+}tW-8 ;W6!2q7`M&ƂH/O}^AkT}?^֟GwZ:`*B]XZWksn:uoFĝ>gQKgKRMeXsf["Zջ]XNF+ F~)P\:`< }vweue)^F9dyju*'Z"|OC.(H#Zo'x(6nGco~`,!ObgkZ+o}&kvkSNk{ꀼ# sɊ+bNg9)sz!kfYm~Fx| xe!1dv6X@U-_`~n0 4W'?BN}5hsf:u64/pʐ|MЈk/;B;K5h^K](! 轷&m$-zhO8zch䲠EO>YZyr 1Suac:_$"Ј%HOpM U7NJ0JܵT<JOf4zEċ`] Z7$~ 5뗊>*Gkv5?hXK~qmnz-*-1mlGLg6%dHM|b#W"@;WOƘ]}ppz-v 95{ZЅ&8`A8hyt̚ф~jݿh:YzA" TT,`H:N%& GD֖~ewc%)#v~`8mJA S9x/0-?^^Yl6Y5#6}7 ?0Zpb|N7\4A荱N%)#=҅w/"DB;YS6&S0`?(JlZPq?4oj!a~`ΠrAL7Ff2-)A*0} L޾HfC ?]`A$:>Ә}[tr6 -X]Ne/eDv?)&~ʮ48Q=%xBlы=~]{`f>>vQ W}hj;.":KE\K}F31k)Kv~kVp }ʇ/u#7Z%%ieLy9x}QzO $rю m|U O܃DӳÝ;$=6{Kһ~`,ɀ Z1Miau0b$q''[[4B6PK c\0/ ? ?vKةMGkŚ0|^@ +D.^3J0`uf*pӗ`z)/[Eø-H)gnd;w m1ZG@}0wѿ(p#`X694n/N-{٠@)/޿ -<Ɯ=)qh/ac1Śɚxqk=vӿPWJ@ c}їX ?`h׃v~U5X :]hèEBFPTfn)S4Z [ldYq7M0\ Z..r>bkGDwۣބ{bVb*REPϺZVsuB){"uӼ7؃fCt߷.S.sKVa1 yYN@U+B.wh f-yYs)$ Ozxư[Z 8+SN]0j!:\b*ea ֤}y Ro]T4`*\O|=J8ogī)@*-2W;Z-v l y\|$+F$ОV)޹Ԛ"5w^=fYxZa>G7'˒1"߫+bh|4AomLJVԪ[4'TM*;sXR }oûF~hzs3[<h=e3g' `D4ez~EH_+w0ZPY^~~Aώo(ZV4[țTh5-H;)rQR}I$6OJ #cOh`ҏY4p m&<Uwׇ' RLh= Umg EkO%|\f/s=ϫ(B胝b6f.9tv{Zg{*FKsݱ7\<#4E͖u|̨%p"aϋB( Ckh9ŗSœO%M70MqU 蟮 Bkv ykPy7Z>8 )A }oLly@!$.OOxUMsiz|J]h|5Qiy:g|ϓ73@OA cgՠc|>CJ׍0r)aqE=OSn)юy7jmhQ/yO ۟_hۋ/fU> ~Lj*\`H1ɡrK%3zYjg#mwKZw"//!E`M*.Bx,<96O8xΘx ShKgL#:|Ygy EDY"OK" *HG[?F7F1aLZƦ1TQ֌\Hl%vyc'>_ahyy^dJj '<=ո޹ nF}q#j#hM~ptJO?c{Jv ºۻhb?cX 1 QpFz؅^ۺzC Jno58 Uzw.(Q0Z{;F5>Oj,eIrݴ5CwDM+l@AEuF? mw}5h"bE˺c?F(jO-kGɸ}.lR1a rլʩd;rJ>3וPNn559ULo]I ZmPQo() K>szlûb TCMjJlg$Bqu5y9G/FhQG|[:doZ݊E7[Fr7DH#esޓ=R-H5n Xzֲ:sYG99SgO!bQAȋދYmDzUXY=gGB.0Cms7Oh 4dThc9c;ύ ]S֥^vЭy]-8LY{Ek12Ge{?a냅h_V2>W?0Z\~0 m>  FXA]h?Dv"۠;>hLj0uUAHuK l~`0 }>xU })s`8 bZ=%?'Ɵ_0K!1eq-wT={bx^zhPJ $b;q`8` >|`OSK yCx.w!/x {7xu_GL{}~!#^㉄OuIs^xC% DvW}fԳ_`SaJ9rcf34?;>\a2W' tiiOtv\33'l㉕빑R1f F2ޏ:DJ(r;ݳ  ϰ;FBsZ*hg-G֛Vx8s1#0 !v>?`0*ND'-Fn/ =K{05 CkKZ?Yr\b&j^àeCc'8߶nXȮw|@oL͗H`l^9цQ |.b59̓ubhEo#]s&ei?ƒz,,wO˼|q_? e-Ғ:W)L?xPjq4jvPw P c|h"AY WQ9ew^:-Jgs/VD!Uܦ͓=~(}g7gϴӣea,i@ǡԒg/F(S{֙nEtsS;,Dw \O6ZNCGz ֢Jr<ɴ{~m$)u 2N*.AԢ Ppu9 *F;0^:D^uQ_6~ oYyJ+ /-Y#/)Õ[]T$[x.Bd3yahYA8ZKτqdbm)#/㹔 wL< 9cͭ w?H;JywW8:!7FLZ染+?J#Mtnѯ)34m5~`jU3"`AL:m=cH6L"Y$٫R)c ?0>B({o{j'Ÿc8K:O^5=d5B-/d N2OUҳ{.>g 6ly8<M&$ 'o;#l@oA2h} 3Wkz^Je3!igy)w×{12SHx7  (&zɲ3?5P?S ZSa\.T,^Qw" ,i73WHskGj% YiSmF:yM[9ZpI5 /tgRvwt9x߭`_Dpyܲy)G8QxyƅpՕU"f1.Dnoya+vף@an @^x)Yw~dEcGL9rc"'rQ5o̻8kA-jJB~?ŇJ#[RΟA89; O(dG0Jl %"GƜR=3zR#. dW{',Z%)b=u.a$xbPW0t9PZ Y'AA#j&>ݕxIa8ȯ.Ŵ:s9s F5/=yju8~䧫|؏Nv3x WS'E ?_*&=/ E/9P0QwW4\ hMa3\;/JBDfrjYv>߼ Kʅ3@'>~OkU1be.޺X"zX\+q!"fL\M.b0{ TGV0DQ5N;ݔ*K<=Z r#jzoXYJbho[ۖ(P v˸:ڇi9TQơnb pfϳCe`!ˡiR0vbyJtbn.Olh_s/0F]M3掻q*k541COْu%H*'vwwER\N"eIV_[jʼGbȼ`/iDX7VpI~~Ё?cVEpztUr"eo=CՊJJͷؤ=Eue9jKxrŏz=&e<<>s8߰VtCG\)By4"L2Y\ތ7 t]>L]sx!\_3W/__!? WS#}`KIH.+Gt{(k\>C1 jw~VgeSXTG>f7-+4Clp$X>xr}SLJQHP:Q Oqk,2jofl[<)G:5mڌwPPOY]|xn~4%gen37rBw=#._ߑmFNzN>'KKz褽w.Է9ƧIX \Mj_YSqy?< 2tn\Qo1۸ %$oVDܔpgkUTMҒ.Y|H1[|)/NjB6Ä F!xpg``; [>1~(z66}HqwE.x骟_ؾ}lb%1z|={wW bԓ7'v -x~@ޗp.^4ҋjiw bX/H'S&1E'kQ/ cb*.{ok:pFebGìA >[XTU0=!?`ݿ\}[’5jrm7NQp|W#tXaȁpxE~`bHً"=]:5!MρḠr_n5ݾYjGhxzD'tv~~[qZ{)pv=T▍ٶ͉84 qXZވHo۰"˙iDDH#ؽB-0ٓ1CUt9skxGfxE^ /뼇g}9t3,~z wѦ(\$Bnzaa yH} ~y:>q&c ^$$lZ)=AJ|$_*{qF1S w!?D&%Nv~iKLRp^_8]JQf|nBG$G24z;XE./{B$yw*OC!t#7bLQs#WQ}G)gѐ}\UnٶZ(N жg VV4$a bhה/7K>.g2b(wDvތͳ_ߣczVCh ~) ]V]#>z[6/@F 32/ i42=/6ܑ#nPNQ)eLy'ib${́Zu]5!תfZ9rn)g0=+[R˚*\r/t'?I>[v(X%_Q !Jc޽{ SQ|z4p(8  yҽiZO^nCjʗ*13vP{tHz}9RfZbH[],Kr*NJ}!s:7ZQysNw~9M;J4=i2k~X:Wɋ_c(e++Mv0a SD:\\UM>8`IMwmvw: paq*vžH!*wBq(}RMwPb01)pzF^ 6$j}'LfJ[ݧ=s~R]ʤO@O,=e_g4yJҔLuG82 pr:TmK4"gw܏gWsop wWNRߝ9A-^U Wi[իڧ4Y4Nj=|G$/J)sh"M8T:o1_j*7ήod,/n^qdַ"Q2} ҙnP/8ɒ LTuJ<f_Q>*]ޕ,ֶrك3<AUdDvrA,LvR\AIqGC膹UWsR IA9E@MWϴ,Vٻva= ̗_81#ޜ)|{NP7>9ըsq|wJ4D>sYu٭+& -]XjHl8+7>R3XeUyﵹt~.Bgbs=_ qC0Shqbw8-a!D~+o~r( h%g; c^!lFѴ,& (g\ Ir3cJ6o<f ?J_.H'CMURJWoK2 D#TXQ%-4orCЋߎRb'#~RaW-RS [E(-1PM~}={)(k4債i/ -X9 R`m?߆V/2g|V#7n|J)$61'/KW2zl}<[O=?=O;zhuAapn*|n&cc{`=P@z,iX~-S)b+{`aXϒRf#*{nhppSS$f_5\wD| 01]v(0O yA}=\鐯JEyBq= 5I;k%EcA!_ߧT7e?pzZ%Z68xz kD?TY_q'W3YRnV/? 9K;8~m$h VdjoID }d=]0V7N)6&~8~[h╀x'$mRHOhn8gmH!Eq9>w 0]'%Wc="7kC 3]0BXcjvx>?/?9pm|u 8c`e¨vNCt\嘡"<ݩkj ]VbOpTǗ*hzɴ4w;V9ߑԨ/.KҤ ԫLqvO/74~W:F ?+s}իVq#)KCUȦ;I)Ʃ*,{~=ј"#^ٲL0sjs/xdh"t[oofiB]Sl&ꥨnhѸ.;/ 0tL)]-g0XI= _Hvl2ZGܤ{{Jt̮ 5.t桽] amْ's*tp ;X܆R9b%F@}23xq 9?a1>4i܈.n5B %˜mi.MOzq&C /_@֒<`lBT8i僀^ەIVM想!;~f5?,{:flcev%A>$-x|SO7:X|Gu{>\b|OhsCx1^iW&<:m 庻̘&N6دIæލ:Z^3iZL'.px4b}«vd\g$kR0K xHB] iyivB`[LcK mzEk;HCP[Y 9=v.\u OK~pX 4v6? Ǹ2ܶՏvv$^DOQG#_cl%c,KuA\h?.|Q}a`_Fb-v$-` g` Vt'ŠK ُjݨw.A@{$OٓQ^M +OPJlKLIoP=瘶J6(՛T2؏t<x߷8ь]ti"u>Vpڕ9S jgYx1} ~ vBrt-1z]Z܀0WBb $F'N>wj "P;2.'|=cԋ|V!1ד1w2vLxb "Δp$iNLz\kP`NlWIgEFwwYrU%NmYuYFwg!}"s+[1Gv{]%Ͳc9\!lk1}d[IC\>Q%cPXl4txbPxQU޳2"V %Qh|sHue/i*~Ըc:@]Apq?oUD=?H޶+)by{"rHF_VP-[̭m;MqҊ5nķp\.kG>^^OJڍ;^5($ h%NTH}IJ C,RB=Vt ,#r=?ǗSR ~ܳjaaIyTEH#F~Y-l^jHE@py|tn*( `,Rc@3Su#sMu $uτqܖT4Rug*. ٗO?PVr.6& W5ݣ!!"P׳=#ɵ{XGЮ$vC)nFٗȸֈ$u0-Pbk9b/?z6=1EDe!q:AE_lӍ/ 7<UǍwoYB'ҵ$jDS5dM5[.=6o'5`m۝cّeY`Q9%jV.υd72Riy"BfiIKKNX׃$rz"6.&/5a=W5*dF]Ǝ>1_N=z0z^$ƸeT%m5pɷQ˓ J Hj ]}XJ!;3_.Q$1#'zgEȂ?Ԙ um2e&1u!#: $GtU"&wҘh˯JWv!1c bNdWKg@Sn·q bxD#sƶ<x$4'oFi|iN I1ٟc` 92#!{Ջr6k=H N+ e]3 c<|ՆHhTY<qG`{tSqJʲq&4xڦ9¥yɅ$fvbaz孮s̴"ޘi rO8Yz/Ey9AKxFc8/s6MZWIP4k&HT`L_~Hxe,1H@Z>7;%Ke'[P, xHؽoB &pc@d>YzߩchFu0 `\uD.UDJ=yVs~= V++Կ8Ehpѿu%Z\B1}~=|+ݓpL[H E$Kk IK_]eMreekւўh=r++[<$zF,}w-7y -(wml~t+}̧,CPAfDzK 9BzZGH`UC劙ܔOH5rh+p# +Hg@!42hw橉Hg3䟑U 覫1A~`]Y/K9ܬ*}U.WL | ep *9ĦD}u=aPKʛLY]&A Q0+-`r!i8єX%y>2x˟>35CK1J,?$RgfN!@fd7ਿaji׶D`PG ?p͖ZJ^郡>+ @#Vݨ"\Si `6P8m[naG MvRLoEj%:51^bАFdLxx snݫ/w }/fc[1+#^t*D~`ϜvꔚMD`kSuw/QOv:xT;pݧhoEu6 D"*ɕc^@624 x3it9n>/գqq;U^sBbIT ]:q)xSz{=؉.,oCӯoDReRt;}eXr:bOМ>/tq;jB8C3W^Ynlrr& \׹ЧҘ%B ") qHkjf(>]ӨFPZXi GJtl lmqQ8Td7=|ciBI,y=yn^CG'V?NzFQ!j}Ȥm /GwwmG a C uc"):9\{7!}A4FQ=I6EasNFJ2(V:I쉆@ztΈIz7sP;z)@h5Hպs^?:L_ť,ݎIN-Ixa즩&嵺5@!PCY(Rh|wl 4.}?`avf{}F+RRMMv_:D$5`PF ݈N;ʪ s5I> o2''H,?huq՟~2=56^=$ORb.C!jVܖgw3Rex'-?8 !m~uDÊ~ݯ\ >LT>/Uk_j)~.m1,eK^g pN/* mcψJ(t_Ǭ>!l'K@ux~!yr4LByxWz#BTe ν^O0zȰ2ԍdjd=WT|=?l ϠJ2Ō`4t%#ǧlPUkytW$z^ L?E0mp-^wI.}FjWַmdtT0f}ԳbŮ!{QL[@i[y%$.laGǘ{ugSI@IآAfF" аF  :( =cT9ލ Way1ͿL榗RFcYWHb[E.$vzu  6׷cGM^vr=pzc!X:}6Zcxߺu'j-0avCX^үy@ѷMSGz =l-mp gsMOoM: ԑPࣃ]|A4NHf+-;ݑD-^?Ne,Uݿ)(j=/OyT~7<)?O{_(pM)o}dXe]xBRIm~s"pF{TN>c{fФhYWv:N9\ǒ^%}")x) KT#DI/r#=lX13 :' 6PGZ굝h]ORLOT˭ۜ_/te|$woA=b\ZDgԍ >nUFxccoW-g`TơO o)zCւT$#mo'b<%N[@e鼑~e7uA ST,Vecqc隑x|G "Ꜩ$O.ZF[;ցlq^I:@K+_յnnjo٢f$_WVa6\*/t=Bl,C4H=~7G 2딄]Gmj5Ir4؛j@/vخƐ%"K JJH*ISpCa>. ["w`1/b`I 62}1JQr%@v E\'?nKD?%E[z]|>H[tVܝ2] 4L1Zȫy$ zCk~FYidr M6re;ynTqF$ i17w o6?i&WQ؎GID W!q=W%~F>k,jc^M<2%u 5h<1RM}R?#F?o_#ퟸZ^I2@A^g{AJJCޝi추SaRS0` /M'u?>tEO} =q%}SoHlXiG3)ݢ::\Ą|#3!9)LJg(TA* FcBu+R? mr#:rQ9Hk~j@Jq޴"gyC}ˏٿa:!uOZfPE8sX{Q\@pf`E]nb4{U]k ȴ9Pt(\r楒3rn_sr>|̞#hY-f90p6l'i4e B>Mj"g׈4#,|qu*)ΖB{g045TbLmwo]5k L-Rilq+uF}Y/DٚCIzojz)n= >a:OPVTW0*J0Md򺃹-:hۥV$oA1CBgo8FG8[70v$%GW\@~r?F(!-bp{_icz;(莶|BhBd}M*Oh%i}u `(ѯnujjXp͂^Q|3 )bM H}a.K[^b7V}=i_Cב6jqЮh!녂lPLZWx܏z@^HP\cl:|gk,+SQ >\dϳ:8}s{T?)~N _T3ѭ?BC"}@x$.m6LyrzjTy=^_#PZQzT9)&6qW }"lISmgBmS>rKC81ֆlUIV~S h*u> ٽilbjLj4gܹ#^KI&).,wn3'[Q9ֈ,&_/'W,/X(Kr aƐ'ϋ9fi .&fJu߯Cvcں8>ƣJjuԤPGٗ/E{Н-@A2] iM3#0TcgK=5!u >lj^>CZX0lԝ:gqzw / dBK$k v ^ zw"X=m]D OS `xF=iHB?p7%y4>LL0.>`Lh1z_{=/퍘2 u{ݗIZw1ReFk\l23F@S0,K+`2D&V1)nɝ/‹Qױu *o9OA2"%w'O|}vk7Xe>:_שsG_Ly1EV9vYDsO/ʷ4V׳!bqqכ)g^Sbh;QQFhЙ%j{a;5LvH] F$D- D pܑ*Yz]Mu|Z П2A#=T][%K1s6MG$H#B9EJIݙeeie%Iw:捍PG,b“1W-kl4>\]瓕jR^$ҠRYdְWtG/jF|%!H6S.u»c{ Y[.01+iƾr<# i[UU@}FӋ/R; S !8YxJ:bKc=g^~s{(#"aXCӱأ7IV3bI]m4OolnPL/+DG䴡ڇ,eSM'kwmV $[{$3>R񿨊gBlCKu:nQXbM-WœO~=9mY3\O\ILWGPfwccR;JWf_ [چ`| -?+pmK d \s[87>H]Pq?F;M+]+?أ#T 4٨iK޳$Farno ʦJe-[sZZ/PKIrw 3,h:Fb`C}] B|~,s9LS[c>Lލ9>*YBTXv~u?_^PCPhK%HB{sQ+z $*|CzӨ0yEͷ[c)Bzj<ο>>"QBz" $[ȳnh\ (WZIJ/74EbzQniNFf}|e@7b?/O*ɍGXG*bf8E@N;-a@;ehKvE.kT=vDt$c )ۯS<3)~k4ABJ6%q d=[e7+"@ h }5S/~ޗ8 /Ov云Iv6 dzCmraUӀn%`gق ?FFb tه{ O n}+^Qs2a ?#qϚ>R1 }9|5W=ѵPCoEѿN/潊J0S]/(B/kR~u*;5.6Vk a2@wKmbw o?PG_)3RXcԻSNQl*/Z7JnOzAo3rF=pť)AWL5rC(^os͕=*L,?)yT| u%MbI#h7?ՙψqELhw{aj E.Ro'B9쿁"OS\|,RϹi#$EVvgY P]1>WFѹFS'Ym H,HJE$4ڒ!ลq6č6%j+_qej6l eH4][GKOwЬnT+pphZ/b "]6PU>]EVA\1m=7TУ|ߞʪ&,r$>WK hA@j̦.q.K1Az]}\7 X)]'M(0@k+)Iqw")~0F{[yw<#eeєX! bVm-?+~76 mjB1 RdxxAeO!2ɞ3~x HPUU/cvwzej"41,i/rٗ%29f㸸14m h?USrszs_:?]Flc I04 jd~[ jͽ}d3+|Iojt9$[4xn'Fd?*Moib1oZ^fn^eB-Xv(*}P$Tğ?|g.q%v)o衅ȟ!Z ^DpTMpNvfjl3U fKzJYj oDqr2Pitq2G-N9?L ]/0ntKH:IfV]lFAnPlee>AhcqIUW 8*,R\n^3rEB Tݛaj3fοdO'$ǟsMISSؕ,%  xBS= αd79XW.>uKa2=kM@RVYVύt=)"`Tb-yja,Tq'BAu|XIRFcج7UT?@ ljݯaAJh^Ay0JVpiUXo{?)[Ղ 93_joyCWBx>)N2\^wO#1\^/4*z_ۨX-q7"+v 0t?y]ը2yz kZm1"KzN~ m *{qѮi?+i9ﺹMD"G·t6%kL"G)u9 (C8 =Z $unS 5m=:͛D#Rx`P[T9Y1:;7TW}Qq.PogG"kODK HQ>W)@&t jN\[Bz>k V=ۣ~6*؈5C׾wJI%@z4A݀d1]Uj|P缡~FNR#BPC`Yi~{]4N@c%c轵:Wh稈`7`C`/ Aw6`-lfʂQ_F=qdn1z+&&W1zBMF RC_x<2z>7(O +$V_{n{n(y,h:rr/Yg_s3/" ]*R/>sr˭fkUa1 c6=&B75iYݍcc yiD N?(&6N*;[8$@kS",?ނQK>=L L麕p*E=ILb vm ]#0/IUE@_׮="\^>Hfzqv9;SN+ ;<wґI䀞x#~PGИ͈Fp{OFA? z7kB A{^"b<ㄹS[iSG~C9/6"bjh#!F񙈊{>ʐ5|eX˙ 3TF˗F,l7HzDfy')61Ld`3Ƴ&t 6fUJ߸rac?k ܻTäŲB7BLY ΁0A> -2N7BBXx4srui!qY[9F'A2#1 = `ә:Atz\ (SZFSK ^'׏hnlԿZTȲ tzc2ߣ=5:gy>7Ь}XE40>P3N9}BYy<6btӈ@뙉tn8#Ux9y @EF1A=(_ݼ|*a4E"ar;LQI\hјC+wbf6@ ~f7hYs(ȟbPΨh*no5zEZy-w"@rf6:sÆ4kWGLa+[}fpGuc$;mPUSD{F?z<ОۤΎj xsz;*n$# 2@Cvt"EwSգ+.9y5})ms<47 i72(@ = HЀ d\)ByGHӱ2X5Q&#u2 v#@۬}`= )AfGʲL5t@^YѶ>7,s^EjPn>zxd/1:&x0;d3! [o VI,/q]˵6J~g VV~xpWrQ9[%I2Aas{qm*ՌOk/cۅhβXU A,ڱ_=+]^\ Ds,{o5I+9ѹ#x:{~Q:O*2COṚ#D]QA\/!O %+D!Es$F+\^cURFMT\ /T#_{GFHz4*T~ ·-D8!p+r5&T;m@Hm]1}M}{^FdlAi:7TNc]p CJ,h1Lm۠~@2E0dYEs,0=H"r]lQU *z82B䟇6b702<َ{j>ocz{7uVtRHA]Jjc:"fJT#xÑ-أFdB dh]w3][{П5w$aL2h?F4iiF}P6&9~§Nt#UF)r.M7r3gW!1HqȦELtIR*Q"ctj]v~YuP;>JRkEt&m"M-܇i VJ+!ѕـ TW=I!n"pꖯErgn S6eVTṢ:6B F?݌EZEuI=ߋ ]n J{1-bcTQcC{Du׫o.j7[`ۤJlJ& rw)죆/pW sYNF(eKSQt$,)_Q7ᆻQ%Y]|* T\>-zlHA@~7MM7 5KN֋iRn)ȏcKRMۻ+UXUtOJNYRr\SH2%vDSc/Ö~MaK 5󜭪wJ@Hy66#FEmI9!']K L89rA&u:J\Ͼge(窯'б8)'I9͈^ݣBl$k;w-#HنtTְǍ1zީIls?R@!]E߷=yڤtADh hi5͹K֜k ^W|X:\!HnY3]8HDޞR& vf5F ]A][MwBIoժ<ߊ^RѨ91kDA@Kxge=<8P+_vP# _\y(Pɦ,xֳýGQ8n*GQϏӦ$7Y") Tjm*?8S@l٩?IjjO| We6 {~jpzV(ȣ6X%p֓6όI25,sxK] lYˁ,! BwDhyE $>UQ֨n.vNTS's݃Z?w6B nSE&iriuf Xca5"1áT*uG'?FNHn`葑U#vZon#d1)=z+M@"EmH7\V"Eϊ#^g|mͪztﴝX E;m2K|Cl6EG|1瀡 +7`ӱ&84l]'O*R4UܛxIS]HYbb7pV9$iǏhԮyZ)}-}[ uaG_d%\BQV 8y%Dr@k6,y+'$x 1C艭.Hv8 9EHS"}.m%>aɻE=d 3&ODߺJu!h(RXo7=Y"+*\M,d{? h|7U@y[Dg4oDx iM3۾#k] m<:p[:Y}LTU}vHUiSJRޢAX|ʷKP*>RI䀯l i82Ζ}9@jZqqϘyT˷my7vӌ n0 Qaiۜq/8Q͌\Pơ:#ǐP'YEULЙyvľi@!MVmP#vcԢO֋֪0#&+ U&)J%EQ޴zT>U1N M" OaMo{E% xXiti+'iݘN˙. Xq^UYbsӴϭzy @b Ş5,`ڍ& Şu'Oo<1u ҡzD,VדUgNοC*7#0G_VGg?$h6ERSQѲ ڍa ;H1ʣҎ8fY[=9qJXHR7Ѿyd(JF%/UP{Grw(3nbY(J[k5>45d)10K>-1*qA ӘzT. 35G 9h_s ´s(<1I.[fBv5]v#KO\u~[LP!Aߝ^c%n`ffFo{VYȓ ᪹O{r&өQӥ)kvSC3K|;*Iz,j4搋o~°4$;q' &#_rהY+iHI+wWY,%_ -APbwC%hPY5܅bZfQFƀcߺE 239PJA14ZO(w ~Y4Zv|cJCVto(Xp8CjhVQ,tz]OP#vc VFjͪ7FT>=39־WQCHTR.{7 ݋ w> hvVSVn33dO_MQpW̥FN| dϫXiXLނ_ y{dK6 ٻ&%R-V!E :ʓ"y}?tU5UƾR-:bpGU\]}s18 M[%T1-<=?(v|jg/RwBȤe7vL'Z]Ch[{Vn5-gv<" yozY"ϩC aHƧӮBydyU#JGP7 zgdFz~"zt[](?%)Y%L_cRyWmjI,rW-w ǞYzgx9t~@r Wc!Khd?dSa34C8H~ZE7F+r͂ڮKh!.6HYZQ`[ $gd/9hj8.}4TKS˿rSXqթy8NxN(7,==n~Q V9X:爞nADTU K[OF>ʈ$k񫐚]>CC+&x"{{֐qx dSz٬u ri&sojs/诱=] WU *,v{'o:G;HcN$%Pިss(, E] x! TIBɥr* -(/̔sg};u#IdٿRҦ?c|lmnTD+ޓ_C}P&RiWo[0l9 &5*N kn9H@K*OZzVjH|.@_kvtضv3s"AhC Di_2d {B:UqVHDc+V| n;T^F|1Y' %b)A[ ػu[m~4*F ynϙwвLi(AsB55db9Qpj/JasL|m%pJo y,! c`_qoBzc^tb*v*ܦ̗5d7 !N>M-(S䌧/nejFAbŽ*O̍sdkZ VRיNvQd=zQ^V ep46QJcFv֑FJMrO{VMyU=EN~ٯ+뤄 Xy}:]W7LXWb(Q v.X!p;@}f6AKcce{f)݈ z˹XoAW6އcl;ڠ$?*񛫿ӳ>cac沺,b$):N{$Ӑpd%U5 v[PlY{o< }Qӗzlp(u%m6O(hG{52 BhpL$ 1FjQ#{ W~h'ڢ\_\CSc| BuY-nk2dI0 o|#%TM)F[CztSdi䒊A, .C~Lt H2nQ?DG^3z(ϪE!tt5@ՔD!F) cZ|BdB0g{xLޗ ͷ;}KLE-54ʔ!R|{%qu!ZNiSSz{rHW1Ǹwqs-|Itߋn;=56g[L#v˪q%YfDxOGDtE93+1U(]vA{ ry‰':{ob;?dגa 3yAJˇI\C Z;gN=/Y]ZM Я@Be}H\>>6vPiv^bA{H"`{K3ep4`VCCi[{&`&ȍ&-t[/hA˼[F_,Sp lGN +u,^C!aqГn%{)!: aNZ`՟sQ(Z{St^6~F7W\*}Z܋Їn@>XAIR"t`z[0/r,rKg]M C!t?tr0Gu#)`fҸap=m&O-[[}{G0B6twDow`LO[//p)ĸxsb4 3˱9:(Q?'? JRIDFᐪ^GZ/$\*Ս}LE,qOy V)@U~BOuۙz93sߛIzpMV?ƘȲddzagȟ>hm}gQ"(n<ࣞpL1JCɇ^me:"СaP>i;|^H{pzP#H*V$٭w3LC H9% gq[-E@%Xr%VBB?$q &Z3%ކ{[#{ ' #7ܞK*zီ}LrhusZ/ 18G5˨ۇ*0+*D+vϨrQSeC^!V010s»hvJ#z/īy]\NVyY?hdji\vׂOE 2 o1D:fZ&- жPNfD]d[ݸ D(>4H]@ RE@<ߊs($M w&Lz~k=(bX==#N1TCk+?JgIIS{|JCI͗*Q+o ")[닞0_Mwh$wT֐o ,JoQ+5Lm 8=c ּugΆ*R0-Va[K`וczm%L@te,+x:7/QQGh{Х"񲣧GJ!tU&GdW0nPs >E 8ٱc{ i(y?tHwE +{VHdG(kOf#G rx~(<=&ey?"pi3Kon tBB=6s]:Kki\TFF^M4ޥp~H_8rHS:–SҸ{SXc!4P A6T2n*m #>_y bmriuf!$Sz\h2:޴5qSl{{poH;Dcv=">弁rQ}S2)Ji\~bQy&SrY\Ō^5chͿCiLJy=mj7eQby \\EGךy25>P뮂u_>VtGtUnuFCQZehG'D=]Q9*#an([FJ7/bN?gzPL>FĶkkd E]Jm'>nJB$}9ֺHbN!dd vPE\i#R|NKR#Vӷd\o𢈈;U&:b6leTF:g/:͸8 w,ASX[M>iPD meޝV#4֝(ulG7iz6=*FO(k+*=1D{̟Q?:fj~Uލ\,2\b~[ܤ]/M IܮZ"&EyGU^ܩ/m|}hϝX\Q'*E9}LLn1#N}#rԮw\1|n8g%|--F3Rys 3΢xi`WF3^v?2z8j;[M~ёu@ihtN}|.e#g&=DE}:UxV}>nicEJ_GyѰzx4M?ZˣqC:ػ-Q?wyϔO4_FLN>T )R϶nܞ+e]ڻ*4[ ǎ6%[yYb0ѽښ%P&!ȰF ~DI=^}8g)}}Lg /zgBrKMy(rۋ:AnF-|H۽}]qykhl& PpPoψZ欍w'R9v F99m#:ק5|n}ȷv4އ [l iӥGt2%xm8 $ɲ-caDkc͐GJ1NTT_0-_YՐ|-8`{X_ e2~^cuHf[[VeU㋋¿ Jn} SM)yLn[@vNTNd5 Z3?Ԉs`M>kIW% 3@SY݋vih7a?k3drZk-Zχe1ûu!LNDi X҈g{sP'vNO *![~%XqLUVq[7C[#/AL X)g?Aҭ3JF,=PP RUs!#Q)^IC/H֏PU7Ǭ: 5Wv!@&K}=̌N46ۏZ[$)9Nv` ӱv d8Sa3Q'hH?6~W2kIRӧ@C:A;-;U + a50+HDW[7#*cryB{Q'쫅^W-i3t>- {yD>|f $Z^\f7v `5P?KƬ*U[\IQIuh`]!1ӆخwχu" fБ{u l|7Pl̤};+QKTaAR.G;θJJu&kϩبK|p$tݶΟiESH6hW|*4KZS|n9vڈ:a؍fa=pg_TeM|Tfo֙rH׸Ὼ`@;r7hjmW/3|ɗe5|&grZc?@U2&- OzQ'lN%[\~ӯv< 0e4l:A"|mW `X:b( ou]_U*gk-Į}/-u2c^)51ZF|8R@r7Y;u)0y̷6hP#|^Q $!b8U$3]p6B9F{鷪TF CJMgߺ =|E1m;EgwyS7g' lC/2Αv연h˫;RP'*Wh.~bGKqel-+ /~Ei`40`gW!Ol>ɝeL#j<_˕H6?!v—V ީkܾ׽7=-[LJ%b^ \qk߲ٛ|=`g?% '9_! ɇַ:>W\6@Cɛ?dTKbgbpeݍc"TTZ|[P'55ύ=c=Y6gcգxz{Zݼݛ8o5Je`+UҌn@(z#.oͭNmKd?c?XEveEQ.ǣ%5ڥg̽,Ӣe5Ig@~H~I!gPMohj5 v/"i^1 ұO~g΂H^=b{vqZbW栓ʺ8LH7xq ZVZSTML< ߯OH]Zoϣ]ps%A:hx4ՑEp߲\3ƴvjE;vРI09.!}!VGȣ`JI` %2&$]O\ E7 c\QvsF>I.'vo j&WrT;T[ǭ,B<K WvЛWA!L tm(ҫs=VǰK@)"i~jʭzAA$r߁*w>%ym_oSsc?UT)M:imUFA{8E)`6FrJ- U!vYL^jjZ'7W\35.;kXkL'0Cʳ"-TH˳_ٳ #6}ۊk_Ri3"@p):49?;!BSS\?O*Ӆ>wxF|NTSq/w %E4Պdo0mufڛ23h[blٺEETi3{ֿR޵ WЫrֿ5_ub6p{zF;ؚ?pA_~+v[IA$j侯N#)f(CG \۱볹PO_?# /4|s|dwj04?MS{usYi7׳di:oE߶|e`w,K2[TNr5ۀ]#K@F)=9Q4-6i[!ڤL~GHc2*NA,Ǥ A<z-F<4a9VHw?v44 ԩ.|.+  KJf qY&!n,2O篽^pi1QܬHiV{oSe)ܟ9&}Jfs~t(Lj.~޲?֣Dӽ}/gig0/5b&4^6:Wa^R"_Sou]=]̵Md tu2Z<=eVN`, ,4L1HK!d gq`PEbq^[5d i^ΫicϼUUpFJoLResÍb ejĞ ^Ld1d~OKt`"}^E&rF74Q/$>.w{╚9UmV.WyJS 9wvcP&QIU1U9T4L;EVY2wۃ[ i@+/j~ʝw `[: DƓ˹-'{ Q+yDx SP#HM^QJĠ˫tf=8'%_%Hj>1&jkG_p Ԉ=ؓ"^!KuթuGh@؃mV͚w9+m>K6Ag{!cDJY Xv0'nXb&aYbM,)HLhҭA4A%,14O~?,N"&bod#0hyˉuꋐ_(҇^/n</_DRm跦6Ҟe hn麽+{Q%VjևoCB[Iq4C{=5\Q' UtjIyfmR?o =Qt縰,vZ'X,FatlLK=R$XtAXmWW(^U ۤe6ƌ"(6l]wzӓݢhiι/ⅼy`1\I` #'-[M$4!M;g>,Hk~rG&Jy5b-m=Pwe:4$dhjoFa`-o>'X]%2Xԋvp&皽Ɂ P.:|.cutzPUD_^YKPB6>ItiE3Tpj[1R 7uHR _z&D߻>?Juxk.]hmݰSۉOWK!;Z>`AY$M@-č7AjtiSJX)QU.ij\31ۮAǾ,t!D2.Ju2}`$#gY>,84!X(;ٚAĆ%: uK @@BZKLy(F`X;ږRӂ[WP- =h^c6=zO{kSAViwb@Ae`SW?2'z>sU{PN_#҄OFO}_BChh`[G2!Wy[bwUN TL~F_Sz;{Ȋ9GY g>mn ((I2zo=p9c|ܖ}`c4 wm_| ,ToӞBbEјGՀ qk}[ֿȜ/ wx[s[hXgD hҁuQ2?}@`#[}^³SHB]γMG} j-fM7-f>ƋZiNG AYdTOPsCE5439Km뜈I噍hSO&@Ya#F9¯v!vXk3uS`TIi9'v|gu~ijP[^k-0Qa )`N5Zc4' .]6H3v&OĚswoG`NծAM -%1 ɷi*rLcDh0 j&;JԕR5NS/و?SPb3\;ҦcgI,Dk*'VFpIjן>}"n>\3je^/3",fzmQV)Ȥ85ȵS/B҇EOXPdX^Q4}7_}}:.yjV&K|Y+߿Qb]kэN6h1Oۡ~W ɲ~ cZi{@@RH8` mRi,k]7U<(C:[e?ڡ=e;ĘG :FtTRiID@^-*@Ouu>12+en:)ă cmyl& ؏x _2zNˤ8F؃lȠ'ɿTчdwr-ܜImD&-ך2s_[W=bNEWQ$ ̾$kYY'aO kqTp<wؓtYRl!,}4\3a 7VBpu,iuX>{P9Pүfc+1.×~R)Orl[|h𪲹g`wm>ʿ]U)u>D$>+D)ʸ/#?8i5r";Ћj9OE l,Oi\e;(/v#/ߋshm0yKHC᎓@ 5%DF,F4Z5Uٗ|~6B ꒞X@JBij{+ ߴN_Pׯ| ̝hU1c~p$' ?7je ك(y扡􁴆iȰA}+_iSFՕo/9 Oo8_9'xYTe{B/*52J$z4xݽYח6)4,KU9jw(q ֨_ՈCހճV:?SzgO QS{: 3D f6X !w 6܎3q=-d!h}/ml,t}zɿ}/_`|WD^3Yd5Ak(n)$H\3mha-yNuT|ix?KuQM  K#ԑ;KVG9 E}F^)$T1PGF;"i{=5~8$D?}8ˁipt/unoͭOVC 0UL'VWh]:'?R =eo:o2,c 7ELD9Jou\0MpAy;HCqVWcNzz^?|?b|Z%>s5;.uh8Y{'q7t0,g})}f}_sa4A>WVP4r1\ݼ'EXV G l Qvۃ2Eo{vߙu?P?֐=@xJS;Vwf`Iaɴ崷6foW R[@rfژN)c<ё@PuoMT@tH@RNlV&/V9ՒS7l%jx ,KM~A |MEǰ?^CzlVx_v,plh!_ϼQ̦ӎby<񤍤K/Zm1nάf+^/ T[[ 3.7y"L€2b<~&k=-.pwX _M,bMҊX\}|/z=]#gVy>$k?eh/T vhsZ NF"Йu媟+  YY(~ϔ3;Aa ɣ5m9rfs4rv/Pƌ4nkx98k4|d;~)iC"tμRd` aЦvBjiAz:;`68۬'CY˟ ۃm N>lBy|ysijOt>S :DwFX?P/ pRh$kc'CxW, ,|Ɵm:Y:;_nTfNܹ5RٴdrIy7A xBFO=Fsc퍎dhJCD]ĤuTo@?ܨƹii_):}T:9zGU1:(֪w|ag4i%hScӄ3 |9A7><=F?u, CH7lsR̎}5rএS+TA_l'h/[X68O>zF#LOak~b(W ۃVeW|nzt2y>VVXMKKsFh9PO _TuI8',:j%ICe6rGh1BQl'憠mߏűRjJx\fh𽘴A5-0}XP\;BK':Mhzgx`^/~KLH<CO#6CV'KW2{r:MvbR]LBg@|hSAW$?uYV}dUÀ*#)5M=5Ot8&=\Ýb_dOIP ?JN5m*ut!έm#׉,tVIާd 8h< $4:;IƱG|>?2s}BFB ӯG5ր.a9=F:)S!ZP%r~^3|f5ʘ׷sFFJAJѫ4VkOv ҤsZvN!FPͺNL԰RN4f)52_Vj[K;:՞J#kΣ"͹neg_$;}zL(P}{>="R/6y{5#ݫ=0Ti?q_?U/-"QZԏoqMBсy$fQUiE{o^f"Vz9-S4z72yΖ{eJ!OnoxpIH>;*zgVM :R4SdivXG,uQcgPDT]:1 ǎ}Q}?5[4姵lMuf{5O>=^.Η]u!u-k4V)Y8{*?S#ͣO䑛ꈩ LgObH$%{@䆌7tw^wG!ѶQ|oB VK[8Uŷdl{?Q8f"P70yILjiekeN/ۋ>-ujhM=o*}#z:R}vg͇Y7x,(fݟ%;w A7A sW?E^#j&5̑d}3 ;,o`74˯ݧZ,O QTCU1ч'QGJ˯m c ك:qLN/y󍶌>䑗pls)*ĴeXuX// l|XE?Rg)K6Iz:hS0Џs I̞s֗U']l5?aGο6!X-l]L+G(oo4AOOsw3]F#PBn&7俌ձ)ˮ#un5Eyb2ku*矫vv*HD|sF^&uJmS)13HBQB9"9hsLzܜ (~m6TU}qOV] ZO uبdN]&[z0]e;S[C")җFVYGL2/! γq֎::zT^gns#g?ӂ?֑~Sӯ#KL$|'1XGhoһ?,G2#!w`YuD#l\7Dмҳ3{䝊?T5@#sVV$Dxú댘G.UYǟ'{1v7t;X@4@6+^cIc\/8FyjNÍb:+/;$e`1/ʠ6kbKqZ8i0)S,["KDjfL=`]bgR%'n vլMq7U: zyYChUxڼX-A`7DKw_s!0%[%ŝ5ecRٻ3>mZ6GM:߳Fo89Ml [:U8O[/:^ .zpG{9J}Q}Ӟddie7x?̺j03*9:&WLorar[K-G{-@i$ ~>J 3J_#B/:FMt3Ze\`Z5e,P89:$TLⴛ?MPɘ _T̸9^Fc`T|QKUY+lcm" y{Ŝjz6򙿼aNꭽANiZ~NSt|@[Fuv^'a,Q<]` "`sS݀Ve:e㡋 @==$pEAJC$ENu~DŽ\^Z Su4וF./`#b^4r9nNFw-*_Ԉr#EuE#Y(Jp'*r}qiO,G^Hc"/Y!JEǭ#G9>V_e L'i47N kQNJĤ6mv:2} #rz׻GI%YS/9po=2Y3XL> Q4A~>:v#b|H֊HMcoo~`Ru-^v _ӣKƍgrfҙHMʩUNz?`}nZX|$]5G=Aþ %gc&FDDӯ9Vml|3(o㭁ZmaewCD1()$;a@^l {V* gW{QuS>n̷}h {;%E_D7AOêS6l;Ӥl.}ezSh].?JUsu TxT-RtP?v*௘d zJWH=3%#iWf_091l)1ܻn.]^ѣ$k?WTڏ~ #d>z3yj{\D`VJdK-ȉr~)}t?ZbK7s]A7X0 2zb o(+i~PXwy:aܞ1ˎK3 ؞duD!"lϬuC.[p[VuTeͷ'tvM| qо eף>oOyY'){޿N.yh^'= x%!z<;[; eM\@ ؃I{hǓNL*uYgf]ǫm~#Qޔ1E~br;@K-7vYY* 㰻 y=hx5}+u?21@_ƨ̭EʚdA D׽ 5$X@";Q &aa,P^rUiz6^/_> +/Cxo' Ō<$*0l> ;:6#~b<7֞JĻ5)~h4mE`P+PCN:<èaA\Gf\= KT0K yF+Y *- fZDXj?hQ@ a7@:mdf sP7eG ݺ2Gja΅bܮEA4VBQBtlIEo-s8h$POQIQl\hkלg{z5HcܮO?N˾dRMG|}T;803 uC{EI,Nmbs!AXC5*E>:{5ٚEKD{2KvAG JDgrtA-5Rk?q#~=kľF}`cQ:vrn-QŻ\{E\3{FјvvWФO^XzG9H|Rf@M]:|v1˻0;h߭Ezo$vlWACmQ_. N1|z5B&h?QHfᵅ3m4׎Ak]Ru9Wd°'ΆP¬Ԑ=K$G |GXra};֭X}WZ9DN"O|ϱ,eT%@s"TlհLNhB#d_thw~TroWϴAHl?9=9h| aɪ> %&do|͜`BSgQ o[NG!C+[GaPIi5@yOA1l34iYZ5mi Bev~ngy`!'پȄ3PNBM]Tb|g}1Ap'[gXn#l+N&3:enNFFlǰ`9SgDXlտaKV5;W%3<:ucFX6I ~*uOqW /1ٵiFD 渪2Kv5 $Ξ}?ʂUbGI* 'jhue46]7s:-M5xoQ =tnˊYU!WF@B԰Zڤ?B4&S>M4Cd ըz*}[TO 7@E\)_;h e5j.bs̼aC$^5ܮodKW[{H2^H:/zZGmAvv A&(r4.uʡfCxQu24wd1Q CVFa=hiGRiٟO 2o+ij>)ݾEmw>.?XnAٮqw.YCƞW׸w t󋝢ZZ#չt?)i粵@yE?'aabc]cȞB׺h{EC ]r4ݖ>HcSO8RPNbw^ BpMdpV,GdY?;uT-9]|7\AFŷuiH}[^>@bF'5cu)'}FP5*yvu ۻ"N W9dj7}ͭ$?-U"֣42|b)j3E܈[c?%w gZhey}";JҕȦ~0_ĭE4mhVAuG#.Wjj+V,'D,~c67縔?@6^7Vr%JaV2|  )V x,"[da=[cvODzF3O^9ej.1Դ]nF}țد֨/VɆ{CbbLM({>Hcs\2urbe=^$YL*5*?ZyH?.˚Ք@mR n~XZTGQ6umyح"ּ&@H(5ZQ}PuO 4xB85Zޣ#ŷs? 6@٭Rvg*{Ҫ.b傝_Dcj9j#y_!Kki+AGr}XGU\sA#=*͊3LCN~f$<>$ =u1 ,]PFvoq ks3XEd?޴wzM[Z~XS* _D7lN!эw~2|e`wR`6/mA8~5fR`{cԤVrKnݜ!* v=9ĨKU4 Gxr2aɃdOKyhq1@| Gh27N{:Z՚dG;6#4f;Zۭ5 f+*}݇R*AC#?ҝ# 럆V#wm{31Ґ;L~odXrgvW{gBu:il4A?C6 X=.ݫ;|;cx$Ð 0P;ojO~>[MqSZ*2Udrjz| v${5r0iVl5"#Zn/Mů/­Qؑbo"g95B3r-ݺftYBcNԓ%\Uc[$Mtw瞠<6gO_n+ݜvsteoF䅠,#ɳZ\nH,5Pr Cfp06P#H7;GudR&^jvTQR$/j'k#ӭ:Xs}(F' 8*ǁUؚy& t[^VqU&ӽ9ٿXA>;80[^-=-4Z=.O5^M3G6f4Y.k)Ygmx6!r_/$Xt03/]PfdN20=.:_Xbi]c#9+~?=e}kvTYO5bJzцF}qV:>t;xh__v] 0i-;hH'K72Լl։z2*牅ؗ5BD#~/+҆c|B-,T~8= }_8Ԓ`q~e ͚Z?ʭBm;+FL,DžpX, $1:LrJU#Le*IgN d=g(w"ۦ-N(iSpsJ26BQv~.5S0~ϵ-jk/Bݩj<κ6%%.m^'(e@B˘ľ]dgvB #mJol;UEXlfcu\[ʉϢSk|X6 |k'`d$ܖj^x@RA9-n9 ye&HaǞD@ICzQ#Ҩa+eH+vʼnڄ[}nO!镅26X=蟨lTeT!ao-׼idG9Btka݈t#kZi kZ@g4: tQ^ejt8tۅ*J1Pm='2B 31^˩^r4/Q̫6vŢzNd((b/&00䚭] YlpVНC*AB9UN7 ~U0 Iaݦ%i`ln|pwR3hh'I䏕,3YuUjq::^[4Eas.녠ſlSDM{" -(ka#r+o0_֐YǥqTJlߞ?3̈HMuAۄ2*=$3ۭ\C=O;#Ef x0/zit VfywsosY$s:1c-z ǩ!:MTu> _q ăM$n=Wɡޓc 陕,6zCPq TF1~ 9nst_3¥zNEרل"LLՏdu-YǪ  IUպ}9k(g?o8 *AB_=#%Gmf}VR/l&74\-)4E#Ȕ_z/Zhn^&) Yϳy_&0(q' 4V#Ѻ>LZYU#ܺde$"4 +bozO.$ӟ~,L,u31kVN^5[Tpt?N Oi\W>P%&щE|gjişrD>f;Kz! ee7կ1Č֐)pYQշ6VQ;߰UڙY@R5Ȇ2HgSqS;gc7|uO.=B&%qis1 GP Wgռ_*()W_1PAc>q#k%nRG|#&h=-)r_pG+1' x+dqww_RU,l>E +f`l9XO *j䭚(^YF#t281PYT2sfu俱rFz;wX*5(/mw26~^9̌F6SfmӫRSih6}7$ Ŷ|3:_C^6Rtpz}ZUE(X F8%|DYq/ F^haXgىA0 #4^q}Q!S ]tby|YC(8U}d(@.rMN:Pgšݎag׸)IWӣʬf/;%sy;LI^rYNM4Qգ1iϋUT#cQ//!C^Gד9窨 H E޽|XC!|H,…kY[;&0i0k9ڔhMe&^ʼQӄg{*W/BH7`P>udrRq_^Y IA?o2P.~^cX6Гj<2oRώ#O(Oęt̷:d3Եa#pmԈόSQ<#O^eo]gr6Ws^F@\' j Y̓Vk4yxUBfl9־l.KP87NF C}VKT t/Fa^X7>߮JmbuOEAA4V6ֽX9 YkR﵍%xs,>?7 GnRy(C`rFJ=؝{4`vQXGHIeO,b@i~9Rm3i9tr< #BLn!-l2"97^w45aȂ+a\?" L宇=r6|$r7|%jٚSsfOR5of@AX4¿OUNv/d0=}s5E6lж;ob)1mm?YQ)O &<!bucZs[DFad#j3Qv@?i?Aq Q{o+,n4<,-:il Y6.A_ucf]@].D=Q20=u?;ŸL27*XCBbM̚Ea7@2>Yu#WmQQyb]a&rGY4̕P;2rQ4s ]W9{e,N /^lkoAyEDJ `uO׊_EI@7nZ8^uڱXF$SwʡFj]#fƒK;"ڥ# }y~I校 ٥ENa;,A7of{.ّ9oByPHi0w p_̆;\E3\'B]o ~S vm]W0 jr8 Чq}I kG&X D(]H=X͜Ud>@*"Wk n72(Sd#Mj0PAϜŝ9R穠$ؑϲ?NV i܄%pMBj!w'[]HXG텃f*0磮B|r3iqxFВ&B<9Q!U.Z)z[XͱY~WVmĉn}XdAz^6 [)e *JGCUTQ91WR(F#ߺ_ =oKv AEgaR'Y$T;*? A&fmH;؎JM-?6]*F㉘V!YKkGHEWnW! h91'GG9]+?L {[GI;|ݛ\ i5$RZTD|PjlԱ굽M{} ׁ{Cd؈f;#ᾇ+c7yez'3geJ7Kܴw Nw==wXkB vY) e^W|`~wSG3K.wcG@k[ywՈ3}ecA  WW8wGbdG榾C2.daUj3rX ?6yq٧3P°qƺ`ᩰ6P4md}g0W:Gvrfz<{jZQNai)]?2'&}yb6|kqE iŝ(X 8 }t|P_<3u9)ʌ ^?֐ge|Z7XMXS%;x7o܄/jmz) >0ׄ;{ tq= IB?N8'+TW(Zrȷ;Z daQTg,8LSVyl5ĸ

~d(VfzY ;.xMa\${2/ 2Kvڋ= 'E-i.mND^^tv|#,ƕmȉ`w5seUgf;' $5m̌"flXxUkT{y#Ii*?4{b7gޣ[=; <,;$TN3Qʶ$"xd_ci ;~x6tW^"?'|Vu ds~kDaMCDia9v7k2(nȓޠ+c#hFD@ `{MQ5[ ba:lР6İ KfbQdI D+Dٱg&HQNloq, d0̓=XMZlS?rR1C/f1ۺ|@ɍ1h +^ 8yp:J~Ӫ {QTcF T`Vá9h 5 +{g5*dt|&w"gYPcmū`  cC#Nd *ׄBb7d: N]! :B>LOH"HdmycJgM־GʗWtXgFs8vsT-Låd8@Nt\i.$O1n6w*Y+29;vjy>J ׭1|oVv]V_yCd|?R*['~Dz'E;eTШlX;'}B!DY[:*(5+&"%[ SX"\/z ː Qi8lgjJ *' (*,̤'=i&~R_L-H5c-1/zHT)·.gK, " ( f\X$SX~ƟxKP3F.^Wё7"sd 3|? KRs+a\ޓJv;ZeXqaЄ k5l_*a<!` ?s_AXynK,\/ dn,MF}ћ6ĤRGA[h6?,X@NǾQ+Y' L% XLOOϴ7]o G f(w/?PTUFh;N! :4&Y(2,u&#K<;hxb1@X~`RϢN}oq076@/IMaiKX_4˩3{uO=gy^A3U>}& ރ[>khlO5}sp޽H!kb.3=D*fn(TiIu/=:p$Qz2(3O-AF=<50|οp'~ *ᩗ@AIgntg 6M%(WyS1O5#vC 6ҹ/EFP5śM-.h%jKC8֬Tuo}_mʃwG-h7!k N e-$A)`%:@.l.Mb/13֪&%(\=|YV~ߑO~/gZìى c#"pa`dӈnz/uǷ/bm] Rv1)#3C YnTόACdjja;Q9N o!Zҝ/#5]֏)ƫ⿄5$硭DCbzOdЀElIͨ00[n;buwEnzړW/I8ǥ| 6vH,ux)V  rV֢"@1@? t[NKeěA0O|~ꋛ}PxRug0~VMosjG%ԠEJK:R8]zl"u"]U/Q &<<;\DZ)޹銳nX'unDPlSKlK jY2Jm[9|!j3(lnYYkiִP͸;EsHX9] d n^FϹ &B{uh:P3/ >")W[]`C Ě.T3o3iIɽGmhlYi6'X4S]w(l8MgsL =+{/:۵{ |!/dyvgo?ʃ5Ii+')46rMZ#6"q8KI3w( 왟ܥa!8 }FPZ^ϻrɹu+#vC:UkTsvTOCX0 )赤ڹÊ沯/P'"+.|Y/솰un򒽖t^O0Ke?"w5WimmnȤBjA]2"~"pE~Պ9n\{^ECZj,՗br]bJ]5Ѿ o%ջo0]Ӷ<[+b/T5v]vQAot*9w-m`)w'+5tKunzmς+}gx+Uӿ)eu"hڬ~1d^,HW5ZX/vnE1Ax`wSiTMJӣp^ыݐIhU\R6y|w{:)czYa=P53Z֧K)Tŀ[sgZA7 5,j ܼ^c5Xtaiݐ5 šyӷ\D૒ѾνaD^?1mꗳvX7w ] Y;gp_0XG]/yVζ]ifY,P6q  -Adp0ofO.)R7UhZF*kIM\k l䒮-R[G}R*R)ڊFTz"ޱMpë#եŽs߹ }kHtcYGQLbpK5x%{[Nqૉސ7UxKXа a;ArpIl_'M˛PD"WS UfG_P@M%F&3?v#(Qގ"{[j {;>\F~Tvfg|2)@'+ieH[/vC\V PvF$zsL+r}ꅂ#ݮ=L@8q[ʳV-3?x%'h)Q¬꠶yF~qj8[ %?o4 ciҎxA!3srhj >5@F<+[ 5-%@ Ԧɲ&sj@<0% [AO 3[^אJ[VC[tSua9T=,0 äE3=XN^"PNgAGB\]hS ]tdJ@<%fO(vкxa,ct6guAj~ml*<$,r_Hnh^ 7l ʽ&ŽX {`8q.@FzgW<=z6Ie-zX!N[ $Bth1u5؍T8XS5@tHOK9a8`GE43z u՟7lyJoyn寭 Ug}YtS9X$)6"-C'`O%-٭YZV/.TR)!> Knyʊ(P7!l/{u55}}Rb1փ;u>2\t7iLA`WCe-PZqQZF m-6=xa"*U3/B5-p3L .cf ؆^͌ NfVnQB ؞0GS:s^]|5j@PN6 Y+h4>2qjغMh Y+Xڳb V/g[ b. Gj^+p*cKl ~6#HYZr"p ҋ\Q E<1c{9cI^.s/ϕHȍ%!զ^-P`ctb_3gֽR4zT3Ͼb$y? ^|qn*b́DH }⸰+4ΟŹ09WA1X>J'ΰJF Xsk7'?l2vF<7MxYV3^s|_+hF6='v^o0ճ}Ck-@jz+C c3trI/dA!*O۴Bq؋BC`FSg/΅l(sphDF\En8Mc/JO&yijFX(MN|PldQ D$˝x_PJ"CKRp`p)<5mnR+IR|Pp4-g?ZF+0^NlWmӧ(27w`]}v^vF=y&:5g,n|yNѠ*wƉ%pQJـb[GM +t{l X0WͶU}0aWΰ QvAu;nC?lB_jQQw4U*?ZOHQHSNA:97Gi5* էcL}pz(4 sp177^YDn È=Fy}O!jeo9;IdJ< /[f&v$q2ۢQOfhѨUf=D0 64/cSK10vt}j1b 0GvZ7"3s׸%A'q!%'Ãӊ83y#8ltTN]0=$S_1?ЁZ)O Y<}x*-kcFX , wFBOa/xkDڽ7/&usz`U!=g ԍZTu"G4O+m| ?>:fW蓈c7UKJF0 n l_qC%HyurD/ۇ UJ -n/a|)"m_+uMJ(]^zJV|!M׬K^+sr)X9P.=e;zεkO윆$,y8b*`x 3Em8w?=C<- ս: 4uv D/A^gDg@g{*pC`_Z xn)}.!"Fm7I^(@.?q$S^48{sG/~ tNd`t2E Z +^S @XP&F >4 Z"el.K$'x\ 0Wjb>$j>vݙ^0nr,9.Jn?q@$},W O&:,3H.&V~,+^Mmuda.m:jktpj9 𿛫dK Eo,bĞUѨpЗz]c,v:ekSK,.(AA ٭ezY\xM2'n[DeY4pD,{eۛK!Q42xsMb{GYzMC:9 ;ÛU=li e@͊.DLbdKUM9p;a->P+ _-v6i\<))^WVm 4- gGT۬hӘ3Z 2Co6Utfy`'bUjlQ}zCE @q3ĽJ85~'T#i׍*“JI pPEgPY!DE2Ob={򕬒ACNu!:9qڙ) QL .:!W%K32'o8m,u2Cn̖8b>GQ EVZ+ V,UGk7>~,%q}[񊎖ִcZGo?FT" %|ξ=5E!C$AapA(Ul :bG/fI`~rg,Qu4E.]\L>VBHM6i;oo'cLևl;J.vY06fʑ\O>@: h#z-uU i&;RL(ߋ%|a(fJ>?3s׷#Gk}XHdW9$g5"MG+L"AXud }&\'sr֟wd*7nUx|Ba2Ri+u-[/_~Iؐt>ϣf?W\HUcZŴ266sdUdwlx)c>>ٮPQNUG[UHK/#ڑxyZ:xحƧogBm0t^s m$-1w @*l 5y##yq 3 VU=g9А`@Z@TA UEhӛ\3Fӓ՜J,|?WϺ, {d'"JG^/IT\'Eh!ΘdA f[5HdfӍ˝vNKOX.f/ ZGmqȪYY,C}lOQl P.xK+ŸCv7 R`!)HKmqQ["xo}~Oq7xa®?e[* *zPI?\A1E4"?? ټIQTؚfjfC}^ &UJ؉1g8Dٰ!JPMX9'+WSпpa$$i>26 #k4-Ч92wV X]j*"@ PT1 19n.] $% \x 1 ETX(u͝87h !jk{kF3i?Օ]5k].C ,9~4j<! j jvAWq1T]A zT9K5wk <)AK (R}mP %:|MݢCk4"?b>#μdA Ds٨_lDSæ ? synyZælL˟D|EByc[UcGgً_d*y~qüSj6JIܸr3$ťfܵD#mH`a* ٚG+|nX zd.J!٢ؔۻ8)GS6lE 4pKf+dO75\$駀9IGUAپnV7 6g ]'qu6JfQbB-7*kVj#K`E`&X9닥[\ 'vn9]Kϟ42 Դi1]ϣz+l@&l>u}9ܙ]z~,5^S[Kq }WM`7lt#x 镓uS<زdf V~}ϑ 2a5:PiYh=JN(N4!·G3ny {zI Tʜ.]Wƒ0=a֚V,,]*Yg YLGL5_B bXX-Qd$]|(kjm]lf>hՅ{H"h4xyAGvL5{.HSP݊z3rA0:M[02$vx DTydQ* EXk'hQս.A ! gt"gBDPw{EDt-6xswk;)2{&)5nȘv~e.]YGFn~*ʈu|e\9kZ5-e1l^8,vO?8Ww6fq/oyR Dl;=Z*BU'/o߃WQ8zםmY#$3F!C8W9`tM-E48ͣ3_!lYMaFm+9T*ƍ7nΦ}ތ:aT s7vwl6kl}%(I#⾿%YvvӞe֑ha.(}7vgvntrOmguVT3"9G`-MOȨQ`ݪuhA04؊ǧ ?q?3myi=;*|yfz|Ӥ`:B-]+DqqQ3Jֶu[_<Ǎ&1m(؄*j&㏪ 1;fkmCXcޮ9t+K43B5o\UtG_R}`A{9#r;hI,[6pb)ҁ5h]6wƿ7 S? u*.X! NA o?a*lB\iѹR~)KC|e6`a,ӌ#X -"pDy+*cuR,ser9Y6pUフMػ1îX-ho ~1 pVٺRˇ TؖfnLS;wj6q0~eawǑ< =7anBG2F?'؏MԭgWs)#''IjT[[!E(Eh#F\xޗ} @5?px_G &qSnk:XibsM*LD;*5kV\b6~QV燢4~:/+!εa\Z,(GϾαꪒ w7?w/lP{CE☧*}XGȃ"R1!qWX! j p1٪]A33: nB;e'Άsu݈tWhpSղ.Rz\DЖa:c g뽼/*l|4g.,:]+`)YG決 Pk{RE`Tኃ|sQq*S 4KŕD79<ŒW{Z+1C?wʨq(E81dN_Q e/[)MWu_^1ڈL 2jkn&}=Iwy(<#g С3Cwε?#ԬƨBɻqƵ>T*hR OU^TlO=0l/Z%@JWpT7?MxaqSl+lǗȥ~>J}n֊&a#R`[>(:Zo" n w.CdנٸPN=ΐhU++Z,fFyu9TˆzF5ZH?t]ó#A.Df*[5_tTˆ0"( 6D573xV;A Js{Bn_f/ԐZ?n~Qи};ʑqZY~*7Y]a/VtO AXEˆo@Q1yF.qjk4AUaA8]YCH q\HL&7В-2)]cjwl~='I$Oun^y@h a iWmL̼h ^J>),s}YG e׈Zp${CcRֱV([nc 㣰畩3iÞj*l1p ύk`eW l!]%C$-Q9=?idS-d%esN\vk+SP6=KCa'j(`MWn u2zfCz+zXf-aڣ}f.+5] T;*lïq>燵CJ@^t6#4̆{*K"CD5դXyX;gåZW闡ѯʂkq74]Wj5%ziwdso}.rc?15oQ??E>KD鳛K{IQT@@2(#σ?B;o2 Y7PZ2d7t[(JGuܙĚ/%lUPT\`AwGh, x]"D1A; %9  =$v#J;]2faT:M}’zb7_N,$ZDX7G7u8A8^H\ow1͋{k~$_Z5ܙU۝@/-do:Gߔ_ $Q2n(i ^U~4"7s_=G\gb.\GOlDo%$or˻oa:}Q@L WDu054ZRQO"|V NwnUd Kjk>,"d$*yqA(pc|[Ӝٷz{tp_f{HJHNB^}"t#/w0ڝ0q3DEe'֣3wgKTiKHrOi|`A D8S'9`;eySLgWR9 Zv+L͠ۉfy6-單qC9N[&YҀKD}0rɎsiYiS5RZ#pC﹆_0FNK&]Eԃ.䴋Gn7kbQlqH  g v?`:="-XogD^-E(~/֟OX?CQY8Z<햇=1tX(M4xjΞ녆v^8OEҐݜ6%s\eMw2q,ں?: \=}f_FaNT׽Z1kCna&zBC{ l2|e(Na9> UZZti .^f~l)f{W{b%+#/dҢ3wԒ*BV-f3O匭sIG+RG Kgu 9] Xhshw:qf.Oe%܉Ո4@в%Cuq+1f>4oFJ00(h[qR?oωDZz. ; [RjFP6(za K.jq_- ayeGfW76^5]"S#Zەzs$y?'#RϤx_F1eX$jy~Pl/!O~ІA-,;5 UOѵ&)4ʒmS37Ҳps?^ߟN0u/Ĵ6/eIpO3a+y&pЬ=׵ ǖ"6.9P3zy4Ɖ~:E?(!۰M -Nh],`YΉr¬ 2Qoh"[U/odmgJv`HY:<-Z\40R*8=ܜLXCt+e }0MV8Хa# t2DB W:Dx?s_0`$r4l^ DmF2j[h6`m_#;o O HKY */ P0S3|s}-5' ʑC٩C">ɒǴn}O/Ry"L(8;$I˖ r^ڗ(}=|.;9{fD=T$-ZDxoH: ?q7 s]}`ЯavJ'N4ʜ6r4fM jkxAd^Мj&u[63] HE|x .Ο/z-rnλb硫,WI˘|ͭ364B9tzSԭf^vs3նIil6OQc C) )B?V,=ok< QLEM޼gx{ =x&A~(ӧɆe0hS$м2鶮͈6q٣ިY n6P%hXnoG:v`N(Q )u|rWwFA$~Zr../xdo4-G32(|gC})vXh͇`ea8 i/|N =z/@_ziyob|Z C_+HL|^Z_]hD$$\7{?h \g9{!q,Ctͮ1ƧR%8or{t2921D/x?T?zyцDptH 9ݲ=}oT((Tr7"xA>,[9:{gKCwF0&,6˃NRW^B^@+7s4/W۴~L? Bu|qsߊ S9LUEMwfRDr,RU%jO0M;8rs3Q_0I"FyVDxzDyE5wQVNVM%_vE#֭5r(Ѣބ\`Ӥ,i4hdZnGuC;yIm[![WZ<=m%ֵ+\kU.iƭĺv]ŵvU$zlAy*Ў$VA//`AKD{-O*l<-/lJiRΝW=8<{to˺cM~+Ek.: gQfn I ޯlHIj(=D3/n?IՁዢ5ϩۻn?^lekb,YE_ es^z-Scv)%GP:TZpLwN96M3-w#CaOtm&ɡȯ̇NǗ=:>ءt..nbe;tNr%Ucb-`OD':?",:Rt6 7ژ{ tXz*׽_E†qI4gx=o|ycx-FDJk0Bh@&zb }gQz '(aIUrw}Np7`:nol'x SZіehU_r .FTZCFD6uػS޺D)9j,:f:~: QȞUMM-Shx]{isej3`M.b׫`>YLX ?p>̲-Dމ^,>pgѥg3!!e?;1;MjN-nޕpJ5&'Olnz]}bDhjG'O~|=DGnluG{ `DI%P1,҂Mnm3f8O Իڗ? Cu5":m){&8j vr]/z_c>y_!S>uEi#~!C!,klRU0aXB28.?`0$򰾈 HS0LXڜ,@f%0#w>t'M!d:5ֽ\"L\\Iӛ2?`0)lrN~]wkv|kG'g6^y/Z/DU64l Ƽ/k?<'ު\ک'ձH:-a%z*{^fpV^xWt\=Kʰ}k^!9?MY< kBeZ=ejv9af kTQ|'ޖFvRKȳhz)V$/-?b JV"y5?C\(u"^ay{Kga.]pߊ-U\AD_Vu۹ V%|ێ F4-9V\:56J9~ $;a-//VcQ/y=~!sN!Jδn-o)Z(/+_wk#@n6I]AyE.Rk 4GَVQs1DUAr*ݝaZIޮ3: [bLw=z)#=RK6-̜7߇gX%\ N4N | qrA]* ж cG❳ |s}h(Q:r@/C :ІY$%z们[i_c$KQb|1 "p=6˪ǿC%1z)QD0&ͤuĘ2]1HK}hgWi?ցYcTeY-$ڧx/Q|tA3- %i^گeϝBmTp@67jOZkӋD4ԡbY@L}N64[,Z *hذmJ}N$/YWx 6d#-&ڑߝʕ\۪uE+0)b 2\~ԯ D $ɒ"5R%T!ȎB, KNp'? JIpr<ŎTi^/` F)K9YgU5F./68JABcUd@fIK#z<#ݪ49Rϒy^4(gltE) xZKw#s:3Y6p8`0a;]t [έ7Y*[ LSIiry./v9cHVRTh17R:-p@'wȒGuQI*cEsf8hlAbs?X{6A6h E%6{QTu]jzSbчDMgMqxc2pVtJ3c~6dA(I<oa*׵iys\ќn{7לsB`3üG{_G`A&q;Ae=KE) %)W8 ILVK`?`iB~~N|'c{vX6 窖l\j'Vk=Y3R*>+UvbJХ1o|G#n6hPbL~ ^. ##nnd'%-cF-Zp}?R,i]'sC$ODn=:mAe*~tt75d6J[(/ј_;Ɲ -qej?`%M#+WdnYI;AZg6߫|85y|[uw~qH]P͛.Y{!߅gQݛ7Pnbr8gn d e2^6 n?6 Ye2k}=Xe eMrm;cꕥ}촫Ř{(FӅYҠ%/l5SL}7u[HoY٣i;0楝:9VڼD>nM> v|ͰbI͚PTYiNe5 Dž$Asdwj->? ݒ\YuHCϮ262ݾ+YAFRlZ8H9o?n8PmtWٔ0|V}.VE WC?:܈NMu #+'՗6O:+eNWL?u*oD7{sM&K Wz{Jjڕ .3ļ}HM(0'tALo\gkIjF:Nl4pҼG/o@H;n#fni)&_ϱ奵A`Hl8? 5tm:/)'_+GsWn[ ߀,NA21ɨ4)(H8:,oq804Vhާ e)} ĕF4YK>S[eSpКK;W -3 ]َhӟ"zNRٕ%Cӈ1huX]KYNBgE|mD㸯TҒ(*͡<1J =Q4O^흀^ܴ#ܭԇq Y>w^ȼFe񝗓1h,)@ksdwZk\*,g3əYz坷8k6r WZA}toh_ܬ46=-08n18%?H2h4 mϐzhfO?ٿu1XS0n]A=wgK;0sQdDL[]PlqyoAq̃hsE$5D>~v;%lG8shK$ACZ4NjHZIRczѵyBZ֚!XV$i^zy_-+_Ku;[siaef2hLƏVEGdhU]0&շUetTz-Rbzޛvs>YD&#]PR7FQhBPNPxjh]Ff{(2]mq%]JJ! mde7V;anG!3b-5+ށ22$TW/ze5=2E>|  |bn/Ҙ]уT :c{:\V"&L ~BW my wXGa{1]&RmDK"*^ԟFӞspX*Ga2i7DG={\ JF^k{|0{pw/1Hx9Z*Tk~pHHEtqFDF,v=PFy~*Z7?=#f?JlT?hQ1[=gE7\nܻ%΍n~c.t#j_uݸx,7 P4 6>1ݯ+"ⱏ ~dIZh*NSa8M`h87y ^(b*%Oq/q]l+WEfc=U'ǓWgk !uZxTpR`ؙ L[4;ҭH}F\6*q֫$2'/xBCz*Qh‡2or%H/0j ҫ};biMt~ָK yah-t6ƶӽq3eB,V}](?t9ϛ.}Eq=H_̚燝% ]Fr򪪼ZdnK zn ZMo2ݻ.FΑ%г`{iae/~_Ng7 ?F{h\>He˨/bs~=0ۡ( Ҹ 2{z &f{_'! >̛/,?78Z ǙoW !ɁE0Z |JpNT8g]_shm(vUDߪ؟Fյ{xm:ƟFqXReL!#bq$ߺOË[&ZZ9OPk=Z??lp3gO@,F4n:D9R'S1n{0b1f<@z/H7[ +e_= #QK%u`ؑ &%f F*>6P^MI70Zw.7Iw%"|/|z13\:FX^EaJ8l!|9'[-{KCbh;G9ԥ"oߊhrB۹{Jo\әl&U8Ј\*tXD(SGubHԐ1.P好΋gQTP^Q)?Ջٖ~PNc`$?aʳzX9ڢV7錀>)Luz}={;|oZid[(&zy6C1-LS?I&hHh,ȏh}={.>30wQ =Z cYfێmý^:޺z CQDo2NRdJ|aw}hH.qU8dXC3u{Iyz :}F1)fk27;n$Nߡ@7x<]rC#T7&wli/mROmHƬ4$vJF |n:#hvMy{ q`F16MztoB+Gq~PK;fY3TADC_5YQ|${TIQH[Iv/@:GbM*iOŌ+AAjVtsK3nRg]Hv>m/?%7ud!1CkO+mp>D_( <qܻeJW*ԟg(KQ/ҙ F#AOyHHO)ىq:J+wۆ9&>s^ -ap?ɾ{1k+ G<&e )[:m'W' e=,w~CCsuzc/ ڥ_%޽Nwm9h6# 'C~+QS8*T+RsHCP>C ~!3 ȃHB#FO3=ouM`jbkBZ'|B o,=ހ;pJ|Lr;x{`;mE uәlM!Ԝu !288+ `#CF˯U4D߲I9z1pFe7/'v(ӓ"77E+aφªE̹y:t&6.EH5#~aƱN)T DEϽYӟsSN~^?~H]a.#vu4>8O2Q A.!*Ȣ1CMU}&AL|vst:X/aTKY^AճzĊxX);e:O=IE"SG^`& ?N?K)cO}\hV0\(9C+Lo$CJ!ʷǼ*-iZ%#ν%Pt 3<ȸ@Yv= rtHEZjs~ߟ??+nk)H!KD#%B(e+rQ#.C{y0lϤeBI ?X`yGeV՘xĊ:"dIYܐx\#e%C .4@3F#Z\3yӤagM7<n猿rԼ5l'28r0Hs#4PNEkwz( Zo1k֟cprV(,/sٯ ƫJaEY\T|Cj4G QpAV3qD^C.h)7AsTI(¸" E9yx5jCzR= },z[/#zXY3I ɋdjN#>ɀ^g{NJyl bَmy.wL/L…i΁tkBgLOFB9Km{Ek7#nM \ܤ bϽ?#V^B1iDŽYvvQu{y fO9US>dx/|a.w%B4Z_μXUɒLsV]8H2Z]&\$ mѤTϙlHCJ &kwXҐ95XbwX*%,d2*r+e~p#~5›]g%يE+YoKyõ؊~}!ӷn[_툸vO@ ^J3*'43f\0S %DCόE g@1_rtt\"nOTJiy:ДөBOVIt))k>o-Yq(T/9ހzlø"|T~}0)KR>y'&wJQžߕ'qQLq*HNܾټIy!s:堥<ˬ) /'%mܱ?pM6@_Z/glw4\CsVN}SdaqĠfSW"*㉷;&cp[ZS֏1s"%ԱJP+G /o_Bs )7{/7U8\Rqʯc48rk-޺7Dn/̺ ^׿J1Cɮj;,0cD~"EM0*ꬿ;eȕ$,t䠂ݦ!\ R(P~ {)Hxˎ=6tZŖ@15~;Hm K=N4gam7o(vcQo&UXϷ{o{Pߨaf<.tE'G Ҷx+}zYr/̺7r fOfV>8NBN$iaֽQ̍˰k"g@49k_hF#ARCl =G+<΍v63 6mX h/1#pY.33ܿZa 1EJqd]je[߳םH_Ƽݽ//>Ó+pt]c@>3h-⮽~W?iF]ߕ8\&쾻oWgZӴljW+ 78߷EZC39yh~NXz`vW)6\Z+M;B}@ 3,D%nHpsRDI8!)_˭|LsL1,!hsM%1QkviFt%c8+zwediW]v؍>{q@$ zĝhH5u߅sMwUeV 5}ƹFsZjkZ3oh|/sV4H"+F>5N6q^ov5F_;3Q_VoP|Jp )&jeuE4qLRm#LٟY9Q]qpdgq*K_]i-Qb C "էk2v i:+1 <(ZW/MQY}C٫Gyjn{S@}q:+/Ï#fQP |6˽o _eQ:Gq_0޶3agR\oHU,|pֿMt}8ޱJI9ۋ~hZ0F+ؾEV]"Ƅi<L|!$;=YlcM 9OTJn(ͦ Sv~Rno+aku1A7^Kbssw+$8,wq٪> d) ߧ7i"JEWI/zrpe+-ѓn0)bpSؕ|&({^3/ NdFTokwZZ*Erny}YFU"# 1Fd]g\zdxI]zN wq)UQw>!eb*EO|q}Ep$%fqS{8)aiTDNνY%[C9Kogi{0u-je81K1U8FhLR-K&j3ۭ "!-T6R>qݫݲk苣?ŸܹL*}Hdٗ5 5WTDM&bTQ { >b_So;iΙm umiJ"Y3C ba_<;`f0}4kqԛTlWJ]FcLu.g'wF⨕B c]5c4^?XSDpyEٟxO;[40]zC5RʼnܞYwOzVbCx?]8*wD[`:malr8 ^惰hjtDȷBM-rFGTE:J$JN(+괼Mfaz9@@Cm~$v(|qS!=q7}2-EN 4$|q$19 zYDN@x/r${d4o.ex}l8XGz^`/%_W*|?ܳ.I;>9-;ds;7۟Me9-N=Ri4o/3(d$z aA;3CM:}@~mq~n2Ք06/g/5R;XPB.^8s,G6a<~^kE`{8a曏r7k>h5 Md& Y^9{9;O94QxDzۼ) Ûo/G辗@ma+%a>Ձy:LR"^?;g>7N&b%غb>x vs8kO'MO 8?S#ܕM ;'dd)258Axր0!PnFܛH|n=Гiy ?|5Pю-j&n }ϟUnq˷~G-6mM$"f/\%pq8'6%u{] ǂ/=ZNz{r>s 8؄ai}&í+޲,SKo%J ]r" o)ehRy9d6yQW5 Kp_ wnK-^8JbE!|N|ܢ)c2eo"Y3P!њ\Qd3[KeZfWCbǏ'vfw9ʟz]3 lDL-,ţjk)+#_$t[Ͷ4m}\i>S)a TqъMm(誊 }-=of6#jZbj#QnagHguEv7uއ\z>-|gq @w/ ch;B 79 Qpo%KpA) 8e?ē|4K#f<n-?,4_(ʘW--b g({3rǤ&`8 t'X7u4RY3+SRD~ 5ũ~jqm0!I\) #,&vMeH|h{! 4FVo#_ fs%[Hx"|E=.dQ[ ^m#q@ヨcfVM}AJIGr.%]ee暈-ew}W}H(&PT~Gq 2iJ8g>cv x+cFBpYDbW:o/܀a7I0aϕX IhSc m}WUg?ܿhлͼ3sFa僜94FMCc|q Hwh 8cz5K2@EUd8g|]rՕDĐ/$2'Ҵqkڭ ׶qȁXH%"}r,1W` o"rlkI85I,|aw gblXx?eٲ/r[E"{)SɃjwy6 ->nǐ1ja_ݔ쀷;vur"9hK0~ı?O&"94yI o1/Żv$ uޜiLvqHW7|F-t$QsF;OTl#)> 2S;|yqʽ>(+'V Ǒ]޶{͋/9w{/E Bf0#Ct~t1po2p(mB+&H!!gj H!"*M/ح!'QXGDڶb~I6J}q1<)7,+54]AvxT{4>wET; fyaGEf6;OĚ m]lbrvƔ[2հ3; J5Z.oohd^IjS~qw̽$Ѩfx[@R To?oyfGz~눴Y(a!b  /طoY[֪]C1}3͚ډ%m6 d&=]2UO0hi]7̨7ݸk'֥2>x<3pX$"'E9=x8 B#e_AƪE-[jR_a937<@i`xА, |hb}f34%\_(%6Mw /M$UK짷%by_JL )k]2'`zpBLit 4`v:8)x&H旫 B?`\-ӓ:1s`XЭN_KZ=7/Lc_9n_GXcVkldXΫjmO5o(3ZZ<_CWߨ^Iq.p!cbO?;4=;M^ng43 "hŝoEHDg\Ⱦ0q~uޔ=2_B_E$I}~rߗKkw5$+_@^W-.LhE̬m dϋ?л#* o59hxރ} Ѧ@A!)f " %e IIΡng8jGS{%YWN{!Tϓ\~;\!Fj[\ kFn0e=,ʁd"o5EW~2~/өȒ$Ղǀ-x}iO"U>!`78}MO(jv>LqYǩ;Q*6UZ}O:y$?)tdt+xwkg=)OT  ,G)qjt[~EN%.X{Vĵ[?Nɼy<-wŴN p{DkX7#řz_:,CqUI]CGCj2=+<nPQLj"ip:so-*+uy 4ߍ29Cf]7E ijgZ.8۟.A:',[ݭO'E^su=.{b@kcH92fs9 U*V]( ¥T@xy)M=nI+P%2\JL(k@v#MjrG5w:Pk+q̠CB>Oy/f%N\Y ?Iz{?9qϨU,Y/W%NL;040A֓狙O"FCzj#0E3"z'cx-ۡ 2Ap9lKIS<{ͻiAnHC,]V4(/I~Qquu=vXLy? ,$4=hD')lkC܆\/ݯ3; ng Col8d;OQB?opXvѝ9":7'0וs|S-n{=D`9x(CnҕS}.@ɾKwcG|֛?(U#JG{-<2먢I SU]S3_E[£ie|$ L[iLUJVZAT/@%絼L4Y'X3u,?e*n#CײA f3y)ӫ?S? ' y}iz%Q v%/qM%c( GJz? [N\SPi*DȯL>)ݽCǡ4aC/|-v ;Eq8O]3+]uDȄgl'zB75˫ly=7U2tȕt]-ɎѺ3%gS{'2uzi^~gZ7ݚ\},9zT2qVBX3c/"'fUħ: 5l#Lq#h4b*Lf`.߾g8z_(˟2z|I m n"{] ^vtץZ6EE T ظx-9ƻxb6s؆_|iJgR"ٍn%w=3vNctf"G" F{QEt_ó3z`L){= (+er)ˤ0">w Z":DnfWfA tgy2" d Ab7Boϊ/\$Nj2tUVOAc0>i.hCջPQe_?CNVc,RV, ?(ʖ {IY5:9 :M*W|A&)/F=mOr',Hؗt_/SՃqqjHǁܚ8jl&`xaI+,qsQ&q zZTb]zY?r(x}$fPĄzCYT1D1*5pF׳m-$2ӐI1׋}LBc)1͵)_uzA F%oqe>N=* />n֟ĞdgUQU4yT "Kiy{ {{knT)y&q˟j8Fy`UHDLy=  tsH/*TAK`EaI¾!,*Nnr!Ү@9A"/$}S%8 SN75:NRy? USW`U]Ylm@8@`d+|~F ۛTJϨ]5ֻA 5@ǥ)91XWY 4Q ;e\ޗ=dn9GT|szn~a덓|&4DzTDRoT|ݧ?cJgk/gA!d: Vj^D=ڑ+{ũ<d5Fc~YK{yKBR1=$ tyխqnboY?Ϡg鰇P C3uF{)nyJ |V0Ɖ2@z|PH/>*S΃}T'$?ЍСT7ᙽҲME,Il஝Eu},YፗM=.r2A/oEIbM c/Bd{ s-:} MۀvP:xϽf'—O+t"vG{-z=󆫞mk/&C+7W/XrWgf+Lι$ W7"ENeAKnШLJ G05I-5nn#YNlkm^qhm c'pd7d5Ԭ O׎ǩ ꂶ 7j[[Nr}ơt zՖ@{cG0,C!*bOݿp~+H0*-.r~ey pΥr-\FHy9<^ksyHITgBB5n)hvcȯ[__P,v^W;۹Tz1=>䎖<D'Z~ZTΌ.uBKR7M 2|QfVo~U?1p=Cj.4j=sxdeϣRE"҄D?1}=:+<'pyv<tܷ6}gV%-^T[/hg8Y"fuCK ɭ:YCqY+[-'wj"Ol[Xa|=n{A:Ĭbq̥^ce\=/hJ]OrV [G=^|yTymv' XXC]$NZp="ώHAney!Uг8ލaI C(nIN#:'JHEpZ| :%WlT|9S^hb/LdV%!DhgvZo_ErڌcY)呭}7za8<^@ks]B孉vrh \sCSZp_W̒R%v9T?Še4%v|]vЍB cInH*Mqf Pv wr!3*^^AZ tygKʓT- >9izvYEdUJLΞͶľ5yFjOnG-{ܙ $_*E#&ABPEAG^nujsWzZJWW'+H,\ZL%9ē2,_<5FNnw q C100ЫcxXA* c15KtPm<0*0MWLԉ #ǡx Rårhm+D)!=t *=WHIN,`.HYx %}(/RT}DwzdQ}wX7@~< dZze_BX'+5`ìm2r~D4bѽClWMGI r[ER&{e[DUnTnie,~)6*+%qÌd|.EiǼs_c[=ݨKI]݇IV(C/|9(o.`_V\ב?EV"$_AP5,r}9W'waPFqst*Mi]׿,#_%Tj=܊qAb oeE8h㲪En6kj7"SƋ ܋gf+}J1YN0ިsֆC~G!Z iC7/CسfD^mj`ݶVteUS^coʟAq%hF4S^Կ4Jy{֠9:ɤ*/ gi}ᕧ!WEopjT_{=Uay,xQRW |P#bSvPqOQGn)MI砆ё($7J\w2vc)I--*u&ZPA~&zV}PCdܼ< ?['܀ qא*LY}u%$PSsQ~Ayekk$ 7l\SsEn.`"w&+#VOGUެrjz / ߮Vn@uKQ,a P 9iA}޷G%n(SC(0ԭV#`NIͩ'kA&䃢y%'TdV A湓ҫǝzo}~)7$}iiWmlz _=Kc!Qt1ϱC՘0Rt]$yh9 BDq2ό\Es^rA|e?<FW|E35uht|A"R2t|6V:DMc%FNݥwE.tڍc߷PݚF?AV)N\BOq|h#-MDDuC9ʰyW 샸۰g]8۪8'ۏ,u5ɍ `}^m $2O²aطrg``7YzL^^(5\*׳rdd ,AK|Ou`cZ6w?k%Ku!aOeJF} dw~n3>FR`*ERU+dK>q\fwP}cWSdh2֋qRVQTKCˏGқEu T1vȿ@֑"],iil2IxI.VV9|lM@Uv]|Ν[v}Ym{^Ni֊%T~^7jɮuo(lZ[:#Pz}8_(JqJ|P1-ЫsC Cj?hm 7T8|9&YyՇD䤠z9rvm.0exj(v+% 1E\qϣf7FFX⣟G6oդY"*_c^*Q ^:FT[ }}4̡rj{p`a=(52%>tg(H ?OE&?zbfcTMpHU *Y /м lPO*Y4!-FPF ~>՜W0XHxn i:z/ck11#KktڇD*_WP9辽d)6,Bz~)!66U ~rODqm*t1qyW>{mw;` J>[1gA  {l-`6t.Bl|e]u=!+T?^;+SHC/nd<ݒl(kq18]Ew獲#,[b!qtH9 T>,@",V= 1}7dSQasd2iݨYR*݇A|ygD%ќӺ,`B6)2Z6g" q\~{gu>ϐ:%Q`1Sb"v#N;y7?iܛ#s|׮Z#iq22T" ɩ6b]W>7_ԄVԁ"Y:1xhLx QR)lS$<2tM}j Ic=;'4gs=Ybhi g1E^ܾa@7(;ܡ$n+BؠFz-F w|&GI"э\gxzJ\Ps.ۖCny, +qUoX>b@@i)_le>n$LjD"ͤ )ldg& ~ 1guqSioMr(RcA (n[@O蒗#^ΗWKIΦcK5D#]*}6[FZ#K}9Z=>26֔*vaɘ4:c-#['r`7H3:;wqI)nEþVp`D(T#LWmvciuɧ܍!2"Ib:9Qcٰn) Z B ށ}4w f~/t$agdM٣)Tc5o cAQj[`YB,+nJ&Qʥi2 -:mΩܫ͸?V젆ȰLݙ|Qovb4-@U:asI*s4vX`Zy}@4xG.848_mj7 d*_/p+XXWկyD[UcJnx%dSxT2##Vz 2FW|H9sEN@1:Z+wTa^} ,~]&ʩ 42.m&!x.VMy8UqFAb7DeĢL* idy(Ttz-y-\I C}!/< ;oTTdI Q`ŃsL=Lv4 ڵ>ע#(s;s/p@Ңl~i5c? pH(  S:cgQ1;HJs{R`, P!W\+jLG(#]JL00Fϕ='u70P0%v|2Z7r*%Mt%ܝ|bDDvZ- ҞE]kReh)z"W)kLc1'_wAseSd[r x7V oNg?iPP2j4~L0ߟB(2=ƍ3/+]&X+$jR YrCo+pAr9{}V=2&\VԐ ]c HɃ<-6DN%֛Rw *}FzĴV 5B)՘v)$rJ%;ph xQn"5cF9՟zUx,sq3/E'=xdJI(œS5!!s >J2j8%XT'?>{\l-\Ϫ`}#ă^CLr#p4OXc,4]t tXo5nIY͏?]ԉX֦\Nl}jkf:5woNrLGEMYЁuKvo>aOcyŻo _CE7>,pK1 ! ĬS3.eBnÓiRǽ7FTL.}Dv :8˜MnRZKЁ Ӯ| „\o@mTDYݼO35p%%:S_χ-Gc謨iC@V֤4+*sxv'Ai.jii3eAh5zA]TLg,0U7J^5j:lm`Pph߱d/fiub]n4?uMu? @XSVy(GmM5 2v{T DdQl31x `7}g:m^q}.pJ[]U0^Y:,= ꡕP?͆::8j#k/=O(5!ӁhIi_BIg YAܼ,]5Cu7+{1\(dhםrքTI0C6QgݱJ qrrNγo>w&aqU-wz<~1!=PLiڙ:W8]s?1á"!i۹V]sZL#ε]2*scb&B?2)^BKלq=fi 7wN,-E b@n4@ڥnj@(Si0;t&8Qn> v\+D0@ǀ"43z2t1A#B3tY)DK Xs"nfYK11ة*tt0.y&wr@veyʟ\g}4lH֙.3W5n tDFz͗~z$uf8Nb6J$q!}>3Mw#J4䠗~ImkgXJ)/ftk. v(S [<ʠK+&2,E./ +"RYU9d'XyUBn:Kgm$d8}-97˛3uDU=`h4` ^dͺ%^2,6`2/GY+skg3?hr.8z"X8%y}:6 hg.$T(vOطѠ2)uAP{:EO[ yšPg}68 8{hTb.;8DtjX{߮ C[(CǭtuL&&HV)ݏJmzbWC+0|[JwPxo=M3=B{)+&~[ Sdؘp;o"dLvhѰ僸4Y,,ٍa ›q,f-iʢݎsDıF#-o߂D'dQxGG7o7MxFtv?(C(eq=SC AiYøjx A~whl*jG`7:S#JB ]A{`P̻ǒ=5ÊXh[.$uXS~lr侽 O ĥٵ$D-J V0['%#Ā^Lǰ=v{+,,衄%r8?!hmv RE`d.̐o]6G!uUTαܮ ;\rǖzu6*S`wmzV4[XS쒧 t2Mjf;@,MCHX}}*2!c3fCT|XZT\}@4r.*qǓ6E.v3Eg09hHD~.] kN%2 N8oYמ  Q-kWɔB4c_OPT~\=hu/Єι T:)!dQzI$7@;Y \\ˎqi ]-ԖƼ:BUQ:Jto`{#/[?hW,Lƽ{1zIz6I[%>6[VB;|LU/PY|z]/tT:{yr+ I/ tn> =N'6#581nN*j"~K8/T!Xa !M|ş{P$<>eRۗm7ƴ&r7!H+V65ޔ 2=Z%E-N4PCИsֽ' =?xE9'%XA>+FJWE(dAx|ؚ퇺i W &MAj/9J-$0g(mSkxeRd6!Tr/C|{^Ezm|SBӑ/M;T`TP$υ S+Mh׆F<{ rgesu^>dו4vs>tH4 sPvaJ>U/:U%VȻ:}5W-G׺o)F>D}@48PjM($@Pp %0|_q o8+,]-qggkgZTPw뉙iЦ9/ЗFx݋RQ ?S|̪T销o>F,@ N:(4K|4iXr?=R;"EP_K޾5@!, i iT]U)PH#qxOw1oa=m/r(Ah*'+')b: By=.JА2Ot48IۨA*-vz"W{dBQܚ7C "qg*K扐n #*g>x2n!(U>(g> RGE|yFU2bER=_p{P\˳8QGS oˆv4Ӄg9TU3)8syl!Ahe7xJkގ~$^YLSOzl3)x^%AVw/m ~">̈́IeYov8_<}r AY ̩lb E`gFTCkJJO)90xyފB8"UNG)[cuEHC"(3" RHMG~IPTXS%&Y e7ؕ~J ࠆg_b[;ӤgOpJT-H& s5X\ /Ig:QKY"@OQev)i+#xcRU1Tk J!80\gVtzРuW(!ф#Sؑގyc~SBEZ~ `|&մȁ^I{.S="{T={`&EhO?$"}T7Yq~K_Daʔ{(eҲ`=` 컔բ~1'eimo3$ڿm9p%4,0 -[=XjLqD9dBC+w dW>>hq71ttB  vf*$S!fb mݐ|:>XXN㾅%r&V(D- v"B Mv=i8̊Ya(xE `:АF$hCwyөXE٧Sèl% XE"a|c:rжwWSO c:+XO_U?!CARLk( ~ɤ103d 2:O eEb&5}}0c1TiៈtI+,c KSyEJ S}:K'%0&+T=3\Iݐr}' x^djPI{)tJwing~/FJݍ̕F|#C\4$WP٦{Jo=c%):OBy pIk?G908WIaẏU_@)˂.;\q8Rt Kbd#zr=fi7nnۼ,~%H"*˞NmݨCv3ՀU5V+*Nco2z"t#&HgCgꮍgB+Ygss"jO,g%;vEf3#!s9Kn!u]9{\j2E9{cA)!RPPorDh9Xɹƪ;M}XBV}m=,t$&@6[A%_Ę^C󆞳esЋ؍}cs1,i4DgLC ۲L8WoWS{Js- a_53ɇ yicN(P-鵍a>N6p?}١*&"wZ.6K?!vcSs_ o=APWZN/lcfl˵chB9,6@Wlm .,ACxE KcEP!dI/1QYgE2~C} 3h >Ʋ5`mV]E<|ٺBIFqȁ9l)ۓět|kFkS}V%\ғ}B QjAz4^Eau\Ko]d5 O -&Z'2߀.P ؇YRSoڶkZ':E {*ŪH=Jp3+Ǭ AHh5{A_v =z>4f2D> #J 쁟AQUn܅Z6Ig9^s74US;y#B2wc ЫǵJU _Ff6ɀrچSҵ4nJMYQ3R tΉtTX&FIOU,6vj d\V@eZ@UD,TR~VL-8u8I/-/áN:jҞ ЛR-]6əxCzoTZR.AzK1!L@ :JT۶#Oi򋿢aOb5zɶGJm7]`Enb("-X\6"Acd`j)iivQPEpV!vj<PEh7* LCQ~y UDb ^|"-{>fJBΤA"-B(0gTLt 6]GOUUhL}(W#g/]J__h]=R|0|h9bl/d鋕=^MpI)h7=_Z ~0}p4o-@[(s o0 [B2}"$BR$D6-I]()fz;|8i1 a[u[1GJ`7BDcy=Goc=a[b_wf/4V)+j>ȭ#E?#1u(=]*^SRB' Į^{ 6}{[U$HIE)ٟl , ˛slcP&G妭7R+~Q3q\|>.r.*o%L%,L!Eer+BoЦ[Jp!HR +.ï@uS"Ha0m&PS6WgJ iAa/ti(3U0~QM5<3ƒe'8Avcm89֙{(.VEI"^AA,v 7z !~=j!l#~Ϣd7'u5%T$P}i( o{]5Ig7@NKȰFS*#/"=̰B>pC!-EWmP@ķwCјWoQGZ2H^-Pu 8{4K/v5IJ4~{ᇗ]5!™^M$*|1R(aKJY4Շ/u hЃ؍JH5>%f#비.ziqo~%u3'DͫvՕC]RY*Fh,>~#BU E硚 1 jDyէ=d#E]!#RO9OP/\BF8ϴ9,6 gt)}A{}j*D]R>蛥=}edZ"8yy.#_{H?Uu#\5(,π<.gk:e1Ö1$!I\6.{Ɛ@>IíȒeW7/6b̺n#=1M?I?ʼ(O|._]׵K.۰7Jz}C*OZd!P42"VJA u&e35q"呤_qZ"nhiuNYwdC]wBLsL0 Ʈ ()udiOb\A ֞Mq- !ᱷ[.fޓ]f~mՇ٪+䷃:fŭ՞+2NDgށFpFHDOr=(tPTecV#"al[>.ypzC_Z u/u˨S:ӇAC~*l;>%p~iC^&SQ=ԩVLv i!Nhb 2"Hz O|}U&ry 6:#XV4K"DgRr%w_? X Fh\jGAj a,O jݼ5)Mf2M^ԝY6X*͊ #4o3;kY יψ8 (fnF}4%*ɘ fr-@|J(f>)J`Z[4t6# Zr$4l!-iI>_'qS(2;urh1 v!\Q CxWĈ|LX;oI=QΞh.nB`cT/DFF 7}9D4JؖôPF\vR/x5~&@eES%Jͬ-Z*02 г[C慓B3V-@r#JPZU! ~bT DgB-/VZbM40=R6b`A'DvްkX![ŭ𳡨+rۛue+*bB)d<6G:GE`\{zH4Y3>%oQ{oIJD&yK}X48p _dK DǽǠXs+=c> ʚe+wN $QX5?sʳ3q>ᾬ4a+gUWy}Mf#Biw~{75iM ]IʲEiOl aP޼4yQ'(%FϑAtn'~%K΅s2-C]|Oշw_ Q=0R֠=J)bB]aK񘯌Vx#&CEog74]O!qhtZ=z3+⧺07r9Щ8JWrm+ڇjr2xKx (je X P#)hpIJME֧Wk hxb!/.uK܎1ͷU^`=y%7 *y>h3[ǂ;!DqW.4Zi J qqU-Y|J)En=hK%+kfp r8T{[KgjID-!ס;B4G62C @,@'%Y ck &gjpP;(zPnr27dK8Dw,LֿY7!WP&=`Ǒ-ۗ-z< &A&e5y뾏aC5-6;==ؗ$zcիrdjߦ)dRIiܯRrE%F>JnQ,@)6H)|&nkW9.Im[|}Ə*J|mdGA nZ޶}_D ~~Oe섂d*- #Y[!N7nwPC4J"oqB(FT믌:C3dNn зs^nt!E,|=?5%Wj#"ĻB<ѽ^8z*[(M@mNoT\̞f&/Zv Ԇ މknJ lԡ h!1Ob=մT3/m]Z蔫w_tOuVJj\4AN;eS)ۺ^U$ȦK`-O beUV6bVٓAHiRϕ2U'Fi3'U98ԡ] 2Dڮ<euD;=ZVsZ=>;drܺ'沑u| D#rNs$BEoHrmӻt˞ Ptͤ:r:)ƴ>f"`5D<=z_A#v)v?jTB=?ElU .:GyY+,S%K}qhV* "[X)9?kw49k xHG lxɓnWhŊiJ! *) :gOX i!?t 9%2hFI_d#B^SShWF_!wɲr>CVkGY>3r{ rQ.LU7#Pua4i*ڋJ35چ.h[UH M-Y'48FK"2gloHf݈ ;퓢k}k)htk77E!|a7՞ސJVk){XRmWe40ˋNDN2K_#o>IB->k7Uc]Ͽ >jPumYi6Z2@k]b24 &y{mXQq1P7!ei \(:Tb,p*IaՖ[Te4+0i;gjC:vp"dJ g̑(5)Mw6"Bj!(4RN$QnB `z! jm=K!5D5^'k~ۯq}d)N` Vqqg@},j(W+xElf{{QMX2:ɝڏb^ ԼV:aŌ)Ď<3 ׽̶fh GV%`(]VI ,L%,yGtXWNoFT;QءվnH|Lg4zf XGB*{S$ϢwIŸR "`xf CߋvPg96acFEsv=U.\;$Fzf'.r|f 3Sfi,$zf:c '6{> GTxA9ƤbpMyX@o34q [%" 0X*%0H^Hȥ8(B > a%Sh~jNs|iwƛ?$, c=3*Ԧ5>t \/#F: 3kPU$^^w/s ys}bĜb,ry}dʾ٫֦C}+qrÜ)9޿2RjF Bow8zGĂl yJWnD{ҠmtwAԒ&K%+: wJLY#j ";Dk'_4i{>4m͓'c#Um ZޤXcKzQoDnD:+yqZTKN @,{yyL=WU{KBJLAm8'#w.Bj0JlB" l4iSTpuR>G)gRsŊ-"L- 10KȕljR6 :g`!4fkj2,xqG#  ݡ :>Щ؊*mJs¶jplNb#~Mp3m$Lt#?;亂_KRKUNJN)I\sIhPiO}]Sj&˂m@}7C:wxA#V=/tVnfRRDVf7:JC뀼ϡW wP<ňB"K0MKOZ$@A"J/pp:-gKȟ>3O}ty;GE@2kXӮ;wv41^ R:I7@'2Kfxۭg]>Wom6o\Gs h{*r/8"v/NjofmPV${4h"]ѹIH5 hԏ Ɖ`a(\][ msb (Q˄?clLw}ȩ:ɀ}ѓr"+'Ÿmx>0e^E#YQj' B=9d>(ھC]'@z&'hziL_V0DևAwõBt] jj) Je  tF8hv4\A 1t9pP:Z ʵ{N*T*u<(4#؏BWjJlz$0P6d~5iyx0d8+M'%a ( JG'4^8r«D^,yy,bB 260%xSdNpu9AݨNm`L"4dX{3@^0 Z +8 д7|1Z8)27b{QBYY A.8[Z lm P&@E|I&Z 3Қrot#(6~qZHvCd@rů d5$hP|f%8.\[ Eub4>?hϏ^KaӦ-"}ųX5`c/y (z'?O/Za- 7+H  U{53n+ZY8T.4:"{䢄xu}޻RET$ 0]-:gͫ [ո_۽C0}:@l .ҙٝF=g8Ajy%qbRø0±__̋b}2ڏN'Ψi)t b0蛆ꁿ:OkȝfZθSDuKGH9K n5 z~OZGPқ~s_G6-pUKrR|ӢQ"L8'}ҺB6`zћ ݲ,h|s:ֿ"*s!brRӄaYeC7) +Gtx(N1$ޥ#^Jgr"98C ȑs>32ѵ|'vz;@:W#҃^~.K&rҏQ"rw1w`Zǡlj˷Dy13Ɛm?(:ҩ=@FX| ,FNo/XlTb|_?!ѱ:I@NE3hRQ5K]fU&1woFH<Vv]G5BA zXHDOԟ5*IUF[I[:1mUVǬ;xHm@iƃ\ADG9k{5bjE^AVK6qD"lNj\ɤњ9 V>o2㹨 {j+QI֚஌B V =1;6b$G^szD \E٤x4mdØ='Ap ǭda鱣}j:y,՚ p[Q'ܿT%Eҵ$Y3۶2ƿ::$ 7x !jK3 I]K-yO%o1ܶ6I5p3XkIy zHrϧL(Pz6cayκו7 V=ِ :] Fo.헚4[)*^Hby3}xbxHt?"=1pYuxQ#T%e?%Iz48ˤZ؀o*IOq!N%+zӸSYl*93MɻrR)M"L~(ԕYjw&yf.`=h-=(R?:; ɀRO&o fms8NQޮgݹԁ1,AG uzVͦ Q \ZfA5Gl?@ vU\ 0g@!2m_,b-P:@AU1t/1aIuB2h6mh4n.Qt6TY;@io1Ƙ]lbhg :E\A@ DTŏ_7%lF"tF [!}lm@&}~Fя4 E!QkQv;YlM]meAq5E'"V W Z-PBS1Jxji05YAt@1D^ WϜh -[sVЙCg - Qje"ɨZdI-o-e-aĕ"gثF;2b(czN$XtQA{@\[8I{Mކ^"z]mXK`fp<%W^t/z%_ZyHG %CG+HkW".-F=O-^VZQa/ O&-9%&fն}4i-7,{q;< ֦Al/+\AE8``XѰbU`j4 LD={}=ǯ[^Ҁ,ZUs]ɤ#Hɒ~B=k0'Cs;/,a+#FqLfۀ# @}ush E՛}[FF)=<>ľ P֟.$qn%z;&¨IW2-I}+sx2-2%p%⒳/~|LMJ?VE x\_HP<9Q1p%k\|*kgN;YȭIQ*MZ]) jb.YWs΅NDC2D?96>P*5(H~5R>9{&YY `@E%&B1^LiKT sN_(WL}6k<=GN}MMDt=5Y;QTtOr fI{=8S$s!4RW$oM\0N٨`rb,9ɢ VLFJޏ?R& g{SE,(ɉK]d2ǰvuHA^:M#ڲ-NDڱs.ie[~ -W>E8H4Z`smQR! pEI 6Zr87*\k8i@PwooZÕLz^ӗۘ@R>U$D^t*G ]Ϗ:n٢ |%{c_f{5F(da{ş~qx8tsyeǹ]``~8]$6K['T] O:CQ$י㶄\?k/@秒}Iq+&Y|d0:߆\mKa֌-xwz :m0xi6|/M h Mh@E#RGDoeӴnB;@@wE ك]NbMK_7 +>}VG`VmŌqD}a"!36wnS,%?/G5~ړIH˓]-y >ak+łn gyBZ#)|)-dBL{?գK&]wnfR[4褳F/mt9 Pk)02=I]J24YC _y0,Q~Įi)MNr ws  bnD.!igcʎ MRR<0Vl$k#?fKI3h64'5e5|1T-9U/=DWQ/b+|FJxU~Ա]!ZFsjg}dްHΖK5zK ='_躷˫/Kk}?jл(q$6r+haqj=,iwQɫ:~'3F) T O}I`\ҥtJB-;|⮔J>P%R\\q=RF2Wywyc]\HR|يit>ϗhON$YHjߤ W3͓Щn{wI] UY79ܒ3ĤdjMW&(51q#ImWwZ.ʆ`)PE씏yv<9ql1+$ # I{XLCajiݤUX>{1?rl/u^}5$[Vat|1=?}48!kKwN[SʳV=8' HzV5f[o2n}R|kzuH_,(TOY汖 #%Ո@6P:nxyB,Ϥ7A,s/@m<=B{> !ȊF$a֧>F?@ioqbMUX3}۸`(ጘEqH_ڠFGQ[U`O~uARB-2$YV2\%8FCSx?7y1dOŠPsE3'%$xRGӃְx7v-PxR˃WoB‡$g6_?Jqy)X9nAb:[\}C7AFnwgXۧQV {qhjUfW:t[['ee97p(/^%K/em"{R$ k@B&J-9 Ac/qe%:PstlZPhn uxC&/=x8ϽQVM蹲Dޮ5.U5*F i8i5:$ME)ao7MǑXĄxԆG_)[]tzH=E`GH-^e;Ҁ+GJ V|e-Y(RW/lCs/X#t͌r RS;mg=5/ޣ{FGGU/)$_}+XϯsbҀLP)o'e04+5ا2\$q{г:xBsVK-2zQTcP{@?"~!`p՚9/Nk?8Wc4zxw.w{gREyʼn1z&$$`cVocRY'f?fJ :QЗCbc}R~GB'kl^j*]9"ߍym G${nSF#6.r=&yn:)Wg~f:s>@Ҏ~b $K=@T>7'mZOI}%/%ԫ|F*ur yUN }>QjqoRR \0SHx l$g8}V_Ie|&?R]mk5&t D_zR:N%HkK> ~%aF }ׇq,gS`вvR:z=*M!GiRiuKHlMB]zBSE%i5XFTLݯ-q?&K׏gm=* 9hQx,Q#$U'ڡptIA?Q gz[+`I;ƽyqg)+|}|nh ! :9G ߹6d;BH`%6"~*g|RhoI7r ֈ-ncR"{gCiRVJw=Aƒ=^,ެIzeyMŢ4XKݎz`zw>L5IUp?Nm &HCݒ3wF4 ft., An(GK3P/n ϶iB{ e`ɕ;7#mIĤAcvG4}YC`L)1]7lnXt(dq7€N1XR/wB*Ag,,zܸ_ xW|LGuY`皔'>phf)@:gTɬ%{펡/V'B![C5 9t?g~Q*53E|JZ;LJ%H4ЕˤU!=5ҹ/ͷzu'inQ.=DCNC9ȺO,hנSVZ '!9TE>XAE:yg:N߱zIE}qZo1ﴇ`99㱈Q[ϭ:P#@:m<k}'.J*^Pi]n1J{3I)͋a-r6!?{1 iraYnس·0^YrbCfR9FlJA'-4_l]Ryٶs)znOyߪCyX1@ϵkye/ Ex<ߐ4oysߐCE0r'a-A$?CݏJz?N>oqoVDnC՛^S΍5}xirί0᪡GWS⏍U4+m ]Qn9ɣj7!/A|z%84a }ym|A]\,AGTM_4k=Z%Ҩkv!^>;! Vu[`Y^qbGߓ5*L6m!ɞZlMe_ěiudy?Ԉ O8 2[;y(Ryԁ c>AV[=*sXg7#vj3|u\̻j,;YVa[kѸYnٗ؃n ry*"N n-V:9ofI&=ߩWTڼ { 'MT!Ҽ zusHI5pY9tA+ʺozgk Ba ~FHW *q"+ xr >UXj٤q^qߖ "pĒك>1rH85 {Ý]Q3DG] vП'#}6A{|Px_}}=lnw}vxY }=?3(`un/X\˻e'.fHj%g[{uϕ"8Ҙvdn+ܥv,|H<\O} Ryǚ> &`ˏMۆSX5!4^TGkLUM|}vؽpz>{7cwxVFs=N{:,VšEOJɮױpR} 6SD۴Y>`IG)W+}g6=hP0:^ /SRۉytBcI6;?^hAkչo9g!,)NڃԷ&\d.gǩ/4S /qyU:F̺_QtNB>vP̓ Շns?ؘ=$ѩ$Ӵc-0 p90T?=#VMt4 FKzI5CyEa{@p2G[ƶ>X =-(AUL2@;2i6B`ƐQE N3CՉ sVHB n= 4l/n&y44310BGu5JlP n@Uh@h2,@(Zak#iMBd[ EJG76jp9SJ<.B׳kkMEC4=$^rO33S K ԃ ugv1.KLgJA`ME\L-_ޏb L\!7k'&i`ӑ"iGq97MACBkS&0%%#5CyBv( r(<ިEtV;yK~|`6@GNgdZakб/4;cA=`tWtfd!vty*Y/3ccAbFu`h:EKnd[ Ew[R͛w,)a |$j 4վ[j^^ u2{c@ݪrDe܏x֠)!ǂjPu +gHOz>V+Ŗr Y=_^E'&J?l1/bo1Ho_ްJV"8z,Fvvϯ6XN.[PhAcߗتA$_O/HU'>UekrMC~zLܵRS4(~hu*}^) `~bPYN>!҂h.P[cm>3=JqvH.}@mBF~XCVS/^g C E(T?hOT"l|l~\}};6HsKs[`oSPFxSI՘FR e 1T;lo8_)mhyjmvf5HbL٠_xYüwb@t=oSjehr޲_chP8!J?ԚT9[_Z()'}~+bPUfwM 9NL9)au] `qm_ &U?gUeBteOFTċ=# 2u|6l5*/>]z5VZzJ_=>#[Sh#E#M1y#yE 2R>< FhY#G.&{X((VJN/:2= vByߣῙ-{*sU8?,@*( SLN(ְ5TE*𸀃<^$?T}  '_ٵ jyDY4#b$\R+smό5ೢP[me|I?%JoD?lj:AC0j8̓6Z9>y D΁^M&ocģz‡bT>xpo,Z{{.Z[rBqZz O}Ld7Az_ y}kڂ]36hbNolErU %Q3.; Xu Hds^qhCFU"]s呵]3 JRDz~.tE9_pF+j; eQ](7A"Dui$Pgq}%]TynɃSd#ClO?|XCfn<5wd~]$v4G]nF:XGKAaC'۞w'{uC6>ޔĤML(VO RX<ޫ;E!jFx=懶A'>h>{fj ߞjLgTL,\מ#bTߟzqT@1z}@It#xϏe;U7'1_noM=?^֐ 8F>5?Iv*bkx\[r!0B5Seܯmkخ?[rh1X +]߹zjCO׍?l/e 8YbV7 ()'vkɸV/Eћv.s's.>["e(qE?SҡzE_j%mvQq#q7m(0F(6[gM1~vNR~QmTV>_.0M<9U~W$do̘_#&nWM =`!4haD7x{;zln`'rиGuKy" &UYp\9`;(tΞ@?vQ>,lR'lU4Etd/vA5$y]$TtNTq9ܣ/ D]u#nB-WL[uLnrHCb|[װ}DOSH!aiT6nGlX^C(޿7,(Wt $ S Z2.ᑷTz6Qj&F:#I-]z]aWբrbG1!D)XO}$Z6l7ֈt'T\GAeػ/;a(AG 8'.oU.7s >gܳve8ksKJ٫{hVFhAEzJ}p$36y/Wŀ#Mv~mZ͎y!bܰG5HBXs$uQ!EnnןhU|.9eY5K5rKJ1+9<2nc:@pBS![NV;Q ]a:>mԍ%*Sn*>)>6.mzv /`Ɩ- Z|:"Joz415Qa͚FG _=҈CaKOg 4Ho=_Lۛb)lL䅭FR:?EBרhg]ݪb0=,Tq+s~'҈(crul'8(i~(7.vX9C ~h :.sor0 kq^4PPHX6ZQIlZX9.S2EIÃ܅=i?!U( זpq<ǡ$\Jâ4F('#^˳֐@w]uN>;^ް՘2:DrʜE؊m/n; tʡFӿA\+X7q>r:BCSs7_FJ4Pf>3}od'+0U0<,ﹽFdZfG: Q4j't-3hT҆ meRͤ#n؅m\GʜMzY;h,a-1t_}ol@8̭jw F 4#aj)kB#l DFVOdXq~B9huaFv]nmӭ#D%>Pҫ]DSr<|~}^6STG i1f Zwwn8UE^kY7gsjlr]>TQ|}=,F'kCW™_Ze)i͚!{ q>[ ~UChG.f B'}{wl5DM3)>fYyxZ%?yE[*~l y#2{((YJVɧlOQerR?xN l1}tqɕΩ[ I>!󺨶muܮGgq"1X08E{ /AhYn#=Qm ]%QY8Y+ʏ{ڵӎ|lj ~ܡvT)wtPuGѶ{75ܢ\"v; S/q1KgsGD')_[ɔR%êSowHޣ0ӑƖ]rv&RskJ(ːu={vF>\!΄{/DcQ*oVwwLH3g>N,Շhc} :Sĝjra{ 9qbDEPp#xt/F@T`/j;gnjc5E9>YL3#Rj^Hby];v"@D`G6zL}P'VV^*l.X__*5DTqdo^kHCA~^wꪶ=$\zq)ej׉5Dyj˱x"Ѽ (_5 E)SSIu}9K(1 LˁN?O0 vJ``c. :ms<ںoX .xh0>)Mg@mwn~еD3PS%)@D``%۔Cֈeolo dN`HG- +l+6o|[,J~WWř#ܙxIS` V*Z#H/[ Ȯp_pШǎTo=m6Qz۳v޿>]:lɘFYJ(0-i١_.je2w cW z<)ИA{mߒ}gV+P+˂߷jAd̫hkǑ#I0u|?tu5@!ٽf]3VQyW{YiVcmD:BŨ _vӮx0 lOut3a;~uIL1ws/H6%+FoT+vxckު1qvTEuқse*]zj<#BE=3e)z5j%]VPdE|\{qQSPP#7ȳWCd{pP#htdFJ:k]E*}{^'9 T@A25hNAq۳Q1Jc"5+)Hnu^nIеqJu{"UZ7Ǎ+yIкdp而߽\`UF=t9ٽr'{gu4yD܆ i* їM{yQ#DH,5Gۊ/j'`.%#viv!$l5Pd_-5ENf{%z.1wK`kMCj%7J_yr?(rg-93F'I߈VckzOlɣjD-z`cLL?%5 \*~=mxS:E 'e)O)7?fϲ7Hהf=A</C߅ ɱ$=v;ȓKaA}a3yhK&r`iXoҿL4WcR'垚@NVc4+@-g*WNA96ko3gpҋ$A >ʹPtߊ-Y7̰OL񑦻"kàse @B(&d: bu#/BA]Ejf3]z>*q$kGTq8R\=ttTJvUJQdӴ߻!Hf/8d&'=H6jT-J 2ߒCf}AJ3,xȤ}`A`hX'2U~z1^ٍmZ(3wf%8:T.;9f$t.+TD Hk}H.˒ #njpF4me1Yl q6M[rM8! ѭDĠU~W4P`>;4DNV9;o"i,{CahUuChR-HHTw#o>_Xd98!!:fӫT Z F|1h]%f9lU, Qщ`Og>GҬ5I) ޾U@O= [V~}Sm r'>nSm ASO'ȥNXB94։zO7WWoZ7smxH"{%*)5VTU¸!m@PPn]>Md AxE zWOa7"Ԣ>؝f|YaW**WktoC 3:^W:oϤ4;db9={QyGS7"Nϔ>8{z5vY[b%eqZk(:[c(=K@7g6+?mJ'LĈˆH>F 3ŴbW'B1 “EK)7ellشUQix?VAPa$΃k ;YB1'/uij0r:|>uğkZYG|z*E[F>k2{ld]49Y޾"*A}b {VnW-D׭rGb-G[wj8>t)Aݪ_'ёc&:/`}*g˗]g)=pqJ;mw5дVG@fzZLlGOn~y2hL]CR-3cZ? fXXk?".{tչk?Z:5 GfR1G2C akfO%o"JnQkRؿͱOwިt∴ָ.۞'-ح(x/lK1xx[1^ WTbS3ẸGƣZk?ty\!A,FDgkz"xjaQEˍNL4IհG3nX<8H;j N5G~" _[51⛢q#w}h_ϠmB'7*1\̅PhRT5E9:OLKu{"/>x݆]>ֺzk.ؼc{MtR An{Gt}:M?y]%y~ "3>׭%PecBVuBU\q7.#}~\92ST>y[Ft&Np{sRw0IK]h9ԓ|IcaYhtj YȜ510^kߔqiMnR ;t;EchK*'<`x>iIf.yտ,h 5v֘NjZBf:>CE`pZ)Oh=")n-ߐȺU1?x(!%ܢKݾlPC8i׾v4-ԭn;֨? Z Mcvt]g&jމI\zJSYWǔYhP>F@0i/X z\鶞~=h j3k/wj"4& zV0EJEXvtW^d|R.8<QĮ$(BONj#|w5M~,*oD |Gj> T$]S?}^g1DaVc(+%5~YD;$zGcPiQPl-_"BW2-¥਒ݞmA bLjKj3Z4jb̻{ 0N#4 -Z*\+rGFjmy4?s 3FoEkI~|fg{sf%.XK݊Xm=~"񭲣&^9⼍BUblMўW.v7Z:q-ß_oҁDh|?pqyOi]KO1;9+石 ީqKV:lKXPhffx{dKڂ8;_vTG 1x6pn w,]~6Ȫ4j`\ǝ%7 oB Ǚ~$*a+* E,8Wk֌wBSYYW;1Pi!H5R&Vc\r'~/\1|޲ONW;9H$PM(78 "{SAيDdZtum;p;aXFIapfbE{|۲#vwQoJ [1goM:Zdq}Og7v?ft"3ٖԐ%gfKSm5o2]یdHˮC:ZPr,KS#*°NP$znI j^BGgˑ H=_}=E(A ۍAh)󺝌%$8Dc-`~ `zCc(SװiހI i3%ɓU: |Ƌ(>^o1V~p i_>u:$U? zLz>5_u~{͛XPЖGW/d|ٍ T"ɟ[t;cY[+ $ s+Az6=FGu^UkPˡ`HF5᱌֓깼b_MOrݳ{\a1.2r[G`lse=_m5,WQsn2ydp{#`J1cԵQ(ݾ45cbOwOD'R&W]?3{K]Ft^&N]q@WՏmuSNHD!K=ዀo wʵ*E׌%jX0 b8I"hͬodcsǯjWl@6ѽkd&jGcgi1k[u8t`Bb?h'cƼL(kA}+Ř {`Zr*}I'vH *Y\q 4TuOl kcj*n㟒T D^;RݦiTM9e;^b|U J,JB!>cX-U f>OJÅli, X#/T{ETۍj6}:B=jvn~n[(Bh5dO0{`׉`Р8i:/}guhY-flO%CUGBh2M+-LP 3Y*r^PdѲ( E[ MNy{5EM>xy3N1F@Gfs6v @rY*z>cagN%R/X'],s7+"eoj}Ú>"y8Y4c._HӺ{فl`Xemy[Zҫ6s\*Izk ΚP1}B͚u}$ $%ZU/2X1=^y`6a@>6pNl^$}.ю J4_{v?v[lpב#taq>$I1Lز1yL" d%Pb\Btd[Q\<\:7~1!e\o`;rYoX6366MA꓌Nb}|tkB(SA^9y|%I, Z?Ethί=S Ss9g>5l\t[c/B_^`"oiʻ  }ht^bc/ߞKeޱVK,Av*Ayn^{=V Jc./P~i4uV6tĝzPnar#%?Uk$u/5Ͻ9u6ؔ ߰jQt'I>Qr5sy$ySNYCN|LG:DFSְL|yϳqt<}kP~o<=_񔷼ocGޗC_3,uF# @^|*a"j-/Gӗ:NJml ְӰ±R7m<3]=#9K[<9kxWKfr?y%똼f9FۿO U-ȳZ9Knn]xР眷_%?S:ёʤб_Ԑ!-}z qxFo=K-H,kdx;8`PAL(3A} 5UnH~.j `CF82*L¤=^)ypDLB X! [>ͣEgW샎L<9gq''DDDS uc#ًeuDʋg.,WRMQlp`4L-}KQ4M42@@,=E,;'/;5P"0_1=hg5EIFghtet`o:kPμ;#y$8e,KF33 Ka_F;x5]+$)c,TV^v<$]dbIa-0F۷kȎy6B(NШSM.6T [m2o.\gK ig::^r7uya9h,=Y=3 rY荩Q'P55:>v^/Qlm- 1g.!:s:Yaa۟L p"@x@Ɔn#?22B1#\:!C>voYP$v K\Qbe>%d9f>Jh!%5b|qq7ufkh{DKImȟO]ߊ &Y )P-Рz_! *:54v#\ahx ^p-?;D'n/՝>pZOt'֑q [u4P$,A.w%ɷu`9>wz]v(fE9og޶}Qc ɾcʫ>M j}]g$9H˗vh`šY q];4w/m&ه"Z>8'Ucmqbu{||d릁FM''^ n^Be1g?G~NOWWc DC"m8uM4,%"X^Nȴ ]3 _(1pZIg⾎`֟kvUE\dn۫Cgt(mx笠1jܭlJK<+Գ%bפ2_)?K;Ec^ډ}|z.O%ygȡ\!hdT`"95WSyu ߶0 J`>lČVJuξ*O'-B6~?e 4Eg bdV;C!E}\9Ëe-)Gk؜f_ %e6/- 3 ״˿A:& u=q6^)%7gj8~YHw_)y*ݯϵͨ $(َ=(8-{C` ;٣e[?wf=#5orh"d1r6~uPe!eP#AI:IDpO&\%#@:@;OAs%"'[+y)ꆜDj>C4nyN):(ߎ=G4t4N\D ʭNQ39%DR`G׮/T3?d[( Ek,Wj7bep~ZUcoA4 Gjz0mbO=χXl\_֐Iԕ _CƌUOϏ7lH!uzݎ,[BfQhz1.gUURSنbi {T0̎(V^o&&s~Ir&{gr,gQֳ_>W̉8l4UbxGox٦H&2`X]ZXV-w\n0MG,z"!q& ٠R#N媏5מyp^b;ƞVMB(0@ ܅&z4-˨v`(qEU(Q=-9/j ҫծ>vRϲ:'.(D!x?_Yb?CY zJ[Aj&luZcҞ~Xe *<{&ꜵVvc>v =B}BŒ:d#Qzqz.BoU'Ry7nLbqߞCw/-5qW3څ;PU#s k 1m ZΞ=#4x{eokZ*1)Nw]=7[PѴek\#\Rk4f'h]N&yJw *Y:As\dݜ$'k q~-M2ydArMt zUDFR]0Qn!W%f=i3́qhp  -ס̦(KdMbh 1nKi5Zb(@/!QtJ5yN]NMy7Icjc$Ϟ]3gZd;+7@to{NTu_լ *JE:c42[,~$ /=s䐹﫽BU3 iVC(ni{gB|- ?Z9OsGD)@cr*'jXW#&EPpzST]2Rѯd%un:S˔©fAhnQ"ǀdMk~=DP:FӅ#=o)IAfF8#$*="fEA񞧹Ȅ!(89F^|h]xS Џ_! IyH"% "jo4 M5AAgm;OA|[|Ӟs=5D7! ;Ň)1h'b"9HeWu9[zQ٭-Gyo!&ds[* VJVF3J?g Q#ʈr Rd:v$gfRzЩGИnVHJo~i[]vgGi {Yg_=Gx}C*@jpƭsCDcQzxVDc(*RrCgx@Ԡ=Cn.=^1-S4dxsj̚i84 իK < &)q{ V˹'~-C&ul)[зG?>UsBGK1әKyJڙx>?VFjЯ;e4Z6fnPRopfw"H;n8}fVl8K[ z-\]v?"_ߡI`=&o|;o҆AYe6cx<3:JiWOdT) ԙ"mI/HCΏkP ~CYZcč ULj#6K1dV76TooN͗x#t6d>H!  #kdQK Pų鲑=1-~>_P*Od>gExKcٖV АX9n#Bu>2&6"[b =zm"L#[q(WS42VDK|bF+FqRo{8'ws>#DjII_}[ޘ=qmT j̻HKMJKWoEg/tj*)T@#yvbRzNuR/Ye?;F4V&R>yձjr![6zz<!V xvbFbdÞzGUQ%W΍4`>Z|DnjSH?H[s`RaӘD3.:W,C&n}s׋}$!v ɰ|dpR^5{VL2Ds#z/k4V1 YICf*wHә5]bjQRPx=]mUTNcwM= 9-m!fD3Z| 4nRZ*:ad nIKKRMvIuqѶ)ݡ⓶KHGOjqL-E[P]V4w}\~ȏzѦ~qNdžf:BC Z.ClUҪ42=b$FȖy|z7lrqgP]ogLJANr>~OUb:nrFM<&cwxKN"#4t=Jɖ PR;:RTN^i1vL$]֒#~ q+B:[/R*]yM-W -G(iESa ǨX͞(W?&5ZIql%vܔ4Pfv5VLvuhn KbmElLp1ߑ.]w8n0jgF|T{q&&q䣦timcxX$ ;V3 jT߿kECf{ac<:yW5d2]CT9DNpUˡnϘ,HD]>},V+p?Ǵ?b d1nGp)jፚrIٽC(ͭݬYɃx" ٹxUw lz_Q;BJM^B>½/B;SJ{wy`(S$~aV|jqBjs,Md~S>$2m{_]9ƥaya!CG: Su,82 g%v壂DN .!ɎLr[($8Ugr$c*A`J;=5d"Jl^,i!?\s9XQr1Uyk xcbL,P#lQa\C^>֐IDZQS?|^ \_L-Ǽ׳=,~~-F\+_tѺ&PL'Wg"=|jn֐K'=JTȘ-GL [Rp eOح1ڢ&KYa$ZN҃S}AJ|c-N,]`c~cZvteJްɗO ͑8ޗ_ D`)'Pyѽ>xZ0] D%n!tvp3&ޠSs)ѴTFCa lot* 2?u_╽5D&l>{5O ˧_ RI;[=Nu>Ws{3q1o"tH+)¯ⵘЩڬ!2YR^2x7Fqx[G#SK`bA׾#aDѢ*QԧN4bDUX]F[?]F ffDp(uǗ4ݷ!I>.4Scؔ]psz4tYb|Je=5?bGCuν8.g8VϻdjDD 1~a\f㞅])ZPO%"eƶ^DBZ/JJPD):~A((+Xq tMb :@y pT¢Gp_7Ltv/4p9dMr 9K^l_KHt`#g5VTP3ZGt;g>xw鏝k`E[be|Z*PUE0,;p}EO!%ltGW"O{ EjU9sOg%,|;Bs k_? 蚓2f(.<KJYt_i9',ݘ:\A!j::O}rbN{FS|(}YwgF6OT`V+WDKL&c| MqL $&?s3ǶϯuEFz!soSGKS <W/Cv ^m,kUA,ӭBp۠U4#X.}DZf@Gr<4H{Ij=uTlX` ʞZ1tV͐ˆs:5`tu v1eD16PBhV,w6`٩piR 0t_{wn@<#ϙ{?PCи9@u8^a/tƫY!4\y+ Wvwߓ|K,pQQxW58TWB"^K; ge{m-5 *`5pGQ~ y~ 3ġ\ykK$2T4AȖYO_v(m78\s, -/ޗث 3ffҋ=c^3^.m&l!D_{^:d75Z`sž]alL2c 2.Ftү?k5Ds$c;bOGhۡbÞ%)hpP d$Y$~@vR@F;E!!wkb@n(t.KZV&\=uX07sT|b:hvj%KÉop&DY9ׂ`-K@BPH¿_PjeYe^tRB̯$m2 <dA ]`{2hT@Y~&JN6CXүXR](ʢAw^[ѽbɸ{ *=,ovb*13v9e4ʃ.Ek \K DsI ņ`®Q~VG!2{)s,;/v:蕖d4%B;5<!i!Py{>18 J.rF>7k`7Os;2jmb:nXho6>7 Duc >ƖdI* ǵaco+\K~`P6*џ|= {3zއ~eϤj/JH]Z?" iZ䅾O"2JmUO쨕~[ڏwLi|~'nM|T1_߲m2;=S|',*97蘐(6QO`՘W}Ld̷3Z)s|hc3Q` M\?9>ʮʆR6œV 0JƆE·4 gvnX.A6e@X;K-@\X?Z{YGX14!;iմr7 kYvv1]^C4 h7svฏ2 "|d]FQè'ӿ#nfAYȵ|YChda+6Y<c[Yw(0l[M1UNQCimnE5 5 .JzҳWуweyc) ;F:}8^,^6ϋNM?2mec\*hek.#$ɜ]{/Flَ~Dݶ8 uSA]^Q۽&ΞՎIF}r{iOV&lY(*IÄ4&c=27#Fnԩ|wμIϼJY?@l1?bSp*!>kzYX jj`vD!^PzS "4.brd,=.,vĹpJ6v~-Dv4夐bkAC#KVtMW%)OfUY쮘z(/_b“@Jo-6[g>3r ]o~̨\1.8,~˒rF77Saeo5HsА-qZvR 1ҴљPͧA )YQ`q?"5+y?DXF;%A/e_%yZB,tiEeњgc&(?Yt s 6l]μ#@/?c 1w Wzh qGY)6H# s;pb` Œ]~.z/mh˘9@COO(SF wbh&i-ܔ c^!,@ 6%SN4j,$̻(ec-fql;_x @d5,3|iY3_mkʼ>C]?c(S4sa/͝YAKo+/Edf^zʬR7t2C2M`*`Wõi Pꅮ͈t3T7S33Ԭ>a kp!dA DTZ XṾA$3kh@kx?X~H @" (bā>:4=Hh04BÔ#6K3hV裷T,GNHH Gt:Jb94$ۥE \]A ҪE[bgKZV $bm4Ŭ7Mw(k=Xb|U ؑ;֛\LYdp[vC! !X̖YO-g0* n㘮*PByG3G[惕E$ʐc{l(|PUŞqv#/dߩ+~`6`j dN`(6T`u,ZʹS~Θ‹-B08.0yN`섚mWWPrKq]:HJApls<,^o5kAJ0hqjCs#Z&ds]/ {XQKkZ | z$jm]ߟOx(!tK#4g+76#YPLSZA4UϞ(O, n l?B&i2,ZkJWϸJ?XweM4_DC.c Ƃ#,^y0bZ3/цV_(M7L&VCz:F dY0D45Ump #ȋ&ezTL`Yלm]玖žjwW\R{9EۭqAKT^FpödfEcɮC!I?r{<9ƩJ 曧[}!4)lgY8[s-Iq6;Jhiy>K{A+=!ǹ{?!O' ׽%Bwšmˋe'KXl H6x(\rQQ{kr Ax5R!ټ|!~/KJg0KQ`TM zW~t &L"h6P }IzAS"d Mgaa1 u+;E-@MZrV V `BrA/yx֎/:ܨWxTc(vb dgyQB۱o7j"NI{'NroGC9Vl]W_7ʸN*ڴj-уR$ RXy/g]iVm9f >n:k`^:nXGtxXdZ^!6\6/I2w>ik@h4|Jj(^m`vk,Q#btJr#;OrT'SBL`PmrM?cw3ܩeSXٷ|rnb>uX3 EJKma3*+ud=[`GIeZ5GϬkpڻWVz$ 8 Fi q9d Aš4b bzyW ^sp04x斨2u 0dK o1-cuLfnK D5)C'+BQu=yPx\=An=S3Ӫ,h=:+c>)f bGC;[/~nWK[ϽfW+td'- 'w)?^e0?}hK㧖&*44睼5*Wj%ҩQs=ԾSgU? v`*\BEu;:X׋LzܿBx#o{m8p2N^ ="7cEaEG3tSEr7|R$t lρvٚ/KX戭yyո:]͆ǻ큵+b=7xcWY%\ _YTBg{H*~SZmZGOgU94[*Q7~/fH\ N=2wkpwm3YײLxYt_&cW V C sGi4<NWˏ}?_nc|G טn}vO3Mz'@c!LyqP$ſ'<= LVWBK 2 d`_+µfn;&2s*UBrAh8}U1 rQɻ ۷nRDbi{XO nӹ@W"r/ģ*lOyFOƅrxO]:uCCwRH;ǿtm/:\.ղEiF Ƃ`q-E"+\I@7kێi=T)(4νSd'6uPeq:e=-k#\; CަA_|h`b"D;NnGLd'Z_ֿo,}K`Qr}^L v5m^ Fkj Li~(ak3}Vc/8,+c#d&OD}l%h*۹?T 0CWjՂ+vK($N+)4SD?sy +FcsRFܢWA;DBhB(aL:I U"-ū4md:*ݩrЉ o[!mF_d Bns5s'Xt2kl)A{"zA"eh Z oD5 ^ t5(oz5 gCKȁkz(o#!u((ZA0A `'jd˖ E-p f j%DJaa),Ҕ.Ql|<'UT^/C1ɿѠp<ș[&bJ1 k7C&dGswnihTx=6]Z+ }+=2rc,αc/' eQc.; ,{Vp]2k8MH?$W܂/0TAt-au$wsO.) F<폈L@UkhTrS_|<9uYU>rl3SIO5wbb4`mKZ|,][.+%cϒ8#3VMij!0~^4oۇ͏64PQ:[8 &O>5BIo tC? s@hlUCIpQ>IU{V3)|`> G J Q`X|RCxn~~K!l\_^3x#_tԬEƗ>Fe'r$-ݰ|6q2Q7B8&N{Iaia}Mo̹GU2 kc4j/)!~"<ۖFo&iHG^' #V-#ʿF◽Y'Ζ?Uul~9 ]#Cj0Z>mlvG {{wteڙy ^4RcIh>_A G0NV lq_أ6APIɜm3h}TnWި$J, MU2G? Įb`t!m>ie`3͖J BEi}ƶP&wp0 NܳYwx,B\0P$hAfGOWza+7+Y0J< z<{&/kAF @# ^={>ϳ 2akBhvFK|`> E_{4 ֑+XQvV%0v`nx4Iζ)u'M-:=gҝjl2{ JOj2@(iRY@ BDTa^ Zj5)ycmp-@hD' J.Щ"(Zd CT|K{Iտ'rNIJ9ąʈ@'P(ҫ7B1JOlѷnB}{u.gsk]8 dQ Cw)n|HD6@SEy ]$5XnoHTYt@j׳*d02I7iK[>Y GV[AY\TwsjLI l[( Ek,BBxbm_]:A{[U:BHՅjQı>NJ](MҎ-4ta8흕B.J1VHǡ! *GU`J Y]n dJMPEp*f[vkDEx'_[ ׷ug(l4mf5(v¬Q)8 BBG _ޱ)Sg=ؙe'/=LQ;2E6tmS7auAW|UU\'+1[\ 'h]A"/z0Hx<1N <qle<5mp֋]:%l%z9]oY *y(dcaiUׇ`&F${Vx:5ihLvJzV"6iQ1G}m1`?(Ӹrg] h\wȠ8z_TZmyGU,Fr%{3(Ced4]+:|ǭ@pzwh۠& {*>9|ݢ̝Hp+,Թ޳sVR6ҶQia_/;פAJn7bb6oc:i%G؜K>/{$ d4& {K!Vj8ܢ8'jh%{D W]ZA:2ʷ>|݆?}XC."ǩ8)#I۫n #L~ݱmdۑI9Mi=^Ue}XL]w3FV{YGp;6S$dQ#5Â67q~kk UM҇.q~_zjLbne;mG+\WkS-UEC.WD7ak`r}`.M8}KǗu9UĩWꇛ c?;(qV}MzFCd szCBrVh!l&jQ蹨֭= ~h #ki۟N!ˡ|NϫffZSzl[J5x iB0]U2~ZQ;3j'd;m-&I,psy@h'vkJ{9tL])kּmZO~8J=@] 9'(ZZf6 %%˒yQlf_s+!/*łB =wt}AF^hw!#~=( {^)8#p=Xö%7&ia8 51N!\^*{'wj51=]H??-%y `?}S.#2$p?n^M^轣+he9F=&`c6洛9qm*b?5σ^'/. ?dq|.jb4)f Z"($NYkyJ 6BYֵdؾQ#-K}hB 1aqK0.Ϙ+4;PeGjPyO\bw?r8gufu`ucϴ18C't DѲ n{ױ+/c-1/]Tjr:Enj#|Յ(]rl]G|ҍhZHnj9癅?h fv֠t~WPRK@RT|m?^ODwmp'Hj nOCdJ%Z~N;spgP>9aުEp8j,Z07T=R\s8k¹90yJBEן&UN#`P}|wv蘡>4?I[2Il;%ھcI{nd;gbrE bW*]V}ⶵ9cH/w{A#V/\S..Ξ#kI̐R/ ~I{ibE5bZhNMՌIp/Owbj1)rB=]*~#<ݤZwV]uпҩOFy?h?}p/TosjE]LJ= (ϝKi@ 3ЯQ6_ŔR}0/49% F_TJʯZ農4 o@uZ{yeuF ]J^Y@r!cP3/NF|\AqGGQ~5LBk6'+BUl,˫a. a$qz/)P'I6}?0.ÉAr$Ջ|4.rtVtPxDҟy#\ޟ3~Q@\ ԕ0C*8ʓftSӻ@ :,Og_9{C⤖_ 0P+|_>!T4Uܼ`WG Q~QY@A3&FyOgICMr׿ DZ/ \x7:i0~'S;D_e S@->حVOxm$:k/ʟW7l7C~r%ʧMοBsy [M_S W8 _W^l^O"j2QDC_XZ[QKGl+B_ښ\k0CT{®6vPq95Ѻr3lK<]hƜ_8XQE ~y{m6ߩ]8= ,7 GOG|5LgTF[A|2GZz,J@4 L0#DmIxʌ~-5)b*,踇߿qEqM{yp d"O)1]CC?Z@5M?ShnkK6O!m /|/~X[H8*SHu;Z.)Z:ѯRM %1,xj$ۻ ~Ѕ!jO!e6XyF1s) y:M?hPՄu SiiѹsihHעv //4fM|P%wh]~ϑ0x{ڟ :Ko-vV jjj`*OXtXs$٬%ui|"vY*T!PT(u$p|+vʐ\Hj_~h1b_dŝC^\B.m5Z!A+ TiߘjU,UO#k[ pXd~[Y:VPEE3~QY\Wi" {gk}vQ7ϳ?uSuX/0lФ=JL7}Kd}xE/[|~n_RvՊ;_?I|B3/HSrG#y}g+ky!_4c6 B.QLfLn 6N%8E 84;.?@ ^QX0E/ Xwif͓@h1Ob{Y~m2x׈Y~PHK%S ~e" B+͛^|VRzwQ%eŜia9hiOd{[ԟRz7Q3q+O犭4,Z0hJ =k#!Qugs}|9+YRյ&D͙\&uݜ+ 9Dў^d1Ŀh%O}G n'O`էc?h@Ӭt7̦XyhA/)އy:DnE3ﻣ=3ì\`dMc׬@@l/`2QpآZyԖe֖AS ^(\ŞR]0&r>*£k 4H^z&NBq'Ԭ`mȣmEY+M_H{Jȕ|_Bԁ&C">mZ$!joQn-[S2 hj~T:׹E|f9 P:j)~ꀩH/NSj>ʞփ_4J u=e *0_R3FUcɤ]kI~Q#п:9WiQbiI(֍h~*tq1V%:X'\]H/*1mI7Ǜ`pC~^fj(_4cלTs}MgC[~ь_ 4ӵXw d_W{@/T#l/حX U y ojGq++~3m9䰦?`ꤩ?ut^VnE t3+~uh8eeIH OTRJOΤue| D+|kOy F c*c_S>#Ȣ 3?SW4ɯ ﭛKi*tem /CCWZ4"ϝ)׾k,+԰Xhd0^$ɮ߱=UZt1dXq'uTɔEBB7{ ʝ*wZIO+~S4ZuQEN ֪bQsNU?`I .pϛo3TG)B7>}E׏>{o$q"]7Rj2e^Wr$Zht八 KEW@NYAy~5*G8_+I4a$ɏw^4筶?`TЙo$Z&u?hkQYrh7RQ"S&2QkA-23G|2@ :d] %+:EjJS}a6-rY#_?5ZW6=Mݕ@9e4PD2}]]d&H.6i H}b*jI PJ?ՔԮBĖe[@F+x֬"0/jFoIL`%}33zhf.TirhE/˿ *0M}{|t,k|nޙvyϊE6LKs+Є%R)-+{SQy8~0u!CrJCʤ{e \8Uk'u/zQ_UNʲ!O]2בu5L-if BlcMK@aC$~C8 $8IDϋ#$_j%JL+PLZ]pߺbdڒ+f BT /Pۿe29v㽲F?&# M(ak@jN5 +LO9^enRQ*7M+7}C~oT{mj%sUQڢCy[.ҡ g}sϛVX<4A Q.0@(At,=RJMhʴzl$1~[{#VV_4aBӂzu}д1v aDX:LFU-zuls= Ѳש-2DW GL] # \s~ B7WW:*hCiLKV9.:)ߛ:` *kڇp/Q/ܝ@M-hk(H2#GփU{7X.<#4*=H$u_B`MK>`9Db%¶|JaB%aMI-xVrd!2:rfKfXZM&B38>G\, 4U)m~=JvJ<;\,kHB"]ڭ,KxyW@VC88P'b܃XTLdEkrGB=ت"XvuPȠjG[J0;Φȝ9Ehd˔k.SiOT fZذk/ ,~rK|l1j,,fXMmE؂R wSv_;'VD;a%͑jN:_^x]*1ŒmE(C5,T˛i'Đ;&y+3Eڱ1P;[pNS@ 5bI aP.rT!_n˸= 1:(EM c~H嗀Q+.'+z|X 9rq ExEL%J7ZlljYb/kłE ~ڲ)p_pX啃]Ol䊮hb+]D^K(:TodŌʌ;R 7){kk.`) w"iP/ >jw3As[l2&ȇb$?HAٰPde&t1RLb/wm@- f'!=-ZF#,@[Lɜ:gRXzLp8@E";X.v `_1T7$4AHJo@՞-4]DFwo$|#D&|xDBJV4$C,~Vp`6XV;1云NbLjTwb|,[JV 4K6"dB)z^vt;Dnὓ LklC˘ !; lvU zzPb~`z=٩ ,@lnY/mj@,K%>^18>^'skR)$_T;ێ,+7*n`6n}@w JbE1X.B6,by,K u{b=O8Ղ )31!O f'gh $@]X#3/1H1"3Nj<IѷWC5h_Z#ؘb)f eJ&2j+U7#=8W<,e@%2ӟ,;cQ3b4IgګFeh`u =$["Z-i7oZYa:?(qUPb_t/IDW/Bq]rDkF+>kCͷ RGHN Qؙo t?4bTwamY@^i6PZp͍]R>׋M I8mߦS(J5G+d%hI׿Klf'X7hY>ϛloך5Gђr$:`fC,GJGگaH֒fԗ?'Ƃe״ (|,xݔ` 9|?eF4?LtԘO;:MBZx׈ ,[1doaf,C.VZFP[0N_O `_",UY%. fE2^:~oQϛC~?Oމg]![gȄ]dÎ֕Ē2Yg|T66yJtFEq{\e ɽ-=pg<" V:Q0Pɘb{4@:ku"N5Q-T,r> 9O,:oKK5+ڋՊX.m7"{rF* bA#l& ؂Ϲ(mWؼ%r|$"Ŭ ,8s*4"Hrco̯5 J"oT48.rTb*_BVrl@H\Ǚn8_[/Wh N{A~7(bӂb2ً^  fc oLo  {_eoyMeĠзW*=3 ٞ?O߇Ƚ.p\\V1OE,G"Rc rdqAa(&.ɏMMmmKIW[a=zKyE$jIn"&je3#q8j$NKPK3 C]h2yNl߿N*K@U"`w;A9T0џAJB?PʼnԶmL f)e^T׶ՏT=<-Tkcan&|tYsDKע ~cjf7ݘb95j fyDAײXVWbE 2FKt1S߶A=!*ZHyIKTHj.L,=6 ~QF٫ P}omƽMK0NzݩԨWbXRo<#F`!U00~Im{Y%t`Gnq6wZ4MGvњ|5Fk6sPޘ_z|UEl!/x3s W6yk--8F/0|W#0;21t3v>$+ٍ@vTFYrDn޾}rgq7'e>'uA94Î^}С=b30`)p|<Xp<_#**onij"wsufy3LzZUpE.LL<4TWlo^gedH9fb~i57a7Ю%gOL${#J_yXbo؊NLm?XfUVs]|p֮C[ 8.r4u/Ndu@dق"7{F2jfMAu_ErYBeb|]f0wSi 9J usl%oOO3XMNH~)_}/Q^*#+dӬ5!Kd0?`ȡ<7͜vcmhg̳fǏf] 0>X`ae7!6DشT+yEz4;& ϗbGf{xoWTS(8.W] _ˋg+D ΐsbu{X,Dt|J`| y+2X:_/gթs_2X Xgr5ؚ4.-7ΩYWjڥ4`40Ĭ5%70 8PxɖG ׭ x|2l)˼'-6,K9 yG*Z+W8CtKGSPK]'ƫ!ub.E|O&M#a+Ǘ^ #QP4|UZc񞹘 ieXLjVZA n8&5tb*f>Cv̧#VN/VJ+ Pn![v)4.l~lDk ;E/:#/16*‚S2P)%,+yl sٛǖ6 7j4fXر Y^7C盷^8j,WCvf#гCϾ/ r11iKxk'p<$7M: `uHF,-bo\lc۳.z^'@J1eNe-srf䪘iK7#CMP֫^#b]lz0 #nm,F8k#% a;Fc"@F1m>2i`%6ȃ~x^RG_5z 2:-0i /Ŏ֠&M!'YS>Q=IzCf) jz`b+N,;9߶GE}=/h#t.q$ԕ♉0JMm$5LM/0jzu8M7,Y.J`o|,ƨހyܩ%rkI] Zb} pGjMiRI^^.xU"%x  SxkRꋭZ,MJWw67 X^8nf1|܃YUCO>_-5rFM;1VPԽ[5D,;X.3rK/fk%Ȝ&b 1';T $^tK(JwE#HMn'j\j>b/{Vb׏/Ew -,[8J8g"@-ٸu-!~s_`4x!,%W 9z60]-_k냥)J 0UqY.v.V{(-7+55>f ![PQ8j._;;b3{E}.BsC-2ʘIgt8WȓeG38.rWs]g\6..ۡWa YF2Gƨo|X>vp@~k_n ]pСزw.-,U7x`LYLϗcu(90ʽks9>rݍFϗb~6 qv1ΏXh4d)X;wRj6P,KmUA!=G (/R{qwIYwɬB-uuc r-`gi0P"':gH@gX;lYj`?KmiL %wGXFw i:bYU3nSfXU^%6c9 _b阾Eh!Y_ RPlzY>vsme^ZD= ĎHNe#2Ö;TM\̋i\.EV֡zX0>_,mՃ*aQ {z'<_J,2kr#߰4 H#+XuqJqf!a.H0޼}-qǚt@ŷP+so0"Ё܁茐 ol=mX.v{70 :ĦRH{jTa]k7=oLd# knWtK,5G~@t|49 `\!J:k;^Y.\͔"#dp1n-p\nenM_Cy* ϗ`yž%Aזv`W vQB6 :A1Q RK܁#7!FU SϗbGo?9urC8~Wvb%t :|龠=q[blRPhi:0BcqH/]qu\;&X;xǛݚŬy#5C~g!Ζh︘wLtxg~;kC[Ǯ\&Z&qqc^!Ҳfw2N&K rzuWCm= ԓC7';ׄ*! hR tǷUDf⪍¼P,5KjR\,Wq8^qEv6ByTrCJߌE;o p\d՞EoOQԢܹh`Y *BoI_:#8¿joҍ _ك킡ڇ}u_1 Q/kej!7 2LND&Erv2WB>TWD׵?+IЊE0`,٨%|QwTFonmOThm{f ;~36U-R+8=`6zorm6 40"KhTbo%ߟ;˪ 3`>ğ!\fZ,O%oaQj&sVC YY Woh~dѨQF7W6\X玧b'>C0T}Jjbbo\د赾k6}>kCoGū_b`|,[M?"^Lx 袌:Q1T]ﻣl)0-p3D\,)5m.׷l,#0+.[FXx3n}7r 2<ٹ2)>[=#t%un7:XZC3-|QФq!p;{[CC$ 4Pu9l?cu^]yX5_2hTLHGi,%i.Evfm.Gj/T3 k"u޷KtyN_]cI<}uk݅;d'E;dFO]{2Цxș&G茌$Y8%g0d r<Ғy"7Z B]?Ϟ^}ϗa02L@bw=*or?m_Vf]<|,[)P N kunZ9.ߏZg#1/ro_W2k8C8`{Ң#ؽ%]7#76SY~3r@!j\,w8;$`坴b%FC-KS6?"Dwx;څՎxdqt5fXH^D<*&v =#q.-߶zFTNU|+箥H潽h)7>jn=t:A݊X&t%|  Ƿ5,\ {f_N~t0m2@gM%c7Hyۑjz1%B5f,M+З½O_Mbٯr\$Wm"A"wzG=}k9p\(bys9>r_o_Yv;FA7-5#dĈf:Ԣ 8O'd;wqt8YmɝhQ މ4-\,KgUYvrweթͽWtNu[t^ů|vYH7WyÎAkuL#XOvV?E;`9.U渥R}KE0î|,K˨`G#]Anp-4 K RG]״]auaH/WsC\n\wL 5xOv Bvq :9Et~9uDM Y~<RJty3sJbVp1sC"{q[}s!aus0/iw98Uꙡ"W)ިg3s9.vn&bȧi,aFۃ#)f{ZeY.do~8T絼14b߶An̿Ll%,ۗx(ᾮeZLu(b nC\vU_YƎLW?WZg~u Fj"Դ@}ډQu`j LMT2Wyqen+rjޑV\Cīnq#2yg_ٺjQx}[ӇJjY`X}GD0zGIJݔR@+^zfpa6mfw/t-gǼf&֐p9>%)d< pjq3ޚ$_)lr4ΐ,݀y`?zzyM̒oؑtA^~sS1l1]Եk9i`|AdIL=K48#2~z! ?ݏQl:ɳmpn>ۥlS_X.3^Y _ϕ: Hڑ͂CE`)c`e-M_,1D̮?S2dof?5r,m}I ʴ52m7Fpvme(E~VyJTJVkwVȍZi-7gR3 5{,vhZ\y=0H%oN#8Jx8CjHs5@~+yY,gLd&>E' }LӝE9د X|}\lhDЂL4F~UUc3dHcyN]5vE̐!umk[iΈ"QXnN!ώ;#ڎN?u*cޘrZϐۛ ed{ԙ.׷?9Tz"G:ȩ:Oi:/t3ijRJKd%5/. 5 T[m ׬[̇%_yݱ\tiofZ4Y0aݳxD pF%f̫Zr ӓ = Eh"kU/-yY;O83df7 )O5.o (s޷+eoqPf"L!̤Qt ElFCjZQWw@YT [ۧ i;;;.'jd"R~l9站JtY5J}'L<\7Á.+K3|h88.p ޠ۝]q Rݷ'c5wܓ%)tY-8.KmP[| E!oxU03#@П5q%>^t9|RMs>ɬ`lLͬ>6g]bCfό}Yǃ"(s}xYY3 &\lcwzsAW22yHm5wȡB`Xz [! )!,ZU4x3C?1EBG#Gvy)-ݑat1RѯSW<.EnxM3L̕ 2rDq U zi \,@'mW[1Jϗbge2Ywv8-^Hv^R%w"$4mv2/TckӭRY\$ sͭuJ Ց ci vp%tcآ|9ь$$3]v7f~M̾%  E A%L,n~r<:鲫vr&Ѻ眚 NmTt9heqye N?\炝-s ]cK{#@ޏ;ix0.]m7]L[ӇFCW 8.c%CN6. ~Md | .c,; ,umxMZZ-u.D\_tu}nF\AbՏh)#ci7BtoZ\]9߷RdߍZꙵW<]_:jir. ?f5z:@{:9Dhf1H qlǃ.LO"x^/s! vb]W8.rr/ ].rsyؚ3jMXl[qM55h4&Eq[D.}bz{AkR}k\/$ Ŏ>"<yZ[#e'{Z$j7.,DB]FBP:[ Vs،5t.M1 Un Tfq>w3<k%]K!۹jyMNǷ85ZZ$ܦس}^_ b}1mŹ>t٭}C;W y+E5s.Zw>/,)=RQC06sǘjMhh{lj!]r`믴)vՆۗȿ֋bZ-٥{]m):'gǵi r\$6sjh8rqjA bR_w?-;u.H߷vFpVҞYI;[뫉AtKD:pFdXB{ͮAHGo|q!grMߗ{\ꯠ믲ΞQSgTs!zp`/k 0LN޸FG# 9YXٯg2pw.̬/7ew x:%r\lfnMwDnǾ|oȟ0n0 [G3X=#Jܕs38./s@sO|[gxwOgg)0ϙJ76p д&,\_N^Er J lk˿GV\c$Ԫk9mtw}WL*#s઀%IWsܗ}7S Yz&~~gbW]t-ߗu")]my8ӅrM?lHbh[U4JEsr4Y[sψ1[\4m>zAKOn{3a xױ+o1vCe2՚GtO8#p7 ъxKf?pUy-1x͕R~k]%U9Y*?YfJJc@M*3\@\Ύ<5Tϴ9߮LgOuջkgۙh$@7GI̒M58ER{LI_f"!f{q.;q̾!8#q{qecNo7YyC}7gܵ,3!f}ᓻW]C$vN-jb#AWϒ^}5R"RѬK)soU_>j-K,L[[tjk5$i8޼!m'sj=gqd Qm&zt~A? tA~MAϹ/ɹoy gU522w;{ XTkQn'עY|ϩho(,IOc-9yۖd gvn|^-(<{*ZٓĈ!貛kϖ[fZX@SɷM4 A]mCSQ+,5&_}Hm0kdmf(E'2לYOPO3;wwʥvwCV&+6vƏau^|q{9ૌ*fh/6Dc~y x5fטOE^xp${ 0n jXf} +Xe8>;6 )`yɕ4z7;8>χj \,w?ͣo(iA&8&{\43T 8r%0^#cb2@o%Qo%QsqtF_) t[Έ.U45Jɷ#kz.Xpɳُq{HVy=nVDVStOxչ%oyh[j֍!rFl2 r*#*=ss͞933 Mt>D/Y}' k比8䙀;{R0toWni^Ε>dܭևE6ze\gY҃Ȯ54?̭6UՖ`+q|E5@Џ\YVƂOkiS]43I#nM5 /信̖<^-tq@Z*RM"Znխ§[ߏ`Dn2׼ּOE 's[cڲխu|%UyL_R=^׋OߋpFL6kȖ~6Itswr{.Ƨ}f&4=l1}m\RۦbmpivM?)5{e.? 9Zju휿SLl>twd7tYe~ ^r\|TY #YE{z%y%_RXқd"GHͮ0nÄ Cfyۆ.?䌐 u1xCG]ÜD\l\]<~.% Se p\d&aDW9՟i |`&! D# ssz-6.'@¾̾ItSWo6bU 5o^bdRgWlbO@W?+5}Zs^>F #9֥Ȩ.1]uI2usg99#(H͈G rZkn'uo˼[mI m7]G.rGyj~6NHLt$5ٜG9T]m9I,e~J6NmcVv.j.E9N ZUl rjGe3g 򜾟xLռL|,~@+59<.J5 W<ck]٠<3c9k+]}|s6DS!tp:Z)Z5;DRuԇ<} ѢsNfo4&/L3ל#، :ԁ{FlX3tX3{WmŖDW[S#Ν]N$u4^3ٖxΈ.+d+ݟ*WE69^ tA2ئ7!.}D {a[az-?WgzStM74{; ?e=jMbQٞ5V{W{rY V*ErS~O !'ҫV)Ή`u^b:{IB6ur侥Kh^qYDk+{\Akg Ek! ҿcۿc☻fQA r1]ƾ'1w;wGלjnX5{qҷAj_p\$ bBH2> e}T^貲yh'輫لl(lA~:˼:{Kzm53brD=;cZ}.R_5`o-vrJGx#]P ǟ-g}S;.ĞgtٷLesiDuKJjO9UJ `y(? L _8#{^Za#1s9.r_LW^6{2ȭ0&PҴemIS7Dt57D !=^Wz]ψ)zOuyFL:S:XEp#0]gl-e5hbtǻ-X"w\=Έ5_YD,X3eR>1V;O~O.Evh}E[C6o{v.C#0z)s9x9tw̞}Di=AY{]t{6kZ߾L4H^t\=i p:fלp<$ |w&K[L׵D7җ9yƍtߪNT7Cr#׵ȥfײ8?g1kn&^׻]J2񥽛݄q| g9#8'sfO;E=~~57pZ)ZW!g~zMnWg.wKtnj&2]m6n~[q2V J^Ȼ']$ _F#2;e7 v-RYeJ*\cdZcɶ7Fsg|N Yԭ ԾpF:Aˏ}|d>D#N|'"3Kϓ[y@W+>IЗ\hz LxLWߕnb#_IKИw;׭B%C6->:s=οfR{:.:^6̼%i~=3b$xe0Eze eà\g6ʊfR9> sO8#6Ǜ4sukߢS=VGb zKUWs]AzFpر1_V;R6Z)VXnGsY"8.rpU7g:RWi|ՙ.oȗR/r(蚋cyD m}w6! ;$̾9V r4&]v9',-mA[ރ['t$oK_0"K'%0]v0 K%6맯^r\dOAIv=(ݎ?< }op˼mTWu,VJ Mw;kzUwj7? ̻U8.R*L׳,f99Vϩ_&Z;ZG0ze]#| %=>?!WfY7?"o;O?Vxnt)YN\ !FjEGf]ޭVΙį<jGi~O$?"u&UrmIރVg}=HnZy0]=W+R*:3E:ncwKt9Wʓd$zJ-6Ȓnɵ/KyrK_![Jݼ[`Q{_}t*}'y_mtٸ"sUtCU>RxZ )$M'գ试._% US㌐nuwV:4OZ@ׯ۾ wKtEv, ]l ʛ59"g榝08θWvubx-1ˬ}c Wn:+1./1]B;vVpgB=j]~S9o@3ۿf3KoUJ=3f"ة_ tI3 O[ ] 5X @`EGߗ4ۣ|=iʺۜNwg@21I32~;3_ĶȦ(xCڻݞ=*WEUUiGwb`؅7J鼫Q-qg3-8M;2Q!u/A3b%MVR}9#J3^2`3U@/^cw՘Ztc&b? |4Y{-Ƿ[׵ِ4Y>vOJ[g˜I mL/Whgoud4y-iW^f͚<<w*CLr qNd3.`etV5㻕}@ߍrFݜ[P), ?rF$G-"X ,*УY$eO\8"D.B+ify -–iYZ|@dS"% gM{nmGrvsfTnn~>ղtf`{k"'@=78#֚}PQ bT1Qn齌&BtM$7X3u 3P13VnD'@R3!y}G1BW=)!7|?Jn\0]'R0v&{WZ%Fxé3Y{0 fh#;(\5ڋVMgKsm ~ 3+hgxq2ck-H˙j16OQ$><(7>/xq؈.@c粘C4jw$i_n?U0 \Uc0V?Y%%g5iL\`& tfF#Gr$PƙOVjN06SvM-Δx3+(';nֿX#_cKMXf-84HH\[8dŅbEEhd3q̗LDP%*M@b "Ghf!1J`s]MK_3dLVne2po1[0η[ SrΛHʸ+Pk[}*c*.rNUP$dA* w$TjK2fc%r|b;YE5Lp|:F$ʑ4X*LgZxVZg:|S3#꼕^6*< T`~&Hh%"o,/YdȃnEYJuԺS鲳g䤹IH'.{rF@ڡfm"0Ųl2+Qx@xiODglާ±{ϗؽ~!݀CL~*OF AQ ~LxFк=qS:S[e"2lvK2,X>m6fh >M]>i.()18>rr=vz4%W =hY<"s|ur@z+g1j-¬ZUX>kgt`y;>9gٽlkxܡ[cJ/VZZphTYKz"un]H5f1:gp‚.v?XRUd>nͅqGCYBFvZ!əRl4}U(0HAK߈A;>{hB5ۻ=&tH9Z ,1~\z]ɾ۩)zmbU A~+({g-ke4E ӵz: &" ib SBVqI- R#r:I 5>n:_Yen^S^%5]'!R#^HJHJg$ހS3=e: qJ8BjZ>#$V:w{cr勞F~ i1jri`VR1\<J<8>-VXS jʊO }C7S*Tۗj,oޭVu{$4D-aFb ƕL _ghlMA@,+FcY1+rQ5i&X.yF:SA5"ztcp%:#{`oኙ)TK Qf#[9Ŋ,e:KLeb*]ALE]ۮ%sH>S2׼lsZeԂ"3[RL0=[Al?@^fۯCpۗ&o2񑈪G7HGbD5 Y-~gJo޴kؙͰ̙Dϗ`1 佭bWN&:EtߕѝMǬSFNxp#[EM]%n= `.դLZk뷚Tk>P0Xz ^7[}Oj1FhnyC!bVTmq_+s9}6 . InbڭՃrkmHjw-]Vv`=l{77u MA[~&-spܔ RV%ҹ&AJ =sŭbyf~=^.nݮW_Bt΄gGfꮁ)&""1lh/h``;ɈBɨL e ozNkxNJV='%j>P~<f'@bWޭ;ϡb*ݲ1lZWcDkK.w΄]3at,y]%v,)k|,WdF">8Lj 2 :wRxOvRG_-BG-~%YԌ߅G d'cA7;>3-Mt9l,xD\NvW:+ 3}sh@Ρ!8.R:K跳<}4jfDL3@t4#JS#J{4o9NclWvnFvr^|Kj^|H{eY|]F_+p$Qj&ށʂknB@tه A| sШ򰃳62p|Ě@q3WudB"EO'@B:ޭhH[0 whWp|$՜ICl 778 .5 Ԝ5St<ODW{?GF4<C#s]tD*u÷E޺Y62WGhޏVGh>4Gr4StM\2הp\dgļ]=JmV3ttKO5~iF8&}56 ^`L} r5,]KHl HH VӢJb g?CbsAczQ 䈛dq#ngDy/MȎvpMt$xѹ- IA68[`Ɣ14]Y.vrd{)z3IGc("Q`ٺ6#yX<ˣxc^n re.#]ST>8>dSahx8>)eV)@,i'H_\Z?x?ͬ^? l?U"[_UJOnSϦ".kI4XsӞ#G-$39GZDe4QIP {{5q?،J6Sm|T Vf:݀'?'aadA[K->2j^cZp]9ծ_9Yz4C䱠"59M,$g;˔ڼ2~݊kVGBX.B5+_)n0+y@[rg -en F=1ϸ k7"Rʴ R WYWm6:Eegk9f֌L쿠JgfؚZ|a65ؗٹ•.gR +.`Ctg}$Szom3Ed ~A=)a<ozسej-]ah#YWSu~n|DWVsܯ3/. Q]^S\DH5/Jd_߽\Sw|MO =SA^{c`݉c]m9U¿N%#m,\S"p|dsFsZɫefkp|$f٪CfEUv21DX m7˙ֻpVDH 9ckpyu+tL}]Y}lW+nH݅缍"Vt7%~w(miBtLQA0xCXň.~*v6͎j g9XúnU{K Vݷ^T-v̶Cs9>R39+OYb >8΅>4= #IbLG +Eޛ+P) Zy;Dtf 9S8jtG lmLƾSlAȞ\)v 藑.r\ ;nmJ;\ycen_qk'vSuד՞S5:vƟJ@[kgH׹kn9l{Pjle$9n+7lVn9̫\crkZSStyG~]3 \ Н ui +[st^g?Gψ{+ҍ!(~sY 2k痞^Y t|Y`-@[/џ^^_B}_đ@u@WI# \1t1nh90ԙy|?#[زZKY9]gBpܽev/G\et}]͞u le_9oC_r<#ͻQϯ'eVYh ("UUC#>ҟkH59b.'z2S#23ڼ,CM" pgHVV|;yOk@iv5 ۥ4ŽH6yFpGCAVWO##=AFF]R_@$@v eڻŷn"5LMj78>uݮF=&>Wo Wܭv+2 w-UUU~5*,WL~\ٷ1/j/2\-wwyۗSi"])YzZeziSH8gX̸9WUV/WYKMH:?}ws&4Bk`$$j2zTloL˾#7&?3V]w\;jV]d"rUneuTY~3qN0ӈvr\,? a1a[8Mg+y :[][ձF gwk"krF`UMCn7FTaFHVf3Aˮ 9ZywY*cei穌f[B/Rv#ۻ77?[f:.;w[mOALi{:uUne,>Yskv1grM4OqV+]P Q徸}3s/A[Gvrb ψ*g[$zV-m- ѩ"->VMSEJgGsavj4gm4eo#s9La[> atUm*wϋwCKww4 M 3hyq$g3~i$gŽ5U{.<CĹ͜Dם_G)fk>]5n{JP۳FQ.>6v}t}?uG),C 3b{{'DϡR. iR2WYVt$ψ.@?+atcml~Oǂ"kJY9k笼SW]<WG-j e\y 5 zwg+k=D5ji6?ϮǞ浩.:H/]6; '9^,ۋU8 oc-u\3-0Dg~2βhho#Ww/t+JH#Ym"Q\8$څ64N1xpFp$gf~xStAU>zuHTDgG$*4R teUStO宿mD#Gr$hnđ"7WƮOtf`ׯ{ Z9d |a^vc"/Dgx-R 2纑YXwGݪ:qRy􆸳]7x/˟C(N]gV8>&D.MW(,v7iZDIΧξ4ש;pX[=8Hh\'#W7N=ADڴЭFƕtm] U[5z6Кw]+U,HW;k4Z|cW h]5d3H RJnhNղ%쭋+үϰ҅96PóNg51X^<5xF;~ ?H5xzc9v]Nh*sN=i*SAH]:5R "y۔SξyOh-Θ4@>З͔l|%D9_I[4W@ |=d%م~˱3G{TEo#nUx$f]jvm5ށcGpRC[sўMIt_s&k65@W.]j #[[RM]ٯ#@V*=貟{nXbd~cyK 3vĸvEĽ*Dt2-M蠒%w;ݜ]=HcwyD; a#GemP_{E }kHT/_"H֚Et5s b.{Bw2RD"DrM^fO `O\)O18>;B32.su'ʌ<#`KQDg]'Rl1.0 Et٩QYµy"?jyid8?HD 6Gjfnq}=8wO*5*gX\q զɔ$5w`Vw&l& uS+nߐV")2[lv9e O2Ҋ'Hgv#65@WO?oRsH@_.e[Z?JS\-R2ʂ%}ҭg^3=ekx4'iݮ֣5Ďofvk!fqǒR$]]dڷ:Wcb|Fpl]"sXhHK p|Դ71]ߚALRADite.'@rJoƩ3L^/s7b)z!{IȻ8W3 \Tszs9.r(+D(UK%8>:wc"Q]wi_Z{JbOf7WH^S+$ٺGmn &ې A%zk[p$vչ8>-k%Ngs?Bn5&N/RX 13 ?H l;hD\\\CD-:d^y{볚H3yFʶfqC }솴qW4׳7]XA' ,ej,sFE!T4D-`8ȑR]W;h_,3;诿H۲ݽߒF^2߫?π-d.Y@#6K)eA2᫚/U_N#/3?gdXHUcuK۬Sɱ+wAH39(HWZrk_eq+L 栛H\] ٓEjf/ϜGtKe`yڴZ]sQ5.eֳ3;C #]@#msh`bCt85|2m^=|F ." Rl2e9g{sTot뽍q6tY+^m7Td}g[l%+sex{;5}=5K5J8n2)A\D|.ыHl1Š?[Ӫf]gGXZj)R8[kՊ]sI}8`pO˾!~84t34.`:n;mpGP a+^~Պ#K]n|:@ˣf.9|ew=\VSsE9C~ӡ%BǾ]nU<e.q`# VUWv*QZ2VDi~ ȑDMb 4µzm|5y΢Fp|$x]gpכ~OieN909́KU7t=W83>Ug|ɐV/"#hqTw[==zmr>#a]?o%t sh]. "3J ?wP$EX(;YZQvq/]$@/5c*,z,lٴ3A #"rr|=eoFG*woT&`X:b]r]kh ep|`ܰהGͲٲg}n,c`[Sc`[=jFx.9m.Pom*T%uUVo< VY>z*jw3ZggIo)<kJ#`)4ս@T\Oqﹴb`iKܚ}Cƭo(c(AQJd,)ݭSH=?SkVigk.2ut-IGOUf[Q~[8>2X5(ƭrYnʙ NA`S?#;W37tXෛDDtE_ 5EɄNv9EKEr=R6x)#gK5Jm|&{nov` qz۸T&>i)p|$W.v&TTgZqMTmͥU,Vu t8jjD\܋]fc 7t9y 36q\jփZHHRgQYHRH*M=#5Cƍ4r7Ҹ}Fh kf{Y= ў f͍ g>D !͔9Ku[ؙv}fWHoD,мNcQ rܩhNE3y $gIt>Y7/@̯A#t0KPWgtOb.sȯtFd23~cx,xCkq<]d+O^Vy1k&C똁#gaq}v5mPA3~@mWM=bE+,#Չ.3V]O*`/VߨyL#jOYo$?#yO&΀r"qoT Xh\HFtF\#bZ~A*dlf&4ql8YejGׂC28]7sE+{wv1chY? h hờKK"}vk )!8C"n7BC.t!ֳ ZU6S]v@wʚLo=,l3ɱt ]$YNd ,\t]m`Ørd;﹒Yw̉DtHrbdM dYH5{y{p mc8\U'gmSK~P*.D tzY ^N*v5ͭj۫61{S; xCX'.C`-1Zl ?9-O;g;bGBmXƺ#e,aS^p\$WAW$xC8ѩ=k':'rΪ2eJ8>ϤlS1qDW 4@E>"=BNҰqDg$3s@.3!@4s8spi$m͞$ӟt ss=Ht2w+KTk#q&-75`EsOE9"9l .e_QJ)Zk>Ot9U Z. rުDs ;~tR Z|kʷeiLtˢ\-Rsg=?t7jFvVn-%|p$:5sOkʻ5~5 #LcK?qLGe CkI޲-GvKo;'iu0"_{zJKonr|;7 D!{?[0 ? ҫǾK`ةKeֈu[skͿ"Z E9fs9>^Myu |?H=.CtY`Bʙ b1r4XY5D8-!2&D>6ٍ#ylVI[UN86 u VYj9mn}oӳ+g ԛ}5L}Ha? H[Xj"^YP3Vj0VE;w5,]_eN*[h.]Eޮ?O]P>$lvkYXqt۱t>W-gWש"N b MU V6gl[͜H=f v[O tiyFpiz@='e@YWmkfͺj?#dul7*3q}s#s_l*ljm~ l7Mȝ^7^t9x3I|O"~1}tV4t[zFpx?[Ut*S*\E֏7dс.oψm|V4ͷT[ѫvE#n[H[&0aiɬ~;^3bpN]e}hNQ:o["NS<Բ0V `{f7{O`pVZͦo)mu3ݚm1t7t; qͬOE.vhhފU ٵrAdz3;/&ay]5ɷ]]>Rrڻ+3B:A;n G˝k6'EWN,#"]Ld׫.3sΈ*_tAYDs"nRDy9/-ri2z_3{ɷz_ \(5ﶨ\c]Yto >tFp-mӥtY)- @b,CT'q|$,RoH,R.UA[ȏs>[tf`.T݇Fh/,"B.4 # w&tl5o|m0$SuؽfhZۜH[;8&C}S9}KzQل誡{bm)Ojh%MW^v _9e=#:W2R Usg|MaO4V+}Jj[#bZ|3bit{ş}$ $g<;?oTԮЁ6tsqܽ ^.Gu׷篲*J5nG1nf6vMZف]̰HjE ʙZyf:SWʪWEԥ][Pm^SS7? xj?}E{_}z݇"Lg ?{BˈZ/2K#8>a]f_Q5ݞeDg>:ZS_2SV&&tY/1E<[jUܷ5kN˞htU4e $$l7ɏ-F~Dw2Eim9T v3 b $sS[+R[O VZo0~TZ:o0:`ɮϮ2X?LibӞRr 9'Ft9WO[Ӽw;yLμl3ot~)LMty=~"2t"El/=}ёIk[/= XՉ.k%ˑ.v`OuQ,RuHgrcWY f~^]unةZ!̾`t:lZZGC|Va2H͠g;D]}CgWb=Qs]1߳dg ]Hp'Fo-xkur72Ak'TOž!Ero<-R{s#RR9\:It9WdH5DS0jlbu7vJh _%nސfGW(Z]d!+k]4@<#`XW)EqZ迡TlOsYN`mPψ.Y urK{};4Dښ5戮uKM- b?d6 l * b5ڱǷcw6ɨjc 45QW-Rg >玹[ dOP)j]erz X'nX_fFVl"tP"U~բ9K .Ϗ=#ɑ y3nl5o%@\%jВ?s]eD_e $.'@P-j\+]`;cO z2+Wl%䝒R?̎}6ډ2o=L8t56Tȴz2#={[myGK#ٵHPsN3yU$8>IyC| q-eij- p\$olH! ifp\ڈyF! `.HfiEjVyk˼ Εr*ǃ#[yCD97ľ^Y$ eO&J&\.xC]*32դN0.,0wyݠ nm$G5؂L nH3O{MAtf+xɘjWR"`{kdOX\S xLT? 9HDjI^ Hoܷ>t*jCaT+2o]p'%ƞ@tѮ{–V߷y$9b]e0 m :"5vM^Yv#3BFnu#rF f|D/rv2]@\&?ze͏ 4-G)q|:TStjawɵDW_g['nOt1laWͶ j./F tFߺtܷ;&Gty޷뻱on;6 k.vRM TYK2s{V;ذs3Bz}7t+N\%"U Vٓwjxɻ'Ԧ3jc m7~(bv7v&/y8.cj6rX;p|$jjg"aac ݵU@8\ c~*ݖ`ךZ,]'B, !+ =i,xi|]G0/+_lD+a-Q d"Shv%JLHv7c;=Pڃw$Y+Wq=fَ=f_w[8jYZ3^Iޑ)۝*?55n;މ~nj堵C-ɷ!WSkm? ;[f$3* TV=)gf^5p3Z| HiیutzFu<ãzv>}0LwIT>=1݂=aؓ34vzoZRZRyfX;Cp[8R_۳ " ճ{H;4l ߙX6yf^ч3bԙamօ.kgr{;PvYI^jƺ+=[4^ݦHB.ׇk]v3C457|6M[FbJ ?C;QZEs"ޫrKHHY%?*9M}HHiA860nO@.Yg{~v_3͂g{ ~뮂}it3D 7uD'5+M63C- 'K51/uoNu݋YpV^?Tun+L jmRMufXA,S7$?3Ui, ݑM=nǸ`rJo#Π&kfC-d0]% e=AFBʩI)=3,\759+@G7"q%:R_ˤqk]iN6 o}u䦞#2Gj25? nI#ў=+eE='Dpɖ7ϧ&a$i\2n;!Ӹ=`rE9R/Αzb3o S?ĔzTkwR9r<w$E2(漤]3;kĔJ3ĔK~!b\lI^HdZ$悻|ihEf[j 1n4lSHmX6 6n6Io~;q=vfiq3NT&dj%2Q7hrfhK?ם\r*YYΑ3Cz%nhcdmը^[z%N X}^p빵Fu,5[Jo¸gk}M* U#ZnKh!Wv<U#YWj+YIn+0q߷ M0ۋq.vo-# vyl{TN#ŪHHvۄo{])_el'L]7Y3{|¸?39ٳ[?K%Z# |] @!w )du!B-~7> ;h'g/[`%'PR0=!T=*mο啓xOevO't{H=ZZ𗙮-.Šfq&u`f68iZdVј|jnw5*eb%zjٞ LXśq},krG?%lU4;0n6x%c Zj>ioX+1dI'̸ 1mhpu${_k[o$פU8VŊ[I5m. һj⌐ۃ+t g[BIuMsp>7Jj{n%_6.׻$v=VߘV)"RJG}gZMS fs˙\.jVӄmބ@&%GX,8ʩ3@8N|5Q0b"5~p!qg'#$;0 3J\`c-6ƒJ*շ_5^{y^`/KQd<_/ 汈Gh 6ƇxK(YzftC2%JGI˔h+c⬿C|g(8(jLl5k>;Oe\θֳZ1iC^JZ}M,c(kBYΚ{NoҚ[$knŻ(QzǏ]Zvi=n; $5[bIaj_'fۡ\a 9Ъ>,6gVAY~p] vҜ sNoeM6w9θCMgVhF0-d+~|$[Hq1XfrOEa-$kRP|qyۤQpj;#j2nHN=kozj +Oa} eޠu qjb=anz% 41pvgǎcaIs;4}(q=q5ɬ*% *)~VW%\E\،n*r>xMU5 H6gú2n%YcB `RGv o42v6>]Y$^Zg̸w+Un|璘+/f+HXdkE6㚤%q`pK, %=ȿ=4QoHzm9pzԲ /r2xumGוGKvgI)-2]x[dz-iL4!d -zfnK:Bp ȇw&=EθW1n+!ϭ+[ĸw#1]`5y~gb5{+w~ޕGP%ޖ_٧_O}"{̸j q1>Y{J,+]r#h;vAhs wz*I P ai[I<(7ƃ '.붃4G{O${UCΞW<|]A R7?4.Nѕe&!6~3],vYm&Yig[+n-OFgxܞ-rc8*7OF] 4U9b0@i}-UBQh: }YL߱g: UPW uwDd}~'&B/! 2o辆 #e"6<71ZD;= X`7Rd!TNI sioGM_2l_.[ יU #bՀn6yGw+'T=|1~AuZ+2`GsV"Y|U~7ZWB)V+mv o{I.0JF>BQq=n0QZУŷJ97}e\WP9ʹC[1Q RĒf~NENEN-#6G#ɡGJPQQE+I_7xg t!$z;|QsA7u0_b]ep 1sR%XOAv%j.:j*d:Ml;cLGZbɋC{TVG1JQτhn;;F)VYVgBEo&?s:NtqyG?}sГj,u{E趆{lډ:f/o=3J.WwD7n'XǏou*9aIFB+RR%IOoT-t N.k8o tc᝷O:vY!#,T;ISh>JkCMPr5Cs5sx_9Ag<2:&`#q\#I$m~K9 zGXB]NKb- ijo%GBlFCb] @f6!r:}OߟI$U'Vv%ȳ{F݂ɍ4 /p9.^Hȱ**&tl,Ry{\ʈ$Q2m|w˦)'4+'f}q.A7{GWt;sȦ:xڕ~ % o aF;Zg#1T儒mbOEt?MRvqs~3>POxGxFz(PA׶gzS儒{#.X|#D&21 EV#P}w}L qdS|J j^_DuLgy;n3}GKlWwrF|HjћaS7=3Z:B=*Pr _w1eH2>01̇!@wu;rBI}*X~o}TGӋ {q ;یWC~D -V(kn9ߏZ[[otxFh' *9,\Qͷ1tϔd 0HQ{nt&Tw5c Hc,,y2mz"͏7*9Co@Ae1qɉT:Nwv?O1hbI׮(SAF )ΆFd#cZ%2bX4ٍ(#m/>o~(~=KKZb>$yc-#F) %-g?̛#ظB[rvV 5tDRJ,iv%urˡHR??{ |(jھg!Y# F't;M'=FmTN,9+%]N(mdž5JІe[Hmb,3%caYhmtZlPN( 4üȪ[3Y]e%l1 Cb'#:j'sJ 儒ڍѱ C4yaH}~{^HrױE^d@C],u rK'IW{TU,#6h t[ #{&݆BۆxX2僟dt"'ĝyz֏$XR53:OFJtaWl4F!E覝']k/wrbb?KO?/5FyQHZ⑛(ڃz?OGAG='rIZωr&=Qm;ʈk|, {ZFF1B}7,vXˢZuZ! FXea[k ?x@{G3oyb}:ۙ=9OځI@u$iV9zƧ'::~.D##dB&׫Td%t'ZC~e5UOГz,1YhpAbnxZ{j+5{_eV*\ DVNzv;B9x1xd ETKY$ﭜXRizOk&_hhMZBX=]Ơ_uNʉ$Omr0B'Fc~WrHe4[g^[4LP f7P9mЩ"tleHFlx:ǴmUMnnKkί('%I$՞T'BF4ݿJ!36m6Oy:EnX%’rBI[{*ϜXˣaj,HnlstqZLxE -ٕaF^6z(#+Ay۝ejq=,9=ރ}y!GWN")+~Z8;OYtIJ(n\4ێw^ԕc؆C+a}2FXgP{Jf2Yx܌Β핃xJY't[CQŒ.𿊣.'<Q:N$_T`m~ʰ&qRMKnt+ի$VR`*6񚗒bXW=Rɭt(@C,Y%B<ӐI΋l3d.<,ysuj(%}51wZEK"k7k&{NhmHb wfa{Uh:Q)RdV+>mHGP7AswZ3Ѯ|;Mݷw;ەH[$ax%bao*3dr-۷4)'ԝLOI W%ރaJ6ift8XVk:v- ,Ag ΖH5+#PHHK5мgB&MkroA-t#``_IOQN"f#X%: P|&Pٙp4E?r,z\Nܫ{kC-HCwāaX 4Oyn~X}܂PN(Y_t rBɶrIJ'aJ*0,JTt:;XX; OV-t%;9ht8`{<]*'Db]xtGԑXeKN_b͗6u}ї^li ,$ʒq$Z^:%I6/7I2lgPz1wHz"$؉$=[HL8iBҨ {y+<3dw9ZhnfIДJ"N# B٪.ap_j>aB٦kiHb+EzܡB$zN 36|.UVT\Ʋ^U(mt|wm#'Еz}ԫ~<"*zl}w@w;ۍ{~dܽ<,i'w1|?ϼ`*E)U&?6|3ۼ߯'>aihE;U_R`KYuuW'*Jd \^`$H ݝ%=-4M[mt% =T(V(QV~TɩP?ԁPW@2~(Ü%.!>Y&gQ-t+79Qܕ{y('EQ!I(J2#6)3vw'rQPobĒ P5n֫WO)&JPJ#ۢ_zK#C0x{}y_I'H>7:BF#`I!ok儒AIJ}(ZaIד[VMm-Q۩=-Z^{pND TB0ѩ&Hrzv~G\( IP}7 `IEsn4%MQ%h)thI0T->\jIQ儒uC+WQ%+w 7t;sO]ᴾspZlZ6|a験%o:j;㏇B$wH-'9KiyIMGlmg]WW]l~g7Ult}ݮw4mVƶ-νki7rbIn-t;Mz=Ofsn rIaK^6=/te:2dWm݈yH_v30L:YCYޟg63nn G㸳U'!t5ah*zaK!)!>~d}Ƥ2Ǧs\8RF>5X󉭴-Zķֈ~o#'ZVTZ 48)!('TmNYY16̀jz~c}yn(.l+tG[0ӓ;UB>Ǥ L[lTJIUINjk̩=JoG{%]N, |}uH {M |VxV>uӯ):4G{(v ^xVGGX=i,V7Rn\9$)߬{&^}!wl|anD #:GK2Yc6A[1Y>FyQJ%yQ"}"`^wY2{V 5O\Q4ftoP= eCFJwM0V<t vZrꎡޘ9E?V,Xjα4窝s)'DKRޒX9T4e?vCS@;BcJ7*I#3;rB Ps*ݬ8(R*vq 8sGYKjZ?ּ')'Dz{N=hc 4[`ޡaKC u8.bM (,8C?Ico>j )|qOFh=3m~gA6 B[)9fQ͵􋫶'x|&E~hKn&f>E~K':75_'~G^k9 ˃s^,ğ<%4p{e9dR}}KZrBm5x ݽnլeUYt='v%`hSIZ <;٫[I$nG@QVoP!tCK=!/7i/xlnM} nZ׀Wmkb^ށBS(_Jn6hj!gކpq<@ᾁ׎,y37a<1 u@JX矵p ~ĒzEC^9}ݮ)';򻊶cI+'D}&mho{& iB,\قaK"wܙg&-ʿ&-qkE#Zf`6o,F~* !CrI,cFiMjTV(`3Jmn3QF KWMbFv&xfnجtBNCa$^34sb-gr BXLk%T,C2AŒ8ϐ7ZKd86*ec#yGtF?uLeQ2<F(..js~5e<|.ʺw?xGh.Lʉ%7^tUxxf,yÔIh&[Ot;zw- v?E S=ge5GƢIZ4V2Kw.um !v%od,ysi:rbɰ{=(Uv]<Ң³kA*mc 'cM)<^Pe7JP虭bgrbI (; t.Ʒ_Xvŕ2BO1^ BO;17t)5(pV4EՋ8zCOWi#$i~o儒Hˉ%;"%Gc;Yy{잔\^Q5EIVg+'#:]gPV,Wh+%Ϋ%CqVP-pŒyG؉R$/VN9$Ò6{Ǭ}%3ck)IrbITA[p+'Dl|4m U @N E^Dxͪomک^-3~?J7> %|VG]=%~R$h+ Ra=[h{hl.*7@IF>l۹S*1HeC.`?O&ԢE|Zt儒>DbS$?iʉ%|7?lI ev􋲓=y ˡ gt3ѵI+P+)BPgEcB:o|V#7Cz=]δK*']F}=]xG,ܤ54L֐yK%dfIsdZ7w * V@'KX=fM%"ex)Z*FHJ$F@4|)-HQV(т-Ze`&sw*;YՑ H7? t8}MbV:,$gꖡt;9nIJXRco[TN$ٞj9g Nm.AoPQC[t׬3=/[tfę[\~%+9j(թnEFIJM2dzBy|O+PGu'd+ Vj&`$U5ݒb_y,M@9Jǽ VFdfPҡ'u;cn8?K:!F9.ֿCkP]0Ov,]Oe^9$ m!׶~ږ8Kj]&xyt9]R$O=$I%5}~+VB!(*[)t_ɺ?>wGGvP%wJ< ( V$4ߜ3s$ew$^q掌g>GҞ$믣C-tto蠜Dy4EêrI=U7%T&焾#SSUN,D9JK;r% GJ,(h 4dZCq;#xX'|ݣ|kw9dSqE_'~Pu)!t?s9jȤg(evIdz^$܇f Ğ &|I)SYGjLoXR3~Rwl>儒{@{\!<t nU#nh djȭߔ[]N(ـU>#zv ௖BKq/<QI+3A7mmt^o,ya{kޱH"O1>I$nΒmB|f2Xsn(sz^2OȄޕ3w9yG,Kvj&ii %~AܕM:x:/1ӟrbIlo3 vhұ̚nsXnmrXy:~ҧJ>k3>kY|<*$G-BzGT>$YoMv̊| ,>al+LoXHBK";mө)teɩ9k7[zwXJ$M SN(,VHtXaK7:SF_!2MDdLv"t<50kI~1nB=7DRqi6*'To"/)d-L`5CVtĒb4ClDRM;TY.LS&]N, \цH³^pg^9!g/rm~%Z?i6B7^L`ͳXjʉ% ETY,:u' BX- )UX:Y]o]2\ FU:6A}G tHG2Cm %K\$sLMBU$ zFxׯU)/I$ =W& (YҼ3 (7{y[OUuƤ[$7a~{diUwy;&Yv$iBwOy=2?^./{HC}DCYo{m!vy{4If0<ͫRP_4VG'Sivw91;+RDf&Qqۤ/+']Ow\ :7C#97k碻Ph$wݟ|LlͿ|N:3#g6oM[34핾gjܶg]XIe[oΦ59n>DF~=,H+jev.xJzWb+ՆZ2Sd4_<y"doM'+T/T`w9$z =vv^BO0~'ځ@JWp:K{6}ḴI$<,9qa=;+[ggͬ:ݰ矶8cT:Rmw0ɿtqcZVY췲&y&nƧu egawvOЭhc*'q]Yt^zXwW'wmo V(kȣr#zG-iJrZYB7= 142&X#akFSm,2{a{f%vOC57ށP9>{+fRQ;$opsd(Ē`n.$) ʊeY>DzXKXtcfĒph5ǣRN,Q Nj)'< I68v نB? u~Mz)#* ͐c`)'AÒfd8W {ߞ&7P qID[_U~c=ٻƬ_5[Z9׈|\BwOA_UIgp)'=Z:f&w*]X!߅fwaNlt۹DäXfn8Swt` 6I&yUqLgo 7AE~ZfgћG8=ggѰб}:wlqෝW~#4uhlv/mCfDI7|&|ZoRN(yͦy[Σ2PE5Z?{VzZ[5$V=8ɾÕpj-$#P N'ml'U߼'rbId+nʊYJ9V8~?* egbt*;VKIݱ QhM8ZRN,sf1KYf@?z;U儒[[f7ǫїq$,yD׫Ъ/儒ЏbYv=P6bĒJFo;eo T{t:*Yҕe h=ڼrBɵaNJn/MQIbݯ D=-2q B.acE>PUR<'k~wPySd@2; vP.'Xuv_5FzGX/U!Q-*tivˋo^\9 ~I$o=?Ӭ,Ēb% WM7J ğ̤ifҴ^҇<>Ig"C vOUN,i[t #ﴮ|Pvƒ#/_ /!I+ă25RO⸆T+KzfoM9rgh\KI4 TFA\),do͹阿8.M\랛I\ݲEݲ7]8A6IYÄ|n*;*'lCݼؕ'9':g癨yKם^hBZz7sߢb-e֊Asnn-9iBdMy&)g:zQv@/.4 g,i,a*%/J|K(&tz(ڲ~ۺ8unAXE'9H;BB^gI>wZ,ym-+2on+7ɼyGAɤX4Xʉ%|$>eU] 'X-/d(t؅IGwNQ:f(Q5'F)CϒT]+mw{vA~& gB?;|rG[t@[[Ht΅ՍЪw9dn5eo6 t $svC9=9Q{5hTPRG ]!tZl_ieeI\$.qu{eq5yEʉ$#l"l$!Fy!L9f4jUJQ.'TwzrrBɊxK#.'Թ%@6QE>B/ 7aCw.'D˪,u.+w?VpHxgX{Hy9c-ݎVPH_1).W0)Poڔ ta$ ӯEoI$M,y<@J7P{nKښWN(SVv'۽-׆6يߺ^EﰤbeS%T<'^Gu}f:vIn}5x';O'B)J?@7J{gpL^Hl㝏K9K$>J]”ngns̯$~DK#ܻPq+$ c]i=ʉ%5OpȓUͽ^X)/ݽ# {~Xjx&X?cCGt{ɢ2>=^DrC,]NJ vhVNW뢕J\vj^F`I+1f;"{w;Bs!8+:F;{u_eŒUVg##4_xt$lZMr`N'q5+++ʼnKJ71)LuG_%D Q?%f9-?a{_+^u)U:4ܤ ^Ϧ %KϕV.')O$J# tYbZI_Em&s;&.?qw*WBov^?e%@rZ]O[K6ïeQT]vyGN~I$Hp(_.^í?MXI b{bcB7'N#J%Gw9F<߆B۰nS.'<mUɶBf*+QދM4yTdI JyӒY\i~JD4ꏤ҈cϬd6('DFݕew3dW-{eȎ=Sme"%/H2G zdǑ@xCExxպ}a˨y L~(c2UqXwP^ 6VA]jsx]jM΅_,g?xGf+WN, /APN(Yaw?{GꏤYx+;0 CI$K=?KMV_o QXZ>Y> % KyX3f#6lM_[rBIxu/rbIdqC'ʉ%TU]qONQpIQ`acHÓ$KT'N{u wICd+'=2BF,POnǢK{~]*J*vn;6qaf[m@1G, ^az`ᕛ PF@#㵻kd^_KO92t~uҳE5g0 f0HIMV6kB9)^L+J[vYnshL"RN,쭇bfo=I|Z&U{Nru'.uR:~gҕ1h C'ѵ/ R%BEګPR4bYlZJ5>P:!(gJ"gQHꎡJuWD#'EJ3wNghid3͒^{zG,"a\K)#wD*,G{~2Y=/^㕰܋h AZ rIdf$2+>Ϡ_l!0bw9">Ts<0D8K|8Ky V);dyrB*4ǽ+@^] =ƔK"\H}͔n;;VFJߙomTo6>5Wo϶|hɒZI/wS&fVק/ʷ{}K"T2ʏwK5aB3-A9:((wyaA$_kn8nV;Go+y746ܮ)'\s.Jz64Cn+'Dn:yŶc*'~V rBޅrn1$xuTϒ>VeI[1мBavPa5O#DO=YfQ'K ZI&G2p'K^\V2ԣUAdUAAK(I$MQ ,JRΣl!C2K:3f;{}LJO}Lr&=Nk%-wűw2BMdaռh#IUq;2)tt ]đ ¿s;FulIx3߂2*T}|GOСPu*TP*TO>{*|Wg\|v3#4d)/tA9'z|yGXWSYg+$詚 ՙ*JYfgdDH6ӉHwH:fo~GVhWN,9g[$i9ʉ%9EUN,,sy[:bT,݃ʊe ݾy<1)yG%hKKtUݎ(lG #k-mOnKס;2):녎); SYtJ9ڡ?v;4=yK91;t9ٗ9[ϔ(mXרuzn!ĭ \w}OI$K:c*nѾ61-yL'$)_I1 'ݽVW:V_7+ŤX#q lՆ޽g6o{,d"UCAN4`ÖʒnÖسjdͰI'Y};+nC;R);TbֹpnwK;@9$0)VV[+Ɣ,í9ŭL'j; =#ƕJ7OQvjZw :O\>ym8bpV>6p&ytnRξOqreemnDGQ'&(Imºx>dշ7t;s;HcBIF/i:V3PVCK%T۹{#0Wn(9 1͐wSN(i*5O]PV*6tBL6Vn(/Ātݔvibŷ^ɽԦ׋z`)8}6VS'Q`EMKNQQKI'w1d Xh̺(t[8C)Y阥$y tgp;I[u#2IZ֍rBIN{_z}7ѓwBXJc"1IpJXG%C~G LJǍ`zK{) hq?^Z\%(.wc+'x\ԈRܕt!ɾԇTVͨv/)'Dg;mfi˕nZ?x~mz?$1d]N,9ۖBS,vKBcS9$򡨇mʷ5aIseP]NH@o;/rI}[0t\Lw4۪tL%'hlw3M9$eeSoN# l9 I[˸E2愊”"6J~5[l4o:-Nt/"t(BjJNwInҴXrDr_tݓ3 T?I°;"ihJf'BE:#Qozݲݶ˔'PvIHHB‰%/tӫ/;n܇A4ufVi'z9F]As9~XcXe,]N"i~8z/ Bwc]sO<Ƨ*BS%ѱWEםFo]N,9}-!t{fbKNgz-pBSJ]Oi&-N0s%>OCt'竲vOՑ@=9~D]W%t_TLtOݞkhd? 34yMC!uC6Cwdp[Y,P͸nEHǓ)ܦΫhznSVbu-<樜DRIvIw.)B/) !|y/sĒ:(t%t]ltDcx`eS,NJZͽn&7{[ﮜXrBQdbpQySϢKTv%w~*2ۿUJ7/L\^< rbIJMBx_2Uu+|).NDD{RM u/^Hn B-nI.O,B04[R|^ͩ2BO_+ݽ[}GXwΧ CS$=Ζ8`TKN4eJ7-9>7v޾%!.S/@6Cjkw:~ʰʰ:/d1w¾Y\g :C;moOGxo4=D9d-T֭J)'ԯ5Xc*+#'WA%zYmxcEM>on~|aL@M]KFezðk<ޑ1KZ],S{hlx/m7Ke;],5I“B8GS-aPzƃwz6 ^{6l.^~] [ݣtݸahLhƙ PPWq;b D%ʰMK!6?uz?8C}#Ϋo.' z[FwbwL߈f#6PGՈ:21jW+wD:rrbIm:iTB۶D* ٽ kݔg Zxf]G\X@3"Do&Aey꽅ӧ.o~@$,i+NӈaQA0n7ѓߝҺb]F$ؒi h.[2´ʒW9Jα1QN q72x{Ty(G[/=13W> 41BѤ|qWIn4/ l׿k7 +7KZ$y+lG|Ԋ^Q㴞=g,+r!B\|ĒpFz3e@& %'|腧!(+]ITDq(?Qrcֹ:BgڪYM90vVqޮHHJ#yft{8BoS= L};->QyL~._=:b( ;Nݻ!H6݅BCwr64n!CK"k tW/jvw3ĐfI!9)2BEMOtVQh+w%URotU9V^9V94M&D YJ vl!,rcVg⑭vqß[(M,E:Mt\Ct\XR#摿YmhWCH^w֏n|{,"Yєn6wh@z]G+]jJU$wΡοѠJf %j 6B9@ygEJ+ bwnr7ۭOe,*rI>&tkgvN U]C$BvKnq;SJ6Wq$Q0ɟ&tǷ:No12ܟWclmJUcķ;2өWv'Ź7xӞIW0M>*tMtwwG GJ V~'0_D>d`^VKYk{D~G<ӱJ?@$w7C9$f?ךHZˈkGȁ%='C?PΘ agcIk5Xt m{h nN2n qJZ/陷Q=V'3!xӫgj$_n$i|$ϝg\Ē YB7$pԭc;Y{~*=szhI,}pxݞ ɺ}g"t}Jk[XCI=;VIEPdӍ/t=7 /y[ &=g~ORၚDk<ǖm]N, 'qw@E!T<-/dU !NAi}ZmncUQMhπRN")t BZJ~IdGK==Zjd%rcNjbjVK#yq)VO`Ope9PaBA9|[z][={*"K}QչE `ŲYM[=Q:}׶}'pLKcI1-f.#&jn*r"Idk/ɮP n7ͮXhT5t9}[t_w jo^MOuZoV쌿e{>7 ^9dCdJ8Xr֡A+] LMOINw:Z!tQ6\(t;bOk^tv;M8듺Cڣճ锓HJy[JݝhFFJdR j4֟rBPI4r4qz}v[>;/J7ZⰄ$t 5*?߂ceWSQ{ ecNMgHWІ+IZΡrbnUh,oZ"ԏ\)2t{82'q$Gd ]ՠH7 z[&y[UDCX}+0ZlLHcIX:t.Zd\80=C޻`YI3,9pJ@2˿{ bY,և Hv{oұ*NpFAHDJ-Oz#^{#l\!5ݣaM q\BeŲPd~Qd_j$̸L1cjn0Иݲ*Kll%tī]yr-C9f/]eK]$I$JXg U)2uXeŲ1>$ !̲YzǻBuz6`(#͡^N~@uJDRw(D{@Mt;={d${O% y4q Wݤq&}zX2wN 3oem_f6ꛧtS.Wghy _b'JBsF, 3WEynwZ==ɒ^@t%vU #gHw|y$F\AUFt)BFN>8^T9v$[JneYoͻY'7;B+A{.ϭ);*MQ/+zْңZrkdva1utKV3g/t;[nd ݾhb.D,+g#5V-AM'JU%Y7~#Z趷zg?3)C Yy [$gjЫ:qnzXr.fغߙ_l_AV @I=J~G{NY+'+WֳߡoRv>eB7&[`IX PO$?!9?;Bu4oձ2BʯE\R=ZJ5dZrbI0x#ǻiYW8!וcu d 3.MZLjȻh컾%E-]/W~$=#5\2&muy"rbI _ŒNawrImh| HjL ,PnQDG =[ɋ,t;u/*bUнX[|%͋DҶ"czimu aш1ds>9bl;guv;S, l!?yp&eʶNW$÷t$j ʝ=ӯ0>Cr׃#Y>I5H3H ?fH9nywFPrCs{V_]Y]j棲wHLUܣ;ү\@/8\c°s!.u]]rH*r`[XZ9s?,iw+dy*"ʉ%yB[6Om?;S[CztpvIQeQ*qZ@:G ?"GzkF<clz1Yr9r1*l q`: !k΅F] gh:8 ddVZv3ep脜i6 Q^21ೲt]1!٥T4VXt"U~t|M^cy'8n)t~ڎp~2M>4tIξ}$*rM[3`gRhonɕDQ j8zx榐ژHb1&gY l8Y8- ,1tN8þ+z N8R҃` i'@K2D ^jjqh Yrm\$I85zht]I! f,cn)6 GC gQ"z|`T-q9LX&4 Lx&UÍܓ?Ox‘g*c"hV8l?- ^UpfHoև28tb;Y , Q[BΗ7CoZΗ7m'e h:µ.r1l%1tK!CoF%x RpL|M oאry3/Ïz6OzLlR\{lC+Ix1"@\< LD#>Gdwxy>t][ 0;:b2˯VC(MLQ&82 ޡQ+ZHRTxD$$޺sK޺ auX}=ip|G:u*J9ύ8/(t] %Sb ]zz{VNy>ѷ`۳m}ODF&I2O!u+ބ>7&UB^YQŋRA Cζ ,-o匔|@6٨Φ}V|?y?@QAEsCŖg"LyyQ5t`k1FS#,4m%qjylwvY~܀y2W[c x!ƖÖ/wt\,ӻ"52 |cBݹ85\*34o>LSA3FA RQQ!'oцكh t-N/BQi՗27eeޟ5:q=6!ǯc(!rir"׎hΖ?D)u!k B8: Ra9%AġĚ@* g0AġIP1x!<D:u[-K,~/u6$D3'c:c0jepF"-!x^b@넇gSj9#L^'len_}oz Lmaב^\50ȑ;q"fo,I=l5iLONEoX=嫶Qs}ZàW~RI^~=<uEgSmPawC2b[/O8bU_ҒsK'Hb r Hmaa ~U܏C,gCa17\)+آO]˨j5jsTl cIL,dI*>^R5'FɃ>yǂSz~#)zXgܩo)JSswBf4~1Tl+#)7Ҳ_o8\:||ek'U, ~r2i7R=\`p6h2f'm˫*T_RɯQyt#wzt#w"_oeVB ~qԹ+uduR5>fV KA)c;^l)<#'GfSli9aK]W3!#1's=-#\OKȎ/r6!G=mjgS=͜[)bjg{lxƵ=Ɓ$rV5/Vk+8Bl?w[o wqNo] R<^ǼI w$[HV5@ԧb]z%#xúD~)յ5rlrj&3 cW9 7i8̹dJ^s92^˷f~7%EANgG]k2a& h/?z5']:qBw ?P߆רۺ}٠q}0n[b$s2%pV4bWVQGg8^w-!R?@|{ZJ=[>G}0~Egݘe"s>:fΖ F6/Z\w+>w[yܬgS=*k2gS=uBcOK~ϖ7iCqE|v<9/ zqW~6i76 q5Ea#dnEKg!?9Zq~hؠwjh=fҼcuR}<_rM1:V-rKT'WԬY!#v/Fw=G4*8Jԯ G?gnϦ;TAjQPh5J9 77jK]?f%FR5))ꪳYtA0|)a+;VikWl5)3Y^۰b嚩cO}6+ EVGW~\urK"ʜ,88n12_9C/O+5}0.0uX6—7|D/򋓱~em_ym18;CC-U4n xKol`B:OBBB=+^s#6'Z^^4/n oW?? X':_S6:n~qsj^9dlб%}'gI+6Ч?9k/wVMtj .Gl9V^NB_\H8`m}j"{M2ܪQBV"ӷ_+ ҏoU^_+OgtZ_]uk0K}Vc##Κw8lQu6X(n=%~Q4'Za%>rQzcz|ԨGzAӍ >5B ʙ<֓Ojy˼ظ%F3B Y5O=ce]Ïyyͣ7x&S%W lG >_+]՚|g8%@ѾK8έN ݏUǘx_Ri`n@N]9uw^)b2o=n@⻻/C܅,Wpc5\EX{3!_W͙/։P۰xCp6ؕҕǕ.uu7Rú;=eu?MAM:$R_6H`Oư94~( &ów]l]> 9409{wָR׉`4^Z)oS( g6>'ſ1f1v@$vz.9Q{enV몚qo8cYڗꟿk&e^<ڐ]&anqùIc'&^ĹM,rz#)"Q~VHU7%?t]3.aQ)Ğy<6sdZgS=ji z>1}8=~S_ok!wsL,ʢHۼE& |qGngTcֈx櫏pRn3^ؙ!~(2 Mo7^xV/N5G?H8 ) yVV9 'wq9)IJ}o-fzن'쉑M긾#Szbl _l,ɖaǼ܁ߵ*1~wq>|/ wE~Jy^430W9ź|])֝M!v;׀q~l|e<._w9 'b&壓- y֪oN߳%DlZ_EiW z#^/'y&XPy׽ܤO//aF#^*'Sӫ ){'+rZ[k=,<.^xfXa0+ݏ Õ_@1 +|:"~=׭[b䩸xw :5QM8~1ؚN4*P~C-㪷Do[gdbf VOzϿkv2/N.7jw)K8ԗkzx}.%FLKK'-M1<}6A5̶ :T [Bܶ+TV_l9-.[\B שcUmXpKd;+L!IH%DF&oϯ딿xǹ_D1g7gKjbiF 'G;|bjZ7{!{{<>cWLӍĜG~t;?晑O}6]mF{#5b& zF ZH_($~HQaj7n vݯ!?Ǒ5@dh@R]*5T2_4eͿ϶=mWu6kV{z|Gzk,1g+1\r12g9ώ)5s->ڙ^Ln # a=~Cv"yܘ:4U'՟usSeNiwzgl;3~]/6gM!Vߦ;8= 4U3cD ԰AGj%+|ܠ'81oJ憃8-]b4!M8 V$kqbB>TwmaK:L? m Q ǎh(?ninvia+Йsj|gS]AK ,ryp ҇Oi[׿ݧhAGhKG`,]x%?9(4 7򑇑= n`N-ܠ3̸?!|Tt\b3 rK<$_W_8ĘMk< It9 ȽG>,׎ȂJ? G/QaL`_T݃ai07xT0Ã1kH};8HA=+po>ރBkH zY@P ~r9ntC൧2*Ҽť\`Xfq􃫫|/79LF˃{7?w./Ă3`[ePP@ѵZaMw7j⣏Php f=ɴT o,JZ[0.^Yuyd-ş<,d^s {PMmol?pY˻=UyHPU^_Dro myPTON&LM e:%Il‰ ɳpfyݧk)@ Ltx|yq;']W@,ى҆<"憻Pw,L(B]| $s&@"wm>~E- 86JMX>)k.%gFx~pk/ȧI89V]shπr[PY7lZ'9>1Q֗o52&XǗO &8edOd4v0{ JpõvMrZYv@Ovc~;,< P G`HEMV΄ztNW "v߁59x8£ިd>m<|cT] BwT>Ok׿Ѱ?Mybh h(PLz$,: B(.εu_oNɦr=$COw*旜NU2Yw"qTFӏL)}9t2QJ!a5á'|Y{lفs&\GITo(sf;9`FWϢq'7* ;9`YnEGg$kځ<(Y(a^^ kG{FK:ihDτYk{ۈ:W>McCI*eYWλh4>B֡wlN8HbJعwB1[k4`E;@ d= [N ױeܓ~$)<`,ڿu3nt2!4zj!R+K,sx=~ YG8K ku"WpDjF(1BB䝚}njJ_ ہ֦eyN$Y۟H-Xl2ol~&] 1V$ FdބXNYFQG2KD9ocA׏, r'$+܁UU�ԜD12)B햩> K]` ecBR)q*9 :Ӗ5?ho .E>(^;tyA) %O I{Iw]Dch 5_?.R] hK1Jm e%YSq(DƋ7!wզG?{X RS~xTL1gXפZY&YYES3=됅qDr̳my)QR p(\\D֦=({ 靱YH.De;$I8(B~w1Amſ-{5 }?NXml'#MB }㧪P~N•E0kw'"oJ'\Is$dA䝀 -+^Z3/ 'y*\,jI 5G wp'f&(Kg\A/K}h@J8V#vr̬]wBѲ1bI-J}a4p%/I)K#f|jM>ZX Ba@14.*ԃ(7M!bMPeq,2pQ5fp>9r+x=Ku{1"A48G%x uNXо)!#ܢq%E6TYSp1I0Z@>73f_{8 ?:APD‚!=ӫC>>>n4>QnsLkwgcJ_eTɝ)Xt?vPКI3 _/) 5r:8btCgB%#ObuhND2z;h~Ɖx ٧x' =uLTLSUx,v`ԡziN`X4lM\CN_ՕLzd2d14 T+oBwr(#ȻOCc؁!eU9Vj:3ʋ΀/7+1:KpVr•AX:U^*K3E{h9ȿ 3P,Y{,?BtHM PyFxѻAI Kw;M˩8>"Ol֎{@ HXKqg`\'Xy=Tjʿ=:rLJ4SDC\߁.&O}%ACvβzݻhAUl`=K/;9`Wc8Oc,d_>wBpmH`"3~NTb*ʿL9 ^M~ݙD},Hx>tlN-aJplFJhD;ʕ4Ӿ>.@LBy [U r );?ue? '4!@ck;ސۅ7ȋ6X٧ /ãzQ]](V &Om,n9dmMdeB部t_K[+rQ,BgY˞OK5}7_F(ݬ!;_NmW/0UfbEҊv2\6z!cd^5,NX$N1T+]7Ft Ԓl< p`@GQO~/V$4۩'q4M:ۜN-^Aq@ާ>Z~gW?f"7EKωԡ=̩I«;&1QR~js],_UD zQ_*µBꑇ kEx>12{kxhӎ_<s_X_*΃,f" wsx VΐfXfTYS E Os"1g0Av;]zG`N@p/t 8XP@Aޚ՟_q<+.#,o)h6b%kVP+8(2:ЄPRvBFo fLy;/2e4y~ &ۀz欨B(0Rzd>6Ѡ0uEɐTNjGBnH"ƈh:sG*Wu-ݎl'/_ \-oȳmG9i vfNW`uUu| d*nGMB2Hf5Xnbr/IVȎAMT>v0~x8#O"ZJ ]ڲ4 bQ YSAk;${?0Ywl$Ҁi wpC 1=0 3 . f??s5aψ\8r/g =Bv<ͪJHK`}}Tk0y=(rd. u(=(R|S|廪G;P zJ\Mz$"ғ|e{1⅖@#?į m~Ap(ma"x,aLGOևqD8O eNfxCm~j)J_݃"@%JJ1Dr7 rEmO*9zʤ#`:򵇃%"~W^lN)9VFVbpڥ1;6@o߄SaYl);ۤeB?&{&:}U%䄑sXXW#+X ܴ{ 36L VhU- m¼<klR0Q(dh'@팷zf*)`=Z#KɓhpՔ[uͨf\A; A(L7Wo Ѝ iwdۣMpC(,v]hS .c@W ?bTB ܜ׍c^w*okP%fL6ԝƼ.!xcI W>r˸S'yc,4hqeM?.X BG瞴 ZIsU f WG[RVp&K oڢћJ/gu3V=X|m;99"ٔo]apOc̰ 75# +Ų$6[dv+:ؖ+Y,J#4a]qױk?D P}Vyw))wtov/z_:QCdy+oɵ@w]}]6 %SEQ4;dgf.k*l`gم]~@ơ|k񱃃ou}t=3d`yU?C$JP[u-ʹ n-], 20nvH2g- ƸGAx$53K{BÒ~ɻ!p7#m=w>asxKF:.r7ݢ=e-N=,{-Nmqƒ^/$M_ޣ_-d5ܭZГov/N;n ϫoPXcQl<D:@\Bm+Rw*q~wi7#' ?"I`eғW;`NpiXjN[GU͒ê:Es-:}}gXƿ< $ o2mY98p_oW:mHX4>Ũұ,e+%dU>փE 9}7{= l2.E{:Y NC>ee}T͐@\0v1 .{ߌݞ2 u1Dxr#b%3YO;Łʿ8UCH;s#uW- *@hQEe̺SsxVZd dӈ9z m;!pVM\LktݷĂwfhkxEUm)jsD{ \цbՙHYMA5^GoPad$n+{Et=fSV1 HYO.GżueNo+]@@[sE\S:i@Ri$D%E$Y scw{PNv ׇ HW.zU]`2 9e}^M0>x2fEfy= {PsВM*+ch )1wŅܨ3DʼD,Zv8o,28x5Q=:ЅaAӻC>[ _1$wȑ5:" [OgcJnE͎4?,&I3>[ {Xs2e@h#{u7/C{PPl|IhI!j,z=kGzR,˵ȥ3 Oe`}((8JaK(7SYeqn{` tIò`D30YI!k~9xlGTWH`iwgawqITN n$(B*AY 9dZ7\q{GgC~ o~pDْSǽCГ V6qlM>]EY =Y"Wܩl,.x{"76zXD9I!3P|:w2%+6XQBVU+ Oڻ!hͨG=dQְٜtd$Grb朿h!1VJ~`'_\9.C e+ğ]F'PKSHdiyx^&~^6[6_mkW0ju^U DfF;%`Vdݟ9%Fԯ{$c^7jd҆7\ú+<E4T\O%A,M̀v\ %hQVkk0աZe?M$Yk%8C X~]"I đ-LAtnx6D%k sX~c3?u]6 Є)W^ _TTT¶m!.~k%i}`cz o6Yec@4!u PTj7<+Eg8ge}vNCh|xq\2k"ez9\ӣN9"pM)-}H 4{8P?YnB ps2{PAwɈ?vtzz-kDqx: vuCAhi&蔅(֓zkt`:é ȜDhe~ݾox% Yeyqs.8|xC`Ωπ zXQqW4 [,wiWਝ*3Xyd} |;!]l!upe@&BW3ii^Fܐ;9^<^xY̲J"'f²U=r=L 9?]߯Ϸ= sg`R-).uB9/gltL-s*Ӌkz'=`[H"ݢ)[9(nCtvWvZRVW8)f[qW*NOqa6P[M*xsp;nK\P\]BIpCV EmPhљ~fYC6ƒ^jR iOp[s=i1NK80|?[9ݵty$]N`I6`vL4IRySZ헤o2!~. ǻkP@SSpA1IP ĖTs$* rf i e&t~[ܠ7ZCW=egĠR4)zt/4 2` L1Qi ^/Ey_Br8YlD`r9 }|> ftt'蛓9#Vdվ>Nr{w~6u@n44}3*bV+Ba}sH2v8M_fhX%܆OC% DwBN$3- C<,)D{XWwM|=Ky5OvΛ U77R,lw}9m9`CҫcO^Q S8\m4ӥʪ9:z9}^D?2?U *V V =q(g{tR %dЛskY\Jw9c=HK\C|j3bQER2=R;5Πykw(K?Z nJ@/Hz`Fi tʃvf'$ *6^[C'áBX'6%8C']Oy yU;bҏ](Tn0K%.,!Xml,L$;yJ=(3;wZA2UY4^*nBŷJΘLl_SF6uhZh_x,GE!l obEt*wG~j/y^9T]jF;8@$xy/(@XZv` ޠB{1NE=%xNW򴫔q)%sR8 K#mbʇ j"؃9¤Pׯ5aj߮ɳv:H}Ȧ#rڹ;RKLݬ |ɧB0Bc 8G?GY&|2H|3` aD  +S9OwEf;X0-DœΆHw2֣Ţ S,̑sJX ZPJ7W' dZB )cNRf"r^6wjI~=Á6\|[d MAԙy`G& o>W'0 G}g†oS`pŧ, wXYpR? '`pQ-j[Pu[9w+@BCgYDyKkT.-@P,Dš vqW.rz$»j+q +NtקV[Sף'<./ vǣk5*Gݠd^r+7g0A*qLt ft{w{̮nߜFo 78 {|~i&1s4r9+P}QuKH~z9x#9Tqpe(dYki)vbНґh{ft(ȴⲂ]mYk2'lt[,]Ɉ_KyfSW.Ox!`ͅ h,ue7{$m`$Ynd-R2^r X Ku8f1_hwt>mX;l=xX7^w|sHvV,Gy?&;8PB¶zKQ[@d== W`BU,Ә>C*Oj(C< Sz=6<01^!t9 #JD$^xȑdWd*-A"< ' [` #ҽ 5)Yt6}JaMFx;|TRɗF?wr *b aFr\)1us|ހk= X9{8P}Nԓ M)hCktON-Nhh7MM,8b֟G˿^r W-:ÕaĒBwXOW$=hPkg3f?cm0r/]/W.ץ2# ! Puo(3 #mWن䤣J1: 5k.Бw %!Y=8 *7A2{>?-X 3ew=xǢ0Hm櫓M/ \A/̝FE؜0wkR6iɗ~psp[hg=RϮgLap/!`5ס31lDVHi xߒGp~m9pY~Bn d,N\VkV[Q֤ ?`w(H}t~x(KG\JjV8yA7Q(oI+vQ(XtiLnٮ;-8@ZȞ)^AwE9 2S˩xDa(h;ifK@)-6؁'U=&'Vb`~ MJ~ZYAQ:,st;u|],]x kV '`eY{%X-sr]iB Qii*{H6>ge&@sz)ZO쇹5- wh \TCB>^Λ2jQ}ZK|y^֓)~;CTM9Ev5(|-l@Gd vFcHA+z8eVyr\@1TVf]~+V.h Р+"p&(wy^݃m豻aTAo >p .=N_g`I8 6#ir\ tMv DhK: bajZ8n*(C} vЭ;8*D?f5\)ᢙXomHL' iF0 e+NH&7gj8ݪ{݁\?n9Yt58ա&@7: &кT#Jm9Wp e.zv5$Zl"Ӵ9 Og՘jg4 j!/t.ڵ] q9-V.g@GUz"vCrܫU{z9̓ €tCd"<,%$Fw+ޥM>4sg'8|z,PJġP3~  7!nRrFm$l!84O4czPDWei20T>Ǒwui0T'VfV))MAdي:'`ސF߿{pr{n}pb6DC K)ϗvQ=mgH*-;ʏ]:xF]܁H9HK>JMoW}6 sV y<4ۈD&Pq[a'%*J$&O?Jjmb3W)Jf~xz)ѴV5&w̻,YMҵ.~Ѿ)P_3Y# *0[~twSB=I';Ul[sT(x"iȇ|b1K-o(4̩Y\{XPjrQiMscwd FFAzH+M)AkN,S4w"rf{#&Z\9bcuy8i薧U^= f K"z2C8qA\aWT6qI6YN\nGE"k[], Be#.:Ӫ'k?FfHO;k_>F_͆Α]ɻY"));X@f~Y$ ~RoZa(H(V $k,Aj =1?8pS"<[Q(.|4%mQ"s(k8AdӔ/!!ف֒iPp!q3~&d[?Kf U2Y0h._HXtK$.¹P ¹;d`!`>\p[dS4uvr`0\SО8@bt;Ktܻ3a츭&`2&wQZL3,H5]z ٵgH$;U__8d?YW\ˠHp(JLr!MlD@ lCvWFsjͻ 5G+:^}#}B\nD@!qGgs@1( whaډ&l^JFٰWCV3 l ׵I`LhR3NEκ,s(y8F!zg3֢-/9>y*~WD3j8O:7?V!҈=z)pKn }(Ty"eaĽA&Vhj4vfO\%G=`Xbkϑ#k.#[͎:nqa>30j! ̴Z`] n1#ݼ0KH `_[Ep2f/w%s *-ځl1afmZA=բ"),@Qn}5^/c8g!QR :p1фCg_,k@y;ϰֆ yG28w{|tihqCQSjGJL#UMy^ ﯅PњHuR[1)B ̽!Wnf <Qnኢ *(w`o\D=rub\}|B k3`s/n{™/ɻqU9@# nP(8ˌ*#\tCOJcrB99nڪԛ2Z{3VQ[X7\R exCURL[Yk7#,vY7W8!qSS4 t-`D$:xJRE(fH<[a:cU`HK0-ϛr!R3`/[ JS-`3d馓1lY'Y`F<=(}$;-BD 0!Eshm6$õȷn$q> `dByf()"Fʆmaը($Qn@>;U7MH@k{(5l?(Zz$8H\^DU H-sKçVEcebԮa"5IT ພ}%AOqz2TyRl\Z^/9<5wS(uz4rK*T|]/àuT{߃y=}ai>7 *>,[n< ~)l  OpHD"Ip͹Q^#q5lTwtICnipzȚCo`ŗo?3'tN,/ ɴjDRÁΑvq}&Wc9ǀ&D]PMev|qZt)R8:皎 %r $(D ewWx T2lqh0aa ְ^:n=p$x@rJ +ԬiX)jv/e$2-N%Nba7/gR|j.By? #ߟza::\A; zWl vI'o1/uv[Hו~p]5Kȣۢ/\p uz|ZkӐ%iZ9!`$ w$^ 1:7?1KMWl%87͎9Ž (Tbo0nP'0 l˒BΏH +q?^%5z{M9yt< mv{މu}g#pT(Q~v`λR#,/YM~>O@YhkG17w1t߄Nv|Sɧ<JLt =ceA/X)T\v 〬ܝE(`h4񏻶luhr,mF8=.дHi>GbԄKwWH  =6.ny>giQ,ī$k+.+k5_gԂOX=n:2ءuӴU[` r}rzT9)؃r \)15Za|T;yup`ek1 qYz|(Ri/f:X9fjW5U2w?8Y[FdĿ쮨ꢾ%UA! }Rτ<F M نf18+֚aVĞ@/;pWhmxȩcAmPc9hmaFQp 556}`a+P]Mtd@ ۰LoN]ڡ,6h OBua>>M&^uĥE1@[\f?M38pP)g\+ 壤%>2>0yGr(>fGA6۽| 3ʘ,[XV؆\CpԔaٮxFbfi~!Ftaov'ՁV( DTc>_%5)=wja-q>oN-lvG49+F۠ |A=$ 4t: 3ېjM F֖Dw] gv:f5؆\:K_[ )Oyu˱d3fh&4 c9*\3ndH<VFG\V|w-#mM7M!B M5X9EJ@M(A-xX ,C;= 7%w)='e?ܝ!ԃ\>PG8v[ZU9E燀6é xHl2R.*_UF> ҺoDm")%wte6 d٢~v6 |F A;1tqJNMKzz'Sz杚ۄ " .abr}}ۺ&:2 |*1Ihjd RFR"㼃Á O6A,̖C'>;҇OG;%{o?>,w,IQ}MXG9|RZDQ)q;/7,wف"">q/K2z'q9;EdiH.} ~؎cҬu[w9ʼnVDkgG;\KMYTk17CgD9V=uy]H/|mIVۭ;h&^ГM@&d5皀aD?/dgj]F b*yS։^J`drb b{4؃^/X;.VuQ3 ?4#Á8P_yx4IQBgg_@C6)TywaUO+a1_ j+'@3Ͽ{6dVxf TH,7M mNv>Ɵ)=?8\peVNE !A6 /P%.r ~@4s2>_;S2V_Z6Ȁ~F P[bJA1H> ىpH!٠, Ʀ:9ع^5(@ [Q  Q` 8Ԑe283="a vv0Ӻb?y -O Cj*B)PAMJԋ%/Gnp?|rMc<}d@zbn/ݝa332eGq惎{4j7_Dpծ.痉rv+t͉7Kn^AQ^ p کk](6ſ~t8_5&!-of1`Ʋ\IsXl5>a f?jSqP%],Nh/; 3è:G2yWVZM<픛αM*kW!qF>gaǝW,Vx~,t~pN$a>&>^Q]؊GC!^c{GI `Ѕzl1u =\l3h'ӛW^y8ZpC+tLj<^ˇHlҭ+=OV_ͭ3_Z@~RlJg+m(xDַWpTv{{uGP5#J,Z@%e @Bd{t&wP.+X8(怃>G$>F1$gZ~p< mu zK S*D@rX\Gf.0RhKXe8(9r+Ơ}BG/91>Zh3h'xvpX)x 9gQLfodÝ077ʞN!pӜi3~,pkB`nfXw#| dej(!38&ϣ>@쾆:(LU+mEuW? ȶluL+{j=)8_>'BgV3twXđ)SS \hҀީbMYqG5رtplLNA4 ||?b]m(ր7V M12#uT|Ѓ*`Wҏ[^@^ hWL&\߶2Jllc!V&^soW ~hB>?&5joaݻF|3!D; #tgᢠLv]J/;)tTj&[h+8c +ap`_)-CWhD\J+RV9D`=b_׾)MS"E{piTON!7?aO{M8 5.D)^Sl9c5]?6pIh-H{yL9墩kBtwsA)? po6ja2Bp'8o;crDnϰW&Vnhfv-S\(kAWE+u Fm'\ 61tq:$ͫ V كBVyՎ'FmQ13@35FNgHh6|;R=}aܷ}| !!h2+hק9Ƒz@Nc /JΕ8֠2J)Uftr 9$֊#k[W D'EcktBHbmGsh@?L: ,r]2D4QG9Qsہn  ts־Sd+ nz^ξt+dM/&x{r+νؠaZFn1^1Ƚ&tDp4K9;VtTj(WH_n+:֊8:W7DJQAUVrH"ˠQmgЩO0 bÝh>Md2h Jl3 ͆tJ8Т Ob>5$E@P#@H}SldBI%s-k0ilɐ1_>8$%q75 IT/QZ_0 9, OՂ/ޏDt9ljZ%}+)ىyca8])ؒ2g@Yԏ;~P[AiɁ`nנӇYא!#c܅b7}'jf6by De@,%x V98G?wӐ7lsrZ,ǧ@ $i==b=LQ:g#NPV[y;?s ${o*L-=LT$ .e7+A\ S:ޖ;МF>k)KiAzVFNgϱ̞ض{PhkP@q43v|`(kO_WYh9IS{|pC*;^\k?i& DX}LpAqՒ{<Yx!4Us&U)x3H5nȲ 6ܖ0{Co8-=àMQׯiEw?4sM@ԄS Y3`2R|c*Z~&u4.|}=8J%);m5fxc)4%C^?&g$VCO J= u {s1䩢:.5QOu&M싰%j@)q-4W뾳- h:C.܌EwPf$,zϭn5T'Jz,no KY,\[t" # s#.r@FߜfIaFsppz/Cxxez]>p<˪l{p3OqD>W@<,l$mLu;x*SVivBK~VD;΀0vœ3ͫi0Āf)-MS1{24d/n:rE)M$˂M呪)?Hx=,WX. ? Tw/zp|!9,L(O;Qո=8\q~ }JDTfò"@nSe a=rB%{8$I|xKsXUOA }JE^MX`r9o3\=*OF{z4K;kH2Cwn5 ^=OkB%#dz#; X@cR!W8-u(}vaۆ;-壧ZC; hxx,HDFdA4kjPOD Wh>Q7ҝX!VH_A;ȂJ.aPf ӷu砥7:Aui ~@ _KY\~f GPz}P ˠ3%ZwHQiŚiy'1) pFE>\#weTAqrtINjsRc+ƵWnۄ h\GBȧ+~=Kb?kїL}:UmGao5xߪm) ~d19M@SW`+G^OG0CaH?p,,5ҝC!=x ={ԒhX dG,0: Ve#9:v̶ƠLn:K ٴ_,':sGR\t6&f'W ~'8선#Rճ83m~kA[18 0spv);}<t6(Зp7L$ 46S:&@+os2̧ 7zM?>.1ݨ9H9o=;RnH09wz<n_; ɿ1fWNDKP_F.'ƟAx\/Mq9``8ރig<;L@ȌP$l+2^u ֜?8y>/; Xwz7]Zxg0nR$jRk4z}74Hi /La=!̙KN/n!#dwG5d3>dDN0 ֵ֚% o;+Sm|pYƺlpc`wwA:h%JՂRtJH 5L~ꀫD =Q[ tNK[r,9Ȃ^_wtSYAA>^ݡYvJrb-p Dۋ[,k0wZ7?tQ-[*p☱u 2'/'JW(6ƭ-aV A'[ Smq腪V Mcs/0m*7d{ 牓ʔq`@ɤLzѰ m7AVc_y&0}n?0?320.EY &QYj<}s`2cb5S b:чY~ y{͇F2ϴ +w/EpX٦5v[m&{m(%e6Yɱ:۱Wx>tvh}k{E m +;G&=ddagk|Y+w_I[(GtVj<;Zķd:; |?jwE`~=6/z 酁?880?@;AdO@{|ݽ5!-e1$6ۣҐLҽ&4)0Kْ,tН~$V_aQNL) MsP+JeLk9 cpi]xFuGXy7!%k]|LHW3^ L3Bt(\\Oڨ0_I@!:\jPz! YmbD &p-8: D./bI&HDVQ[p6t|鴉D,sHeԙrÔBZsF-! e$7uj?F䌥dmmzZRdV @lB,t@"O@j{T˽m4=kHqz3e `drz9BH1pliQ)Cć7y7XxwlO;. TâGLy2HFfUiZ6ϴ$k X@"fo@0F%~ŵVKYw8Uu84Ae &J1&ŽɰeHm$k| 3 Q45X-{ǩkf5T^IW)+qx7=/7u}yCҏ+ʽSM+?a98?ӑòE%LKm_)A n7đk8H)kr0q6׌V Rfԯ?ߏ3 .2R4{:7_VǕ#2=hr8E#W3&)MPihܦdyX*xavEJۈfi0;0ȍDWwpb"Sh JS7y_8JsDT=B3/vh=ܵEF|RwJցZ 5"y]9 Kn`]u XUMhdҭ+.EcToR%֑V(a 4^(3__6x>  )3_My{qGYlv h6ƞ(Stٟ|"Nn=(-  v .zL i׼zҮ!*3L@c$M쳵H15n迬/@n}e Ti.W$SA~?<' V; "aL/6~)f6TglDXmtz/-mw XV%l,IVӹ2B8T~vٗ-"NVHVZRqBaXv:)Rg H9""u1ݹCw3*zYUGL:5]3蕌| Yef0H.:Yk| Z_p&m%'B!u '#z%p A(rQ!~dxv13Nj/ARQ|.fVy㛎K͐nQQ%Kj0t\6ÉÞ!bև.}T|kLàэMvD:rwU<TA|D%d&uɓqs"I%șkX4g"ͻ3jq;|@CtKڽe^pa \^ }|n0D2@]h ;}ٗ;%T+ȴXm xeFg><oe,IHDB:aq vX3< D[q|?M>]؞Ӳf>f|y`;Yiӣ̯+ zo7?"_W:Z8U .sc:q%exX%B篣qdaMpԿǐu uB% _r:r8AWCm\JfKa!ְ@Zp DEpMǝ6N*9K\=%InퟙJHbVFUC8zZ bba7^Ȯ-&C4Ԍ).J .Sښvdq "|qT /`I>.J~ܪMs 5rH^ݔg~OE o!Ɍ =(6_2FP<)VYMg-5:6c¸{Y /u[̺gjG3;M~ -ȱǤB1 ؅a3.9  CLj], +& Leads9{;^mPzXd?BQZ'q {=P?Y2De0^\%;s#<yO6ƭu(O|hKUQ^Or\RZ`}Uy<4l'V8 )#d,L S3D 9@cFZˁZZv~phg֏g• H#>u&aIύW (\ikV߬q4d4e h^Z=`\[}ûF` k+uS`ƾ O]#BNLib QeUM88[ጘG~I䔚ϐD*x\wib2]H&%ݣ̑{FUpg#;>DX/c:ؾC4dppinQ䋏"`;$$edJɭc5!kرr-gmkZHaЋS5O3ʢ,C1ͷD=xqWWkaY1s+n%TB$u$/mX+ ٘ʵԭO = }^MYe:*0(YMm:v5|OfF؁~ov.߅ GTrt(wpL(,"ՠk k3Nw6 3h9"(`4.p(ꈤϕhꢦ,RnلK+j^Q ko-p`H=(,vX5=]FU=?7҇%u\BY^k [Ȑ4{FCEjovgh!;T3V-. rcbU:&46RatCVOci7xZ[qpdvr2،2)d`1m@ eEj$TL6de]!tqfAr6ğ P6a8(xeXg[Ս'nt֤2~Qr͋z=Z0 d\B&:JT; _*xur/9>ѓ׽Twe}!:NRC.?XZH& QYӠ#;Qy2ay/?sSN3\p:,7}Xħ. P9e щAچ=x&Fۀ#M]SY;_>w ^j%[mxuS?Q2ѻ={h)hr ,J!Sp!:Q%jwPiS[v~Pҩ/A'M!n[KipO)n90Z?s(G{045*:g,\G֑|.hZ sr % ]Cym:ofP?-ށ8rR! ;~X0iAѤehM}V[Fo_2z/lb &\j,g*r6)2VIH˹p`\euo*r+JV2N!?wN9xai>~򵢣zav+Gٛ-Hr|^#W8) !t^>^jor^8` F #|sBT`b܀/Q0,y#m CfxUwH0AF p[ m3k6 *.Wow>(WQ(W$b/쮀 Znm8A5xll#왌r.K~`I^;[ lJ .c?dqmgz ;4U\%މ*NCA34dj#q|*.Vw1=O"70`~unNj`=JSCD⍵@=4[mq SXI?3M!(A4aӋh9۪& _ .?iv@jݸZdD9UrHa8rϚ^i|"%xE;+8N96>@Bɗ5R{>Z=c? T ^VV <(%6yd6~=.A`8o8;  iwEh?{6;;A^_^&UܴGzˁ!˴ة_7)ecu;mZQPʗ00Hf+#db.:CkM=}DT*pMp'1.:0I@J@TzbF= u0N<qJYx1'p9qm-K +dX'BTniI;F{& _ػlV ځ>0ء>ܱ1^ 8Dӟ<ŇIhX܍@ vT1c_B3G:D7t,?puV?2df@00o8\t"Ja$vp JT'j w&Ĉ롩RߚФ'^$}u[<ق j9ф5odJ' wZQ,"}!;,ENdz5$Z8`~=i+[rߜJG?֋Dv_jىJX<-23kc=!woE,,/;n"|x#4;м.@)'{|3TfuYcYj=bINe06!5?/ІdDLƦC3Vm,>PYfL{6J/!~3ؖSxV>JSErB)00@oJD[BZ;>E(J@?bVxFe,A*ނtD5igM!N6N6i~'.*c(< ͜7rZ2:[?_F<@6MLY Yּ Z5N7{^-÷P b &Ԍ).vK6TsZQ XXqToe<hFVtx9M謀M +͠2wvg` DI<%(=ѓ(@Ν; (†ޮn֩UR5ρQkR j?ʱ*pnFL9$ޡf>\KX2h.F{ @O *qrd6蔑}z9u${_NkIqƯ#P!< SUxB?@Yx{kwwD,9j.(1sGiPX~E5 _. Z}$YLʾp!CvR, v 7&] .('ϡvAx )R][@&ryWL#Fa1gdi[̥ {##rw{{$5`W)Amxy,pXQ] f}YfU\)$ $\oN2EͅLfԭ9:ɔ1}R}+dd ɻkpYӹ9SI.0tl$wj I 5.fCtTv 91ɗ~ptY﬒2a3: g'5B@4ݫ$nRXR9|P) bQjafy֞ dOB~)\BdD>;+uZ-7B^fpMcr Wxyk7`O(װac9ggsaO]ZqdE@KvV LGr#+A-tu5dޕ{vh ]6 |l$.c#W%K1Za9J^uy)u`Ң cCy6¦B`e(ۓ@)K#CV(~/q*ı eV΀g sABĵ%sGty/"*Fm^)[_Et ǔPn8 no[ePym.7kAė J0㟕\ MQ2hC?sOL)pbm'ć4 1TSQʉҐDQ bD`&?VF)lZ t x5i :+e0̍HD;/ФS(z%qpm0bV[G8BfrʹL-!jKhr/-5#hEw6:܎\NGXZaVNg̒#ZoA^UܐmH(kAi#Gc7h D3ps$N\]f(4HTDaOWۆC};4W#B<Г3gݐ8:n`LMxcxZnq6`uYrӊ{8No#?t$;e0U+Rvk΢p&awe6mm^\[^%pI bq|Dǝ;P ||8G5(t߲abik/4N9%![b٭㌣ !"Hm$HTBcrohY }{=|X=s\‚Q9{ Wfk-n` RI#m G ѫpRLC\NA΋-%=q- f:Ϧ]Ϻ*㳣n5 CjIf:dԬ@Y4lCi_($Yߎ GD'Nx%-ƥ. e87nf}aqW8ڇЌ"|9g Sofv$f9~XȄ*2 u$4e݁n0NsTTn4niuJ; B?:bfͨ3lٯ`ژ>)r񷯨zY"A!Q`^.|TL(vBl?'B:nA^^޲WFW!c ~7/"+;0Uo]a|x08 _rw`YJ!8t68@3,!ڤo ?|hßQ7wA,:]>':YmF7RJ@G ts~ެuFu P@SmO+d:q@k 67?T_7_P fz|l¾L%Xl&!0Z'f F9 tQ] M3)L9.b(H0z ebڹQ4&AA>x"e3oG{[jßj6V,}.d{oQI`19n?Fރ<Xױ!g oNVhv'gQ9HMHY$Ƭ6\4yX 1*C3=7yN߀,:k-d>4-ϸ\c] GJ'Kma SN޸d=>DQ xj6aPwnWg&aE{P{ | Q`Wbw~4TpJ,{r+m -bz'_ٽZp0 >K櫊<' ?"#{wCEf  ݋һVuQI^LIu.P9~Xͨe {I55fЁ t;JMr'<4OlxQ6*-m2}ϻ rTo%Y3h"#op𜏢s!|(щ F9n'u%TkLChW™x 햕n&XWq'ʴ /\p ]  ^ X#''4c(*pŁGˆwMoRq#N |`s"Im, [\dLifPџ%#">1Ioj.׶$($0p응O *iwbc ` }O xf[` j|RpkK)@!rQ=Su;^BLRnkhA -gj6nI-6woyr67R]So))\ͷ6T1r_wmTf6 }VplTдz Ym*''kj~pu妅T 3@`W8w[_qہÌ35嶛wE?s[0 @{8bWtVX!ƻ9:§)1I큶 /IHT3Xp4x]ljp-5\a g#>)~|\U!tIn@t¬P²uhjIaׄQu(ƲfL(Wg0cjiͰvrr.yȤmShk.pJtUNyQ %!'J[%c+-* qi>&*8{xӓkn_7jtA6OòLZUW܄Fȡ +SS0 cTH'r^we/HJ,`AE!^+^)2n J顓TAe#6^C |wL#Wo$_X5\uxr4]{{(r /CZYzv>rO\ 8?pP:x5!ٞ;!>Eݡ܃BiCvG.؃ B\de ֛ %/H$ Ye+z"a"%n&m-Fk-=uPmU}`XNzHOc4<z 6#dAЉüꭚ7d䈱bFutf宜t;f<ڈT'o )בpS?H.4?2' ]8.YVeTA6炊AhzԃđӪL_OVV4I뾭r|~8#ŋ7޸: #F6(Hu*6Army M6W$n@b#𔯹UUU[ qaqhIP{T +4{p|]B li5!zc^v]Ky-Iqʸu!f)'Iw &<[&Nbv[}G,< }:Ha~ :~G$%KJQ/#/T ds&]TkJKbImtP[hPuoj@?zB  @ml%*}sً>1:ޱ .7&/2 T᫵@6au MPt#M64z9 { O~jf鏘9 rٛ%Ln'pv2 %TNC²6T!Oq*伜s {!kjjo~@,փrKAiP.~ qRqS0PB1laǓXZ`98&dpH2t#m).*ײ6$ Óa'Ry쵢fq 2Lp /eQhoTS^|)SHۣ3bztb4л][J} uj?aoDeef -k{`A+CGT eL`*`S D2 d47 \?UӇG8-?a /ؼ|٠ K/3 %cnE{vK, 0%ibD*_ц5dcyͻ ,>dR+,vw%ejVKݐ V-]n0xh,&u>բ7o}wczp&EK=dn ^rĞEo#~ Oŀ{O]c؈>]n S;5bҹVhPNm!r`K_ 5%fGZe(v!k521WB.6KƣDylǖ^qf[2-GIשT}M r0IR8۔;LPv0\.Nba^ )Ć% ](9vpY{px)9Hdh@H\@@anmor(M9o|#Q%Á_}{xlHE3pv4j,i,F; ڊck>P/ G<cANZ.by!5x$QqZ-n VNfVb% d^ߣLnՊ;=7O5A)ɜZ5hg2(ՐhO?;hO,N?1@& nzn w/ŶJ|9EO;~SY||^Nb'[GDycA\w*P{8Pt1/sڒNP(YqB5嚯nX!9:82oQ!!A6,W2W x!N'AU,V*պ 8O &V:>lb323mi!kS {:nχGΦ(Y#uǶEsK ZBA .0W`֌A n{K%T8qyXoOyfpB7zd?5|{ՆSw'9 R's _e ͢۞p!OPL4Jb9#]!OERA\Y"u0k%>qQIh<V+,idbLp̖O/ےL%pRd/Ȁ];;0+B*aOYR8&uE?%`:}u؅b .%,2XaQAa!u_; ,P^TιEN`,'[{?N5кXÁ:׃9hL"p* , :ޠ] j >>]A 'JŮ8\ :LHL!=Ni֯ܩ~+4%"p8D?ʛ7Y?X[W|>根nV(4u.֯=J#+|$Vfd43k3ow2 KZ_-!/,Y;h%Ԅ=C uŜ-_IA2*2D`@cf >U} d߆ͻ`)0pS: <33mui$Z9"i)q0B&pH3M>pFeW(3ZtF8 =*C.>p' ˠ+980hU3E&/ q.{qhDB4T ' L;o>a۫yMȒqlhCAKJXK_oQ3{Vkz|/UQ\8ޯœSkiG A!UM>AToJ[;5"nxp}O=G+@4,wmtΫn_x`NqHK Q2ac[l96{.s;l5LkJ-7MZk׫~5.߃oi);;߬f񃭰%i:`k{05Tj0BqP7g8Z5NN(M !g>H)[8 4 .ϒ( `MVr> oo2CX"ZUgMwg64׏_CiΉNU'Nl$ḥ| <^r h0 CZg96:lZXa>(y֦ £Ƥg;E:9l=s}Y^ah Uײ{WXAbArJqÆF+7^PDqanx] ˪["m-lĝsa׀BLgDgU]j$x6T'9&7g7.lա`'8A)G`%$(~ Aw^тõl=$V [ځB=M.,()@eh5/M1'9y)H9@󄌶)p]"8;nX ;%!Ac"0>ðs2Q< N?R^ˠ`kſtP 5P:АCV egtq-p JQq{pW.[!c|\` /jjًB¹"&ӡ%݆^Ni! GEؠ zotk=PGKwqk2tal`C2YC.a 4PrlehnTۭaxI3$.D,ZH|m!_Bz$*C 7Sv} ] żOo> !2sHe?X4)M"VoEyl~L hGR@Y*4!)7>k"@zp\ylV$z'ۖFC[XيLlUw,ve%2ǚRl7N:uP¼m8Yr8m ,/z]ejQ0&}y +ۛ]bkcO:|W5 Q=X Fz1e}nYÖHlpĢW۬)zk{:ӡ5,u[>pp½. ,VzRJ 3std_Qۓe>~}:=[9}s >%0s4XRLJ#f 9ۗIvwt Sգ-ט~etHaVS%Xć 84Ȗh$d~1&顚ɡ FVPUaJ/oY +MGv5/k#1of2|w.͘Eey۬9GY*_ݡ2f1zpp$ėVUŕSAtYE Z!/'C8Cu@>?4RKH1&Apz?]-J銨yFwD78OR(SN4a [^؞8Z5hQr+{uQe֮=LЉ,C]k!#3r\-ε!\!=u2bgmQ'_n >8t{,'>̑%mx4!Xо8j 1]UB8q7Wm(2ǯ$% x@?"6f 9e]4)/o@3:75=g p`A/ [;qhug%}-0*{ i-7{YA' ܎&Q,{+2*\&\j$ ]peΈNpj 4AKl s77,@ ʌLp# EƵь%/ X }> {їF$Ρ3DqmWBFo(A(X^H75~ R&~CZ9oh^$WR UcCC@h#J^{DZ]RZeb^!B-W(9Zh-QXQktV);=(Ct%qxMGtj07lrS(L-P6virqQ駸-L;jq2|gE>hkŏV6U7%Ȃ|bSvc.`D&ncP\+r0„#]߂4L{sV D[[`y 12fP|\VlةpAwBu?X@sv (,u[B)2 rdF”W ui"PiQk,m4e]vQbVs!+:_z&rLF暸͎R ь]@ɭ,G4hE! a 3^R8( g~;-KU 8^hm6_Mōh:&H ' z %J2GN^˾D(~C֢tu8m:z]K)arܑvԎ@2&,ǽ=MmrOX,'DD-#P+'k~0}DZvo^p}Eq?2VSez3A7> ,וJL=mQ8<\H p,;QT@i ]BQ8)`C *Y>edNF :@0 =FI,q~/^2wG8|z UpY$*Q;8y8.?FmdPyY]%ɞkap~/@U:\<,Jg™>֌+–2NbMQAC#UT WAMd hQY~]/K;g'ƢW:]mw]B|/uWϝS_m(GVl <ẄaJT-"e=IbC_F]C Dp#<}3 xfK$oG[pr$mn?rDP; d&/`QaJ3h@n>yCTrd(߲1($\bMX7w|/Wdk^a%P Ԟ|-1U& DpG: NLeJ;KZ_d'4*G, 7ţ0aΊxe<`I6rb͐ZqM(m3}8c4pJfgL\o>Aw; @jS /_$R68mu1 Za/ƲwOpɎ>c kQd4ǝ-dChnx2MC_1o?e"`;RF8{4F8-0 #5hyn=7N,HmdKb7睘'zb4`pʔ'm&uQ.7d~0.^Bq 9MpIr&#k~;6-3p:W:Q))J 7;AzcA eVwNh øqͭ]NGh%m^ ps'ߡb<&otߺ8jspEkuBz3r j7"R09L+s9py{nPō齘KY, DmLwζ?(*!ۃ #z T]$!eor 6*Wb5p}`J9!2AXohb1TK" &zgTa\f>G-LѹJERj+,ʕB7ԜpʹƌR^7YBcKz)^7NghDIU%{!Aq!?Unlո,= fMKsS ;p&oX:{vI #yRE)ϙvԇoe|rЈF ~͍%= YaUq 8=`|r6aܸ 먝06% ~lU( qxVL z2+}A#ʽQWsrDc|$ߠNuhXp(\U>%RbҁVYUEfXuFjPi?lx\;70u52`Rq3 ݷ7<P]ޛL.'f%vLhɃ_L(Bрݳʑ7aZʮZwVbvcpǎ)ķ@Y8xA*zB^ꏮ'e>( 2l]@@e2^9QOG&Ova~\AN:tJk#"V q/"+] ]ÎGdN{;s_H*ԣ Hj6ϋSϰ^껚+ znBw9jr4mg:7ЂdoJ p=NCo?]rëVdJ&E RwԤP.]&;nױ2hp )ar+fsX0zSnQ.\X|ԧeHwӣ3gj9t2ίS,V81܂pqrdA@ ;gRh ,Ѵ0yZBxM!|hSޫeS$2<5,H ͥơٌ7˅%dF{zIdv @dn*wNN K\$<6Y 6OZyF[FTY!qtQmJŴ֩J~ְ ^c{sxٻʐnLq`z *2twCc OuI~Acpa nDBm %(N_~W$m>1{t̝,pכ%ˮ9o3϶p^:dz s_ ByŶub#O216݌q,}Uq4Pcǥme1㌶)ͻp Y$t t_wYr7NvCD8 c^1sHi/IN C UD?(Ǖn7M]B!gN*sNFR߃ޜ"rMqfY`4wSt>zgI̎qQ S<ёQǞ7t2nzMk 8 un<i6>4rA4UzO驇mWR=Q A#G5fS!5]ŷ]zrI x'[BH*p8>JoM.??8E=b[ ?N8%ͰM$¶|~J&DZRoΏV"ݑŅƤFF][3&<]7(lzz ~P(2~.m# PGdo!60jZ.6cv1&X"`;w^C5deVf5(T6xB0ᇅ+}Y(W>rgOp+U>wp$y<5 -}9[x]ڃC,ak FؑO3Y9N7̭ { v{c ߘl~}Å:Uw1)ΥЋ)ٔ'T PyƦd_`iЗx-`!ge'Wd|H{(|vnLvDw; 3jUVOG*# -[Axf_=xVZ+х\2yfĒ"**چtf=K^p:Bh40?t<jav,k+&mg羐L*Zkp$y[ 0S9m?F»Ny=z!"eOu8a;WmWΥY9f/o!ݡFC1 ` .G߈T!f{5덶n̋ `&b2ȭ(}pd|-5|ć1qRItZJea>M/jÅo"ִ0jt Ţ?lYvHee9CL9WW"߭ô}p{$ ))R͋3Kbp\KzE$tY}^dT|C){d٥@w@=r4KuMzlkg~6da>QEo2E+L 8Ae2 Jܲ;{w'x$QKXʄ^&%W"^sd8iq:?[g|!t0-Y៩-X~\:^cꖜ~ ~`d()OPL< 481bCaY]]Th_ǃ m0ة)SuD \#Z[1e.Yn}8+Kr-]ȧaRLQRdx ;#j0B 6N褕 !zs-7Qf%ph&( lJ OVi?zmfrJPZ}~_zyib]|3a'5$FF#4c1Q=LWI;VYPVFO?GeސӾ.gBF`ȾpIE%ݐ^Y8du9p7iGlW(kM_J f |.;I LҌz18o>hK--ap͎uf*bJT(7ԙfѼ~"+@]NXQVӈiR f mN:,*~7'=VѤ{[3\Ɓ;3:*+L_G⁁+KRPi>4NU8o؃}i oI54;h; N4V[1ԯ" iT { 3}߇ե7-P&0nN_?)DښF{NkMcJHܰz?{Q<'$fFPeuF gOratI%w2>8J- Ya?Ud7JPa18EsUI^8DP{zK*8򽬎+V E5`CV#v-hoai;P݂IܼWp^l{Eo@"ŋ}זK'*}ŭ>T-| Kkk˦qUŴ?U"8bo/"F]%݀p׊W͗A m5D׶|礑wށѰޯ<%>xi)GA5 biz{#T7RSeIq)#;m6 /CGPRHݪ-xL6➞L}Bd߼׈R^v?hA-~rUYFYeLN̕t5@ʃ!{gaq/ ԵnT gFo#?{#$5pCqS_+sq؃9tE5ܲ0N|~'&ڒVgY"#x (o_n7xxvU&j|Vm` {ԍ0/ZeEMP3qsda͘>gg{Lw,ft*[V :;޷,[y)ۥ0U9Oq$5^gwUE.F[c?~ZaVw{m;V݀{HN.кܓ%ˤѱx0@^{-0 >/h4 1a^uuT6 8ַJAf̶k-JF՞KI&; @ǟq :AGY ؄M1?kTq}*l5doDoY]MIg]X<1BCHʯ1] R (3Vb-E_ 1Rc3| N^[ g䢀xc/X\g.j+h\ eoY`)-U{vX c 5h`cڦrELA` i7{GZ   #Hkň d5B?Ȳ=^,{tL9%7zvZ>SBxx›/µ 9?MuvV<rcx)K5fXw8I\@^ {,wt^^wW2w_ i:Uf:C) rJkDVCAً6e@}>MG3v\E8k}~jr$mr z t4d]rw xrGa=@w>}$?@{W¶qW\RDV8 [ꭧ2f` EW|}kKya9%} ADK]ȵ[H]Z|$޸{׉-.LpIi>@tRn#v5IKY^I&m*;/$BDfxx*Gջ"Lݣ&nβ % 'gF+1!/|M QtĈ`X*"pS)k2\7{u+>z~ laHnOfi]~A`}xivpT!ZPwp:R;(x=T䤼豫Οu+f#? Szx?Wwy&\85szYF|ċVuidGJ /;"ڮDOLrqvw5=7c4n*7`e! گ[WjD%GZ8!|A+[9+}Z]7adE[LŁf=u4M{*(wn۬ Bk9 _4G_\-cO+ I ת~Pew;Suw쿐T i4-\6P#k?jr`I,i4Ht ч~/s'i+W^&.h_ͫHS*,Qr1yBGpp e#y iSh(GɆHEo,MûTDAVh[kv,6f eG/ǃIzV"u W+FTHB?QW1V2{΀A׺<O<`ud攤rf! W@^ rfbnϱxWTِɑӽ^tky՗'8*v$z't>w,aط%ˆ TOp -f_Hr!_$Y 6H> -Cj[C15eVzp4X 5Kr +9cUT=a3ޙkFw[eH0Qprǡ(xEÞ_@$%V~+w-IQ>2:s7D~sPwK`$|ÁZRKk$ֈ(Ib@ğŵݑ;9BZW-tUl=*=ć %hY$ADV,Byj.k,%{= [D?n.{j蛉qDrlCLV9܅}DUby NKlRRAɰ6-$}ڢh/׿!do];D,$4=q}:n1A큭óUp uDZy ^4B1>k( O s@a{?62 1ItMe c? rpjӎ3h`Z1+И=gb`yG튏@ۄQk{"بEvSP ֎DU;y<F9(> 閠dze2zgO'b_I/XVU?, qLϖonAj"0eü&Ї$9) =3o*¹{1z%Zjew^a&5751[@̽X}^ j^|zň 0vD}jCO|^Կ;JYcJart GB&e73 &,?~F(h!%yy?kì%!}:npD~&Xvd󧱋"p]Zݚ5$aGͅ) eXq_3%o oG+{5֭X.=b4{+8dp7. 0p"|{mǽ(Жl]۾1]kālwԡҀ[jڰ̼n\ٲPֶS?:0w{MR?? 7z2@,1`h&g=1Tzo Զ&Lb7A[ fi8E $:t9pq^MѐGd[4pZɅzw?[*D+ZP[R@Z*0SS 0ƵC#7XjNq3ZB#v ~u{ԬLxh 5b.qsYA򐂩gAtհ-v.IL~ϛě9Gt@6ڕ4"5.6ʬaF}faCV,|zL7<0`0Z?XOadbȈ=i]{D"t9c"01~{]hZƴh}r6d5оUmy O_ ooqg=Q`uw7]?@[q`%f:&+Z }!wP!{9g;?3QȊQ.\&Hv5.53HkNf̑4ͩt(i~&qϓsTݳc J$\uy /%9쏿4.?H^k9IE":ߋ3[9'] Jr}=[)(LM'Q{@|B(.oȀ|A"E"a$1Ң=?>:&\ +anޙ"N2p }aT>x\?MF(P҉pҧ:4CpMsNhşӰ5oY-b8콪fbfSʌCɴ$%r;Ug~k?u>FRWfD-%vFMQwPn2 Xz@s 2XPDR!b/5OmK-=ruePL1q! vXמ=(ḧ́XTZp=ٝQ*-8|)"c! 98ܢ):9Ƿw;=Q!ǷX=]V *@hqq,CWdW=/5MYN2X&e@ D Q(pa+>Oo_p4gn3?Sto\>ݔE~Ȃ}﶑TltЄ?W(30Wmm3=*xs8;m`Ϫ{H0Uˊ]J̃U'1O8 8Z,3^+?h 0V4VL,jIoҽlgXZܵRW'E*%Z~6CFc:lky틜<`Ta-6){>6fd=G`HxG<8hZ4}{nn!L2*'LF@,b)H*oli^A‚[~,y>B ; J澂Ģ#!7_V!X9HHػt_蕯BˊR'Z(IzH}V!,]L(2.lqJ?cVA?`̃p$7@E]*Mq\5E5N,^ቅe!?Oջ&:AA> +r)֝ʈziKsѓ\ʋCa:bypw{-(~aw|$ꨌL-h פ {/Lu$vsvDE%fk `O|dA^{yJ3g-DPbvFז3x8cV/lWU03sB$W[;̜NX'ĹE.1x[1ΊAB ,o%ʵeh.WQO=-(˽v%+ '۪vh0l6&&!Ֆ(y=a ~#ti#} W[ 4a^]ZT>0[lkÝszᆛů۩:3C2!M*ӎh'Q.o<vNULjBR?o{KV ֱFd?'>u-a$oVI~k#A ðS#/,_>0,Qz`ud!UCMEڭ935e9Z xܖ{h5^DS$dguՀg Ր)'@ǣx$%˔+eBnW"[|eKl'9JfYM<8g'nȌ&8C[Yt_y6 ~ū9q]3t8lHۣzXkv.KiE\ ^(gز&AL5R?!V\vظG _oU "x9~8BJxb?ۥ Xﬣ-&1Q e U)59{Lhb|c3)F欴KfpwWjzhf1@߸5!HtqBc#$m/C f$9&_?"gBU|.4*tU`/5 MrD#i kKJaU4G^Ewn e߱p{тUgLJiVe3pg#3nD!4&&!:'enThk,*f!jqe@\X-Э^ʕ$o}i2 >e q'[@PN F c(:Q@fm 1\ЪJߑ+؍E ]I8RFӈ 2M|J&*P+N@MEG!AQ[gmƑq7pJQg XjZ8O^LI+.Ԋ`͝4F[ߤ5qDO<ܵ{oW80 wRU.#v$<2(#`T D4"a$S$_z 9+FZb;O73Iq|w!ȶXrQaȯVOgAݮXs d{~ƣyK`ӫ%9)H}h:D(?0{&o7i{0{Ԛ{pqmj UDJZND:3r& d e'B=r^uI|it'ʷC$TO5r-A8lx$3D׳sӤi*a|C-$l+l'N6{rA1,J{{rPJMGьZĊgyiugIx*B\cj2Pᘞށi'DwͥM0TEa&Dݖ~\;Z[.b bm$ƢG=Nu_ 9>&~Eq3⡽nj|Qr>fj5xl//(Yv b _pڑ*apSߖG8yq]8A~'ݷ'y݆i%2+ Ӷxmq*yczIB)H&grl~pA^{E-SZRW9(6 §Hӳe^B#Qq}")O!A?).dz-Nxas$0}k Cp>Z2DP^^:r9Tzˁ9&LKm(:/e?>KnUXY9l"T_]if >6PJj#=k&t i`\G3{ӊ?z 2ƾ ފS1L!!x| p-YR+~]w2>]dKtŃ|v㑒u `3ܯz59DEj(HeGy0}x)U=]/pI=ʛl])D5D/5o<YviU:6@n9+]M ^8j08SNY5,Be$t bRcwemM7M:EZeSo >3dfݭ%KI=hh_NJ( bBրk+-& Jw =ѧҾ"|7^Qbr>skD/;CaDmq'0sڌg0@xYv6al& xpnlZ@qE3[޲K4+Br5ȝ/S=2k<[F5'LLvsi)ׂqєl+5y A% :e }=XUMpTP`B=y|4FdTj i팇rHba GUnj쵰N40P](T.ʁ⨽gY16{P|Rƅ'cFZݻtf>A0No81`C~G%R%X%ng~u_ffNsؖߊ"} ~Y! DžuрrtI"SrG!d-U<)Y="Z^x@0 ݒ3RVXebv$,u|K*r|=Al廔ά{hCQ| w[E!`U:" c&r^J;.9 >|S&7bV{XS%po,,yN1q#b␑;[Ӳd g7TN,m3SH7'KKU'0B'nzAe!{_{1'΢j8K =VいITWHL[>|0 3j /)D/ 5LQZgIͅ,'f w5dWA+mt?8Y]t9smqY9dMO;Ə}tˎ}1T9VKs\@xrujj(V%s>B@͚uA]~[_2>W)ڏAw1φr :=}),HP~I0LÀ~-Nadb.ex\gɭ2;,/^sv t=Awn_/{{ާqHrzAZ28F$oloӶ` =%V󅒦dٌVz_$uظ/_he7R+2*fAˠ`f{ q(~]iIf ]A)) Tk-Eߴ2i_ sw%N):xg0ڣ:@|ҮXα@vQeB2;܇U>ĺzyJ>u- \[,Q#Imc90طr!8LВn롭 %hTp +V'$#h}BY ż1!KxPBҠXAU6-D. Er\ӌ~bI4Ңie<ΡXuoNw 8!О),@F`܆>HThH9jG /J -'i|88+J!'a Sz, "bcY{|ǒo[)#qnaGZ2Z5sDjdQrՁ| =#/";BQ7nDw.8K}>aM)[ +ˎF@Rզ(ujv=2[9@LkxaÐJyvB;n;Q֏v`~.+;Tet]c ѸǞ],2=sK u F&y9 śVy-O.MC.h_0>8f95e[OTeNxP`,NoK}S)[PEYcNSvS)}a*t1 }ψ֣ {PZ:C"d|\_mFp:2vw%[ c-SWH&4-feٺGH\/:m9&[\@r=(ht^sL)Wg&̊:^TSpO@˥>THQ3AvHݦŏa  N!,SX֎XoU] pcww?7MN}ab'}uD2]MOY$6HV 0l5>oh&ա`x%. @9;XKiHr #UW,ZP p\JM(E?SR:r}嵾XYvRݶ%8r(&pwg:߂1 ujH4<]d/ ѳľ7 .{0BX@/\Eqq ; ba~s@%̎adiormr: +fkSn[2m@{R[yS'W2۵ yJza?zgLTxatJh鎤7@`#] ;ڙ2Bv`Q7p/GSPΤ c>kwTU,akD|e(Bxզuu/4eW Nr- Z3'sۺAZld<1vn3L.L}ӄl:{JLCH4Ey|@9P(1KW{ SrDiӫ^˼c3N30(r.Vm!y⎢ ^"Y[J#m{5e2f|#wKް`xѬo-?V8O I殒'nw.ǏiF9#{. Cg`zyIKJܞ|r,D/5o=eV-L_ ަY~?'% saY?1ܒ#.C3rf5o6Bd3S8i3(Ys?{!`AlVHcD5ݱKgKMInM]˖,Ot9UҒŏ9rgas[-`3Ϳ4OkM톔4W#8RKbt6pئ5-:(S>g6NmTS5'E3,aP BŶ(:&ƩěI#َ)b[\@TJG'w6叛v3YP?(H%j,*g ^{B}eAˌƏĕ c;CC*UJ}TY),1 GzV8 kS)ClӂX0n On?x{(_1rf-CFoO:.GwfL FV3 ḒØs.+hePcf?SA۱m1]GU>_Z&~l~Rpn&iP$,5nLA61E59{v4H/9]퍮)u8$4BOi{k Td_p;]p$` _ ԻNpRiD4av̼_ ,N(9 g$(=hGp"곿Pz1ɎI6rZ=P 'ox 0>mD5JrEwY8W5 ud ȿZW)?mIv:a(֗y{DPԝihTCS]jH׮.KrJaGc~1hӠX4+t7=q JyqTN7jsQUtϷJy_ &+*#}9IF춒 ??ܦ_+]yᬒ ~Bҳoz6~7hBN^)&Ֆ!T4eMTNFN'"J "n74nS#XQ1Z4YJ+o[G1 jTVBfmYa9?ЄA%*ڒҀIy[(0{ qan3 8Ɵ8 iX&1>C^ ;>1T]Zjy5+Q).B X~ zUcƎ!PAڵ-9f|i4cv U[ʥZ8{1DuG +wK`hcoDKoFv.]ˡC]:aŖ7jf !֢ ] 8Ӣʸ .$1ǽn6~pLN05vuU@)0S;ܶNj]یCv'a〆BY!< pT34XX66(#QZ* ~C;_͘[7C(9Au҄ 48s.%M\?S-$o%ِu\8%^9$ɺIYௗυce7f2w9T5vq|/ ]s$: BRiK vȞ>CݳV? an{ ]g:"UmG:e眸p` k\  z%Ef< S~]ofiٽ tX".o ;p1vre]aYs*%wh>p, ő1/C;aY>poVգK7FC 2RFƤ- ;+Q" - m/=Ma EG|5)k~N;stQYjm$Q DgXx>i.(Ξtއo\ԎyX'.\*ba J͙9="<ٔdN2(,Y ؠw]S.!4pV# #EZi)nL/ū妊I6{=Cڻ9TGdv; ܪN]h{·mC$֋B!80/L~_zQH!ݽz:\ UF:WDKRфQKceGwa 6Ԇ&{fjfM~YQE[5⣹Fu%{Oe?լd)Fߖ,L֔aduY/~ >cwKHHQ 2썺)._, {JK^7)Td_5tqA lG8aGI(A*F"P0̤w"z yݣ|9hCO ˠub>"SJu0`w ;ytxJ*MWo8K>K^Ђ%àf\sHt )7 27y-#E0|2:]놺rdBp*0T-?w6e۫J ҨE8ָ [OuC>=TaQ~6J%aOkpXxPeA_@7# kKK2<#F ])E3az{1E]B:勴KHh.7D\8K K*hwl [:5N۾ .d/0|ak{FO?~ȡ&#U۴I>˄aJUu >~ !c{TOUlqmʑ[dhtv,sEF$rt>s:5M>ԣD=du,aglZ2(-a/gyNx'Z#@'*<v=/GN͈v\1i3ӳ)5R|p.Y vXWeQ1u-2 -I5*jI{\oEEQ"mpcC0-А@]=MŁ/!\ՎiWvqA {O2[^iK.W~j7\hPlgM%?,=Ʉv܂h`sM\It䐭-^ [Z}qm >{<>&)sn5 o ӾB EJɢ(ǣ` x?]3vrpv1,w(90E.# 0S Aү?, l {\K6I s 9UX;!M| raahy$`+`̋+q\K w,`o׀&@Ύ ȿ܎An%ᰵ!oWQW+]&f2q+KZӱ1i0F(mR o/$!@aĒlzLr_z"\gÍz\!`~hc:t0&ǕQ|pNpRQM'}jmB|<0˂Lۆh?Ϭv%om9t+ЈÚ. s5gQ"HX38ݢ-ȷ" CX cP;"8k^ U,J)qvE>Ł|SݭqUt975gҍ&cdc}M:,^E2s0=9G%SO .^J' ҒrF`dž qRn_=I]$!RyCsOhzZƟgtgق>8}{M]"RИ=Sws봖sQ-#ʤ4UWm ;wHDog9n{09 # 'jRc<.v֏:~$O$ KV ʇ(6w-!LrW.u [[n.=+.rBN)-)0)롊{\'fxs܃ȉZ9Ig\I8ܽ6c,S} %&sEeLMX9T(4d+뒁 -jVs.XDC07\c\>WCrf%j'dKq)IHTnV\@Yf)ml՜<)lUjPvzRi>88ApaFj?vafzG?%N^fF/#W ;ВT]A˔m 1%\ 6Rhbc]O>i<4>gCpQ3/\ᠱK Fаe,5)i 1cOl \Cm;2I*R<]ǩqxhgՏZtPw>B( SX*>vpo2= 2^E9P\Q RpN槀U|ZUd_1Ez{ד\8V'\eHTeya} M]n;MP^kvg9N\TCj.u!hsشC`o' s+Ti|{T(䛳,l> z#Wi%bVi g{wɯUG*MRVa=\Y!ݜ'K#$udm:ө t'p6wb ҚL+PQ}obV:|=.*7Po6v]v%fe*yj="K/oQ-05yC;EdcOLTEL^w mBZ$F#!=Ge5f1l&ϳ{@G\=^F| n/VEѸJMuG?F|w,"G!iऱsK]05F,듃տu ELG>H(u>D.TCrgMo])YL $/)&[Q]1G _w j})WQ{1Sj5Tb5񜠋1bZ}8S Zh] .={9dz;3 F%^1QW cnk$0?vjH\Q(&]{[!#KEiA/aV/v%uzL+xl7n*X./7Nj.7 ϭI <#w-G9yɮ;!e̱Q.]% /^Q;RY-seZ+P-ɇG3 | 6%顄9F]_%3;ݒ,Q-وPo2fBmnRchjLՅ/M]1 :Qc [QgMä  9ȼ`ՄQL"u^׵:8C&W'WjP)ӡ-MniB8" ~ Ylq8d4ޯ >p'M3AO h=iikEdwR^gDv;O$p/o5|b񹬾@(M{;鿵tE[֨8,.ѠkRWh8 $ kB0þ%b%,'q LB*xeNr}16do^wј1xN.E@I9ʎvȿT̨ޣEnTUሱu^j6膳__p%FaȸK+ឍax]CKS&,7NM%Ѓ.`bi=8*HTQ[n.e*rIj!j D!ܵKw!=q>0430{n^O7TΐAks(=;ŀ~> {t1 Z˾E^.LRW' :-oٶRA1s V{G:nA9].*ņ]ܹ?c/#0ɘ:jE9)sBcQp|^YϕIZaǹ\Yp5UƵӾ^R,[V  Gb̑J֮>[ԗ49^7M-hԁ %"ߙkj:HMU=ROA9>w˪%@c֋N#Z}5 gn?XTL3?;]#q;U"q  ,NN[[P؎92 j0GP YSZj.ΣM=ؕdSQXzRӇ6>XS@W.m'fɒ+yMS4a0}(@WvT4GE?vbl +\+ׅk>Afڀ}(fs!|%iPAm3C2[Eq.;}4lzDatcs7o*<ȐrtjG-s"ܙ}#A4J 0. S}`mAP,Xر}r^BeY1@Ktqlf0K+ y@K0TnqvCe PطRR !Mq/}ġdl`} 9SSw;m]ҒVm̻@?ۍs=jzW֠_aWo`mMO4&c˸B`-epz'vuJãU(a㡝6ԋlBXg΍Aq6+‘,uX,۵85DIՈKPL>8ÁM#$i[vbBEoQ+M| ~Fs$l:a]UF +\&~35a{pyGBā"țB7ȶ8&8x,vr$&#J$ fgWCze1'?S]3j svμl5X,v?%zsP;;Hp}{/2B o~0%УЌ#[Ҵ3U xLg*]޶1.Gg/׸X,qiҰydef16?(R,nfKX>1H;]\vt _(yӍoPA 9#<[ve$faie^gh d#۶[x;r#R S\"փl}tA{ZD{o>Z< *=U^8 gCԎXuʵ:c3~1 Ruߺ*g2;p@M⾻fk9P4,*^;}!RpJ*"r z% ۍi~:?(KwsTI i+e/ͦwFdIhL-=/ C=v~:y<ծHJrm,e0{k|$7)d+4k!t$4V e{$UfMf]T+2Y`/zqx2T\6GZInl?`5+DO|X_Z:€i.7Ψ|wy"8wݧ PCCn C $IHbx <^.oS'n {S%X -uS#;q*ȂHɟ}8uPq(P\|5`"Y#qQWØ4bBXos8Lj7v3P_3(ًUNSg8]je/HrqOV%FH0ԛܾqtNP^nTs[.T9Mjg'`H#)U~h >:EȂ,yS>ra ,[B$߀ Cwd/di&AfxVF82#]{_ŕ5(q%W 5 ԰)(MnG7 ,}j(& <(8|932e*jܫH_i~ppXQ/BwUA?Owr^Hh7X* L6лM j8EM<`$`~K5ϳ)-OB> YyyM2EO _NvH$8B82f޾*rAK=>qhBp 4);FE?p0 [T8r8tjƯ!0|ko&foT@!e^E?Mn({6[WkĎnшػŃy+/Q3P{Wq{Un Rf+6\bgSa9XM%ȋdəccęRܭ!ߋ;/ȢpDGb.xL3oLa_OY 6TxfzJs V#Z0.X9؃tx|u(./(A ú^j[qXxww)Z\`$  %o=Ēu,*% N)̄>'DeEf9sBЛ@VáZ.}MqHfVݑM^鋾a&AkM8"{vDg@r,z]&f_^y, Umi{e$|clx,!eI L4ɋNc5FnlJ3j|jM0fj oa4dKM֖ߣ>K|DOT~,{`Z]i`Fq4ͅa.ȨXEPڝNٮKLVAU+dm| vkvm;7\(- ;kN Wj`a&F .؈f[Ւ`s~1~ҿp$q8[*Αu=(zVWB)?Lm 5Ҋ.G#*a^$T(+W[(Qd1.}f/( ({<$Pvm-oN*?(K&.'xhIho-/9/v)W;l84V2:'Ŧzui!t#J;W|$UV@QQޮsƔ*:vŘB[E]֘#S2=ݔJNjNVW<ӜՈRAO$IBx|W?gwLnH HqzPUYwDFu j.t~:96':,s^H^ j=Ej-9VoC"F)^KMCalv8]7mY@a;advDbfYVLA{ C fY(WYaĖ>̫cg3^HU2<34e d0Hc[00TΡI!uQ(.hg9EdJ`Raa#>IO>#|p o]b;%Ch l~J?Nث_ g'TAo(S.snh)^tos*W݂5?f1o޲Ua{+a'OGY>"Eu?-f gn|.j)l~"7RD"d].(n&Tx_?~CߦU)2E#3 qm #sgjA糔VmlBB^g߁RUw>VK<(]X iFzN۩I("7Y=ؘ>05qg$-C_R}GkAeLb^YaW!aft'/P!V oUy@ˌ{z?Np_Ar…N^S6L?6u9ЈSG1ND{6+3*:_A-JcKD}߭,?d6EA&{H\3Љz}뾾)qHB;e #{x{9_5s\T>gD߁YіmGnؚKSrwƢJ$F[H^1,.3T+LgQj}cŬ P4?w0;.)Ŋ+Hdё j4|Ԙ qg̺%& va}N\53Nk3je[彿'V%XX04EB-0֒nb#P 4+dK^Uu4d~\IM|:ns>Q)˰aY"7v-;7z.s r` ‰Z⋯Q Ut%ua$= b%a]ٔ Fo1omj{ILnhJ󩶤Tc mnz8h]m+ѵ` a]?~x4F $ ]0b[i*@1Q6`D{M?5>ͨ 媾U@WχD`XУDvI9b=-! r05@?f/ ZT œ/ʎ(_')a#֕ԵtAg>k(׸=^S. ɟw"?]:&Eu;A6߂OLsD w:Ep:▧jgi-K,y廌QKbJ%٤ S$^Ԩv*nGuJRuwiKCoGK8MP9.7XiY1D(|[4/uIM ]4Y(W q%2|‾ ٖ6P9tZ q>_.~l4Ԣ` rG↕QkXZ򠓺U8ۖWjZw.ͻD)+'QP';ȌiG U9[q.q(y*Jz/DM/Ͽ#VܺN>wU ' |d rg"A3dۗzm+=Z; /Л| ^2!l4'Kj' }3E EGFw(l;E_ZS]Dz#1/ۗJrZZBpci8̓ʒepf0:_($F`p>U_j~ Bq~{I.n!R@SהBtnn X#)AB搃zhZ@Y &[P L7dy#{6!X%4?8b &}oђ;?({]ӳqԡ5- pWmɰWf4PEueMp[Y%h\} *`w>k*Jx[{˫pnWՏ$tY~G J#w@ `Eqqߡʏ5Ђ:Ϥ|@@d64YtJb&ݚ.(Ilm7= t1QGx``9 hq]kAh~AC.eR5$FUZGba2,oC{ Z j)]vۮW借>{K~n0~$YTF#q`492=gǮh!A?4W۶g2Ⱦ4d?nѦ4NyR D00asx Ի&3;SAB~7<4lDh.~q4#ES, r ]u9ç,+V ~gm[vҰ~X,Y{E{nprq'9 YK!ՌGURR<#f?I{ywnԉ_ BԷ`˥JIfev0D=)$u?mn]1 N6>rzеm#E/t(dػܶ\?G$n2rꔯ+a \ &%0ρV~Xߋ[SuP( a*ڑqQ/t&ekUB[r  #euqz aQwGQJް@ݤ>eϤ׋ksG5/kj 3[hC4ZU KX`&Uǁ&n/D39iļA^ʉXM(:{l9ǻU]3I ,}L̬E' U;@LU} 9KD]]^磳]7D6$gP]o/4>)YM_6Atci ׹u 8wY,tȔJ}l .q$~C@:T*>{FG?Ja}AF9)}a:2Xh?/U,UjgU2ia.'|镦'k!6y?/@VP+ YkurSД-< *"a/E4r` v198'{stՖG$۵m$. 0Wzg2Q] ;aPMx=FMaV5Ⱍk`Y)5'2+!Tgg-XS0;NZӥ-R3--F [&FB!|~3փG?n?#]Nҫv8Hn֖N9KW0]Ϲ]Wd3ʠCūCl`XF,"i^d[UW"a;CN!E &ѡü]O0~eT,Qh{-VlG5Ny&08X6 L S!x)7 퍨3fspsYk̢_Ϯ=FgldvHQM( 5s=͙ |Đs#u"V1>ĸΜ[~$.i,e[,MN='+P`z)ۦ|VԾwѕu__k1λ`XުW23tJ[2`D;xoΥ^H׻/A+WѡQ <^G4nܧy~-P4Lbf1OY#G >$\ (u35 JmO hBlPcz 3!*綆7ګt.d73SH%k )^m()MX$WkCV=!<*ؑQ{2"ؑWc ;Kڃ[n,`z|^\I%zZ $PBoF7$U+a{)ϟjT' S%޹K4*~՛^H;/4vܺZթDNw\%`\ S5u+Aˢ"qWVh'^&֒M\/1̵ .:(ج&8r2-$BHxry'8mط~-MӪٳh5 ٫C]/htk-_lz-'_"Z0nݛ^~:7u{ħyTRgiR&b5tS~@c܍G}CD?.:w.W&Š;(260`WdEjpRW5=FPVS㬺 )WK (^23B} e]`];!)AUSVm2Pq!..joog6xn>?nm츫hϠfM=6oM O sͼX)iyx y%0? r 2h΋( T7*][ĺ>֎Saݒ(m_l(J+?l& aEʴ+, SDOr|4>̇즑:9dδP![VO9xʞ/otG,9x\)5ʣ4|Cw yxz iOLZg/Պ?%gڢe^rf0l4i {2@$!~fMƯ3__xǽ_~=%hrqVnO$I++!92;Q XeI,ه}C[wzl:X>t2LҰLmNK#?jiWݦd^t/Bٳ:y` JjRZRtRғ(c'#lq3EhmXDG((ᴷMiFFAa&[W&gG˜$ "Db-n4wY]dz uW7蔞mڎDtAr G FaiYکRp`MZ^w 6c聯rf!{̍eFa*0oO>^1θ#^F,+N.3,Y 7a.g5>]"7]'7b|=}Y]F^'-rW}LR~qoc3S$xle\DytM1T?g0f9K%3`v2(g tzkGt^Ex4JepPw)[2AV QɰS3;9)1؅qx o]ܞFM)T0MǨ'ԛyD]2rޠZ{.,ezf&?N`0sݱM5p֬!8`> >Rw@qSw-5N1vQbHdN' rth^=Qİua|rZ%|$#1_iK1 %-L~85 .yq/G|۫ N"r-N?+W&5F-獊y] M={,U_QL5A+mdhwc߉˱u`JSjA.[<h/R {Lr|JLI=b}J! MghԆOAF餎X;ɰԾœqej%pLϲ- oho.yn>=I>\zS [Nb?nQ3B;ؼX V/Ѡ/G@ba5_ʘF̱ ?*ce:0ppߨ BlIr^I}1 jϊ.G5I5}B'ƌxٍ$,> Ev.KK}Vھy?XOa2ː l:d5l>OVmW;G}b FgY[</x foJaJh]0rqdѕ8x+ "C6WY?pv,])2:yKd߈fJ!>9(9Hؚ mA=Qc `L5Og p |n% Pۺǣ>T9JVz4pYǽd}Cr[vYA; ܒrB:0p֔\(h+S4Ń'mAw1q~\||qm'=%ah68q2~kZҮ"Mt?uUSl8W#\*ArVݩ5uPB*p;lC5k0Y ݓDh2% vƎ%+q U%5bS(޹ZKƂ82⨄{(#{w&J!YZ>:lKhEЖԫ>vqh\2djxP5" ?.E] l# UЌ!?{Q YK5n%mN4T>vv&~tfy*2`;>(a{;h"| k] jN=&8!|'$7 9Lv(`籣z;LdYlE_#&#.?n-*e`VZ:JҲ0 ? әQ/Sg.wTRe1k\s{%Rin\ ޒ F{ W!=.;ػ;^HW|mQ C5ڂTX-J9yj8ǝܳF'5 T'^!q1 |00:047+GS2s)SAQ>-=su A=;)Z%>#'CG%r+[`1^e8*\܅:6 }B(12.! 5I2X^&YĪ? :b+%N/4th¦ ϵYP N'XRm'E~O8bа;>G&״mD@4dO1vv3Wf5 R975b>es3śG32M#?"`) -Ha^IKc(ݏuP0S-Kf8h:6v.vV`I6xH/vrv Ӯ!,j]>͌s/H\mBy̲1<7 VTT#<@Y&'UU(D1#ANZ3&8Ͻ+ZcD7xk1X;ߎH'&,T'57E֪AB:7H{_o\"1-Y Fshѓ/!O1ꃥy#FP}KFHt!ŃpoMq {|V..kI?di0xK 5P)omvp \X}[}̓yU *-!vYx8c-9(ҜkUPʮeDԩ+ T٣Nb`WX"i_'L{L]Kc;@X8 "w#@,qv_%B`pH{*'h%\yi^ei / 4Zn[H[|ƜpU;5R?@=e_!\78 ', ] ()HݷaԻ- AZF{gIWNY/^?H]UTf@7Uvn ˥̻͝H䎏&b8>ǧЅ>(<< GK(1-Ն盵-Cͷ56N6Dm7ܭYř;$%P7nbJ)o>,8&.z$ZAA5dM}NQt h,.PG7%Ó&{^y Bc5X j(H~ tʵ~wwoRD/t$$"Lϰ~WB 8!Cu2$<\]SAC0T[umZm{ 3G3eT](##[*.e\3Dg2 k7bmL E "hq,x(mT!Q |N7H>I'w?͔9e*ϟ{u_y3þNϠ}k9S kM}r]Kؒ[N?9T4햁o 4gXfZ#h+(nJJ`>F|;a9#D95ry({*=[#[mXr=81Qx;D5e;nyYƦ F\/wlT}D%Ңx҆z~Ŝ˻U@l<`\ ,6C g-2.cفwrw1C4X{ݳó(M,Hb lH 20:# O(M Zdu=C&ҐQ{6ɈT|D==xD-}SB*P46 =~2=n(2sX_ g"s ]ئFRy_G>u7ƨ 4~kD{ Cjxff  >פ$;@w!r@ x-{ib,9j($ XّۜRkZOI$PiWwD?GF% Cl>uP$[ tL:})4$[8A *_*jxݘZ>J=BnA؛V z wu&:Vgd~\Gc|'slG+?XBbWPϏVx'Ĭ t pFgjPL ;#*KJHb;RݮF*iYB$c_:ܔT#3;g-::l̵9V~쭊%(Ǖ r̛9BAS$FSU C-ȓf%RyĞaX@9ǿ~qc$>̩hh&,MnH񷡔cC%+lPx^b)Ǡ*z3-\،G >"iI"fB [{0FE[xbLƕ8\EC!ZGUk<Q>U 6-:*7j0 M  L. -lQM/?0'eG6~r+db^wn@h8 Dit Pϗ̸0VGgt\),$T:Kxf2]4:Q, K $<G+ hV*2I]OdU튔계Ir`k3)!bI}(G4 7 &lSjy!#\ckgt洴8yf{ȁ-Boϭ90$Ұ+ΕC6;$IXA7( y&8i3eE[gRw"c x֬wvh7MѮCqCv ~5lX{hke .}xmNJ5v?dWF~~Ǵ/rCevN#0 I,j 4q'CxMHGZ̅ tC@ڎ1,XC/wë9?B~d:}䍪)~Qv?FrW=o5 wnIeI9k?ɭn'(cn 6vLʟ\-8̐^qNBNo(O`V>}E)ټ }Xrkp#/LrREk ĸI Ct{#SBulGw= <̼ew^3Q\@z@0)A>J lr:`È)@(B}޶B]dE_L#+$.2:o޻ؚ`R"iGn;<\-?? O-R^-xZoPjcrsE{+Q\RH7'|!َ{zh 脡n&7imZ('$'$lE5V:g ky^UKYLu31ʰyUf_ΐ<*딟&g*Tǖ5ʹ` ]{JIiM6vBݠ~?e~|˩eɇ%p8J$Ps@('QI2kFTmڞ]hf5%Ŝjo}WGת{_ҳj5%c@E۾~La%VO󚁩mT!hmD5 =Ѽ=D߿ǻnc0(܃-+Y̠c1`޹hH#O޾;!\2Y}E@ j _i$Hg+rFwҡgS.>$ݠ#"W0"3p6ql'֋)sV-\ke;gQoo~V.Egfa,2-xc]+dU2al**XkUAE5ÒEP.iʐgm0/T3CĒ a.ǬjEp/MrvҚw]C }yt c!s4eVT$9P}w3ЂwG REqI޲P*\i!TЌٖ?CѕB㱽D.c4- %t6vqEL:)ro s!8b]S; Zׯ {E̿}F|KrB~"QcwXkyTVȚlb$/0C+i'3YfWsS6$pqGeΧ9 t؉[Xk̬$׮v3dE)9coD2F&&; Ֆw!9$0/<8Us{H`'1*J6v[vi(A m1Vaz<ħHq?DΆzATJ&3{I9#ڗYǐ-j-c GP?a|6~FƼQ%3~ݙOͽ9D肂R?cȵl'CKtG4Sr2$VP-BKb-9ѩڥfA.qTDd1},IÌB|ǣ{K^@4ߌP}Lj׭Je޴{AB͍ *'ۡ@Q?*|(n5 E6"r Qޡ D*{0EPC!vӻRVk]B ^G|vozɯɳY jYP򽴭(;=bo 3=ZdSg>µ!dq#˺ډu2W|G2(Zx`Ɂ C'(2:e\Pwl9K9e@.>`uXȗw*BZ%3b9 MsnLE9Tqݹ/Ģ\1I@afdeD,qo՗rtAu~i[@,|Ij](-qX 9p9.[\:8L\Ew.-?q43Ԗ#/1?Y"wrV{< 0.j+;][ JjK^ OXUeK DMP mP;S{xpiAx? ^C/B ^P-|0p2D~+Qψ֔>!I,l*$ J)r15acz\r).X4ٛuK.csz1YMʆ9.P|-sC&W@I!Ħ|)"x,Kaz|/V+ K/뢠w䮗|*m5y`̩*Ȍ?x>=špiGd9 č WJuUs)bkMGnձ h @q]zɴeȬ:ϒU?3v=Hߑ +*[}4e٪aj?,\Ot0nIhXP&4 _U3\[C%ٱvbaQ-؃l w0$i F%ՠo }{JWrBg̖]#wH!LW qV赠ޖEN#@U8lDԯ͐O%U2,?~.ytTz)kA`FoҰ`giݣUl| [ʟ+<Z qQ~.2.0XaK㵺9@2KeΒ .@&!zqlQ؈ Om)8|A-.{is>D1_.3={]aPzԻ iVQʄ{+8Lc%*Iֽۤ_gۚ삳t!x{+k|(F> ,水>Mor\[~\;Pb4<6^vږ{<"֛K@%XλZ=xmYs VcB}V~QH,c?1H0QfծuYw0`>{׍" zssM"k{S>Z(LouyIYvW0]3@ u!mRw r 9G8dY&֢$/)խ8$7seԑP %^%q]G-*]j4N+O:\hkex0߮9~=X`fLiX#rk%nd;2%g̵Gc4X0ZDߜNA<$uJ1lHD6F$yI{ȵgI0Vn+SYbj* To6Vݫm{_l( k64vqFl4ǹth;~S&LH(&b_k akZֻ94o]}$.Rb ;8q2&+B'6."JaנG]/Gu:)^wo myg B&0y.'ṳi^7;e|1+ Eڭ2oTZ<:TŖI8א#r}]݊g F3d.вBrtf_^-ɉjvG00"˜q m7[wu.p; p^O}S4z֠gxjd麄͋T4y&e@I|#u&}A;YPޫ3 e' zoS4qʀQ+uƶeC=H |D@ kIL *I|S hKUZ w[ Ty8$pp DŽћ<\ R4r/wn?R ǏQrO{>cW[*2%3bYLUF<y佄Z-j6 wb5-`V>L#=ņ lRK?]|ΖC@@Z? sd&c]6㍻e hĵzxϛr9PY upq^0[-#O }裐wI:mY¥Ab )+| hV6<$v 0ZGIۉ)>򠔋؜,$ׇTve%aGRor@| . )̞4 ]9i_2ΖtT=X?hqi 9Ld`N7ՅnVlIQhO` :'} *1ȋ6ҫ|HԀ8 ʀ|D=¶ę.SMB,r娔<2Q Pf ABJ>BMAir2)Y9Xn)/8HW%t:2n%PF|^k2e 4؈(_[W[CT0IH29FvU&G>Ϝ @^ ;.6# wGHTAa ǀQ+ a1}Xr. Pd $f;5W2E_b(РR1}TBncf;P$)UJ)D=Ɏ2X9vWGo4jg}\n?/]g=DZ]OPvcZ!^`k?14K*+ū2'FPaGҝXz<]TOq82ċZ: ˳G aKڅt,#g\8, "43 pLNDƭ().Q8 Z C׳ )1,hmBqC؄jz^҅&]JCNi<ۭ;0ܽt'u+qC2+iLX]5)fz]03Pԭeɰ 1ZZ_ ϥ^6<'R[B9#t19pu^!+)i`^_^EՄ PU(d9 zLlf}&×g phԢ;(7Do'jNeI?%k,yJ<=zyEurTf8ޏiIlToط3luQq1QyXazޯGBUK13jq*77ҲDs]̩ĝXh@AKCn&m}dkyNLr<|,F1(Sua3.rf7M:7S:F+729iq#oh"ћ !"ګ1]>eum2^g: m .:-8Jbs; !u PJ/r4 BkpL)v' Jxlwb:{@e:V*:X=iiApa!|W\9hdNX1zDp9x J̒JN> |!VHNҵƁġw2iRuamz\W 9FR  tsr\x90:ԯP#eG{\|k|]Y캑~qpNL];nz8RIdH\'? gȇTeiui'ߑCL?)cb*NPjPpz-`0V8xI|z/ ךUA8M05,z K`gl߿-6cĤaoXF~ g \E%GmYx3dI[8RԿ#Af|E^P`K$-Ù% UтJD0u(f+vQs2f#HMo+ @IWƢ`͏W.rK};Ӿi+@=˜Ho2A @=QУR[ v1)7./WJA׉4<4buRt\WoTswN/w}uG&U7K Q`yHQ4VU>lV pV krcآwhpк`6G'&a8 p(.;PgװS}Yhɏ|@}kpmξ=.&ݞFrahU )g0jX 딖r*y6S7^RX$ 䊌'bm8rt9C}caX4c>}vseH4>wOII4.;7~&e`ML3+I^ݢ$!.pz.UTwjwLv)EBVwFڴ!0UE5/jsrE~qWQ,T7}QwWgipe;g-e[\HCV(mNGEEoe8pceJȮ\F'cG#3 j|b֏cau~rՏ>_A"$8n7"Q0@D|?HЧG{FIhbf^?ogj_TR׭X%O%$F-$(9$Rİ9ȓͭOmTiTDɔ|p`Xu OVyy9Y랃%X>?^4{m-pExłvnQ*~ڃ8W` `< 7YC7J\huQ ނ)k3Xf,{)-y/azrCrF荐aSŔsW- Oθ6$ DNhUw KSYBTM;LhK6#?AFϝ礇8SC1PbttHTgq^\З ޵,w'14h ECk|):1vw |Jagj _dTJo)*|on8+bMYR|!@n4g-نTJ)@*s=Td8HQݽ^ >)yok8/ (izK*DP+zߍ^)TfJƻMNE駺IR*+\vøC s$H=oS1{UndX {:[ ZYf(=LnyGYm`]Q JF3e&%(7 6yW壁p ޺&GC],VlzYfhC_ȟ&H]{CUM@ln8`y^ D 'U@83S dxg6.k@yfvx񱬏7Ʉo%bњ ߢL-}x@A Q4 |2PG|' *$JXX_U6tRny\P‘w pU I% xO riۈ6GR vsжrnT;#3/UߪƏeo]˶5 vL9H M:fOz>PƣVt(8'#x"#ɦ x, p٧5Qr,'i b6<8ߺ2u8>+|!XgˈilMk3K %t.tPʱ?ۖ p>^lYOFR  Bw{՛,>F'Q:&NR "&%xR$Ʃ< E9|c_,v;̞ױVIcdhAoJ"Έ%-wUI6;1Ai% ;0ẑ-fޣ1oh+U xǏ]bO"W8ܿW$ʲ%G oBO%Uf 0k$)Ie/ ljAFm@ B: z*l!IX(S_gkO%k)t;/lg 69E Ig#NO+͆5BoPCb,5Bqn({]Th^S]i9*܀uB0řHc)L \-W[yۏ?KɊ+n> crhWlz^.8E ]8|)'APD_J,qbhoQZ^~,xբG=m ޥ`[}Һh[- ,_{CxА}GߋHŢ) cU%/ة0w6.ﶢᛜha3͎:`)+ILZ $[plDKg% 5 C#@i(EiB 2^@dPI>lYWT@C~7ȟG)I›%|-ZsTw{ig"9|6+Lwe⩆. OS+[r|“= ӿn=5ʗi9. IjUIJ8lmEg'ԕD\i.*P /X>ۻβ$v^~ԺT+b7jĤX߰GCy|`2şj< ! oeB٪5"?DOF=)r {׵CFutY0cwJ#GS[GTFÇE3 {O,6bY2r0,Ih}nTy$@};d]@lzϦOh5'5 fZ#p%jwN_P 5g=j\.k6S ]eΥ;gE\E(߻r j]\ շΪk9_1'PٓwPsgcs*)ڎ01u∏%#(ڡw8MeIxY3}<+]'cPJEe"&>U%IrxlcJ9N-ZD{x˙A3qÕ9*n-NwT|,_ь=u?ޏxU v?VY!3FJlzsKn,oaMHA"XpSS3Oqh۞ddJD9O0x|&SlyAeaUa{ia%Ȇ|b73j2XȶzA sC4M5vs.E)Hhr`/[:]o) 3z &6׏h(c6'̽E1`x+C[ JP{dvOd/8\ o@w EZ?ۧl _CaGb\ŀdQr>^,p ,fgPKBIb:2!-=۳6b 37jC#~7lz[`@d00XW IV2oɨj^S\7}w_ܶ*,f'm;'ۇ[ORJ3g$J1נּ 9[?B(u"mLjI oG%mQtUʭk`]AR e.~ޟKb|/Y0wx ! —|вGEmv869hh/ .B O1>3v^RJXͅ9N5{+ΡXeR VFkR^Yf\YEȖXJ쵾/I8qslJTp9ZYd﷒\?c Xy[Yo);z'vR"&c*0WsԼzO,) SwL75_d[pVV3Y]BߙSU:!\_wp>ڮ)%L>b ۹7qEe`;XuedGbG˹s/yģSL ad x='UtQX, JXCtt;͟ΠݱKUX`eOX" !k(ȏ~U[dD?N SY\.;WgFkAIF7]MzPeжjj P-! >"kE(T,A ݰ^m+~Aq:US,7tux矞iij d3~U}tg ذ|Vc`)b^7m>w @ƔXm`{;yjesQFӏ|fwk;ACw+o[0%)rXt94X.`ȸkK@5q;;*]K~!9˒Z:/rvyEοy.N `)f7Vs1/JR)j4m=U)I[ fb~ '!\6xP!oٳ*u0\ ȣo#/ @?b1aG8.x*kl_)D2xfOǰ֩cͯEK5N|LӛFt j%C-;c ?JuX:;3j1ߏ-f{SLɶm@szO]r"$E#AӬeoYɃ;#9Դ˂E -c:2&Q%qP N&"NRd.tj;Tg}`1 ԣΨ %'h# ݩ )cu8hdVr  ZZDZ\ -_ :fa?;áA`6*6H,҈P$}%`ʆnzNBl[[m98o8ַ \ƾ)@z])N 05:eP)q9U ( ʌ\S lE˨gj$ǪUdAie^AVm P&*P3mC8-Ļ~.,9$_0܃?4EY_Y8#]Az{ F')B3$pbܟڨL!wm7T)N75oR$F5 B=.9F}R zXu 䪘0P3+߽i\r807n|㹀-e>w2Jo_=⌴?N̒<taXD8^OЄMndCq aC?!>τVBE#|`x؞tnA+eXѠg7z G;|VjQFWKfb^Q-BASEb\Iiin bh3<$K MGl:JG(2,o)P;fz pȪ;e8 r|&^OeHF I;8(T~eE .K%nܔ.iaE|Q}߱rй`DGLxEʠAyx$HDH2ۅte_5s9U*I%Py_X5p\KxwPO+gq(-džzϠ#8M4]]9J[| .BF!AW XsKuwS(()M‚I|zAq#58W2,GXo:wb?  U*}ks@3Dqr!S.jvU&4M#pk]+E7~jUNvሣons|*%ܤT{v!b4 ٳ;3~F  *N*ZP^)w "k&in>Ҟ_6ڡGݱi7 k S*:5܂%ФP_J:(4F P[ԯEM̓s̵u`:Ţ5;"4XcgjQq7[l.C*6he騏p4.KpŞRj]XLbVN[r/E!?Fc:/ ,5EI4qb([.j:i}10yqPBY&݁cC#d..hd.G1'puP9wP& O+عO*މ'y^:>+eɐZW HY W4Hcs>}bj3bwo>Ě^Zg%S B͢@2 ɯJ4#Sp˶jl džtnI#ukv Nϫ3 A9(`LwO.8@81GAB g|W2z:@)qy;uíĆt+lMֶ>Y$JIw*; yڻ }c?Gq׷:{I'F)of<ψz s,̟B6VmGk`%~OEgEFA! з<}L 8wIK֍>n\V$n7m!0"yfLowj~.k4]/WYl֑i[>^9̩mp.v*1䚂߄`KO'',B|&kB2mTثH56h1EޕY>0w%߼ ٯ ƉoW9,a6b8΁߱F7j,W r/vT^kLsFS'wV`ywj9ʷZ 61#!VY 0a8nNh4M:+ӨA6}G;Ҕ djju$Y %5؅xWA5K.Db%X]}*GwTbz,HT}jl-SXC S3{ؕTUN-JI,qyLpm[_0<9Eed ׈h edCS26, c;ykU+۰/tYLa ;տʉZ/,ގ7)7TN"Go.%Mj{@n1/jFZZ_CTOE_vW\m, t4:&켂c^(7!~'60b+cO豽=g_E9^5 ׯGO}~y׫/2>=|aw/ ?ׂϷW#=WR'^"9ZGB˳sd VE[>3OkZ)wmvh@ng5tjo~tS j#}c.tntfcm@iğZLؓ=Q6.( S7L%wI!=:I5Axu5.rz& 6?RD7/!5^՘:'rh*$qx[lA/Gҳ$A@c(^;hK oܪu)04vZz+]{F)GM* źg F==oWĒPЧF9r7qri0 lZic{=N~֞X\fIJ9xI?JGד\Gtm:ɣv˶X['iP3NLLtSƲNQx]}Qpzߧ\\:OIz.UW RL|'S(-`g`5"?9 eq֑62J09HTx$TD<^Ɣw1T-T^g]Iztst5}|,&a]mPnœ B厎ɌPg׎ݞhXC*M]`&p, ?l\p,H@R[ ;2KD{jYhf_!qW% X 0#N:uD-ojMHrws)6$a{pM^TcDQ>D{n B0P͵ P:ڀLa6vm5cemCR;bӯ?l;h8-$qv gZb u 3PVM2l4 &fĀShQIA_&JL4.<%{%4(03j {}Rq,:votKeKOX R,g(~0ԋ0/50>&sۤgKOg+{lJ$g {8檳%$(uLLvMQʦ@!Eː{"Z&M֣Gc].eIRb"A;iS}؉uɅ9]ݕxE,9I<ȻZe[[8 Dt@0/bcY@-K:w9><+Dehs,}Kr5!m͕0-D,{~GcRstBwS@! m+.V` X=b[D5Ǿp+`_;dI:,B23S c$*QN~>տw{ƻ3?XaWV7#Cs9)*'w+`-0 @^i' oMJwC:~,՞ƌLѸ4d(OhS93zã;Q.KC͈H̍Ӄ{?ϲؽ.am$e GR&(zRFǫkz {o{UZ"AXo>Fg (aa\m5Iq* $}f #]r;I2% 6LGPY1 Y4 3,#P1P5 g ++gJ U '4Hsv{Tz&SK+T=v%.רthsӒDN+́LwәI*O"S4Ч1G_k*x+9;X.cFn&4'/t#lELYIs߹]xP1Q؛FK[6`bpMXbvTs=|~ZНWK^]^ DŽ5pIosFQx;n㺵 ZYhv?LϽz廀:%["Vʴ oe [>Ec\}<)[h.5X{S&KPW 59a{PHJg -'&>o}q=`=ajsN^[=Dz_#6JFe=2ގ{cued S}2DH&; dL RPɠ u|hՌ0+*@ jt~v 5= &#G\ZB$UZ:9 8F׾jmFT :5##e|ɐe5,24Űޫ׿`ĠPVdNG0$"tQWve.(>  x1:{ULp$19&NM!NqWӺ&.jQGkӃ;RF(rOOD|)U4fRޙ8!>8P`kπg-5dIc8=mMJlR,-\.d=y S+ځf <7=ZY Ⳑy8D=[C-)`R$nڒ,4-kz5]MۜA[U# mhSozaЬ{9{nhGպ XE4ާOvQ/Y!mGRvlab64%WXGe7_m"V^C'=ʜnDZ] ;1$t4qsّ?ҍKBs4r٥z21j—qkuYGk.2ohC4PF[RրLul!`]l2 I׎Vb]dȾ)< @`ͅ i|O-XRbK_V"'겎B A~!X'R4e;gFaU2p(O{,6+r6LYN{\ `/NeA!h?Rzƒb +^ :+}.=/fP?slIo2M6%Q޲4XjB|k_ͮ RaB뫾E>Wu8B><EhQQ}ؑOգ/w3K>R,XVN7nRipu =ƺ!ulFPplG} ГkMT*Mɓc Kdў [i EMcgnF`]:ѧK:ǯkKFS3ޢUPhz %쨜BHJ%9pzՈVK&AϽj^]m"r@]; >Ϭ\GKG)0"QCLFWKV]r7ZqC%6N+ynBrULCå{ت7IE=ϺSYq+eI&)b ԲaL en*82"$oʆO?r`AQ9^Q bGywU ](s9wbU؃—+b]wƧҥF'"]jzd-54(AmTb>@N1YV⏄b ؑ,+'@3H=}A5)W ~[\ujLWAݐ&+isR1C,=Q phl-`$1R L7+FJT1Xxo߲BFh#M$Er+H'|{(p. N P|gc +ج>$D#vxmT/DxFKg;8gؠ{vm_XL]z@U{Et7Ng`Ј9LL[n.1bz@p$B$eJ ?=04nh@o!YMEn??@r00ǺMTBe *,k`83[..B %*3|^.ء!O?6LgL4ه9,>-YֶN%F1fݔP~#iQ+0K tYb_l_[V)HD%F`KPoH|T6-ѤI@#ly}X:WGzܦ$d ;in>U+PIͮo`SQ` ܃Ijg@`ZCi˺u WlSաO?2.ֈBiF(AУwm{[@D<="j|h:NgGϐږ[Q?@ dy xE8z"􁍚v450K N5AM4q(U8 O(o1J `UwMK&48n9v3D5t{J1yYjei vxtBTnp[CmgPACV&<|膑Eݯ7?Nͺ\9&jH'$)h> '[U4|;Lfl BJE ˓aKUo//\|`)n )A 秈Uh-6LE@dbk(xqq*NA7x@~k̈́PCx! l!7p6[|ȹHܬ< jA= :O&qտ%xlt 9Εa {j-;P(?S 8jCq|oV$jt0jAҏE{U &&bVPp'wXvSO |`v(4ah6Dls\ҁx@ZƯFwWOGސQȎA@XǬ4x烻E_tޭ,~7/ /plw Bponr?\8Ԑ֬aDr57wlXd+⌋V(/xF&l{:aRǕbH hnS(.״0 un3~kA-\AD +Zdϛ}ncd(Vv m r)In"F\$ <DHĚݰp,wJW',Jt(>: ( ".Ъ7F Te6⽺jE Β=yh6}o#Iˀy*ېuK'v e"RT}NMl3ʦO'P+&|{F-oۗqu9xD8ÖFWrǛyu=չg5 n.O8'黹\S(!Q צPFrQ{$sAJ*,bs^,OF{Aѓ';Z3>4-My[G*lK$4iڻ$e_8P$7sc/pnч "!9]rqarXAv^BS6Z);F~jPSc>#x,ˁ=콯V {P7Sc<35 [D->^D%.|Jx{V/_Oú>6+oEI.7MF8>qYھe6 ̺BEO1=0wŲ>& =f)3YĞ3}ahKA{?~۳緡=/ϾVACiv~aE|cE8j!ls娐`ބ{}pZDG0v`n+j  cfjLKb=g$E)/M[zca,/l/cso)o)- Q-g;̴,<^☁^@[z=$jz<=d ȃC¶oRˆPB2A 4qVٌoƒpŏ|4Ye %? 0\S=9,MQv]u03%"+;ZYA r"в}"#1t ?0J(.=PgS)J ^w#s\VJi'yU2n*iTɂd83l0ضEÄ[CH0 w>ځ-}P0`?T {#54`P?7ئtyAX}tk Y$aԦ=Vpm U) Ɛ軶>UE?q>Q'kRC8|b;NU;+bnA ُR_f̹g?ms Y4n$,6/qTwXrabYjO % PAml!two (Ff'˄6 ~}` 2 Yr Ny|VVcuR܂St ^ W 7d9[0T%ٚie'{WBIx`/SnaϵP%G6߃է! 8Ck@wa I{?shJƯjW$jPR 3i0*i%T'?J4N(AA ܲ/-5~22Zx Z] %"@r3u1'BAV.Goo2':v g[CB]͟u9xNX]v=әُ؊=@-u"9ڎ )׳=%yC:ZiY[]$hxU,c̊Pop$YEMw3@ٴ5< 6t+ qj^zʪ@?0&ʀ%6<3u*aA[Qل _hM  ]>>챣&}ikFMULnrYp ~n'rHit03&bR869{&TŸyw[=K w("ZAl*9+-I{c'lQ eFY{9@ojjSL=9^ 2$[p;~AN+ H`2?̐|KEޔ>.4:906=uD*P->܇9D6գ&ƛd[,8fEo8# *fd]MNcLeh;ӻ[?VG1AdxՓ},qɒK`ecLLMPD,p_ gB)6^92%[B 3(tkX8 3j^Ti-} eM(j3"7> 9-NǕƺ',2xQ'#(2;+Z$[T-[L %]趃O#u~xzeG6B.'7 A+  vxkC]3-!C7 @[Ypy@5Boѥ^qKL>RLkTY^(T۬)m(cO-X|{fJ-]:2-L-՚8X\]%H` Ji<`l̤#+w\j18bG b.EA礑LF9Pa'ؤԚJ{tI2Ԥ[9+fh۩m e2IAeMvJJg\ILXi7 odD؈|_ۃ$;&"b?q#>gpY?CZĝa,gȌeQJ 3-ݜ` 5A+ 'ځeo;MI'id-r+@b! _lx uXL$ISp͕fe?!4Ĭ^%`ef@b7CIs҃T9$}ʁ=<8U;U%jJ ̠8d>[!C@1 yhLş5TVbkDRa1|@VWx$UTIGxƇy4ž~iEvZiԸ6e8R*wTJ:ĈK~Fñ|E5v nI6*J@ֶjHrHi&KN@"n#at` kIKdz<.jLTz0 TZvOOXd2FzϠ ]A|ޜ<shZiiK;ǝ}пC ^vҏ<<ߑzaAǕJ|秃ZTX:w)}^AY@u`L8lgXw".&?Hj쩔vAy]v /j#yI|u/vjᾢu2-㱒`j\:|\pcTݵ-m$b#"ѓ#"]w}.6i$)\ p:evm{VT}pe|\;,J$rƤ7uŁhC n wE]> uʉ .p}mwr .tq [Kk;0&PBX^7Q/N<ɃD|rLvNZ{7IŔ΀J"Dsz:a.PҌ+{I2]? Νpzx+O~6N^=%; S=4pmgJMrњPs@0X TSƞ\L̝aKaBs?т QCJQxʜlnDm1{UDˁkx-PgnHסnqjv|Op{ÆnѤM(L8t!$5 F<;mEN.o-h=D8z w=! ؆jPH_a ]ɂdkT&cȧu x?vf`ofK%Eiqf~s">l'Z;V?IUvz}'aL n{UEQ t9Bj>^r@Ba$Lㄳ ^K98[4g}ܬ [B1HYh熹GqCfZ0]QXsV^YxPJ[lYT9fIuZKVQ`MbcDcѴðF`{ހstKґ*@fOvm3yDRJzr< =,=˚eXCATddܪNI5pWus]TD$q=sju;6KG2<:p3n+G!}?@TsR$j7?A&; ÷,;gHg *{J̰@ߵpK ''.Ր%j]fEݽboM F>W˱\,V/h5b8Atj#hugi]ٯ#mQiQhnp^>}Fl9_TP.&0hv 5PKhY^Y7m?z(:w"wH$WdXdm,ɷ\4Jqg`'ۗK8/1_Acׯiq# Q?^*)r]ͪgqi::<ː{斬krs f9W$d K?걏@8?Q@-jX򠦤EzfIQdNk gm9)ӛlȍyrH}z.[=  "xPd1١D0'֞;껄Atl! )}ag'X}tl9;r71W,l;sW;BɎf疌da j{W 6MۙyҊ o*FZ2(a,5z(b Vƙ=?ڇ м++ tԗesr5w;xeшq-˾>0aㅞi*c/* @hG7+2v`pntG7W=.q*9st5Ž`Gpn-Kt=#-}~QITwY貒SrL_ |䥫,?5K7s ٖg/ GȨ:¤b0PvY{i:ݺ X |27>udYu϶s^esI,ZQ~H' ceSUݲ4!_FO'Rh+s$]+R`<'aJv/*UĻi:J߈aɋbx‹#&0 #Li ^cGwŪ9A@ HQ ^\/{P#צv$I܆=(˽J v=̖ZQA&+{Œ,$`9[=3/!Q2)>:jvl`dIqm3%?g_<࣒΄ě;тI1d_롾0-C_h yZ|+ٟ4 >evNq$Oi)`[ _HT1n¡O4Wch?@FAiXg^ :$1>} oDstgsI,%{[ ަTҗc.v|05B 0h/1~xecC?kJ{ɪo5y;a/΅՘}l`WI(5j@̡VBX%eCn/.}ء}$z@eV 4[=ZEm Vv!@OBI,MQ`}RPo#}K,nG"t Ճy5q &>DZ?>9ݖ2UY ֡A?? 4|n~_g>'+"ﳻ|9 ߒ h?WurZbG`aFMEP+]E٫&Dh)~_.PQÐ.z"FI}{b2wۋԎ}X~N# P,x3‹MJWdʠ283P*r Z@?㏟G,iٷ#ܺB(K [0}%nаC2}30KG0!֩lޡ9.( ?ޱrVdN.ܰUTnW\ЊE5 =![. )8wѥ2Z}#~%-m,^Z$qJrŰρ?ky@&% A?cbBV4B;]:n@ #-`39P_]J,֎w|e. _gupa`of˚b/_`;ۣ{Vo6,9.F |LXhqDD2vQjdn㒗:$@qɁV]xdjx*"=geX Kڊh"^ՙ,E {)wn#5d58MP7t`.UU`;#KuQeL\y ڏc,uOf"-q5+[Gb/{I͉5~o 慺"H C*0Xr:4SJpb ޠ ~6R+P*e|#פXD͎T"GE$:ʾSQo=Ě^:dk8B!ԽY:Ěd g^ Fb@9Sfa>L\p,E#'3v`M˲ a1켟">0{dj0W3"NP5̜ݣ\Kv@:/D86FNegr+Q4h y8%/N6doud9EA}KPNd{qÇf+Tu^P)jr)*;sG=֞dt|33?\)\_8pmyۥKiG6aT<Ӻ¶Aa1ԭYeu'd[HM)aַYtI5Ƅn$L>#'&D2 9fAǰȿHUg3Ri545)a~B'*qbK|.rzTB11ekS$ywKq,+>]jк7),Ԗ/l`v,BeZruYZPC. b' Am98Qkr@vvR |W|Z {'wOE'P$ +@}vIiHsňrf7Qs|{ե-;=ƒ>ҾA!e]%IՒY`c@KbUfzQk:^~cut8¦ 3jݡb ?ݜCsFFSJm~(:|ճj_^4AhG7~bGpԥ>D[YaaM(׾m)GA=PcHnuc9٠YOLi ,hnmQl]A,[]#}dm{;j|:~"R֙fVϤUv%Ƙk؍V7ȭ? eLVUx[:ȓjzH*0jb"X 3";QbVGFHzdC?>h<C/h;ڹ;uaP13'AMSCpHT^:5k 8%lgX((j,a=.c[u\l1O*y}YYJ=GkQ>? ]M)I{F[fj! \[EGͻG? @"X|76ݣ7 !l0Rg.S-d#μA3^;j׷Vɖܯ:C+0ˋ /rR!!h깡cKww"\hڡ0,U/sgO(S @#ֻ]%; G}wb"^C +KנH[7x] .끳P!0K;r̔'dF((mQhՔ:;`@-=N>1SU)8(BGz=>qv+DU&J{_T9C(Avh(VaI+306 -i.{.||1~N,Qw6ꚬX6(<^DMxf17Jc sp:;2*ٵ9` (#]ԛɽav*W1Dٻpn䀂Ķ5,_>Kj) /GsI7 vL&>}iͽegC a貸rCV75C-;Y ?T p"u5JP-3׻ê[|ۤS'2Ӛi;F1 g5/ xO0 3۬r탴%8dŬn^2Dm# ^>gi!_EN{/ł`L}ħѐO^>,ٝ)6m\X%I耨jmٜAMe#YP"#6M,A1mr0U 1Q+X>X!tnч9K()1|EB`[7$r5났FJ\a@4yVy0 ޾/"dA=B'Z|m+{j7l T[.rfswn#٫y3w)s5-cgKL\:g2N߃Z0fMU2`x뱿\M2Hov{e3',u06b{8h!^-Y]ɘRJ Cr1r<"k9e+#y3iGXxVܖ)xbsJ+1ZɻF<]]oJȖrsII|^ UBPi! $p5 #\tJ8+5G )a9#P a0e:E$SQvsR%̥`^~ת,Qn'N غ\P!"¿S{ ^NF iܑ[b-k3y`3"5^@>>vM0:*חMWBs; >Ѕ:i-};h N`SyDKZ5<0zcl yQMItMo gײQ잳0@uAdV؆+10⪷覻ܿ 3PWhI!'HՁ<'% 1Gn>:xHmO@ ^!U}V]n|vPCӶ,*#B "2K*Lэ V:yE +fZP*CzɱD 'hUٜ8j_+н#mh+L&?n=,w w ) EN OG O+K-\*{Cu4zX dVo7\rZ sJXHn5XWz|. Mq:6s% V)=myvp#A)刽o%6%G|ln5p[`5Cmd0p%8]k{dXVz,?} U"wěsSH4 D늝6A!#)z F2 u :?4 M .#;"g]H<)1w3[xZgS_SH@z=uG+zw{T`~7KM%`Ku` 4/g%E%˸Qyold5ӇU@}t\/j';ȘF?e~^w^RgcΆ $An|KBok]nЂU@"x7${Iv G/ }ze=K[#8VUppW_49V8X0ZGqBs? 3WPVz&3= U-Mm;I<$?2h'V WӢd:@Y嘚+ Q̈́Tߨ)B-mênd B>ѩ0#1VMpMw>iE%_p3RBl>\s s]a{N/vcK]

gN[R{딎d@D9b IN~BYӐRq[Dߔh(73KPs#N J vZF1Щf) *}+s/bJ=!h|>0΅3; wd7GrAȵ~|'6=ľNҡ6댪drxA|8M,g(LU)NM4qD=[ Rtk\*b(H?uWYv_ 5"Q$0@,F`GhXuU9gT4AgDGhK2J#m'@^@ Up(;CV[Q G跇ڴnd8h%C/P&dZ噟T_4 .oovID;Ԧ֐d8qK+iW$9 0!Za´b%֋@0D\ 9% H>GYΖdg@_9 uL@w^1fji±"n12u;S9h,h?܇QR)BGQ,"}{Z LӫCan1FO0Ĩry F=#~b#č=XmZw%%ɻEr[IM|~Gz Ӕ&Y69(-$SXE0;S?a''nPIi}$Zmɉ$q(2GGY=ɮ5ť= rd&V\~u]!= یPtTr]3q.I55_]Z^[?h690i߻yAqqSA{Ced 2#[̭^Af-j 9&NˇߦrKU1s)`MwH$bKYa c̭?N/Ezt~`pO잌(P}"Un{F3V>w R?{}&~ΌauD8Y(ocO+dŵ ( axQRwk^@$i/3 <9}K7QZWoTZ]a i2i($VG\t@ u}s {#U(8F(W-udFe:W:tgz ,yw#M {8KJ 5Eke^DY42҉i}?ZG$9K <`)s5Q>Q`6pV ,9YtCgS! l biA,Ӡv̅tbB< >vqTz@(-~ ^?lf۰+V˸F 73:d^(OZa{8nT˨yϝQrt8!@1I!SG'ϭyǾs2x{׾\ " BEˆ4A$?*]S\tˣt+DJ{/0ݧ;K&zPN?:DuZ uCȥ{;q/fE"G~5c̱L#b)*Y z4>$s={M el;@ˆ `<ģA]Z:½zsG,!YԒ!Ζ{=;`o7|[[.5A(|ΌQ`r& |gk Z7W \r?YA>.^?r X0 H5^^RS `=&FM Z| Zzd DYb7S3<q7y^~;Ƿڧmu,fw4:xu A]J-KE찼nnSϦ^j@dֈW*wrА5Ğj9#"i]$lJ*l܊}rx"[GLe dg  ΢ :0d?d1< V"˞heɥDP b;ڒrb՞zf/)xW9dwh/y8F%qOߨpH_ފKҢBX7?sB0i =rګw/A$ u!_^ K@_ǮrYk<9p) bH'cJ@}=^('TB|>^ώ|mA'A/-Ԛ]U.|#LycLd)ǯ/LP؟WW4yvI5 ;fІ#M_X|3qi/ Z]v$(DD/|+v8ʧ>}\ɘ_R*)+@"AiF=q˶(D$j3}sIhkdk> [^,TMz4A=]T)R.qrD] ʏcOT7A3"[~lL5AllnTk2dHM?xI.*z:ReķK#a5|pj0((bRb•,6ƅqD0)`*ʘQin kFFr1MEesP_``m7,Ysjw Ǹ?^+^,~@޵++Ƽ4Ee$uJKC+y iG$af ]>>QŐzC\=;KUOsI zQ7y$WLAP}1ʾ;t岶9UTM4F/\}W*|R.j $}amZ`NzQm< ٓH9 u,po8]"B"UZQZHU =>e$PB6̖#yJ}lUoQ=nXd2/ ,6;/{`k&0"Wag7*RmaX0ڟ ׏A}(Rqt)IH+^G̚3dM+Ux Af܇p𶷸k2PƠd\Iüz3*L%~MA.r?A[ߒ:4IOK\H>|\A=x[(àhGId 0S 1DbMpx#%@B7-6G],x%u=跞0qw%!Y{UV־aaRPXۅ,*G2}L*CT97hX,gݴo]@78G$ONٻ;E[7(&IT0ĩCe2 T]bPy(pqx']_:mIΝ5Ec,KFX[9?Vf.i$R=~:[9!f|4|!</\esUƗY2' ̉=0禮e3 Xa2"Uw M9%'Nɠc55"NN`Ll~+_O)+-/SdN(J.xYbAsfulj~5wz`iKi)5oqGLR!S O MQs>VKjZo%2pD2Ɵ~a"3ssuHQ(?CwMϸ}w纹_N ^h7-qg +qG+È ~@6ժ2g-<%A^pȌ61hS %S0zsĺca5$w*OhH"1b @g$[ՉRQOutxA>5? A2#+-; 3qEes8#.~ܾ5:<5xAb )]P NglV7TK,lӯm| @0!ȁѷoє(!A=*![#Ա#||z(YR41{Ĕ!~DDr, z'D 4[09?HJ:f(An͘ЃPa;p@KrFZWYt#W,K肖EEi25mSLN8Ҽ|Ac/5g\Jzm%Ÿw.%KޗxFM8peG^(^;XCb=(#l~XՍ\SbG}l?|Z`R s L䒰ws` ee5q[_21=J!ù$>.(E4n5D޶PC5#;Jr.I}4qħ'f|%ȶ5q<5IhpiȄF&h I&^8}di?>2eڣ|UW56c$iǮQ10+CljTC% ' f]u[\0,Cs0R{6ߨ3'%b@V.MYZA}uv`6.;R}s|imw=-#b6b}SPP`d?a-t#g5hXIkFrw HCcD\#*j}c˓5;jTZ7E"*2$-Fn(M}.I\>]Ԑ/ P%qUHP;q+ؼҊI{*/It>m=h"#Tj֬N$ ;΃6Mh/KC2X A&YdT{rS)؃Ex&xn0WA$xY߉"syDt)Bƛ @}<7^A LFg77h4AD?_Ml '4 ʞuP%jV)|LB!҈ƎaHkh?h|ME&5bPgz0Xs.I`Ca=Nj9~Tt߿Kb|/YHYb:'wdv8p(9{( -e1BBT罹&"JTۛ^O/ _)eLOO]H{Ph;.&2F%`nn˩RAշl"Dt*J8 􁽓ꥥ_,Ps!=+T -W>8; _hpngUU]l=gH;uM1#_'_6yV+?.9GVC4 j89,`ρBݠzpv"L;"6ekRx ^v`wͭ7'h)v,^VPx2E5z$mI| Qތ= A?աW=BXP|5 \цWP: ǟXՐOoc';nt eV.p$CB>R,b.!zq=d@(WUH`rc ʃ$ZHJ+ڏE!ɦH6緽Cg rk(28Z"o2os.IӴe%PvPQ1*:D9K#j4J LtyDºMY8k^PPd??*M:'!/%iMegSvCEMJ>R2j)}(珗Džnu9W33OFrK ( BC On/p_p NRq{jLY{N\w|[_bJD TF-|:YOtw5, ,'^H'dy~Z,m avQ7qA[xܧ$CR+&c.遛H_0ך7n',8H^,vaAgsl9vU \5n/ZﰻvX&߹y`q[h\{6V>>i6"'“`sZbr BMcg[º7RI HcC5=KoRbYBgЊ#oS7C?U_D鳢MU%i fR U Uo m(%>xpYgK2S WۻSd~ғ( bKlc֊NY'fWvkv X[Վ4.jP0de~ VVZ?}ԩ.`TtA{Kvw!<5 (>E pXT~ֆ3.)WĊ`OBTy2 2 {D^vaOvW;c m(єO~уZ i('8%E"h;O<5ﲥ t9GX.~?iSDbOx1.Qo L41 #gyPuRYNJ>`n4mR+=R;?N{uUVځ탤[(1t Mw^}_\ۑvLY*99塃v ;q*`34*A$Jo]ȧN=his@jZ[TW]@a]XfR!*YhW? ;CA֌cq6If?m{OL=]&Ô=sx5Y;$̖D739Ík 1ʙS :v$ b 40T@N+Yѹ,YdwC2u vzŖ^OIq>' LmW# &Ttx#̘;$۝WdYG?Cqj[u-{zs 2ر=͚7pTM%TN ]]Zdo j ֖N&Z؋6Ks{Pm#yoH'P 0+N i'%%澗2^gxҿ{Q ȞWBc8 OJVhgH~H/.{u.]srb hc.}cJwgv%C H_ֈO*Ym4ڙ `BȃtG?h=ؑ_\Ѐ_t .ș!av l++L$KrR͡a_f9= Z(ˏ8rD4 Nזf+V FzLz^9͛\ዌNQޟWnL 92 q& 䮳"+쎎-GF!SWJ$hB<:)`Uwh9CҾWI8Z:dEYN>^r.ji]Aye׵˒,=Z$rsez{+bz1p8WhgWnaE,;𐺨EX'}pj#ї,)Ŷ\oJ㕘/3׆TvʕZHfQ{YP:}Ϡ egJ3Ӓk2]\_ 'KL 62ZY~(mĊ=Bo)ʬf GbWĂ\hF"ptOuZ'/ؾBS/wώ~@g@ *m5-.۳ξ$^N9 ݿsI,%[@ ~Ւ#IUdB 0@RIrO,P?Y.Z,a!-lzs6Zb;WA-T :y 3Y @Uu,>XFBDMƓl*G>wM,_1yl{wɘ:C/VMyWr>?? f;{(t:q?[f%["D)VQӾLt8(DAa={Gw/z kSH*@Pg'_ bќbwsļ񬧠pC^ hq}V)*>]U\E(ێ$& trKC+KLߘE0ÓҼ&B$BuϠӷA ti~ۛeY{xζ'" KA}vuMbVsuG^1mݰkU,E*#vӣ$'AζЀ9 vP0W3n6tmBLQ-w;x=GIdn@y1ި5|`8[%6|H j|Lׅnxxp'.I͢Vx/mI 51zwW$juz`iF+ T9/c,G{fiyƾ{EUF&@ ]> axt24S*]E`',IhN㵚LT79Q7XQ>3AO*Ð=n).^ڂZrց}Hٷ 9{Hƃ >$}iD;Och(E'ܢJ_1 p*!^Z~E;Ak:HN bʊE}Q'R$ _4%8ʦ䲖dV>xgY 7yQ1z| E w5d\+ZC/̻v7ryrX=t%;9 ;Xspzæ|FH%Kzto:0Cu"@aeZ[ߞzYQ8mn8]rw@0>{LiŻUnmOmVpe-G/*7y{cH/j@e=A_ 'i Ù mme7S%؃amk3md+brUtD]Yn$q}fP[]w+~LQ;qi?oH1Z|.e%P5.<M2$tPg$ZVޒBt7ExLћq QHz.ۨjUҭA )*Rd7$f=RKr6Uw~Ї#SR"(l{;\/.k HCk{s*dkln꟟iv5D,QL^鑓Zrq1ip?`Ѣy3*CUNqMDˢjN)ꏳƺsNCnzHq!Ith{*Gv DUi&4jޮTA4|=s4eEy{@/l3@>#̴iO/pߪ EQ%w %{LHQg8q~=qjq!˷$J(qsUD8݊\84 WdH؋A:WEuGU]¡-&2}E)dzB!NCԣ" iq]ý4ٰr.g{b Is+l Kx XH;spcg?c+&/e>] 3ŝ!}uf)TsS]΃i[w>p( Wzwe ꀢ;}ُs td%g'"^i58ԎxUM4͑t>֪t Td]jrvX3׋d {V@-e]oą^42p#MY-xB7gPANcҖޘvuXU4`W&ZX>– EaωɺpȽW\R, ؄s*#}IY;7"֫&'ݢ(7dpX%|()5`pN!v=F9.&ya%[ OV}ҹ㲕7XI`^TÆ`Z"r%j3/Ht_2 `Ibm<Oݍq_NB#fPOQb}Eu^^ƖZTЩ$M,Y"IT'^}vп*54ag$\|8hao"?L3( Ű_x8Ӹ7x]*ȁD,Bh9͊P7^PӖp%<\3~.Y.߸M`7~X8紸ayX V%&X6=. I"Pc{peK:kZZG*{@l_'Kޝ!JF=i1v]ܝwxNm-Q'WN4)y?w#Qi,!E0?7ʝsdXcֽ,`Ƹ9*?Nʮ8/ޫ.d/Cl]}^|O*nE[Z:PL^TIk֑pMWtP%Uܠ hHՀB,-pnfwr0AF\}L 쐐ma|@3FѣTVU-f% >PP&탘(?lazgrMn=c.y>>Z8s鐅()9߰̔(pE:G 6,V3 Ԯ%{ضwĎ%,S u7Cyg/X؂JEFqIQPŠ< HɲD1^-̘3D;qgH, Bљ|0uO6klĭu_з"3Ve5:HW98"h_';4juzUf /c2pKJZЬ=p}/LqcNtc|됓ҙ`,z<=ؙJE C+Tcݴ8=8yO-'kmQư~R"Ams sII 򊼟~"Pz&~8q[u3-(d0·f1,бYA;Lf*e@}K턍c'A6#ْ?ϾHn#=ˢWn3_1Cʿ*<ÊDa5]} 'Xǣ|iɊ+K3 GRKţXjЍlioE`|vK$S1 ɖhv 0bm e*-V@gv@n|;qrM%AGh\g | (x9KX`~ܷ2t_bDkbg򁋢1bH_akQ2ʒKPYiSSJYO|'v$o[֕1}JЦ AޏGU{Sb츤ML;tBa e @٬UUoTLM\M5$SsRzs+@S*ѳ㔖PCt0u]YigtJާBseZV N)ann/Y9yW8~]Vh ("kOd\UPuG;`MMg0 x+N}M{6.;ʎ,q,q oJ۠w`QXHsԹ.W$jB^>-w0ՠ>rዣ)EHSPճB=[_M )zz~@Y7;XZ]_q)"k)ĀBind; v{92x!j8V/<}"[TEq[;uhsf=`ސ7B-v_Z4!xh kdX^w"&Y:"u*H\eљ.CA Գ"0ez%n8 !B>SZ8v jYFKu.poq1 7-L5^Jq.²_вi(::)Of3>~[PItsiXb1ΕEaaS jkǘw ^ @&~ȧ Cnl  UĜF@#|`X-- p I/BnB680DDTj[ =fQNuEk Zgc+hxضLw xPAew>J+~ܽX݅Ku z}?ia=͟I=Q>vw8ge(ߌgn-CX!֫ ~Lcy&Dcc9{8NzK9_8]_ϲ&  !zdqجœAɵd;%Kv!T1Џl%"J r[L]G&ֱLLS6,QQ92C7<6֢`}zRP~LjF-:%$ ck|)%&v;Zׇ镆%:9u$ccfZqd%.:K$Z0\9LZ5#=ˀtRY윊2їb6yRg1ҬDsެwd%AIwMATn#@ydNA<|Oc!W}zj؂ c[p02 t,3 g~W?!h[^[5X߅^-j@ ؍pv;>LkP+0뻸ʶyA !B[;|!8h|!~B\g6_α E> XgQw0MU7K'TxI,YkP>v[V Ă8T6 H!ȁ TųZ^|J ܴ>B}ZJ;@DCQ{V49ˮv0 gf@T\wl,v*HN03@FFW#k@þi-U -ʛ{H8"><]Ha߈*+"*MQOq̷FA-C. $ǔ48 P1PԘ9*eH LV2OΏvq}=z q\-129Owh @ɃcXPȟSEfC㨡sIʨ uζF̙]+L_3xJY(UHSP@ jU!V佝H4K A̴ 4of ,xn{Jf 'G+Pnǭ4Y3Pm)0a~ &`WWc< K=޽{Bu vtI܎![EO͉[NBHwJ8-< &{3JC.ժ,Ӌv8kOm'PУG˵싽?ˤ2>X&I_}/5~ s؀eH^7۾VtVA-ǻK4uaô膅{vMʍps!=L r'jh`ou %vC1o>T8= K}T]NwewLJwJU66WH/$pzNi1nN+$ }:|gׂ ~M肻{Leצɥ7kL%цqOb,QxFE248Vri^8pITpآJ%>|aa/rKkѭlm0Oְ&(t3U*@v+r!$OFۃ_Y6S;w7)&̝AnͅeE.pl0׈0^h[vcX|@L+Y`Xcz zΐs=,Aap+>$Zq[#nI"Xv_C fWVog(̚{yOY>߉̇p`pJ߄aQ2c4)ZH[U/ᄤca+{sk iÜ"=+˹)@ ۲ E;.o@A@޺r\ʍ5S,Ѩ&ƞDe z/ Oh+b}ȤHY\)d3tyC24lU7c>2cT0dgf%E^dEVj!DciNp X'$(i_9Yw\oj70bnk B8w5˽WLRBЛ‡}=&U|(lɼ*\C 4(|&ٙ^;G2$koS`q~o yg|.LcN"\FPnAHP+^ݢ <{QKU.GpItYY)-lc1DH <& ypJht^PkPJ@oq|}[*7{]SK_]Ԑۋ!VrlF'>Euª[GB%Z.{<"]]21 RV,Rھcyl[0h._{%'^3>3$˚e OzcY &8r$LEkz[:ŵ "|;^Z=y#bEߖ6DQ!}]&TЎoN:${reBqRϰ53jKҥ.pێ0Tkn5%GDVmC*W"&u$?p!&k==8ha{w6ᑘOM%(n؂m#{<Ss DatFlCP&}ke?:krdtwX\.f9 >;H%#BIzQL6}2зR(Xfvb^ekRfOOy&x8!j:dFEϾp@ &;#*`-y2I4,h9>#EguEU(td$>sҴ'ulvf_;,ej;ȥOԩ-?w)ʆssVk@;{֒L 0]Zw,`L#QXֆt(%hGzfIXa F;.{#GMi޻"`BE'w`f[6Rc&apvzrh{U۰l"t6O9hM4p!;G4VE~F=;}R5KMJ~|h'dӕ8pSxI, F ;cBcJBJ Cm2nإy喧<0X6%a a~P/9IF%"8~QԠrs5=hPrE/A}XG6+A-?oǹ+AՠD^E(Ԓ[*Mhu9vT}n$vCYl̟bZ(UMXmB4Їt1er@4W;"͟ ;fږ1n3zőZt`r۠U4efM ~>El]A,v ʑ2z%ւAlԃ8KQMl@y%$h)L!TinmEgmZ5rZG0q`>3wW'l%ޱcímgKi$'(!C UংRPwYF/E526c4:Rpl I$%,`'YR 3b UKqIDRuE);lnnPvlM5HaUA wDIP.7F teϑTj X/R\¡lDܜF_`YQ*yOUTy5z _bM4,Rо P#L=}NVk`Oo򣏣ζjU0( :7 lgƥѯ5Ȁ׀᭦٤ }>y&X"R)A[Ig ?L^k{F,$[4dG-,= ,;q%U\ՈƦ<  '=\|+IB Ov4/t$ +' ;|3Wį83o>Mtl>F?pj(^Ae"l3vT(Th / 2|eOeLNq&M#v*p,v"1;.?AzzVuU^ sؖ.)z "RP (F`Ͼ4) `-k<*!`!l(,xͦZBr-0 dEq){ lHEYFN<arLmtd$Vn Z5t0 YeMLeW)4BaGJb-3Z$>.sE\lsl4v&\?NgW$^* Mnܬ>GXi^#5ՌZy.%׽ d$;*)}V;hvNlD4a#gDqjW| B*P+ꍆ|oa-D_slI%F DS-Uς% Qo>-rS`1jGbnT960y'LmdW0P-qАWb'.XX"Cf{\++x9&x4@S) eR? a XJ9H ћ9&jQ H^?ݓ؟6)PW0o2S1] uhL XRPsUu*Zd¸v;ݡq'DzaIj-^,:^%M=Zȣ R< %DŽoot.`Snl7tܖOrUTJM:!1jKꉬRB ڊu ^Ѣ@`hۻ\Jlkݠ [fdynY묽quZ5ty[W qnRpP~ .]ܡЂbDrNjG[JcK Ѡ^o͐aNQbIyA"s#Z|UA/N[>0CZ:lY=8Q; l]MvIxv8})rE1{m>E:P*Jmȃ$a#LHcRJNu)BcFwo5;&u^ۺ*#Bύ];"c܇wGEo@#6!9S#}|e1ޙ#Z*]m 3Kq?Ě^šQaԱdE"I4ȽW$ 6̚΂7Ɇa h vǾ-;o`+{ O$,;C΢dC E,AofkdѶ,+A}+G1gŽᣡft47WX4RQvz@H)1-&KWi.s H(!.$6Q uF~X~+#ƶODi E _#p87`H`[:r:SoC1ErpsI AW'.SvJ*+T#`vOz+dS7ԯT0= ؘspp BHj ѰXPGOdR,.%!qEB>򏶯|{a_76Q•+)^^!@l]NS8ًAZp2h!W@cjcW4c5W$.IOBfCt ~s-]a\&*3~œiVםCUo* #m "5jhQYŚq Էzxqo!)qW_!\51؆}.w%@.Kz gŞnڜLٙ]ѝy-Dhl?)'Lcڱ=K6TOL .;ehM{73Wh`*..ݧFsz (#xn|"QԝȍvAnlG8UP2yqPlKJJ=5jC.V 1䋙a!)C`Qg+ǿ̂>c_8QG "doZRe43#*> Cu _ny]>!eˮ rawOŒ[ ^ 6w`Az.(f+礻-S'Ƅ2ӏOs apqKp N+W8uąƋaE5熉㠗*!# !D77u;]8Ccꚫ>Ƿ#9ey'i# @Ҩ2j"uȮ75,HHiV`,PS!+&~]TʖMCca["ugE-6C/( O*7CyX>V;(;CXjtǐy.W8] vSR[66@'}6G GW>rAB ^Ti2'FWͥ&wchiJW^/m2 _QN傖l X7a:Qk&7g :UQS#,ɨnE"Db|,^*dg:to%l{h|.#x4q,X$i]&}ci'a)fo'L塍b ތ2!-(X|IdPDON!$r%nc_R=LH," cTY%@hX!rB2:uڢR(!GlJ'a>İ.+ 2v@p }tB0]j{Ć-jא/C)ra^a 8IPgd.@ AJ~Oxip@f{(ɎgFL9 mt*ymK?.KD$jQ;yScUZT~u2~ +Bo1Lg_qODh L9=ʏPЃ\(b0&=#8;JBP]}MK:#Ê?7jB6aTOMGGzJ.S\0c-c)~nPkx`u]eDrCHy޼$qP e]*=sDr_ji" ^2>bCNŔl/xB89M&0򏅡Hl e; KOzbP=/] `|L)5b=t*;ɟ9=b=qb8VkiBٕVPt*\{G:.zrulwj\9 aq`g3mGc.B8[ʇbEzcV֧. ԛb,Y4i. nۻbm\B1 A%)[o+ϖKw.P3*bEߒYvda PZ0 uѪ_w`eZ-ҡuīv)UDI_…ڹ -P$>.rjv un$ށs0i> xڡgtgH s`KaH#>Lkž2K8UK>507dV -{Ϣh(BB^4'hgZWRֹ$qƆ\1OjH"25 ||!a-qI"ym?~.TXAwboyڕJyM91'F\,TK,Yt<:XFKqXJ:}|%dj>R$7$Vm i٤3?e hȉAp]%N,mM;db:.P;iPL5Bg'ZIbB4d̤hӽ%ݨ$TRw\ƛZ_eFT2B3{2&>ʐc57iNn H?k0yy]'nZs0X-A]h!.G #t—`*CK^FoNML%T\mV׫3ԇT9}x#ǒhkGA͕J$g ur8ڎ(mO+ER:L]ɬM̍y{v~ Z @z,ɓ]r `Norؔ}r$wrB\;PA2J>ZPôȹ c%ݬ| )?F"Sh O2atǦ=;];KNPXJghFeC0H4K͔A]0mZppTZƛ5 us`^X@ؾQ4zea\xy>IuLkw݅Yۯ.X.kI ?b{B 8%csTF׊{"v ߥJT5nVK{P,+`<\J  Ei^QB4 *) ⠉Ŝ%+fͳbpn׆~7ٿ>Pe;h|J uoD b+;n`=|{VNsRA5`S`3dے$!ɏ\3x-|HS^̀OvI̠˪kcm6 3tHemKf}vBki ȎE#T-%ʦz힩l2E0{a:վT`28{+CQX&$7Ym'-_v8wO0z*kF\~;C&A m$K+BXPVNHs,yE,s)3q)(KKP8߆{:.B ?ܐl9һ7Iqxum^7;1}ǰ 6LIWp)Fm;ˊƶ{rTS*N!4=* 8;@/Lҡn#%yE% >h5 TR&(nT Ab=5ҟ7ANjPF޽qgp۰Βy[ȽJ)]b MNV9m  UK@ԓM`)ڀSgb[2bnzi6E̎+bEu!Ǩ@?p}`uǡ7Uɇ7 10 -g&gJ.jkFWຬ5Om= d4BZLÆTr#EKA=f e4JʣVÏ8JZE( 8_UGZ.a¡SF޲\=Մ^o4o'45c °|'`ZK i)ka-IQhyŔ;iz/:̀>kF"~Y00mn%/5%]]-glJpbKk VM-ϡc}nM=5*؊iqQeX鰨Pc Q; or$ŌƱ0dNc>Ē^jC|;_(0Y{}! '*zn I /I|(2,3mu/Iz%A&c}k]5%Ŋ/ +t0"lAZmȯE El_]yt*t9S'N6kzӶ>UW;~У׊s'.0H /.J$XI \œq >3ڷ1|,ߋԺ>6bDZ*AvG E.՟&={/}~las\[K+R8aLFC/YHт9DbG@rcg-9 c]Vü\Cu9J%_\&تϾCc%l"9Иgߴ-E^w~96u(W PϔAT)6ʈX'Ȕ_|3޵RCXtr&V%;%)6Y/ iqǢ]z1|B+C1_kTceFmkIϺ0չ$lDqPf#SC1ZJzؿ[^ A%If=.y&7 WoNTـF(l=}, hA7¨ɭB`]屴 gc`N->-=@Bz;v#6w&K;uïz*/Tu=Z-gxEKBi؛- ЁlYe <َZ%ˮ82o;P<`Eނ4 !NY fQ7u[4AGP;'[#_aDu.y-*=?:e>,4LG;+1edM X[9B3,,u*A@2v-^"Pbeob}by(JqL]LqRSWe~B" RV[iRcPKUPLԎteYid-prWuv3ԳȨJ:=lqYUYղffA91]R N%1WzP2}`!*N\X)[^b{fc܋R"ַ5L`0հ"9}R9Q3Έ"X 8( *K#M)rHPm4q->%( N ,Dc~<*ju+NAJ|~w8IvU|R?1[u ~ X0ZYGk?s%&vUٱ4 3!ZO)ߤ#JqcaVs@8 {k(D+7rM4NC_-|+)@$g;!n**'Fe{P]]ly@ JlY ɰ][omh63 YsodWSUq[*4Ą觾L卤ܼ;ӼKb/jR u4mwU{X> 1 0\: b3KKs2o%\pIX pf_~H%sQ7`3L& ?U^ϨuglXgfx_% C%z) FCۙXa"TMl4*@-hbh1FpSGY ~]P I+VPYԲSoC `u0}68>yd'd'6nG۲wc n7+n$0ԠPN\C8B&2WR{_ɰ cJd=9 Շh2:[e+4J4O˧$O='Xa KU 4qv9;75e>gpK%r[ί#ʞcyyJ5~3dǤxe` l=Ȁƾ 4ʕ>yz4jj3j {i>t*hpd$G,#&zE줌pf\d)\ *}1 ݍV/kpiyꛫ*[c jtEqYU UfW@8,mW%Uh{wid o*T^(Jb1:؝%^_5†`0CGE0D!8N]Y@0a]́•b uն- uD/AhiSQh T硱:>ԚӬBvBw) 2R`n^'v}+TWPZ ՗{_EJTY~eĻ}TYO؊]_b -+EaO@b*DEh,ҩҩJvvV3M(Ոu194=Μ8y=*^ 6 R)ouGK?)l~sRgS-Oׇs[ !ōZ x&#MӈlP>yS!cY_,Vt-E+ޫ`ۜ""|z_P;lY*%rw`e}Yˉ䁏͑-CI\t+A;[j$ҶaLŶCuڀ;o1Kb]ʺtf v-+ʥAu8nzjP!Σ[e%CxhcUye7nl(ke]B{P zAJւypB]q?@0Cw=Ue^\>EUZ"H5Y?`/lh+ޢ|^^jra?`pKA-A4C[U^lB|.g) WwҴC:%"ϧ"x ~ЛIMmBWExQ U` )v~떄RWMu=ToP&z\8(S^ΎsO [J*I-/( ym z;Q 2az$U͘mpB<w>2Q6ˆw֛;cU_?+ F{@v[-1CI+\KU˒U3C PIL+}0hEv{FU'(p#*Y%W=~>I a?Cx1oEw*@̓ Is){*Uіo1iP Y%VE[ф5L'$(4Aen-+ aS6FTCY퀰"ڢ$^g,kJ_dWW'&&ܐ !^i1K j`=,HkxW, `|ѿ_ FЀŽw{"؛=I#١o!@W ũ{ekD kDpw$U(,iS;'|j1p*%F^ rlTt"!tW!8Tdإ3Z.R"axd7Q FuTx㷀 `&zp;q [+~, G>ڹ!Uρ~욊>3zsI, ]P :RzjJ #D JV2(`UJk9p; b[Ouť6P30?:*6qlA1#J5$^+ B#hĿO|gHgB~5:JSJ=35ֈX3D3h7 ˶$9SbwNw76P: N)=nϰ$ߍʼwtx+&i鬏+N=(5J܅DOKvhk ~ dasu)6{:H^ؑyK5̷SH (tڝCo` )naV~bkGSn?p!l+J^TD"Be%Jn@4ψ]h@@f",A'-MbS":U:# }, 5IȖ*,GUU']Hj@*?Tt,O,p;ԋu$.of[D1+ |C2v 8W'7-m9 aAg]` z{,v] (q#=YX6CބJ.fi0oyO$T%xtusR/gB^(&wZ?$.ApxsSnعah)rU^dI'i3TJmG,_ð\7p^Ӓ⯁>H}t6r.Vvb(ks9=2a U&[v6 )J$WY#@K*hҞawe](6P9. :gUl농SB3NǼ6vٻiIϊR0e}`z`€Ɗ| U'c.3a#>=eihʮ4p.-|{dM:P2Wg;=ԇy0R\SwTRK`W@^#=rF_@{M 1 ٠,֣?L$K͖m=z,p`ZyF[H}g@DwJdK]!Vu0mwqu*n V"+ia5 /TDr5#CV{'Re FcÊl'o0 {|+0SY/mj@> ]GsS8N.V %n̮xK);Fg\6`Sz}gv ZR#UiT_ Ddt5"}Q} W¬$/&Y2mZ;IwbJTJylL`@-FUi`o[b+ۋT1VHd]ŀxH"JL{V7Wz|0f)R21,q |9k@E V85p*7`^A|^=BL)Z\GiC!yb,~7WJJ".3:Ɠ - PIg59ã3rḖ|LM8s=(Խ߇G{m걫uě.aQJΊUA@fDCɉEpunn`*XV{'pyzCYV {EwxD^$+uj;V^[zP]"( Yc`/{d{Ws)*~.El+*@~%*|-M%F 3*%m +{kJM:+ -:ߺdJ m$Gyfϼdqo[~Bօp` Ugm1N= Ű(R]V {cr(>9L}GgB Jn*cB1.ۦLm$EjăXbRܕ\ ߱)0T)=h>ca^Y&-PGs ~Xȹ'rl|u3ݵ= 4 1j 29Β~^8)M'd}A~K8򮮮݇ Gm{ǸH ="`^|rP#Bueu9lXP,E#_w|@ YVE;k*YѤJÂ֊vfA#hnA۷"dwYv sK.) {iRn{NB<O|d RN^簽?7ódF+JRΌN+7%:3)>I<(;ATmP\=YY)T1Õ/qJ&9_XFң!$<> )@%BK)^*3̭>"sdy`ԷT4$N,%>r65 4q9FqSE<8`aᔅBm^H;MT}s!յ| j1Xi k/7Xi 0 `/ف2 na6wXޞ. Y*]gH!R֡V;AVL\@W)qbr\`?s?Xqo-]SAcrK "#G-`]HxNhY$[@>lϷ[d5 h+>喸rFPnڤZH(,SPx#)NMB3GknYAg/v h:lA ;Etsi#},Ei4֛o6]W$*R=f;]m 5dю ?%1u(Fw7g8>p.F~$w]cq`!aU ¢nS<E$iG,D-DY(nQw~GDvm>@ 8 aLhTpc{(_zÁUWd'@;h+z FYX2mp&u]RR!lǒSx~1tnhM H/)QRB!7Ȅ먨A>V/yIIi}H,Ct)eӗh|~|&o`fޒЙQ8+E=٧թdϓw$3sbh*%j4ЃZ# ݑH=vԯbYL:47 Vٖbҋdң CJ| ^4P3SQ%M'j+Pz4;z)*)ӾFӾMdhǢycV+f2գA۟I/\B\j{!f&IYY/7oR%u^ ~+n9>zS~v_ڭMEHS  =Pm[hY#9Ȭ>sĸ3bo-i@CHߡ76z54'lH׼%}AZʵEG2`>ia-Y*)Pg^fpe kC]R7O')j5JW3Kv$qx[2^u(!;@;,Z,D݁ᴣPPH3{?4>㎾>*̢QSvi?i/>^O>cQ5XIU^m$AXm%(muʹ߂h們W{(tԏ\ qԆj藧 Dcw\2@ 0U 9Q08bD)0(2MM%PasIl ;S|#0eˣ- .mӒWЭ@^x з-XLvJ(TXcXW;ǠL)#:/H#2GĺPR<`F()͞w;/͵nxV? G_Da R(%4J8TNg s?}ׇ8xN[,̠nkz+GFNX̅[KT]̟_oɡ]:BMOQʗ5(jp&RF\כ,2#Q=u֒$(p^FZ]uX͋2Zqݟ+*Q\Sg(JJҮjКwNnG#aؾ.Bn-W͢߅JVp,|(:`$5;h,cz^hП NiH,afxOoS4p&eaDAC(~@r -[$ٞwm2{&MXs'G 2Ckf(Ue1Mwr.5ǽ^ )a=& 3/B q: 8sZUN+f-5d- R Voy0H(tTޡ7[!cAŒj5, uKU#@L:l-!K=rv@|tLb?,qJ~jxAdxxQ3Pn#ʟU) vk~ ))𡉲O,pᓀssP:"r5}yWFV#ƷMηon׿#W_ Y"wGsTIq?ݐ4vvF2W7IʎF¬D] RYH޷49njJ+fا8ˇ=Z/[N NG3pLpTB1*'֜bI$yޝZR _>Ko$X^I Cj(I9|iX<2=eS$nTkQz &m}ϸ[o~Mz_'lqL,`-? Eg8,+qpK90kAKaIC9S_`aąFW՘$Evq@TCnڗ"ݐ[*z`7Ld[s疩=70 ^qW,$y)V#1GIit D nDDCr}GO`%PgSxqb~𸋬OX޳;-|)DDQZ׽d)#07h[2*t{vJ2t0i#12KZCoFRГB?(Xݽ&QZuX%ƶxa.ΗK?u7^+%$ Z$~4boΒ>3-k̊{-a;5U$" s]Nn:@Jsl{lf=Ͼ䕲L dKw.7OΨȄh yHf2.KbBb':;vD䒥9qYm`K=P J@$.!si#@3;s}J j'Ϙ;YycSֽ?;t1,&+X|ОHv|+ P1LzM \,F!8G1jފ1ޛEn4(38˱|CA(uғ&)[ ([٘q:'VrЍX!{hp09C4+ʃЁbJ%+< I]+r[*>$ҍ pGl?@YV6yS2#toTݎq@ ˆ^h\ Aݡe"glk}+s,_AYDvO,c5t=l+\Ij!ݫQ(ޑ vSF%T9( Q %+Kw BpNx?$`8:؇r{suB,{CKwc,trג&B/u*+_TK6K}ҥ%`{,ϭ{蝆ܣXvP) K>~TAF6KJΫ7WB8h+ huPYt@/jIZq@E(u!))@ 8_7%vԇ xO{9|P5I;#K-{ hgGPwR_H'.7@P&YgZNi8XҦD 4#}6 1헗+RɨyXdX1i0(gXZz Yxt?$ʑ<%9aH/ʺXAG:xK@ H+\B@.-$+6Er"̃K_K-nRVg~A:n4 JE#IaD5yA{ ̣į4Abſkk=It`Q²7w vVu@-,T0ֽBh]C8?0%9Y__e04ڟi" holKu\g6#xdžvWٹ@W{6>^+ Sa:`Mk:M+A\0oҠ]uvM)dIqrD_ڡ M6Lfl:W~=[}PdҼ W`4[pzs)OPrν0c|SdClDp-/%QC`^aCX[ ѽ2fW]t.{EN]=?QцdI+ -xQ>|uu},˗ dYqǠorPrHK{z fp +[}+шvO[jlkaAH||=˿8 :að߆.mZ*ȿ帣Xp25EUbl5SuCK#a@Ʋl>#.g3. tzTIjG? )9NH,^J8dt0XWTh(BiΏ_|(ۭ/ B=Ņ㢁* e /x`GqhˀAM.{&0#፳H9'spP$ja^.g)+Ey@-A@,Tk.ؚ _vRdcv"ԣ%Cud&7}叜?H'>b(959 +VƧxyB!j( ,OBICw Şm@ͤ#XۘNRRr=3n-"IGwAmd="thw$4 <iL*Y.vBxȡI+f8}F9&Z=`'ٟbxo˺r 19 D&ySLu;jÜ۫l,FQ=m>G˞|9N|퓃$q16@YMC^#}}e%O$۫`ejʁ5B\.T&Î/h]Gi4@ɥT248s|RKJ*Z/zd@ZC֯>a8sE`Ii=[{u,"9! Ċ)dZAɳ yHq?eM}.4HWG8_PlaE;ڠ'yTw [N6i$P";mW*}Cw ^dC˹$-wQ/^|U;- sI  hXtQ[0$qLT lKQҨ)Ä9X 腄:ϊɇȧV  \aB)uK"u*(RF^d@6/YJC3J>X,@;q٧$zj:\IiҔac(rϔ=GEus\PCyTPPq-GBt @2+ڞӯ=TdZ`dkP,5 %24$<4x'0- 6J_jeSC޵}kohJؽq Bh䯝 QEMۼμPYLGDю:s(3}4`XTvZ'X9D}*SB8Nk+wO@– ?xc]TPc]$ʾK\jA~&7뻃CvnmpT!蹟P: jb#ԏe@),޼-2n$d;=ַ&Pkz8):v ˂L+?IAk3¤WP{浤 nm<36S+ b8X [b3vXZ"$^%{ g) J`@ OhX=­4F<\MEČc>k} pwn:e 47H ܹ KFaOLBwB)wHqrʥ1{ TV*Iopk Br=) fBWUMVj4WkDze@ e7BX/+2e?1F^6o{J]=Zh#]czv_u%5$QRgpFV/4ei{{tpAAN]PSB5"]NB,dXOөs}9` *3.[, 5:d4e  am~O5uW /Xmnn˙{ɔA^ eb= &G0C(<2rI'A=A'6;MTca*2BM!mG_`GJȻe֩&/=e@pgc(; >`g(ˏ/VKd?0g1v\geq`=&7cMѺþÞ BuTXBC#oSL>x~DuszLa/^lMA+R,㕕As0ziƁ3|m^Vf16^bRDXEnvOBQ^.)\c/X%!c+&g+UEV<k'@KiQ;+9^2>ZS#b1/lRҟ=b]Qp1$[H@R*4{/d.i-(8zDNXɑc](P2 ,{Ixr|Jwj-jsjݠܛS]\WĊ"揙NrDB;y\{d^+[c5&Vvw@cPTZ}Y "pybeoA8obfwGF0btLe&4lFAxGel[ȡsѥ=vݰ#j OJ^gN"Q`ah|{Ox#ypIHQKǧzJ3L> o&쨃|-+ YD *uۀ_U[u,+hv¾]ᡛs n39r8'mj&q*hL޳k>>$Nρ6#Z z9Ě^wFM1ԾL Bϋ,{?=1B˚AM wTlpRN {`٧:ؽ[ױ{eY.D gػ-4%h Ph9˥& htbD >mG@GKa4=Z\ե;Wȩ%c>設7INC|ڡ ϹHs G8+8>WEY[w KVæWg"ǔ!s4;FXѵc,'ݳlɁ,]hy%-CK׵\Z@ ̳fJ\x&%4h<+u0[X$?iL  )d1EՊ׽. TW1Q8Pzii4V(~-ׂj'T!=HG : %uJR*_NBwe,Ѩl{+)^ݐ18k36P<$]\lPa",zHKmH5h_EM ~ρP+SNׇ6UAEibPF=(Aulҿ)) G A/gNt4#f澁rw<-{o/ݢdEՇiPgC28e)TsFV bm[ҕmb\ ㎯tj ȝ.AQk$4YuDJ 0U94.5R􁣤ߡy0/CcH 受a^Fw19TgIAc |ll?WOXKW ѣ,nk7L' ~J 8ˈIzT(cu6QZ P׻:.._sAXh{俀1JJ.K̮yM[wC)"ZcɦyWS)âw iz4KuPɃU^Z`Q?^ʗ$iLCF zmrg%{$/De~>Fy@˧eyȊ3;;Ēx3XuU"?moL: ESF<~2 ah(sHJ*T;.#. !u,q9MIBav)0Yq^ґnՕ6|XBmh e)+3I"w>lB(2y(ޟe8e QU8+6C ~FvQ9: 'Fr;a1)) `Zb]+K51-!v)awFvDC p8N: *v̎JMȧK6KA{2ٯw|!;$Y/sM&;AăV~}uKFY$sȈw,`^>W6K{.[RO'aZ2.ƙSapD7ٱ"ԭ4%M9:"AmwvCo)ʓ%]ӵ/;tSoEE4kiu~i:sJP"_.iL\ѣyJŀv0M@|X;s73n{Zaog'%αDUExt댙ſC6YI7:NU-U\4v>Sq7IW4~n Y9#MW$"Ј\"RD;1BYCYr&&r[V6)VPCK,2߃OW$Wx$x߱9.jW+=5)hρd$9"h%]q$ L-dQٽ(\>[k5v šm3hp eyݥmoG0C1͈u$Pot.guSaV4LSFpnL*,~*HD`壗ZXcwIĬA>M1#"'mٔ<%Pn }ZwWͮˀ1} TJ(,yE,&;`F5ЀA[0 ^V2>(z9E> ̞t`w0d_-#8]lS&֡8DvVS[Ee7JsCk37) A]Fhf8דOIf`t2>d'WJZ=m9 !8[ !͇.#h`V ?"`+^/iH u]E%v`2?٪&XbѠʛ?gRAW'Ÿ^/aqװ)0n:M6u)4Yt-rN9m׍[Ƒ+RvQyIc._B8cHܐU c?͌Xg*8-=?Myew:~l5OnW$ly2œ%RtMO5&  Ew# zU&3e~vC.WjQhS )\Ty=DUn?Orod3 ѣhVv^x{䕊d4|*sxiG[SR[Ƣ7Iu%\ Oِ˷|TpX +0 eftT4RPqaKmN` qź y:c{vꗏt@b7d7}!G|nrKc\{ZTan<)O!؎4vZPuAba=eT} X\=gzyyA5j'}>?n׃]~.)::M-нQ j+mD. =ؖX& pZoƶ})I+<߬LdzBB.lutgLq tz/V2imL %3r;"sO=-Je4oKbM'rcK%1=O znҗrt}(DmQ-/KW*!(`o7(uiBh-1OBhbuРL9tL㦍*S>zj H +gE ;{ֽxE&< !0o``%tWh#b]PI*w'`])c;478;"+ՀȄπ֣3.wqe?MOX2ihɔN覽rEzX*k|¹1B63_PeXہk4cn?)I1`/j`P $?(`#d@ d\ m@)F>~t{Z wQ35plCt0ZAV̻lk<}ֳ 5YvI$wCn܎,l*\T"#qzP h;[gvYSj)MƷtEaT3<@umo:Fɋ([r#6|.%,F,v^љd&7/kF-.YAF6F[ %Bh`CO*?{CV~A3!Zr41?Լ#9p4de1ފ%SzyX=uʎm>۔vM@Bݎ e7t@|XzX STڟ)NPF< 53j vt]Qmp@K!H 1D!|),ӕk%J.Q jCg^yjMJM(kXq+|:to~K͉ 2tlnMuAK Ot6gRui$%ykv0d,=*EiM)SNJQiܭbRsJ[ωT 5% hOXva*tʌ4rpHktWR>2Ël&Y*cz)P@h[d0@ɫ}pwrrσ:o!4r< RsP0~F(Tw'7SJuarn0@]ܛC%du4Zusy>\@=CNY]'Iq ĵ6= jXuPbߖv62aIƿ<K@<%Oi ? ̴]0d@q} }z\ͺ">ӗXˊ€^UxWb,KQv[*d,snݰW$7׵ a*T:,*?^`iKbn@~ӖhWpv+_ ]XNɰxDj`ܾ<)XZn#+ 06Yrg叽7f;J(;.Q=lTɫNjg wPk΃ڸj`ۉp[w}&6ǀP:5`PW#{׹20OT",Ы=fu& $f>:-2Y/MI )|Uw$W ܪ %KqVV=m^pc gwE`$bԖy s6A)[S6hdr3cWĒvxf'%E< >/őm)yvzYRM[=Zj؋|H'Z&vzcu?hD8e; ^% @ֿ٢ UiQ?&;^J8,a|,=67`n/ ZT ufK -NBڮ'"Q'QUHJݛ=[b6I͡KQ3gP X4Nl)d&pi]1 y"Nᱍ;"gM!_Q#qe{ &rADFxRl}cNdu !=)G81f~Nfo|ˏڶ,T DaF*>/{LFD2&v/`8u5lpMez4_xLaf?nyS\>Lmv7>| ./&O eK§mTY<_c+ҜK{EQύ! f)^8X/o0Ղ-F.o7MNRHEw;D>VgN3GS;$ammcW_ZOw "<5Şvwz9hˇl&3qRHNU%O!} ZxKMQC1# OYT_Y5!;[輾/Ė 1H?ÀN\aKbmþV`rD& OqI(:.v%*@ *a*5DT+BA.R[.=%qdLfew8v0EH!K0`ACыEV0s6:%&ÕWw&9N9YOhNr [g `:4 %2Z{Lə!︟e7H|c$dAg-Hs*W/^r @gjW/GUDGi\@ q[ՠ3N*֎I&Hޏ&hm,nAk<|t?:ύ}Ƌf6+|Nd{tw?W6#E~Gә_RE(G iQw6 zkB+p*puT)~A vQ(=`oXI߼G{81 LqEv,Qa y6PrDYDpb#7hL%$/q.3P.Sc]2f4N?: 1! h>Lf0g3VPC42ɬ銾,{'ׅ`-cݻ"XFr#3( ^YcO~ /`gIa5,aeBMUS}']YeKLVA%$t5i=d9ߎ/ v>iǷF9I>.A>(P.X-~[j7[٤R!lTwg8HHB9d ;c\xvׯ!ɮ<9%L:Mz5n@&˺(2,RƁกd۠i? U1~)jhRc~ג{-YJ{τ)o8-dl[?=Hnh'1K";5E,O3:8x@?l 7DMN*[69ɲ,dG9n"ۓ :{-= E)psSrg ޺ط5)?2pirߺ&5 hP-=RӼ$dBqMP9ʪD"0}\9 `{2Sߗ=e12 EJB,ԨOUp$<ʯ-*bA=n$žOMU(mjCB' !uҝKP:e u-$CQztSj!cA!%~ŜBkӵDwYPE' k_Fw@AY|աu-sP!H#o^ s]0̃c4 [?b0Y+ReExv-KDH*ϋP-`8 Vݏ}:vݠ@QAf n=Dž &>Z.nأ׏1LrgqFXus>~}RU?<ɝa2BC{!mJ烚>[H)e8cG;\7 |.ocvsO *ϣb3U]b *Lo$I#hCXҶDEśK2>ye}d2Mb-e!n0] X׭Syw`ܮ05l?{nE*h_~3x=B6P8xXQ:9=@As2E4$F_t -Y$_ 1x.y[R1H( Uw$u+x@zlp [{rk衼9D1Bk9R8IaHT\:(o @=H`mC|Z C$g y+bAlXFj/i++ ̨'83uGSKuVza4)GHh;BT]OHIl\K{[3=#n Vl[\֩>IIjWgZ8 <4(f׈%}z@gS]TuRbtX)gGOO6A'{YyT1} -皳t`P+$%T r>#vyN * ]uf: K==`'QMaD5<@ck WU) (8oO.{#t`<7P'v̇ˢETInn-6"i閌_=n>UPpfzGHi|OTWQlVey RWeogh%d2$ v=_J tRRLy2 LT5]q wPeh%L=4&-ܸGUքyC{T5r7_PcЊ[gj@8 # > LPT8V~rFX`(('&dנE"C_5GT\#jm 686PAnb^I 3Vb XqҠ,*m(ӵysMv6Rd8@~WsMW[7%pyOկwE| ?H2X[!QA}eol-ժ']qp x'eKy*[!}(J諸:|WĒ\=As6 8r8533Wl8eW݈[qLo^p 3koY8#c=yI,^ fvx%6#sD%ܴ(7`TFLj"Od)YOp}6Y L\YV ŴB4^V1txBv.?mPY3 >(JF p_- ?(mr3M *HJSPkkQG`):*ry!vqǕ<0nztSL򩈽2{-ٓ8D!~fW 34Ç[y*cRe֓*$H^w%x˾`CaX]??D}[}|[gd~݋iY+2 Q>́Kh&%*SlU լ;"`XDVY|y*-("JP@NJgIi! hzr;h^VU^c1V4ɐj1Kʡ&: v  [Ψo8Zui iH'/,ĢJC*B)uyޯI>EYX-@]QF"I8A ,s|LݺlBKV6Rzf6Z.,N"O62\D6 VIW$j} )pMl}F5/l~ pbBTg]K~dSCl In>ӞWxڃHjpbq(㜡2,UNOb$aFj2uR.`3C1"h[6)ރ(`G[:Mj(vxEnIW$jݿbR ZO j _?zwA6ELP>1EzF՛zaA0.'ST cKa;{ \{.oB:UpW٭˱ZHTf-(cHhw2uv$+#>]0F 䝅-~QeӌΈc+*`H4|r\o^3F}8W$ >5˹ߓ6RH~^ʂ¸(;a(L5|hW5#]f?@^V2@hH!@)Ycг!/x'RUJ/ QC=/cP 56) 0lKt3 Ǭ@ iKb9%*vYn+ueN 48O (A0@=BMfCZNEz{Z c0%O Y [4[)+N*hZ=Iۢ:XIا4x8[\_&t#^eұ:.hb){sgt@38vƏwdxI2 룤Aver\|(W~rPDD-A#P]sRq/[Gd!R0j`X{`\*A:Vƛ@c'l, I$3\ 07-.)!S?V$\tQ VI[!X `{hMl")PBZEdB[,]my~jc1];wg8<=%8#k/dƢSn9BE*LJ%1Mۭ+xP߱)Hfŗǚ7(t,ԋY4h-zQU1T.cwOxo\VX[k?^D]]C '}1w]%U *ª $mRo9O /.7/q\ 3BwP金D:MFq?BrX=*=dQGO&㚕ž^6Y&(i>@.n0ޅ=bgt"%SFc_$9$1؁n OهA{y>[EFA189H~uKd;m L u߆|!f)מdu-2zKwģ171k۫:y2 l&_5] <Z'(]k#+~1Ǹj讵$Q~yJ$yR-ip7FU٬`CgyY >eV1#Y#׶7/uvt8+!L;;Eﲔ9c%X& )4~l庝5ߺ3C4PA F )y;p Ida8'9tkH(~zOwvK-sd8݆l5^״-H>΋4![6TNA_q<%QFqY\^%y7֬Q *YVkb0bFݐ?UȨ|MXfVƾ^ɲ{E Fd|{I]NDld FԆDAb|5xuyAC1_(!v9,QXO.D+oV/۩K:`-]7C-7@hz1W Lah-nrژƩ g =2fDۃwdPDUih[q-7ϙPHag"`,&inMOg!=LKpD]cwxQg3~ hOٜohER)nۏ0/_O ;ZU|QȜhQ's7tc_n< IKF(AvPXz樼1CPɐ^Ϩ֓I:,8SޝңOW$?wzN@>mlBIF0|dl UFk7gʂɇ,ݹ`&[|ё{U$^#4*"L@e9P'D\>SFS(;^{@>mڽm< c3!Dv9^Qea,8[0egUÚR{ɈCc%{tEE-`Y J f &gg^ i~ouvavरQR|G=$PR)M{MqdW$pO5=}9{I3#BK/r'Z`ʸI%Z r^ڇ Q8!VnfK9i: &0 (1m^ D`„R$V83o_i{@o!iż{d U,.*I$T_A-e *nx+wO;@ cvP yt$}羽ͰhKWH*+}v ߊe>ŭ!F0eP =eX7D2CgzTSAKKEp4 b]r6!m(3/I'[5K;BvXϦh1= p+QgXs#rD?@^S&ڍ@~Eߐ$lSg\>"Y$y y=P,d:l}9~Kn]/{J(7`1KZF8e?ak;`FJ#>a,Y38ìFQOfG!pݸbM}ٻxvFp?w9X;r? -S6{G!GykLJ̠`N NC/jO# n7HfקܐM[IcHOS^S`8W >>T aeE]$3;B/-ˎPٻkxwu1FjH"W+3- 'SM).jyI,^"Pla4KuNA'}XUj;x6BIHvGjűliPJh @Ex>>Mzb"Q2E'C̋Li彶V/Ţ ا7SnKD[뉺\9̙aQb,fDW|2jfi!5mۜ.i W];)Evbh)b@YOc:Y{|~Zhˏ -0DsD> Έ+9Զcw%"u;׳ɥyI-E;N,܄RQ}?ruQwb91 a3 iwƿ\HH ˂&*~!6OP7)F'}nu! z##tT#yEPקfVR%-AoTj?O*v/lO3fzVnV z¥s@F@5>B[]KSQi0KyQxj]r% ; ,#yJa۪UՇjr'c}Q (ؽ¢ )˾:9>QD'Yd09᠁~*0pB 0ZY@VP;T` vٕ+ڟf2C &LJ_^rY!/#>mň`N/c? [S`/)}ÓG*vU8Ŏ`>?Ϫ`e/Q6UԁVee={-Y=ExK0.j.49V>q;HYz-4УT*@ e a{ (Rm0B'%'tgMV]`Q-);8C-kp\>Pal ܰkLޏW e GSn_Eu5BӛC%FX#,͡ZJ@ Daz+ܖg@B!>m2O@膀7>9rEA>mD 쒇o>6Ak#4@K+l5(=L0ltE[']JMj_h)&!,Xt#֠%hހԤ x(MP.D-ʞ/N] kY5#f{@ji6>V~| sGjaߐ*@'/I 0Lj)7{ʅ)ScUfW'ήfW>5*\}z(V@]Qԇ2uq> 0`z?t' ێP@z;'*C;TT[5%;nHPͩzUo 3P(eǚO&>ve!{ct7ffP#z OU1i ] 6b{aQv V2sjX~?ΉPԠF45, d>mOޠl+E݃/]bfgrCe}ș:zOCYg=(г08,Jc'u'mǔ5-S\ ^oa,J21AZ-bKe u$0bt쵐ϩD5XtlM':RJЇ;K bF^Vu\$̑7\kfBϽ%P۵{yp[i"鵴'ce4݅8b~XoR^,d'B']ʆvĎǷBJ'd)᭐?:&՘ѩ~1LWoHHenVu"QV5sUnR:#Gi>Ը"Q3zV|/fq}| OWGmt(M]RFW)\- ρ_ǟY6ys|D@Wl`޹o*rz$ѕD @3,޳W euXLҳ؈$vBҝc֫>hё?!vE* ?XbETܭb8vbcސ7rT!EYU녡ag|3craoiu*9`1MKXhoP{mKg]Cv.,Y:N$ *#s.5SҾdJxq% oᬞQ!,_5}[*9F$4,?myeK >*jVOBxa8޲e[ #l-)O%9/5kbzd$yGu3e9 !g?ikUh!`+ժUe}Ahr($nwKq0cЪG1YV^pszGiy<5-Ծ~zYj qw=FPu~^oyNh<P+Wl`(! j7XKqۈ8č5Q5Zz@ǔcm[H%ˋ 97Ҥ`#O1jP#}׬: 8I|'6:jF?%dYxTS f;hLxQ4>/JixAe!Z=%(-/౒)P@‘"+__\ ű?Cl3}zv wʤn5 ,a-tJ9}WM(un?[j/yI`, OX^JJ(65iܲfXʘ;H3}fJ@nN/K6?!g`_G@ }[PE} 36J_&1ac+,~Ap$҂!鴍M !TV%Ffc b߫|٦a yyHx(؟_O;ݵeվvTlo<$.Wz~,>:'t952`;?:mb (m#2]FzwT  ic݋L#8mSĺxl]{ː;Y q X~eWcr6.`=$Etrc=7\Nc˧u <8Fє* J:HL])ucs /n$qkDu)}S=~±^to#W[@\BVH7U\N *l>3?rs)W G%%sO"QsiH=݁*gS)5Zc'n, (A` 9AR1a%gXr.zla  <1,Ltmč;:v`O%\Oݦym 1)>[=l} 4q \CYi[ f{vu9Ix WgobH&jiK>FtXXuJ.WV;&ShܸU)ܞ4Sk݇sFbHU|#kz$7#3;ɒ[R?-?<%$]fM"JFU]tɦq [g엗~9Ԁ25.w8'rPzYEuC*0mO^%PB<ؙJBN{Nq|o/h6_d*Нnc!J rdI^\`d.RlfVls$ۓe[̀ǐ\/>% ,jI[_Lc3kudJY0hP1~nɬlTHр`*)It\J X{w|sXpbъj=6Wf▯{I`vڳ|B7զrWi='MhJ vl%mAH``ψmTe>û6"Eɘ`լF-8NS۾]Z9^0UHlM4'o>Ѥ9 }wf} qRbV3 N9-C@ُ)[qD@.Xu6Ljp AJ# Oۢz~+#,؂ awdҽ3dÐ}&LSOU/`..¨ht \INݝs=sh١FY;-fRIBඋs4!MpdCa`4WhKdHZ.3O3a@A"+]@F)ymsuF[)4Mcl'f 7ڧd}}.V >k ڱֆ:yQXtuy@;Eq1r:NP M0ed$뺣f ^U c˛G[XF;b3BƩ ݀$&38q h5.yFvXԥ%7 Zշp.{÷f~ Cȵk5" ӗڋ> $W7k- ZrՋb% i:쑧OaWh|XBP wW$W !*<UYghPg%|vmYlP`?82ʷ-&Al6Z}]ы'bijfKa=!|:?ZPx ' #׸FMkF)U-Msh!p3SgWزt[6&I}w,:1H(lVΥ 1S;zI)r沕qs+^ BIStE#┕~7 CM:^Zqt`@\}^؛-%هCugnҋLK|I6x&8o_攦`6%gCP;IQVJ#,dr=A îڏҿMQcOۿ @'4S J Mm'=G}r 9%g獫b 㫾O"5M,7u!\Բq$9ܹ`³]m@hS,TYft^:Ē^r`nf/D!M. M'e},DeրVjڂ? o4TB$163.ؗkdlo]~ =_\\8t歃NLk)gdϼ"Q4-65آho,$&E:ղ%ۥTnt:$EA<*R~BA~悗'_AkǢ KÃZ>gaf7&Z{Mzlzݢw_o"Q Opސ_?Ͳ>cT#@~ˠ`[ )_h9(Y<Srnd_I Ox-7JdUBz$eAwywsI,Y( EBJ")?heoybMak *zFU4&6#"8ܾBu n i6 ,a"9$\qP+O ^$Y/,F"V*7݉ɻN{,K>bXjP_ٰAQZ/SMqgG MytXn @U۾‘Np:Lƣ۪RR;@']P[3PvzZYrytQS,/T?bkyƏ`-9* !tzÙ5?[-CL"6%oّ}w,+cQʅٕz٦-# xEXwǂWSjbGnwe",mR@ Jv52?_)'Bс-{ +9`'Qx~gwj;/IrUS(W"<uT]pLVVl 07p!SJ 8BfU.% _' /+X{q!iԦw=edØ\$2=Gu(5IQ؁x߄N!!Kְ?t*?X M hG'B]BLԻ+;XtQXڽ\Uv =~g'RC"ZxPN)+Vp-Sޟ)߿v.w[ f5ʿ3?=˧:{Eq]Lo5 0 [b{.WO^J.؃WC& Auj颐KúٲwՋ 8fz;Vl5mv\R?,5PC$l&N:#5]1d*PÇxE,X!FIM)>6o\4PA2H)G>OңU 'kPWkՏ{ Ʉ׆o`ȇF<)MB mPMK2ZJGVm7|tw;~hT']=".T0DƉ{P JB\BEY~W-t4]}4PYϴSd=#H'.51A^c۰絵#D+YC [2lH6A!} Rj@brJӝqӡм00͹uYv|F֭Y MIVVX[ljTb<EKR#,oG^q[F;+}%dsrgOCj,DtH98*.' bq J^b[q,?*m}WY˲+HY>b=1@>6MtN1Q?UyH"[GV=MI֗(ۡ|rM TWZ&R ޭ]֤{(VPߦ{o7[ICD(.  yg±a"π5F3&-CBf7nY' 1ԙyd)1j˙\h^~S߹&θcEo(.ׯ@~qYC]şq5J7 X,yg.k0sRw @;gd؎޶a#VlSU!Aed4^ȹMDh ܇|(mW0ѪD}S- %m<6?%V4F߶*e.vmohʓteş!9яקi/?^=d_˙N?D s4䉁B P/KQ}uk8R.w2?ǯpX x3ⶕe@_aB͖}P X 橎=Ji<3ʁgK~0U{ DbXS  b(2/e=ȓȸv$CdLP+h9Jؚ; qȩ΀Ā"kwq,S{P %0(RG[rL7./8+Id.xLmtC6%H.Ҽ+bAPM~܈Q%,4@b؎Nov]Hrd G.ȗ(4Q "lWTfd~\aȧ̐٦;ۛh++С M%.2tl%Q|8+U}ąWY3i =X&Lj(;5@<~d ViZJyP2+<+Y'*1SQ .J\ޚuPiР>E2ͨdzr$]3q5Kڳ!sר%'Po*tP|\y44G&E %K؆Y$(qq* f|I,Lh|JrcGc S2p)9:с+CTPp8m6;#ni-i v-qR`Ƴ Q]4J]blc4DT`][a҉wD% S01+ECgQ*ɦ5Mdž)PIx"h-b\;vTֵU}n]R(z/<*j}?F( 4\*-̏ (\*F @'F Gf.Y n'!7x0IX ޱ4]>\6G2WW 2/t(d\ 2q,(01Ñ*κ'b"Q̱È"ޖE*ǤҔ':8zF0@o~R=j+B 27/?46ZFϕ-P٘tjuMU:`oAd=% OVl@eFiȻuàEԉ{Pu&Ẓ =@W$j&-ZY Z$'| P1L/keyV~E`[>)QNYĒhE΁̘g222_Z !tp*5 :,{Z ;+Ƙm_|UnٺJzʀU;:eۀW(O$>,̳ODt00JZ> * Bo;t<.AgEdSԼ >\/P]Bn,k_[z #Wh5kSE7=lp7Ӭ2 Kvˤ>QeU)!zv"CՀSnkDވK.f¶i:AdQ)tc7WP$Iޯmt:t?w'ŵhf72AnX<2 GE_5 au~/zf9 {ykbGNG{||v sI`+w ]CX=f,BoJ+5&}z2 p$ThhU *fS2 #nn'ɛN)q+d'/6F֦IG׻}dãjR"lY6Dj:S hlb@nDMq8y8 B܈P/CӀF_0b"(͒q@ps 'XZ"o I%qEhk]`nYK"Ò23^5eic5NF5- srgdEU~'HQZw$ 3ӟ&B՝ W$ 7BHd:J?hHHT`Vy@ca;UEPi>IB8?ϕ' Rl&3'GvDY:\262&V$Dk?b'r)[}T_VR MAMv=L':ZLI4G\K=³ ևם".\`[m8ڔy}">l^Bpl@gqGMt`*`O,PzC>;pb糛ƈdq*=ea(`#*[w/;*LrGX1;bFPtvчXLG :}WP zx^[Elǂhΰ#~/A=@3W;sHE;pCpD{9" %nTeI(*xr/'<0V;%ҏ[sOT>y{6H)em1L4‚]:Y ? ,#+߈Au2 9էuI$_<)9h~SFw}ZjG0V/O|2IrՋ彁Bw0mꢀnxz6޿SDK}E87TL8GboEy)I̚I+9SnJ\@4G!kCR4|us,&"(&9Js%f䏇!oQ`*:ॢJ%u—`hןaHR]J(+C`61pK<.|Qo [ fO5 'wW:6Ŕ-,z9x 6%Ā ;[q[|֯]jَ.CD}4[uynP -5x!UoH=$0[`V ˹[Xd2~ٰ? [e83m% (?snRJՓ ĉ-hOEAVtyUU@Hdi["?bwnYxp^K{ ll׻ZS!mQ {$U()i(A0< K\ '32&if*ς3v)\ !t*d |XMb|Cb>U'\5:dP|d M| \ 1]q>lgz )x>gڂ!kP?5y2Qt$,2PCczyZ u3.z?&#L@dpz#?>}A~+B~Bhjjp}@`-zP^D5zᗏm>1mH2;MELWf}%Qa  ?rpXAwO U0$"ѣn2}Թjůu kQ{5!V}JY" *伹F!֜j(:bO}v'n~A3V[( P9el/ m E顢M`G >gj#zM \l$<ψ ySԜ|բ5 kB@Wg=#~,=tDSШ 0@K5 ռ*Q,M܉;甉 BAW]GpQX5dg$ D%j*'4z$>ʙC-Jybi!(`|7@[nC*meo3y*P3U-;CSyp%fC&F3/d@wKGgAS]ssQ.qJ[-bPut>ToSXrhT޺hb1ƺ1'ۏ7/Ie`r%m^W5?_2=6C;$&]Aj^no $E$A(|ܧ߀j^6[ 綬7}dsI;Mm,qNٌN`6+i=Cœ3/+:R%G MCgX2!iA"WdU~]e[FF* FGIօ+BKhR+~:eȏr;nr]{:MtAcYKMxV R:E_[`iX@ [{Z<[3W[HEZ ,?3GafB;l;xI d4ojyIbYFyTNa^ 3fZhZ<%Xmfq;KMHmYwTmª !5̬W1B aՋ *?%l\aN3DWېa !#7LG:}ˈ P|#XwLZIFBD+\2KI)XD~Uc|f[s{+yS'YA|}7*_%R&J,>ue9 axL)u0" taǻw> 6 t\ E(jHYVc9g,g8w)s~-$Thn=a)մδ@,`1Wo$ϴ_K^jYЄ8y;=I{ZS/ulQ8fWO9a|,ƙV[em%IA;r<#֔,uΘʳG^y4O@72̻(>$V8]"]TXʻ}W_{FZ2BjF@6kS`کJ"Q Qey'(lT(r#f`}>)&s[VM aю^A)f3g=?[2|-ǍswI%Js6(V@4>50YX6vH83%r%9xS.j#@K B2r?9zzሰbXٖ9lG>_6@[QiN,sG9&z =I~F5rH3.}inϠLmh?W^wL*hFcuv󇞀7%4Љzd`=ʐK =VvEgŽ]6$?~*t{tJJDY,NQKR-_{eMIX )AW^}2`o\$b]qCcd7gmGdߗpZEvxj@}X/$IhC\jZII0] ,iFQߵArۄ _ؒc $t[DRzB?;bh3omXO̎mÔliپU Ϡ#R떂!aLh4#ƿpW43c;$4 ߁ !TKRN%/GdIJoc $j4qvrTݎ$w#ۢsy°]"ussoXkߟF֜]$C?#˞z.BcG4PLdɘ r([F\}j}M s#om*` n_9߮r$rRkȍ<];Ea([Y~[w@zu;>3PTҙg9G*{/1lhoCWr˥n.q͵{^#/޼( $f8  h.XHF Ck99ՊйFKE?$b4)\k>1T+uC~ۻ-]pߝlxGp{3&hg ~NQ Cې@qĂatKNpLʉ1#2;e_8'q~1eT]D>IxCr) $YG[NېT3tEMBnm'W#01.}J$4 rtqG՜t8-V*taIb^w>#%ab4-.\ ZI;lQn58c@9 r 3I2 8wؘxj}}8Z8$ƙ(GuHE}-42BQق1_( T򪭡M״I)W 9yYNy BxavGȘ~~̱$ 'Y-v:DžF5o5+3҉XZ8w$+YGwzL@Vt Y.Yn _2mC.qȒ! 3Nn6;gT=﬽|xqxh:|pz[hIrfP:t+ǯoH1L% $`!LAuǶM L(leqƛ (?s~oxL7ּ u\ʂ~9vs{]?'!'9S=Q|1",RPe5^! mLΠB2Z͡cr#7bOǥЁ+&L*YdQ*Ow=qB[&}RrC^.H @ 45H[4qp=n䵔eNM`G+r}. n3[nFMA H9Ò磪} 3x! QQ&Q|R$}e2ٷ'Rz'AD1Me͋KJ:^RއJ F;# |}x|7ڄ:뉊c3|=ITM̘ŜZeM( Mźlj%X,Y.?*8sxgޒEs|x\^\/ 4e{H}@K>#)-ʟyb7R>CDAҀ|:}@ k-P_\eT뤡V!* =(A BRPd"8AaP$]Jl2 ЖBܟ>{^B]ℬ2j{>a;u;4?XQN]V;lyHfi K-FJڂrۘ2Хqˡ~OJ0,Ѩ{uƎ{H}ǘS:F}lG:#PGq]j$olPJTD`튫[tBB_0L远Z\e˱gtx$ aT_%oPNj05pqJbTr&qnQW}$4xşޛ|l_9b?});[^B٘N_ܰIxVU&~!Pu a<5o_QҥZ?U$3[]> UXܳ4;eAdKuc2źp_We7}J, "9ޠK ??G~!>Oe D",f{v0#vsD"?WآE.=Kߧ\Z<4Y\tqpQR;te #8_ÂfS=_8*y>5:bUAr ǥj(qɎE{}{< h8BWIf^͏)m-NcSGI^t$g'-Ay䥫/5v"]q]r:#u}H]im@b@ ֗@: UG\.j,5`D*!U$p[m'se_ڃ5.އ9A(T,pmjXw2lj܇(YZh$r&{SK'4sY}HI>dʿOG({l&v0/ow,aL$c5Rzޡ=d( UT T,m; tM߈xD^<K1yS0Kb-;MaHd>yFGgK)5sɃr?5B862e {<2YZj@O+lkɜT!bYBk&[ZFuvmS*T-!.zEWxqie.ߴcAa:ZIDaPMEb R=H8F2\|P-[~=Y|"Y%$:_%.˩鄲y-Ij_w!mgBIW֍3|5X"MD 'P)dEVT|U]L_'CHp&+y"|S','/ ?Ej- !Үl2@PmI3`z̛ s֐JÀicD5 z_h܀;^3@?gd5 ,Fc!q$83ToPL;b_7$QWԎiȋ}ذTY8^_BAd7SA#㿣 (FoŪ55q}0 ;QT!+8 b#6ZVLAxDgƅΙO Y >%Kln@|VEDKk˙]ZfJUZ-&Q:FeJ:.brS" H`5X_zI1&@bm$Jd鼞A"9B7?6l6uO (\ʈm3H:lb=(.Rʢr>w=I1hg3؊>H țڬ1*G)̎m"ՋjH"Suͨaj@?Yd[ToYi(Dy{a)W'I]{9TJZ/ *Q\nhTyl/z Tj/L@qk@B@v q|5++^l[q냫* :K*G ! qBjI\f{ljǢa(d);F|''jZ CD"2s޼ O^VOץCf@}\f]wyD\#'#FGU\c!ƕjhZ=*uvFTAԣ̨*%%Ӓ)8i'ŮUQGG`Ң_rm*!s;bz:.<9%5M[H?~9bt7깇O]e ,Nl cѓuyەj{%WF!]TF[-g (|`KO+ Bg}oɓ1ٛkE0o˄ZwN- Y X0ЊRuaa(&ho?[U!y-}҅Y 瓳=i eVC,˔ rᥖ\a+V4/}1"vt=5Y!%dW| u*(58(2nK{S7y^ϗ<~ۈݷ%&6Be㴘A= u-L _D8\JߤN23FFHo]yD *k80$$'yg.94Jg:p0 WNuKmz8uP\T#륐!(Ҕz'w-벙n Xy`25)PLH&tʊ/6AU~8whWyb W*<"QԱR,#)/0^klo o'0G[2'mzϻ} Z)6l jpbxSnj:_=L5Id *zW2F볟=ٷn"ڢ;#e<ߟȵғ.[-~R0@Z#iEĹemQ?.4ӐʁyWo8YIK:?7Gpm5o(Xs:Z }eqFO=3<zulIJUBĊ>Θr+C8/|JD#{oD%kuG{.4 *9ĺhGv `VeGq6v28j+No|W#@Qk(g@@L0Q1'}9/dKr*EpKbv%i0jqt9Pf1Ҵ qDqX"rݰYް܇MAηeQq)"GMKPR5ƀtׂ}>8"\Ձbdߙ?n0d2$]vvTnC}7I+F6g1ݟ9dD R,t0-7 Ѧ9̀~MT/+ׁNe-nPz1z8$GLM`l&&G#Y@jMQd @7Ή1HŸqA]sF7hYvT*ƣۓ{$7ɛ{R(~;nѡQ#tzޱyr/ eI|-|CdDvwݼ%w*}!r( {WCG ;<^_&}q/N"M4d)4pVUjhsP|x.o'8HP!=dn2'=aqLGORgl,mq ޽r\5BA9ʁ[)Vdm=ΜqBR f J NVO<"'UAH$~cfer9LSb*1|RwFT@Y{K1SA{ cߕt9& WgTmQX{.{4v\e,]=ZHanUP y]'oLH*T82{,%'k;íTH &KXdjHJm+=|"u-s9̵8QpUCקX R1Oe M)X"^N+c՞%6ZtgFDꈬCHf|z#b B4:ADZg2ՠڰ.3G$G >l:kq|d#go;~#gU؉9KHkz +YqNY&":BMN7b -]]6Kbirͬψk=U{1(Q"oL ڦخEl pĨ}TPRZ F^zUPHޠEKеG*C~-\+3^ue$m-r-|̫86>*l 5b]S6Ј4]:U6 VvnQ~R4Xk>ޣ+$>歘?x<$NI{(_'XlѥIyP"Y2O~NrQ8 R]D?[kvs^۔*d8NzȲTIL3OGąz1_# @W$9ȮD7 ~ V4cߘ|o,i4\4RLF $B-Jl9Uo(|n,r!.(P* '^Rˀ%[ۂ-j!mPUܦLdPuSieC(Exccc\>j>oMŨZ&Ej<|!J(eO-zk" J SIG:eoN呿~#;9-QR1' 8IE.!8MSjo@T:=ǹ[6~L1,il[˿Whq-$cD@WB˪JO4cکMiD^{g5;몮VzBiԂن ԟPDzG X<߈mW%"reO aۻUiw:+ŌXq)4t>̣뽩WS:nT Hȍ8ϩG$}qWz|u:$ Ow&]JeѼ*Uwq_i;T(gfW<"N8aho?(Bc/U| %~f3pDy06Ee|Nu4J"yY"Y,[њm48mW2hv+ُ~LXf9#UT ЕysAՠwjʹP?{ɶL]s .[;ƖP(RMS&cAeتe fY'#2kg8G"l"TЖjkB RAf3{%& ^z)Ϡl%u ZؾJ5M'EP'F4!|,ўYrge4CY| Hb2+<#"ݗRmP)gB+TP.E'$gmAP+@v?)Hȍ'0S6;xÝ҆|("WүݴH(joNbo -2]KPn'@,ZRÂ`;{_Nnad>p&w>#ƾnQw f?.X?p4ߙ #J$P0&ai멌q0W#%P,qQL(\7(H,ԄG9!x|fkHeB %jr%_|!*1kGǍ 3F7ju>n)yG`*KTxjս]Y!kAgC+g NV7)- MI74AmpNݪNBiM&)b7{R$SύDԷ]ǻv؎־><"~)rwjl?sx9I$Ayg96~2y;7{yŀ#!̋Q +NٮFEss55jEQf1Ka @D ^N51;B) rt=M;!t{ȩvsHWz:G$j!mDVCq\XB~½G*d% ?pCqF/ 2 FP 8ړZ1hd4uIu줫Kv݄; 5T+lСJvP_0H[yZ-bYbӲBiJsY+t%(SYTay/ g&Oa׌Wz傇)!R,6z'ZQ|w!'ؽAH~[eĀĀ׆t ٹ[FLҁ F*lĚ+BX ,G"Ewy4: BMB5"հmiUlL9RuMzq@wQ)jF2d1YkU{JgsV n:AԸwD0iC2YXYQ᧺U4X-I"{_] 5G- e̞֧&[`Wl`lԢ;%9$&hb}Zqjq]o/jvAO;cy In#Xx}nגXƉnQyՙ-3/W-ϚP8Z!a_Z?1 sI ʷψ`]}sԎ3omh+efܐ{ *OSY0A̘ڷ4]BX,nR)a(~={%XTƼMF]S/2NkXc/5aH$W]s˶.?nj2=T2=@ ν EnZ8KMRQ64Ycݨ)'ۀuq)42KxDp#Nlp"h<2ɤ?_ڍV^#z*ՈR(Ir5* 23Q#]z"@WvT0;sXngxHaLl1 71瓖˃ ˒+14(9onW/~jj{B#NZiEeL^-'Gx, ϖ8a>G:5#W e[烲lix;${| 15GGLvT=?'|#<"Q^Weà6zdV+]]~J{TʧdW{ށs~x#v !vdCF(&9bT+G3Uj*f҈!}coUF3WZ= 瑙$lDU$RG4{樆7֊2f.3cõGXVPK9+sW!{#KOI";G-_8>Ts4a ɦNӊۆ)Gm4c-s>C .KdvB&CՙuUG\3UR 'V4k$9YG3JXD,J5 [zV1?lFjC^Q<}(zyh '(Β'xv^?(BRKq{< l\@FV IÕcc& 9v)~dS?*;v®ȬSc6As#:i]MË<$NDJvЅSЙNH }NCjijK26xDƄ!FL-e$y%W~QDC1tW #&CdY&eJ7j[?--GDL 5HTa J!a^8o.DrK *_֕/O%%>[ t8 1\,K ) Cߘ5 X] 쩶KIɦSRruQ0byrI5yə Q'R5֕9R? P_ dԊ1@~Ъzd-!D8?+vuBYn3~M}Zw5eaO_l;dSrN$SsٸCYT_ɼ{RWfA4#ɳ +g>+~R=d3=_I֊Ǵ>?DiGsG6p[(Tm `kGeʖтױ )WdQ||D9'yCFiJی )Yi1&9J*@q*7=|fGeNI:+B}0Uvm D {,"о[Q}D썺YaXbhr`pq-_F3@i@"~ c<~*`%QE:uԆ2HT84yH 10ϦN}41Q2=3xHA0 a'cvB'O{Zu>YG!TSpoXBzYe7諒DR2efB?Cit؀n" x\hcġ*)" Gtھ.\:QqEgJ+7P16 ck\W,"VDEG>)!S-nst%Y(B|雵8ꯪ]ºD0̲{/%Tc(9'(AA)0aq7Dm)m8!vUQ[Vۻdf`K$rZIz!E+U:kNĿ%P>t㤜6Gb/)LHV%r[dwbwm0 @9\[Zt>ae:S򣏘`#w%HAVSڦk$NjvE9/603wҦ\i`!n+ XyMz.^Jw]J[~?Ef}BYiK@Aǫɺ7 &Hx=5 Kf}0 1ZR Km<U !e'}gsD#O&d[3`B@csbJBC ޗN#ℶ0R#ҝs6JM\o?#r3(n7B#A-= CL9nf|Pw/ёVZ j"=9_Gďv#mcڥ-ችݴ׷*P?h8;Hm#xlp]Qi wՀw~b1?| S)8W-͜Ni-c Z]˯,vӦv4aXze6?7cA 6rPڮ->* =a 4Lf:kFlj]kt [#NRQ@54b6uShBHDSIe7AܭRL@]:T6[&ݠ8~ۖS/(m$|x~X@C8CP2+S239г>rޔ;'BƧ,{B*sȄ(<[{\aY61gdm}C^%ƀcga7# I2Ƅ FAH*r@Y1 yR5 {㑪3"ұP1xX&>&PA`l+;̶ WT;WM/)A][TFz| |U ] W҄!.CzCVȩgIz'a=fYg\{ܹ?# X4ؾ^},H$@vW#$Xh4BH)qJEFhkt2ZH%wm}2SAZ@>-v8m{?$ $tLV|z}ʥdbw3F7e{s/sGծs%P"eD ZD'I(v̵RѤ˪H1tHKZG۾aMR eq0xB֙df%SfNl65L/jR39oĹ**$tY\ixejM= 4Y~b>3RG@ޭh}Jjϊ 3XI0Vx h9!|3>2Uƙ2Tk4Iwu" "'єF-(TnsSxzDm*#EUG4ΝVkb'&6f]jY*itW6T$nt?ަMrP8(+<WL^ktz(LbN&< k( ZCEP7 W,V '(PEޠwjZ6D>tT(}Q+ogF@נ|uCp^p C*[ͧAq-EAFnOJ?U(+KĢ,̆Z:VDm6 "U. 1_G+QJ L0`_+\Sq] p%1O)z 9$q"xXP|ӲzG$jM})Ergt FT%:u¶܂2?:ު$(WWVhOZFjDŽ;d(m z|WY4)~ym5NyHFޛ!=}:,o:?$;|,R۱v W6/>JTm6H=%i([,Ykђ{V [3U !*wQ-Ȭ9B߻u),BEۣO RrMVDJYQ~mkH+nd<"Q4lF@\g $n4u7X_){v $ۮ0dڈ)N.5CwQtYϻCC^ ɵ9bΰ&xJ}Y᱙3?qZҡ-JNـE]ہ2xdQ 3WEG45&׈[|MsRv(ܦVil՚G`6.G7]%>Qf[Buѣsʋr4ch~ʼ IܣV[ЛKBT Q;% m" 1NlB;ן8!}o7ߖ]ZplJ&AݻpʏO,oΦRj`G"kkP٩ף"x=X<aĺozBt!b#2\zQ|m8[ |HD>HS I2sJ JRC4 &Yjtk].<:P]iycQQ PQSJ\,[ S{]yXx `GPi_PDe L|3"=R@3țBH4G>:=зdY1 =.c+q@LN`LN,٫E6HXIW'@ v[R_{-UuPr!oDE[<+=FEbTdD7C^2DmrUU{&3!P=y7;ڊw \<~nUs0TN~Y4nܭ/BNA)Z<".RЄL/[wLۂ Xh5y訕M6ru&M*ׇۣ$!GȰBkwt@ ozF@}29I*X; gA.ˠ-7hKMdkP[djy]RtRS|GsI5 1YNs ףSn10O4`uC֩>j?Y86 1\]vM}:%nO!yN&jJ6E?^#fu>&kȄ~-̢Pe1ϐGa "Y=aM8%|Uޕ> >c.\gNżs(l(^t =f&R="|wV R@/4KŌmI`6o_ _LjrM Ѹ3Qq̑µ%Z-@ިR*y@Ћ\$.rFɈPhKט3zB<"QMʼnU}y?U`:je+{{w(u_(A#P^z}EW1XX!:;9Ko/cCY=QUڼ%L(ڎ@ 009ue8K\ӳTv0zlQXu(?b}ʍ@bc0}McuCm,$(n$^!i=%L Ug?Z/A62e[V?ή?44闶}mo}MEn=cz.]V^i @]lz(] h vq2߈Nj27b)x5_V٥ 2&f1bV.ɕBٳ?sA"İm[/PHe*lQ<J^UGC2M,ţA0;@‰Pd#ŕW,IڄLY|1ttW7yfumD9sQ#ΰ*'P( S/R9H>|ߤ$`+}iXwސ]F$'ND0VU zx\)[KpO/]T #w#9c%i^\ z?d"6ٗ@_>;u/2oLDM]ًM4MB1,]!xDY>XO=2 z Y=f6٧yDU@eqD='e5 i2Byan>٪L0 GxFkUC۵=l; lIaxF@d b1 !3T dѳW}$U{lC흏"ߺEI_j$yE.r]1)a@Kb?/ӃM !^Ҟ^nSVP?g4& oQH>6yHzędXUkKƭ+?ȒCk]4ZtC=T;gDTq 'ʃیPw%Op&U(k: >ܶC/N;vB N'*m͓klj5`#%k0fd̏sH\ms1]IKnWml 8am񶃁';~PDt Rʭ+1$5(M/Xz+] (."=4:bT[D֦) /Y_~jJ Rs[þhsBu(P M*8cyMȓN@'#W?0YQL=b>s*PAw{F v󪒎~?AϠA }Jΰ/cqͫn*e:@BP.%:WFjEbKhfݶ}h`%F1٬|]̮@"7e{23pKuǂ-KF߾[iL^33ުYg\P7s8J<m@R*-oxbGi_[hxܫFr P:m;QLV^1J2EY'_(j@^˦|{@zbYXkg/}Po"R9y S8\|!zZ'2O5:QIR j1,P>;~'Q׼Tw.^ȫڒ{)UF!ƈ? G֯ I,qF% l=mBsg6 H#|nڦT)b$YQ=l̏M8yuts$~EX@ws)QKS*R+eaoȯI'ɾ !r. E4qR6 C4? U;H9sk%7R`ݭUo5P8Vt[>:zkG^tT9+p)gmQ Ԏ^R|_iEР7j zPP`[韂FO=]:WɶD5 tj;Eٟڻ;<CƔ \6O'ݎQ0M^pMV;lGB8GK, 1 ҃yyG2\sj$#.2C` ':Z^ &i~ `J=۠?KH5hޅGWbL8J*d\"iY (|0CY oRHFNCPX}E4io#ܜjAg:P@"qR(9wI 0OBDd2s =HbX!#=v#|C#;:*}ETRR ɉ2!cOWz6;@/B:6 {Zy!U6l+#KÀӍɷ2JlxdM@J@Fۇt& u ."tkAk![UuQgKq|2#깱Ϙҝ p5 o_ @Kތ'|j{5N!IK=X'E&lE(Tڧ,lx'g DN\C~02i{Gt}_(!Oqlon{oQ΂7l@:-H)Ɋr7#tGq-=Z \;B"֩Zlp@@)^{8U8bc>[#?)xa˯K#5C.BgCDEC_ܧIFT"CmO֐q(` FJՕbA68K9^&o cv1v-#C$+豎 -U}SYZZde,v]N|UU~}yDJ:!/2 75GPoFëbQ9U)tZ)GPe~-M\+0+|oR9QO  "P Wl\Pm#r.A߳$w5SRm{5*P^f$5\Z>%Q!`&fR#@f4)RHgwdE}ʂ8yapdI_/Y%'*Y!(7gJ@|%JG9[h~ar'LzU ZwǓz?,-_j9$bqFR&<.{ӌj 870YƪD*mAhQJaVQHSLJٴѢqt*5 LCm-m ‚.Րh[^E y琳̌EŠ.uBZ*:dԆMU2?FLNJbYJ`,VnuFɌm=%WjjAdҦg_90EϠiBǚOG"+eYN"yɹF=8JTɎ=<7[/X'Z@6v$MS A[%$M] ]#ǐ՜6-Ś@'7yZ2?Ҥ?cNH8uSެB5~lZ虥ˍP ]ҳ6\y;}ĠN)9E8h{ d胮dN :!@۩G;/L; iٓy".8e>QYYCNMhA)v%рs,,C-ڄ;NnEm}t>P*zd .a d k+1Srz=~#![ٹY.fzoFWU>/"4 Kާ#o{Ž3&/r:[e͐PvR3JFÕZW3H\zI\& X1DoI8uhi[6m]|8ZԠ "@\Ʈؠ tbA_*#*/KT+inQksŠR&@&bH~;\5 F|Ng7TvX5/If'DPq! ?%P Li2ff~hp#6eR+n~c'ڤ9C&3ys&D~lAҟY8 4,1Qf⬘u8<"N먤Q;;5oASD VcCX^pys+/5ާ:I+Y5}!)R1XԳ-m qe+ڠ@Jӟ6|o+Pު0CwԺVR}DLD JAY>~ӨM>1Sm򖍥]zgZL3Bof)vL/`D4Cwſ4{N=JQ^Xߴ8|]D;e!nϐk\L} dcBz zi@'[$V SlQ,(ldP/8\~;<"QSrGsd%.V\:݊ܨnn^>ث  _l10h:~瞓 ja]igwI9#fؽ7 7^ }`B4񧷟O6@LcV2 g2Iqͤzo^֡%&ےxt%1 Q@Ho;Jb3^k_>q|mIPJNa^učxFzɪ4mZ Ps7P>ީ^)rݥAZ0؇A sGs'r` H=Bd`QcnOI<4QkUݙFuU`3 `R#BZ=M㌛?[ȫДJ;,{c,ϜT/^l;|%SChz2dnxG¦Fe]zj7^N oL:(*Ut;6{%tDtG ,i<<"Q]ۚ}xZ!4P'IfdS8cs8]j8ؚbb(zQ% % pa^a/RYPt Y1g:OCRd+avij7H]NôOնmYx%=G-eSsf$lzgGGԇJ:?hhmJ}DTK-HcyI7}` /kɔ0K֠yZm ;]`ŧy 7~$SuVNJ\%H.߃)xZ@S9Gut+M+Gܙt)?/wENs#:CzCQZ넰EGsǓzp&{}-4;5H,'wgC "nw ['QٖH3`przFIbwQ^͠$˳>e/K ^'uP 3zB/ Qd3ÛK=`]~HLBi9"oTـHpyV> U{tG̜4i: dYhB!@2 ޯdq )gBMeGn-Յf$5}W]2Y2gB۫pT?V$gkc3u^zӶa )%/CQT%(X4/yA~9aBd{7=6 ư fHE1FVraݿN.YҳAN{v|G,켥;Sg2Q27'ќgvI\2L[QˍҷkF"H.+Z4Nޒ,< \jg.m5 XN@˝1-#U5b-U(~I)E =2Mh{D.`$n8 ݵt]%u@o:=&66z_&,JB#VOΏ$5?J=S4hQY`*m{BbwG@cǫ +R-;&ϐ:Ehl~ѐ?.ZZ4q>rfs0ބbPg^(N7\+%Z WGzV1)-ͷZ7zҔI>gZ wi0Q;E%1/ja $4ln31 }cS-ԺWsLK ?cAcat&-_9T=p6 `);=h53Uvp|;Uʂqu55ׯ h)mG&g OˡࢋB!%3U~ԒW@]UJ$w~/u{(%Zl R|ܗ y+Z'tj{rVolI$GszYw4xHB:}R^y!🸟@8bLO7B'jIE5T@BNM|)Cdby^uoy8 `⓶GTܾ Gh}u8V|-uP*K7q! {BVv C &}_.L`>F:'K~JUa@FRMUgBJJoV\@29^9@]Q屄yKT5=aO.Ft΀ vkzKUw8+&R7rx )J9β[Geqޥb63v%Yq1XuțO59F1~wPʭоy%IKb!j6z$| gl%]K0信z#RH߿<6 ^*@ TO&ML遉T-f[GJGR~=vUYI)n@iɅЛlt6+1B_[Q>@Bߦq׬N,@r"NN۶K&>u2k`iU'tٓ fe)~j*(*Uv $p.q>ˡ.-t3;1/ }ZlB|4t&QgVe[TeG;K"lF*X('(L;ƚԿ,k>)ot^k!gvֿ"WɜIqRqP!9IGbIˏDrDЧ>ݻͷ {JS7uri^qkG-&@iYs쌵ob*N 6J%[;=:Dzt:擨8Ur/k/7t^#ԅҔi/`>tǀ:C?lt)' -@vow(N L]wB?/M'RSSV`2>JGœުUf2qBpDew.՛ʉ}̡ %œ J;83b %)EZKCw-H_5(5EDQx Yf1$,u Ȼ.]a~$-d/q\-HJN5Q{T3dpHrfUg$܍CTiXZaL eૠ`ѿ3, ӍrW_>#X -/yq̻/j{/{fkAcKF+/T {'xyl/ckۦQ)S"_Pe;-,g BF+AA˲)fӯzA3kҶkTّNҢJ_&6j}T1pѝ?:3wHa9B:eSV(/JPiw9qŒdk[.[]`sXl픛y@#}o NZN)WٝyD@5f 0$˖v>z)aP zJԩs'geϑ 949a'*H,10.B5LI2 oaHNaQx #m[HyBai8iLubhe!V"*6fY*^CĕTj09e`gZ 9TrζSk~C"7BBf۞IV x^{z ͯZ]P]?bc]"OS갠 %ߍτ,,:%*HtΕ@?ե}Hڐ-l,;z2NRޟ*MkAC7x]† L@<s*F`l%xt PcG2QjW(`vg!tڥ%סT,PupD=szAECi!xUjSh>B@T hS<K7Bz x^3:1PPi@7vQbnj#R1$;㤮-Pw9$q2({[A]Mw*r ,(D|Y&d-N(8W,]xk~*YFwT~Jn`4vEPw[_B> 1vkfeވD4i*f Ŷֶ˚& # &юCe,E5@AZsm<"Nn*^4k YgQm kI=?ŠW1s[cGE*^RzE{jJ)kx!Y*JS !,iԩ^Zgڟ?%PpӔ#_Rp3­>lە`Vt~=GKRW|Qw0Oe"x ܡHv ֖:/Ā>T?25CTm H]WWn2{G},Tߝ<=yD\>G&&FJI?A=@wu zЀv"No7(䤄a*~tZS#u~(< Ӛ0CI( :0gnp>gHUvAxQDn{b:I;qbo6=Zlvm!W<`>8;X,TZv+Mw]9FԌ9[LW:]{{D^*\JTn$i4,5Qkƻa3v (Dtp; >NJsƽϐ\< h7]9/O 9)n~)jeܣ H,q{sH!Ֆz]5Yhz~# M>ŤhjNOsaq$9: Ck=# nطRyԆ%p]RafA6_uXi돮ӑoO)xO`縕z+]`GUOG珞$~wY^D$!3AFmh(dE0N/(΃ }V+YM3Go_7zt:7[IQ)ܟ;"-^J_,Fh&@qͅ-vR̵=qxՎ[quÿ0 `JҼ2.4i63ԉB9Ej*Gh@囋H{OL4Mz0,"^~6u4m3_.O]+r>겵ЩN9]3(e2Ru:Vz5O0>3doPIv$3uy& ĕ>/^s)wNc7 H], \*"oK:t\FKlU*,Q4s}xGĽ=d3kdǡ8[908ӄgDs}4e7}CpωIAP Y?utNIs,w}QO>ݔ5StW#…2(nг =z&xD0ݸE@ٞY),j{c깄uFC zb6}XGĵs?GY-Z#}K6 ݰ/Z5$ }yĜ>O1$Ym5k|VQ*@^4G譈  S=OG$*;1& .-@3PyfCU);-#lqyO[}Vyj+J,`M}#~Z3fmqɠh"mRYw!qH Ahrb1_Zz6;-qBp4菷7kzMgZch?š椀>ky|٪Ch] s4 U麺HlOa8r,)SevsikyQH-TJQDF+( ·g Z\76zSOgzo}UylY) `BL"x NJrͬ gd{Knw"? ⮰_ W\z%%?(yZwPt.VP*\Y>pݝfoÀjt/&uHPG;6[VN [_#7) BZR!V͑c9^~pQ)/<fĎP83:Z}c rBz$UYcW i|/A~[; =JZ/Dfj$( 6既hrqi:y#~ HTcKjQA^XqK(xeT@w%G6t(bЯ)SaXx=,>Gz; {_.eGAVujx9w:-~tkk+~nziwyNgz^j$cA UgWn]JRM;P?0=²AЮJV}}4 7D7  MbT͍cU\ yj_ٯqB|?)sڞ AngO6>@ zS{WhzG9}Tq`rrbEcE@=TQNÈN8!qQ*%`Sc3UցI{fc${T9D'4[.s&P#T,^tsseIo%VKZW5s g1)VY94[2!Xvps6= 8T''MTzIYL~dV\:6'k(Qvc`>jEȼb[, "9zn4;Au?-@| Noh-WZaԓeg8_\NU@^\*H~tOEn#1̀ˀ{h{؃=Ax;_ElHsBGk=42StU:OM 1}Jb,no[/,C78{]-u+Jl۪romXج+.ݤ레`~KGijDyT8jjUL§⏓Zk]1\ׇG$ 0*M?憒J{ ;v0e8=zi9ڲvq *V^ߒ,(q8_׆TM?%!^,wKOeCph<=,Tq q`d%rw -URzT*hWuݲێZu,,=KV J]Ѯdwƒh5 !XJ8JWgJN`,Ny|؋P.o~5rpAb.4ΗyU%#$KrP}^y%>n*6$ VeKҾ'^qBh[n Ke7着:eeRB~FXu+WqTlIղy]`c;Exomv)?7-F=]C/<㗱? %5"}#_x-콵K K Qc1I֏!K|hmZʩIHvb[?q1b-^,Y&5N Q6Kѷ€&Vu?*O/]MM6$0^ԁ!+$gA^DՆU!t$WdFLqYj gA{O'v~j@IIgJrtj|ǧ*ePDB_h7(^޳A*| ,4`NOc={ RВ]fY$W]TV" >iS^GsiKSOAsǃjz9R=a\k oeCtR\WvqC ~SDu}Q<ےGuR ymKB?A$FéV#EYhr_&ZsFGU8[otp8Zw\8!7H{+.l1\DaJjn,nxT>cf,~Qf3k@ e!% gr@zZ&Pz&CY6)s|dI.Awc29TIG$=[E( P~f#_..hߛT,Qs@/GIK@.cezj#>)}g!l/8@Ql^@w#R26oNTF~]M!N`zv<^^2؂!rq:gtPVt$%Y4(iZ`'yzWʊU􇻧rNrvxVbD93{9E{%`7(jeJZl&AH2c@Q$*YcISǢgu0\lj@ ;QֱˆCA(06#4`}z/P=n'RZ yծ1Xޜ-(r` e GDP|Y30a(ÝO4-qS Ԡtf}֜>.kFcWKsȗC15<q kPEȃ9;$wmPE(Ϊi2zm{ԩ I.L|@߳a($NwukmO2~TG 9դ*G;]dYb!Xlz_& z6UB;EԶΡ hue)Rg-;+AyId\k&CjD׼r"UrP[TqYwҵPdÑZ}tYB)H?^X,I iEH=SQNae}I][#e$ayVO`Gd|]-F 3BDr+(|XZlU [\U g9sB; >ÜA;&Ig0=ul?VPn,%+;DXzF*lDr#s-o]ɇUuKFЋa>n!%T\^@; !Ѡuyy$3Imjd@#i'4@{}*|ȌxteYaP >h VsN ,d@7Ǖ]RKũi)#.P>pٞ|Tq((EWD%)qˈDKK= EeϙBn@AWxTwMRA( }\,C[_2:-m$͏=gK.CZTIxRQJ[^黀n,jW#rBIZ_R{ޚ[-鼋HJ;ReLKlKit  h;m Űjn)nV{{Lx]b:~{{Y>7$5gSxp*ZD,.`K)Sl^ْG>fWx2ؒf-2/[0|+~ C,#eeΊe~RjɁf12W @L `$.rf;B(9蔙 EHԱl)$ĨrI!GyllVUHTe+"|bz;R)%ecd?1jc'w%xbFG'j@-JfcXoX6II[U"򔙾wkUkgOtCQsο]FeE8(guzK>Q3PUtnV?Ŝ%G$;V->Q6S +]ϨW#.YlO=` Rad1= {' @ 3$L*4U (NJ,J sT#Ɛ7[TZt8[*oSLTHfƓk.ҕ딂"Itti6GQ ) I!<8ҕr.wLW"# +=UN>)/)1=w!IJa}{,Je9aoz\TbU3&՛P5$*E4MG]=rPS{y'{ZW̭pp`J{h(yaQ̓<Od:OVWE+og5wK# ~a,%g j,Qqـ^  W(-;JH #*kT^I *t~X"Р]rcxǁ(@h~g8y m@]wHG'P_}^*N eQC2Ia*mn9d Nq(1]kme1 ZIo̍ySAC%fJXo.SU9H ZRAo%aF6ɲ[d[PaQI5[c7iN'ENUuj(T n S\p#x,]a3:32{ƣ&x&|>_pC%,EƦ}~\sPO3zQQb%N%pzT/BT)@^SZt\1Iͮ DEՔ,5bs{s$9V;Qv@z{fyP %oFQigҥRu,e׺CPAXڕ٤i!Wdit0b*šK&*R譶߹{Ob>9[VBʈV|ׄ[KZH}@fV{aAo*8\-T{6 ~ I,8C^|/3xE$q'l8A5LXiܜfbddbp@tHzǠŎŝs;^}1궝#5Li9[YRhqDJ|W;Y w,_x3\W#8=erF{{KLB=R@=eOvr!rXtN"Z-vQyc3[ʶ^q@'|1hwӃQ9uhF.&ò~,ŻxtY x+EцF{N7.lEqG{β]tBnW[d株hY)V:DxNq[sTYy#JƠG)Ct :>#aVv(̔ÍfDٿ)dQ J#u0J<-F+&ԥ!(lgC YYU>ˣ%`3Z2]3X>j9ut>`^ð5]l*"I'R@]]qEB}ї^A&,'(7͐B.T#~#^]}Q)I9QC dLƩO^/K\룧kg.0[@3)mo2ZOϭMNJwoeTP/*|C ӂ;lg0~bIȐCĶ"D|Q@Yěa@u*@ڽH% jO"'\5SrYqjNڳՈtFf O;d:, 3`D},K!a#L,krcg zMpev3]@eF_iEj#*qyg۷0-'Mer\#xYoh|b/7Q. \]k5 *z7,I)؂'jH)YiuGj--"VEUYe-~Ĥ 0O~ 0A 'eɫIܦ|'WpUO5OvTֲCw˲?6u?MZj{R몤( ]s% ؏4bXܜoɟ8[~d;gq3]b;ԯq6כ7cdDVF @^r:9)[^eA NtUd(zH&fž%v/cy<"QSgkW_$NY8GW6Y e:z3B;4fQ٢O>hŦ t)"JH핯IDKCqB$^#@BJ.f"R{ B<x^z׵>"~M#˳_Y+JW =Rqqs)`F ['Ng=M {gz4`Vn.? bE Ż)}7 Q9)9Yh撃TZ9R-ܻd#1GẢuq,}S;[W^MP>z@4,-ٝq;[i1Lh џt)؛/5}@KtS${XnG$z)(󣦌ܛe)̲I}dgػT<%]梯vZᅋɼUt+u]lj3 ^7SF01&Tqڭ r[ۇrG {TM28UECBPkZyUX\w7I='Q h`tp뱨w} Aĭֻd!҅]h1VARlSOʉh('fDPwy+?ҙkr c)o K6Xĩ}* En UIuIPGg("P[Pu"sR껙2M9> }JK4^(~WyH\(B1a6.J~;}*#LޕX/gWݼYH+kOHY8QFDO.[Ui ^UB](w湒`ly2:iM q 1n (j.ح+Y7jNGh5V m6tc*d^ ިOql5$)չ(E %Gπ. @(BCswX!.Fc{ҕ1PT[xM~jKzM'4n q)Ts3VT?{Qjm `0NI;A'A~+_'@,*~%0ݕG$G'+Ndq[2X1,a&HOym:0v|5o3onGN$}swr44& 9`KA xڰ;bt4M|2MF.k ^!RH딈cyOXGK0>.=䬃U# >rUiQh"^ PqE$22 PH=ri:OnXЊ5zI-+swm@Cj /Jɵ׼ox }@J^dR:~b%Չ74$V>ccض]*G,0-9?j7/mQ-d(2K`"7--MʁGD4Ġ_".{3Zp{JPvӶQ-R8DuBLO0InS:rkHG>_ds՝7U@P-[ mhlU nP nJPp0n.#jb{t{WQmE[3(ۺPEg%ZZKתT(Fu&_TM+Q#Mw ЃfI  ~;jtgdpj̒0"O2K|5njsQp-}򪆝Qڀ7(rC.F*G^"zTf,j+w4HO'hQmPӹ l:/굻/EA"v|De*McrLb@pQkO E$ !ڟL)-oVEb.*l9n_7tqAgBIM}@#9 oq4E'e$_&V^oФ uqWyK$YcOWiGԀ_)c vKم!t.(zn gzݽIc!=$6,J%2In, mzđGoMy&V>Cp`U#KM >F2lvCFJZoVg[5R©kFQj@9}疅gJ7Wj@n: z3#YYFQyr~=3JNH^ޤJ7*9zOXg)u$ j[2MpnAcim V7*#F36tZ0.30vTf,U$BXA>?+϶E]BPp,U(ǣ@S @PUvB^PG_)jlQ˞b,e/*Qto̲2b>]|]{{ !/:{]54@n,(SfU6ը2#?Ct{Z[3:6ĵmFccէv:oW$k, HIF8dn\G 7&ydt4A&d!]@0uJcϢ!JR@b-kH]E]&ejt|98fN1Y#vH?$eX$Xl=*g`RԢk% x?Jd?.HYbS&69,y?~T!#cf i뻝~SH+Em*ˢx˯ m~wzQK@BlK j lQVR#@';mzX屫*VOb7Jr - 7YA$slu׭xDpkjI]3Sp? IyZĶ3yD R1TeJ EbF03ޝjʆ9IjSsR)S,G.N͹"1#yS)Q[asR@-WJO,YlP@3UbD9MS&o=A">=qg 38&t/xUpHժ9oxwfr򝣾O>7ɥ4unFOw\dy C x+G;q<*V:P$eP*p;QkE# >([(!Mi-8zg?#guab.ttgwؽA#ir]j7m"H`߷\2!_ wّGkG.gITKA>em9fyghe)SzΒN l=<]S9(P29ܒze@NS~O/:c#@w=)$ǁI6+#! r](s̿ Yr"}¶S#RNQcNuudG{~Yjn#RQXA/@΋=uu#|Hx i~[enTjae7C2^9f?<Ơ*jG?CE9g\wKeݜ#.:jZG2_\j3hnIR~BkưXW~e1FD15nMv G@cSے妳.oszY&LhvEv'В"}U/&1z@+ҔK?Qҵ]7#gf$sq 54v^{Rvs/Eͬ23Y{* ky*@P 3 #a%}J]cmmDY/a#˅^GM$imQ&8:ƀ_Z3x?kq(z3EC1\+z)eO7H?aM. ;,-# &R,@'R6<$.S; ZrTs ,uݦ7B+it<#+#FO׀2 |ភQ7 _#eBF[$ycA^٧8M=l\c6#5@ lh{-փFt(8h~_<"N0q6K[a5@66LPGUdɔD}Wbi)٪{u5TD] [xHJdS0uX PR Nidolt]|JTJ< JuUbiʨb>b@8F+[l[lז=Jw'3Oe!ޮ֢_~1 D?`jkSSMZM<"NQ A-ǭtY. aH/ɩJ'Py"!o6Uޔk} 2>1i{;eupvDc´GQrm` .$3B]>AjOҁ[y5tF3TS@bpȳVͪniϷ5 T(/a@XlEwp hΐ{ kJs2d!TnrG8Bxt `iPb]hV"ɢ~sSkMR؂<߇8*'~ndXW ]xA%HUlm ϭQ}*dWkN@vakrI1-UzuD.#I-xfRT(n;ٻ2KoP̠d ,V-W# I4/c"v{jSyCMwlJVTH]#|вx)R4 gUp޻TBMp)=PL| 1nxn*CYcj-Q[*osR^;p*Qw'a{( ΕP*6HUQuWO { )+-*Q]N>S$w׺X7X5`=K5\R E) ZPъo,+fx*G&_TiɊe+QcσcsrjOɩh^R΍@x! y>zSxwD\&Χc Rzn@|V#!RC?1Tz[n,TO<"N)hX?frsDHH-sG"֪1t ,G"̣զI6,ǡO5ɠ“+Wsorv` y7hvivN0A}j 9b2!y*z˲Dn"8K ʂ i} 2cF>* cO[R<BW vx B|3Ź>fy~&°:)y?}7@LGAdtfL-Z|s`s9.yU $Ta:2*Q!@΢O|sZ=`2x֯<*uJuq~ڪn kPϲjA r#ܲGh,}7Ykˆz%^6 P+U [2o*S^8{>$uJG\ӱ"P>_WE08#Ic 6R ĒU:MC&aI^YB6ܭf4B5f0t|2,WUU\E253yCSxY"@Q zJ3"qUvҠ-- ɆO''5"ۭȄ umh4R>^R[sfW+Ql`Oדqgv  }CARb!;$0 Mh'ÑKV$uVQ {+11}ʶ2>T8AR | nf p~$OgjQ*%Oĺ @v(,7Kwd^8wYm@anCFWelg.I* E|UK5_MOR/8(F"F_WKo8jmO>0Ǘ'laM_yn V1T~0?{q݀bP9_ >I~R<m8 zF lqٿC=aϦ`wypÁֿ l]UP lMʌoa܋-Z!|!6ᐶ"rpkEZFղ=4:|#ظTss [o< +68wqu=үNdV{6~6˿.`jFa_pA+Cq ڮLM#QJ (|ssݶ6]cD"d3=t 6(t q`-Xc翑Vea_2qtI' p݇_ͽ qzCX2G p'ik=2uʭp#a0X4` xSb[)hT= iqhH͹WR?AcsyulospH'kvh[?!FWa;Թ`ρc<ŵl_'.\ /&Ü0NkAJl7i (J߈ޖsT~V K^L?%q"'h,dHwxWF*N3L.ZX80 >3`q;\̓vc o8P+g;8֫?0Fv'۠ Av)CB!9`oH??<`AY?X0>#aOoorHl]dɟ  ˂P(=oe g]R/DA4n]Ls <"ύ)w؉5u><<( Oy!MÉ;D=RAy3؏2G⚊,} pOMDI;~!}6Lrf)DscQ~:3IU\0 }fGmI!}|R|9K_lq s{)}9"AƥFP@[$ e>S7C 4Ъpy4r,y'7Ei4$cPҔ}ƹG=Ee$G6G/ rDG{F5:=RF ?ff0_p@^)g_Ž5{Fbhf`涄2}E8ik }Gl=uouaBɕ꛹,`w^$+i4|X7?V s;f#[im#à% yr?x]s꧹b56mZbO@ކVNu w ZdqŒ.HOE.C0[6g2(a{E7 X!м6E%v,5[!F%7fn G-KXtEaGz X 5C( m]v)´L/T_d75hMᇌH6˜SGA2QRv޴fX\~*G*;}ƫJeG=yDy1W/٢['@~Ey"X,#GMף[MؕRf>6f.S? [^!}[F38R-~jY!D|k҈n+aH*[pm7.z/|ĥơj@ syj!+q{pD?eV0[5)̲ /i}}Z ߶$L 7߿/)okrB)= ztMAYyG"w+0fyS!C҂E=3)&^foTB G򩥎f-m5,qsu*+1m%3j8+s]ߔ:}\XĝgAavmjyn|D}Gĝs0 Ti 1C-jEX)cǾpēv9˒`=|֯Gk-W]!3qwC`>vٴ;Aȋ'޴^:3X*iؤ;/50:;W8]dGz8=mYJBg; 0"ArE:22e9z~@YZBց :۪j|*n *;H}Ml^sޛ%E@[C*J*;* <ތhh7BjEț\ˆ%hh>:%kzfs8Œ P_I51k@g)yOH9'Ƈ[:2;:ؾ("*GVHt lrXy^ ; {E z*ԱZzyJ, j+^D SӃ` C8*tc[}nq +S.0+KePލ_zBo!ʪD<uED@ݙ%%1yDd+*(-OH%G zf:m@rNTs ܤJf8+Yt vʖ(>SESSI5a@* y9` YYJT@}G$Bm$ \#J W pޚ"XY-@sp1^',M9V,)"m!O"%(]Ė^ GCllQD\/I4OUZ:弃 9YEr +HX2轳I尵&޽;E=88.蔄pKH/;:= #l{Lwr_ErUḲDXurIt}#4KNG`9XtU^?Q;eas+i(vtz!pm ,:â B^Q?AkqK)>z#9lB "^.WaX7K{Dp{Iz}\nٔxƵ]+G{AݬOlō܀ Is177Ut:[w}sN(U5^):(;{z,[Z05 8RrM̐7+!C0m7է9jKvoeKܮQ8arA\/9J$ttl%F="]rX $#P-g!?G ]Ք&AB9UVGۣ6U8"Q"~=<ɥ#GA6QQ)=vQ{w;g`Lc |ݦn 7Wc]"UȬb7|!CE>=ÿ-=Ix;/GZ\zL:UeG$~_jPg<"e#<".`NjjF.qD< zz&O麦Bp(1K 6 ȱ0rqF1mqo=ɖIn=<0  ttrm hq5/HKjo4B7G*YDUō8ZRKU8'+dVM5wIaH/}BMxq zne7l7Lzo GcCvc14˵ hF)XށQY;7quMuNWjSGOڬ Ө:cwm٪G43}Ƹ ͣ# uZ.ZU D`[N)E]h{_qq*q (w<@٭?8u P8UDv竑L =Mm]ܜy>EP|ɩ<=f jw.8}QS wkWd)*~d8_ͱdޏ15KENXePez k~jjPai#t#ps u ~DKd+z `P.K12v2NB YO̜Ё9=U%0Fy&37lzl*2>r*xDiUkD:QoV)^6!B-ʸC̉ ޟ mS,-rNٱ#qȴʶhFt ''&hOCe&ZAu38܆uI88Upg*P>[q[Նim1S\蔩N OH5dL5ӅMce #:DNd`Äo*8稧ݯw5چ?nuVtfUX'̖3UA%je韚t8! h*Fd[F,|FU<"N8"K|LR)Eˉ&z8e:XijudIqAZu(4XQ}WsJUDYFǚ>Y|TqBl5c>3F=kQ38{DV39O2ۧ&N*=K\`x67!5؅Y }IPe[ Q AM#ʭx[)=%T8q̈!p$U2HtCDXt?bS~[-0b ЄA m=F&b21_E 9ʠPo)zA}G~7#Jvo )|{ykUr~^Զpg.c_Gyt_>`:I aaeQ?+Wy0֟{gjȕjAW]~y8kKl1les`?TҘXACmD&9S7b\}ƓzP50 K#M5oʰ$ c!'lp'ՅS ֑em5S.DȊ#,s=# õvjYUmJ.uJ^}{ۏG$@lcd8bil1/N7]zD4,,+ߌPR yr^dE){%CQkC:ET4O/%w",AIKr͸Sj]űGB15^~Bl` ]Oly!"o!I:qT8k%3qP|힧8|JtԼkC~)8TF,  jHFluB8!kqa e<^E 01cEVN'w}jeXAz#?glSr,+Y8]fM\RZ$`;|qc&^$ hjDhsٖoj;qneXUd<|lE: WC &D|U#ihLNL~y_4/j}S+y6z.a=2~-`G-%'*ӭ^geJZE&kgDO][N铺5LUc(ld=ZLfz?͙o(Swb"5{ѯ j{$0-}íSf'1_(hr[G3)ā?\{c]ȏ#8̪^>k`Mdi'?*F5}"Zp9'$ -lEZ,/죜aلfVQP);6ͅ '#%RELXXX%wx7gP⾂?3bVG*Ljeԏ؇ћvv÷j#*W Q' !j 8B4E}gꏲHTXz#b*GV RWjgqTuĂ#R I={yۤ6#oub$Eaw QB6R`H"z otP/;"쁧vYrV ~XG+?}@MAbw/Aee_J\d <k6;T@$1h9JHo2'NiTR\H+ zrU- TO{GY'۳c~zxP)+8LUnN w?sjD^ѝM*A6+tVҬkGFrO?z1 .#{(~bx킂R5 TZi4(; J/ɕ1, vB=~Bn TKyB Ɂ'Tp%xm[y.a腵o{\<<T0wR .֪j6Rc+l,O#+^Laxc%Y 4Esq ( \X#֎7lFGo\}n?quwB桁1r*#F*/W^(g-\ߧl#m̅5ڄ".17^՞|Mڒl GF+[ G!)lhAN/+)Y *-9ߴsP|rpo<cѕU*H1I\îRN?Y\1*ֆ Yg4%@lA4/\Y;}o+9 HT :m*8(-iFƜ@[;}ɔZ'- Cl3՘G s@>iֳ!OC~d;H qm R,uBª{'ZO1.B M)* %@¦{Ys,=N/t8<"Q㄄W-FoYq啺 f'kGyo_jT~DŁf.>WT IX9LnRsEq O\?M+\qNhjmlcЉjK] BxdxQX0 r>ZC%Dc6}hzPcsi,b>TDX){*2.H9. F*@jq?"U.lbkysSC-X /RUB4/w8ʭ98_<i\788]Uz-eJ-P<2SJ_iQ66a@9=LGT:^{&p2q>xWG**6[4V(8\pDhZ.I>đx U7F B 94zCp 8+ $%#ֺi!Aޘz&{0~Mrb|{Zd3 ҡT0wʥ`0dqM=7[q-^)uw0\<4tnT=]z])MDqخzvA#) \\gLKN]Ys5ymwgbȹxD1BJ>˪VKox9En4iLER*Gx&-EQ6&^zt* 8;h{Qs͊;^m[ruq5/Ŧ$RӀ.sD dR8[ 4G<] n`v(hgUw{P(X^TxNY7O]åeKSzRx`<"&`C)zya|xtS lO=`, 2{GqhmMVɐs=y $lo.- 0m "|bpm>fxDB$nFlԆ%j`zyq,l f[[!s>Hȍ~S 6{~tw*@ZWPl0!NGPk)aHWl]%R[wEO47gٛȭ= F ,G7lMGPC.&V֖;JQ̝WPso|G-Q%u\Jf%s0(pQ0B^vbyDܯ4V4l艢 ~ 1mDj[tS~XՋȮ4|y9ZFnGU=<+%)/`F.K >Wta 6UqLRQ(I b8]yD\*>g. J&Ry.A-q0L0ظ OQm!`e n_VyM+lU` +[4fHnemsC. 'Fq 7Q'3¬y+sz@ rDR)MF,cl'Űd>^<".B]ߍ{KhFC ;uuR+$6ߘš^phs"XДw:OŁ]& յ4O%,B{b2 TH Zj;%~ԭ _Iں:?DH9)/iXѪ?-(H>_ inw;AP<(g*&\Mh OBşԤ%7um]rrS_UsLHظh=J`ˏsÞ^ݯL~WojP$.Iv`A^ kwdxE;l8QǏb$Qf<=Gb-qqNH0ys & >4k*jUϕ <p9kie?Gdh6%-,6\ôk~yJoZgcO+6 AmVl2QICty4^ݔ%F\ҜNjrSBӭZ^nBJo4Z%C (I͡+HhcJ;+(K;j+Y~( o-$lJO d{e ٳdBP!C,\@5wyr]څ?MHoFa|G2]gAKWd$'W[p#|<|} ԲHe?h!LW|(Z?%2++~AZWk=^_6N筲6Ži6f((c[D2'd4$9?6X``&Z8ѻw`pkxD\hgrZǨi=H4w~pxo@m.[c֧q$ DkB;Qϸ:HAG> sqhx1:VI#c:y\$WJu8w R)R#+ƇŌk2?xȼ]rrp%P4>y&c&xa ^$]i# cOcz: ESLD2RI'S]š֛4<.`g:ENLwwZXv3`C@I^#ڗ:\-dǧDJDj(Y;Z5Ǔ`ɏ ƙЃƀ)O 3|~cPӪ/8£)Y˙tZKc{f!8斢 ^^]*nK1\H3r…htv ՛J6pM?AK ]3)6~YRNhg5zF^2ڷm+N@|eM}&(-|}%rx9&ՓwVG0LzMc Fj*ř^xb=c<* hZZju;{5d7:;G<dFs(֝cf*EЙVIլ{c6 *ī(sVYq\j$q:GȐն)+LC R^j(I*Njze$3Aߟ&߅Zr6P=0܀]WhIu5^$0?s=1c>KEM%jfx'$чL, !DUhl4R~TĴ|-*H;nW28ޕdE⦾cljސlFB6Og$]b$pp2BP7ldagr/{&'etD!(Gp#DxOvՋĵ4Ps86ŧRx"ؕ[!rx i䊃mȉ/xZSqp/pvppc5P1Ӈ0%~6ZgxME$G%p}16%U"W2w_^-:qdƃZ=d-4(n'3z֪&sS ť ڰ`Gĕ6Fy^('6q|l)Oɮ]8 )趐͕Wa(&P4Z_',Gu*,N`Kv+UKVd.ѦwU7Q.UǁX= ]ciQp ӷYDZ^ Q/yHRUt{5"S b >Ou}yj(rprkwvJMhT8zz:G$j%]m Oa}5WL$#(Xog45`h7AoG $S߯*JhS)o/7?NcZU_jG%_4RMO@3eL䝁X+RG g<|Si/ݴWTS)K _g6e (k^k/;\>@1:@wK[". P3 }A6ƇooAlE?# aςޏX7[}<C3Ψd78Xn#]%+ 6bB:N5\ƷoVs vgѦc,*3:H SLH\GORo`#Hºݳ-5l(\焕#_dH6R-}SQII@vTZhUo lJO+cRh*1\#r:(ӵE֗Y&}Y=G$Ii6!]`7l z.Z@iJS4S_uk0鑧!SeLγ(I&[(W[.j{k䯬,x2UMӾIj'n}]wgLt*=wB5 =3ĞnRZ{8;' kw?Nm9`ě e>9촾Շ)MG'SβL3 3 !0g۪/]9lV LQG nML@ ֳJ1G$e<-Hau #k%Og?zBz<ʍ2B'f#mh-ؠ'gjrP3dWk[~镝} % *NQ߫Wlkl;ZkϽIViHEcxvG ̘r+#|TWՂ/r\mšDljr{ tB@[~2[Um[Z+3R݀Z/L3-5x%4~#P!mO/DZ*tDr{{\o '{D\ZeP'74Yzg6(P=9B+Z&Ҟn0u>&KJϘ|iQw/%PeaM~d|$aubL3/;/ ^iw/Pд= rbxxF5mi)P=ǖ OI xDo]^[_ ZsvdfI\Yiۭt}ET ՟/%GʇG}Y=elVHQi (%;2~$O. mbR@VbOSM0$O]Xk_1OPܓVZPfZ:&c0h-ݔ$pN6{p8 σzJ'󙭮&g>*- Q찱Kj(@VZge"ky|6;:? W 2|:/d"Z}7)O@ܩPa63au6L^z( NX>5AiT~!ج԰jr(vLoi>}Ń,9+ߧ>S0|}o+~!w2u@}yk'c4R:@%$#<UATR!7SZ\/!0 GsSNUWHc@% 4gUFXm|@)1cJ޷" jr*]ϔzhAiU 3w nm YRW!PkIi;xOpҞ4Gڣ`3<|f{X8JQ5[};#|w Ø'4/>\QJHL'g/ë L"lDQr +cȣPeıfT]aI]hdCe*m7VfΈCwG>2}>ۡ,?'joȵB0}oB|xRqxi[?{5A+258cw#74OEv x^z]'fwURf '7(gBH xgvqE&#PXoSEE&D _DqML%)F8)ۥrg(%y%6ְL"~BB jB+=dΒ":;kyUߤ (e{OFA6;vԳ5u:,>ㆱׅܧbS7,FVb;*VHflV|QF@mLnWYZ*ձ)1_LJ]x$ ^]5? `o=pKCm*v\]7qBHnxG^n p\=GVM](ʈog<ѐp]hㅎc<₁s+#`zi knӆ_LmvvjE,|)FR6}Ҿ~$#I7z݃ƝA@epT+6[xVnf]=|Ԑ3ߜ-{=em-ټUoոJf| +mpM:MIgؠ:E@P\ І!Uz5!*Xj C+^VӅ@# BӐa6Y31IӋ5 rD m95rO,[o`0/@^t @[R.zAE1n[{zdxZP =#߮W29T; 0g87Ǫ\hbT@[&d_ ;ήm[ mG5s;q @FhU=F9o?aմ+9Ery8icʒZ9W$TdJQXBv鑵 ʃ[x UZiH2|vΐy+n?#8i t#$`Oܾ lZ[u_6N( zӢy~l5j(5V Acg|Yb]Tp@#;Jjq=h.Z>%i)h*?<"Qqkap)2dќW"]YI(x=}Lk}bttwy3(ep8,/,=T Kq +K/B JTPxkJX #jْOV5t͉,{ɾF !@KX?%[PT7[c0;G!}Zw(Q-V}[ qd[ ge/#/.rn0/A\ FZ7AVǚ/՟RF5.߸_Fl7n(E',&.JFī<50%pl+g\kv.g; TpG-{tq;ozh-VŽOz jRCN?F,jң X_Уj64CFfR1H0O",K>Yi~mV@!g.Y)e`n;j!dW8Y5M G6}d1r p+ѷw] a؊H-4JK;dd4`̢,4V.h1ZI|x؇xUHvж~k+~oڮ%{x>4!b, Z$j _2j3Zn$uЀFT<(93Ǡg 'g~MJC|yk~#ƳJ|;&j5ٔnsf3ƻ4TdU x%l=J,f>T7Q%k>/JYE7gD.P,עS3u>PԔ|QĺvŕpϾ)Of WrDi"^tLBM\Mj|EjX2f{FQ֮&_tϘ=p m+[gbI^J#.fW 5 z=P϶dj& |1Y؅M_\̙˲I1ڪ)9V:nec|0pbs"H i:rjd43=P֣q@`}@YRf<9>'~D]Ke=`[ղh'n6@@+uIk'+u#+hUP|>Z#8UAkz(L3YF uѪD8tb+ pJpTzfyxDp\j" >@jR;W ?5V>EѲ"˂kK~8]P OF8w>Dӷ:`wf@zQo ay:e,SHcOzS |>gzmP5>Z3eH jf-!.It*%:s,ְ5l \I5>:{U啢"Y})@ $@ʹQ>!-q5}2YH&CN4N/[- 84\7 UDgܺN'tr*AWAqhb;Q7uyBe,q'~{&<5$wjxD\i]ZWF,94ARk3x Pm(SAq6J =Ԋ;t]~)lE>Ć䵵h+4S\.,h.x,)=,D+ ?Tqd4 67w׳ڊ#«2S{H,Qkʢ6hRJ*X: Û˧=$b|q3em8lY@W m\%pdbG3Qk*"qZS?*hcZ3m Q3ZU7sI1>5--ao3fW lE**۳Dٳ(RfLtůQ]oew-ek:t@m*uq-WE\i'~U*\< #gRB ڴۤ(P\q7?"|-Pkmf]xDz`ezc3=4 Pk]|<"Qrxd<wWǾuoP#?ޝіu+bj}c7 A缥*jH["ȰRSpaY=Һ*(aȓMZNmQ>CpUNxߡUJbPT;b c%"Zu+FSQ\LT%t榯߿HTPWzY=]ACU* 7o=@SPi" ӟELv,? ~'? L-$*!Bqܟ;EB**Dּˑ VV +na)% Ǔ${!~톊E0,1)=WP1@+zBǔE6ĘyȳG/ 6+`J}>/T3| 1{' `S&*b-Dh0"r4o `/J&%R{Z Df_hH hq<@lRu %r2#6[loys aVW )r:Ի =)"4oM:֤[Hr t_~C l;bzd4Xml$p7ZEi-B v1{ T j}dz>'pO @1et#nyYs8kK.ZH^@+M߷fz Ex{4:Z#[ŭ_VR8]5ϒzq ?!>aɜ^%xGąNȩС,HM #O@G7ǙG9Eq3+PSV#٩U#RU$}W4qM+Gtr#Z]ZMS Yy EP*O܀ HM'Q &!xkEnlDrrp(rw{Fb&M~7m< }DzPs QO?>% #[nO AС ŴLR>ΈI-Md>YMC}[m$z C zS͙aʷ-a*u^v/`τsT3e1c:B!apUix=v7F_Bď<9iJPXq-j*`TWI bVU:a6>_8 z3B}\*KS1LZY6\di]^ie{*9KPsCQFyvrGeZfôprjf#m^Uj’k`$mwr&߬Aw4PrWóyM_3E{~/Vz II@4xgշבGh:|Ce~?=4[[wYLѬ~3}+44p!6⢆ ״q5-`zmƸfcۀ@>+!ݟQZFEiJ2n|{!)2vyVς>3l4bOFpS 3&h|յQ˛g@c[GMTGH_c"W}y=ҋP*iݦ}yDz쁧:ܥ7h8z]rWALR*ckYl +PF?zK98!}sW%XMW7)hƘ/:ҠpR {wҜsTdaGą"%w1z{J %a QfQ&7զF{MژWk=nƥXLcuCMTJ:aSV nc^mXփYspj8qД$[=M9fcDEJ<Ʋ xvg!?Dcs e!'EX}trYnP~kc|_( 0 [,ye~Sma+%[p<ՖnDI5Pz`eM4 07^஘=JʭPUˁPlM5yXDUe<4X9CDy)>ʥ8OiC3"K(\`b+O4wp7Ĺigsk DSY}Zu4Ų!\y+L @@t*_Hly\kt P3I[|5ՋP<[PTq,5nS3MiPQ4"x[n>QavUN:~YeqBi^ѻI)(kJɣ :--h T Z^UF*e{GzB̤*eyByqgƿQxw:S!T/zin<"·4\@<խgb% uM6X z5m7?(ߪ _@e,β?N U.p@w {R9د.i Ht6>i#a&!Fʣ k m6 O8*mqs OdP,-ſ(Pt:28%j*;+T#$l'6-é*50x0>ԨW{+kxqRURz(lVЂZ\mb ?WC,3KJ,Z3%"QtYZ ^!Fw*IEpI$Em굦#(΄CM-jTRh}:xU'aV_Ut;qwrUۖ,s8_G' v!H%%(m 敗$V@]cOKkB#^..xv4; 翸NBR>hLO+٠RZgx X&lDSÂrհ M![k)";`^oQx@Ix)99ZG@U*1* <_FF2 /ˢEo+Qz[qG3#H..3fNN~3&BPulmj[r?;,I1CLMg%Ok= #ɺBev.|55b~`ʞ|$T_dAdEdK.*Db׿2FtK0Gtpx iPHLoi.^@ʓիl[%q d@P*nfz=2 C׍E j!d 2J[1gehtY=jq-H[~iu!Y>LiHj,PO&!,{L+ ÅWZ_lU}z+' aT#;o>Ҕ+!Үim2l P7huS:Ⲽv]n~0n!d)QGݨɠ ݻ #ӸY9J<2p&+Y0"S҅J01)/'ivCR5)fSn,SO4bs] y-əE*Ҥ˟jS<4S?ڤlwq>hA;-A8d-FlXCʦS%5|F)V+Db=TuҎƱ>}zyۆ2|Z惊0)T[IՂg1|y@q:ڲev㑮4~cJ[ 7sPUV9 uyTbOi|kqp:h1=$yS<gE7R=N^+&N Hc*ڬ*0/t iD%V)4i#xxi gQowNhT3/Ƒ_*3\lPţ9P!0BF4* Rt~NٍDyZ)O}k1_tKdr?dr 3Y/ Ӳjkj}U?6Xo/[>8OoUW>7[<YɝJa3=HT|}e=aSR!B}!Y*v )ʼJ/ TBIb)q2Nz1r0Qq~TRGZIW .G:{B Xq=}ӥxIO\HTSB܍Bkuūbz qfVUf8!_I>5] 8+#oB>Cւ3)Ղ~K6}<-&H*n#jqm$w&m*$' RvT& Tl\,+^?<^#7ԃOӓCMSPHELfxU@?B>hYQx S~Kzb^HrN ύ[Z=f_p>"a"8NͤaGrI 4 BXSS-._@VWt]NwII]G^G9ĭd-Dr)#k| x,,'I^2|M>NhK2#PiOCIP5\Vɻo(E,myoZߩoKH1`>i;M)I3n'u#MNaږi#u;+ +Ȃ/ .u.u#S}뷚Ap!=ۅUjy0gt[.-)覡_Z|,gW?L~D3B(:TYYЦ:[GȢѢo $7oGV|zN6I y'޳z˝zЯ3jyTsZ4ͫܭdخ-_ \V<7{=P &aW|u ~.`QeM0T)uԀB(}m\6x5:ʳSPTn!xn f-ˏ~;A(@6Aj+]@NzOޅ@te7'/C%Yo ɍy*TGԭJO1eKK@mZwDyF2PDNqkbB^ 9l]k$v* ]_/'Q6cBT,|y6 fD+k-~eJI0(g!歵S$q6v5~M%G$|:kG}Ol^lGEB#b'ѮJTagFjH(~Fie2UT"b4X^WJS9 !_ ks{Ek@eK0,AՃYwԫ`h(f:7tQwEmH:a d>}?Ej›~hZ-No]((Ӟg)|ȲG ,)FAmkdߴ%i""m\FFdYEC;> wJ:<"Qpoe-mX .ohC-iz0\<"OֱV{-O1 2v3 j-m|IЏshje-?9 FVcˁVeM,ezD.F*^]`-k7hiF2ʾQ&eO yHb(~@p>QHW,CB evH-pQS+#8"Q+n Mmf;E0(7v/] U* 杉%G#~fzpLJe;K /۱l&nK}XAo6c:e<0ܱsfrd0NHÆ=je ykEQÖ7{Vw Yٓ(2#ą&o%[+4b'QC[@ۙ-ꁶ98aBZd9[MNp=OoMbi@ G*@{I ?DgB\ֵ^qWP=+V%pCb7{BZD#}V7CSn "=5 x@(Q~cmR$lFMb%W]>#>~H7=??);x~- ^hY[au8>J~WHћg"Nkq8QO96 g9T4oעX@۷e7MF=xA` tv1TbEt֎tNYt743C@ Hs3F,~g0vbJ~g?oZZYY6-E=e8oVhNb.1'`6O^'yZ<"Q[>_vHzVY(L~y[l/shxYNW83z}# Pkto!ւ`ˠN\cnOzK/Nhh 'C&5z Ǧry<*cЧ&_1V'5C'iRI-)kx鑨>P dbhcxNɱSs0!ےtDOZz=ЌFU3u@@\Cy%tŘbe niq>'U(U]lpׇhT:];.ԋ/, $S&MąbùS5qԵb%{=C `xa$8: t;2,Nٜf+50Vz9/HIU{p&r"okTݷX Ia8w ;X%U쉽gHUea!_b=5c,f93hlܜ΀?+оOb' ;+6#:O *>QQH_PN4L((=!vZ} W;擮[VZcQ mtrV-rũZag<2VLCs疩ʞ\z/5ibr ?ךA  П^M^J7*rfFb[O ~x{6"}<|NYP HRrq@PyG!OiC5cXׅT*K54.:Q.yQª@JJNp.4 -Q60#AZ\ޅf!-~wjw~e~q ~-uz Zeln6Shs#|t.I}E[T/I_SRRrhq8px@qx:|L͎a2+n+[&cbx#M\lpPjx#%yzTnJ`YY3K(d|4x5b`q#-^WG=U=1<_Ӗ-yu&:4 c:E!ϦF/tj4@KFGQ7r`];KBw ϩ'ΰ)-UU2=y 88".b>~<#w4ze UPlg}{$$FBq^(_`uhM咟&.PNrH T"< w^f!4L?ƽZCyB۾Z4XIr4pR<4_X;F/tw&}QG@qy_<]zw]4u/j'yL c_^)fk``zt|SumV  {OSf&@q}IK̞*ѓ~ &4~aTĺzpB12WmN=v&#@`9aRcڤL)p CZϧxMGwi1Y,o tׇ\(rSsV0@9[=ꖲ2}ށBŲz5~L3>3TC`@%d8PV2 yRT!'K: pW hb*Dy<+?)PR@[D>PB~B Sѕ^*DKh&I @bt ͑n_;Ƹ=6([V%c[ou`m[)U8۷r;7\IV8k h ax%;h5म" 2ns(F[QۓйK/ $}I x%&-4 ՔL]㨙6!/6tZc[X= FiI>C*[k8(MIHT ٕYV!y@ET+J~Od:=!({4$({/vm++%P4me>ڶsWY txuƾyiq2M*?D()?:eZ^n4yPeń@ 348(uɘ]֮{8@h̛ >fr*GTa6b߳AmaԶ $qu;YMu:aҧxEN+& @ToJ)ght!ZoeBnGokK:,[&t%;$TD$ wB/i2{3 Ո8h/JX(ABC^X] H40y )V,'}7@jL5 އ;p 53%7 6*4ܛDg<07h>BR%zlb\E4!BbVQ`XZMf&:r~.Gąփ̃/qGI0kü2্_ `*3ˍu@F=[⊅fG-PIh>E_= hI`B1 0~! iG˘rlPV(NRXHd2 2$q>a@NYO>FXv#!8Pe&Po:hM9?37A_K]d!5izCA>wv ¡OAhk5:44>H#Hh:.dj[eT)!T]KC(#bMShn`y B}CvƟI7m`3aɯ<-eWH}2xZ`L< ;

@Zt(2-~K֔/7Sxܰ!֓9 mW;M jruɧN k!W5hr.zNOLH'6j`vzoB^Ijީ"lZ8"Q9k2# R(F2L|N~PCa.ϯJ* Y ,a{Ke#֓/`=;G*?4,`K,y?Q y6+ݕsD|D`Ɇ>Y(i(ٷe?6D9_)CUѳ{*-1 Tls^wU@9PJ(r-JGLvU4ڐ=1@\$ &QoJ)r &}_zRBF9Hg}~a7Tš@%:Z7kx Y E2GxӣMDE ~axkȖydeGN3E!dog0^wVkw;>S|^РtGOdq2`ȴ(EAE2_zϰuA^;Kwuh@9HV\nifJ:hhQ?yg<$O`M<4(Ze7{jUyvjVjgC>BX94f3Ke[M^r@/.'+f׷M%+,쁢) ?bf254&y?&5'|+Zj54>sZ+NM$g7)X= dKfn]ͥ oj vr@]RN`2JQ,%ZIJym6.y(bj!s $VU@)ͽ)O\|N/=y/L{hb!܊ hobU`P\Xg*'ًLYޫ&FE-H㼣EU&L^6\^n\tc٘p4N U<". D&G3 hwtp`%ldPx1:~c$BĄ47Uc =cѧ$F8>~A Tbqha!#*`{7n%R:X3QMBtg(#uI)jнq5 2<ɁPq= rPU24Hn? œ] k5 8 iYqj$<'"-5wt}#|+@e&:JU#lrѻ/2%{MΠd z*鑽IY ՄUiX&uaE,LU"T*XҪRh{aDLF ްiJѕ`4t.:$uz{f5NOjňս\o6T `*,8S&ѣ_k"j&W돯p%BW,s:$(m|jk<| of~`|f8]e"N`Py6Г7<;.m@>3XtT#)LGN˨K=ߙ֛ywB3AcP3#= yvB)=(g>]b*#mnoLB[e-X=@+Em;?R1$Mpy ErPN$(ɎѠ.i,5tc574sR*QW!L->2psG}"-DJ>1 g[ee'UZph/lCjJxPNdPn:mC͇urs1OzrWBQT ?ngZ_d戎pģmU1h11x܇5g*ޚ)LdTAV&/zyG#B"bǺG7]Qp&@G7U rbFe-:E#B &[&Gzks0"D61VP?eUp.]iS2ugNG`sâcR@\VR|D-Ky0 G9+b_{Ta|Nn3mU FQJRV;@x>$ "%OV`L:nA+af'_^Bb V4]b78|mي(6tu/wH&% 5 ћeix 5wTHJUȶf46ef{zV+!t4I.E٫Mj!+8j^(dkѯEԞHj]vQdpp=AZ:Uk{VDwG`Cb9 6![z@hIy0ԲvA֔Tw@{QcPy(cPy_@sI>Ao 4䖋jU@v+e5%7.Y*`$NTP}P쑧ݐvn'@% A<.Z>(f2ZzmC?(5Tz%X >]GFɷ *lCԺ5 ٠ALL7$~G,nk*:uaW{cudxBs_e(̥PF!#B1o@(d+S-gYZ93^>ȣF?ڄ^^ >_gqѺO@%L&o͊ XPHҔ=~_݉6#B5?_c%>#7, omBjv<".³檹%!C*sp1< iM.lrC3gs2a}:0s IЄ D@)ڈX/Cţ[#y #5G:Ov=+LJ#ڴ4 BcGc0;.xgq~l<&w0V<"Q簢C[ "%L>/`09H f]c-*CM>tIN$C'm+B!["tg.>`Zڧݺ+AɊhJ@@dl\fk3{%s=q۲Rtc|k0sio1պUXqVɔCԜ  B C 9 ƳĂyVi@H~% UvxŇj}}+Է:5$a'؎3ͥ/I 09[~= LJ2XzdPeeXtޣGGA[9bTwk0dKݞm @5\!NF;N`{;:R7JJN؊F\ӳ,uۡ%e2[ ettuɃ9;eE|'I?#4FHm)wLO#-TBEp=-z~E49aQL!M=T4@%u> , JxL*•ɽfAD耤%l;uTΖP<}_+)Q-a-xŻ9,SwhJrk^@'{5t*-yҐŀ"o+gr!&ZJg͊Q~v_xS/A6\&Zz'Zkaemn9}M<:J2*UC15 ,|=bjv> TyJ?DMRKlbͰ?ORGE*ð'_@+Hd`T=JbjaR!'_HLJ@(T$ڳI 0#|,ukwh^~tV!fDUORԳY ?R<ۥV{ <"NWPRٔ /ߴc1JLⴠ$'>(X6TgsBgh ZePt7hGk-K**8Tվ6g+nRWY)zgӫ2 <6&X8 Gç ;D¨пL #9uOa?k'-?}dB.Z3ݣB*pruaa|;O%VtMZYE5\CY?Я.k,̆YOڬwjcP@W{W)NDnjC4Сa1؋6h3k{߉fe ^3tUAKU1=00Vmb*6@ԇf`uD)'<"NhK`m|nK(ćWꍶ>3B֍Y9O !d7)@TQ T<4 WmrN/[H]T9B{E+RPjifDz{Tw(b:{!Y3T9\f: Hn󋖀~V~.^Op;҈PXӌ'1s@{C5) 9 IIɘj`B-Ch@wMޕ=ЎN9NMxd0Nkf<%P3wOYPOV@-c^H'@jffeR9ʬH#t|&<;XTF3:<\isCC~A)qMF5`fZPPqF3"t~!noV{eT.C qz\T6Q@%HMa[[J2 Fϱ-*vz5?ʤB>M?1yT.@eR;g8\ϭ`x?W #ۀZh\nmif֧(fR;cuRt6#t}GkmnfR3H\TxCɭJ1,=yƽ=.<<Ԭ8v۳Kup?Q]pEq4sβgL3nt<"QlxLH(R6!+3IlBM^&@x-ܧfV 2P$kuGuE=ek&?R8͋a@$l459aOP=I1xngV%qXSX ͨoʜ/gpVm6$ʮc]۰$`XCv,MHA5|jwqQ+jm cYV\䮋r) uK!(;7<hϗ3{R5L϶ #}^D{̚ {54juK(kY<>l!/5CF/K}:neS٧\P;,1]RѣOXz'io9OyD.㱅vqL?9zY3P-\9fYP·h c~Z[zΗ#"+.!IZ1D`XϺNK\QlNPxD5F˯MG]@u~RٻQ|t*) dceh2p~\@cM0m-)z1jfچq`*,un:XJFR:ʴ5!7wR/дҲJ8t^&I >&P0 }Z$$5T>JYkv}w̺$ rWh(PV jZ|: kOqQGѿT{^#}Gk8a@;}TCh 'L ͒‘}pal2W.Vt4JlGuz0nA6@|ϸ0<){ZPηQ+}$O٨dE&SW#ﯖJmTz@tn1߫*}C8 "2jxj6KǚŢLRƚ!+B 9IL?JHQ='Ք˙sd  Qgx]|Mìe]σlՇj/L06 g )3خt}OqHud\ b^G&%o8%U넟_1ʂ{frjBb;8F#~6R]i\j[Bfm̓Ow"66xotLx[k>Vq9q96E;Wbx![cnk}U%)4'*i)M>XI;h0~ OaպWou0| )r +ץϭvt 4RϝǤs5ST5İf;;vZ-*~SZT=|[Nh; EWFW-@;_DiUTl,C8 M[)뙃Ц.\2Iȑ|n~DȲZWM0B^LD&dV,;tD֕>3{!Xծ:vUim&%khL Ta!OO Ӆ)MQvgj2c=&<"s## \_ u6҈VֺqEkOߴA,̋yƺ,S=:M 3ϣY#1^lF^0_yi5@u_k*+Q 3׾lhҶ-|üQ#1*ӪQ,Ѫ/^+-1{-$+-(Vl,(S(0 jӊM|G`}#]^.<3<OSYvmnYi%3i34}?sקUxe VN+XNENⶐ,q7% rhv}d+7tun! *DIGɠGyŤilШhd1b]Ö "M()pP W~ ,p{ZiG]81XgB8 )*2Ǜ.՘ H%Y#*٫8g,hYMN0J03$E&{tJ[eghۄ:4;$_3NFo*NZl.!pz:*`bV%f4z\ , Mss rz ۪I P|ǏcD+&! M`bHςNO>Ofb*]$IDeȋl­r~H*m3l+$Phܦ#4C0OIi^iN@VRGu+}8p'OgR} U*?N SU ]\218C)Ј#jw4rxyWP2LMxK+1e1EUCڒ$ILϛG I'Nrީ _}ޱR#2H‘)M8$NƯq>&nPphxE:~]nֻzɑh$Lר E+6RroD=kCWLRsyLU %(M6 q؅!`(/xS BL_kDs4I(h5P#ZACay?]6+ͪwH-=]P'/$Kb3#hf>bwJz~b2OH ;K݈: Q'ě{|4@,S?} J>(J˕mqRd&'z*I=fCƁ5x[S' Tj5&g"Y)X>,^g=Yw|2#1RF~2qp/hQPrTpo<$kWI@F (7ğL!3BmkxsZ勫wކE}[V2pshZBN+ZV%q: N~$4UY76٫|۱j>d.#T0.vTOƳc/qC| VCytҞ-$Xx~ԒG|HL@KvI`#8GpKtl9`7+Y9;ֆ}~`FDm^ @SÔ=r[#jmj!V T0[YOHTG"_<4ʤ@L2od\\AP'B|FlR@ 9]|7Dl)@${jfsMDؠ1j'VcYڳuKpԙlҽ  t|Y.قl]{楀v=H(l:+S=[Zl; xF1U jܣxV2 cC]&ǭk$mmf:$z?7e-i|,q@ L繏*FC!D镙Y 1ֵOز.5I`%%ޏ|##բƫ>6wY;Xx818B?-&ATx׫`u7f S*ʖ8<|7WX^؈O+g0R562ߨaldt,g#わ|KA ^ H4~VL|2Ko1Wts53hWC4ŝeL$KV{(CZ^w!؍$\>̎kQױEݪdN<"QU}e{E90qfS&AлHV{J|o3Y71MK 3veNRq+c–7(5=ӼShTͭ&\+d=VQq}i>%(=rt ΅0\rZs7jAmGh6Bư vŽ-em #⑵SM/0x0̏Ef[ռPAlhKHdbOGyN:穾8]'z|,6YzSJ ( |5 @AInmBRkũ xd`;}wĕK m!V<"Q __!zy:r;{V5}rLϳg)'M4@5 ~g_}* K`Snˈd H4%yldey%KhtEzO &IV>۵Xڨ&6vdibOxbXgFoG-I/ԯriWn?\DRa?G >ĸaM)Pã5%OhFkr>2%Їk QW*1u\lG9nSB6{`=o| V5P4&=+=L9hTtxXE"lXX!v^z >O\ȀJl˪xrq/>hr B a-ߓ%5C9קse,d<"Nq<74As׎vz&b8=FjVl(ϛ^٣]P3XѳU8JEcDG^ %mD,uq4*'Z|҇;e, "p _,L`8î^CcQ+=}_r#S6fNZr2M/J@Sþ0SD0! &%Mtf~b7:NSF6w PłHhoFb`7R1k 탨pEh nI2KuI/'EwdzJPv_#oQJd3 صY9[f}sd}A P邉UЪ[6Ƽ:BcX Qu/;M0ZN=W͢8Vϻsa1Uƶ}LFēǣ 1NE:O $EJBH,6SSFboޤ:Ȕ@Wm>bI+o C}o}Yvֈk*JGDF|NAN}<0ՓD%oPTV"5r.E @]ox=ۼpĬrkY<".r`eǰ6Ts>q{SUZ0" k_hAѵS7RzG׺\d8FoSg5_PT J&yA~ ?{q:mM?Ίhr"ɇ!f }PJ?>:U]o6@E*xkWkߓ #%OPIƘI[ x2ك1&D,v.yP\T`gL~M9 F?݀ S@)&Ȁ\&r?$6L%K0LD姯;0 {:yca> ZGv@&KRKh2Y NsLv:rq0%E/\S-( Aw/\JW7ɔg$Hǘ<@ Og2R-{};Hm;“Bɤƹ[f=#QodkyRAZe-Tvv|j]bGP[ $<"Q|9<,AxƑ,XBv# (u=6MX-h߉{9 $]Xbڏ|6yJБ|֝2̵۵yF/U -"@@՘̘Y|S`MR((D8,kSUG$ ]@Z,6S 8`a99LoJc m{0 ZQ[V ܚ$9a,ae<õϜjKurR9հ32{4+M:V<".2>b%c@71rFQH@Q݃#r6h)ngꔔM4+(Vx<T>S)WWJ^'MU%HǴ+= )&)V>߄ Lp$Z%Pv7"vm,+β LichK ׅ SO&U$Cj Cj}ݪ9 >ʂ;`3~gJ+qUo:YB>.D^w&BZOSuώ2&}dHGfInKTyWbP6O tKjSV Q_Ѡբע%ppbH~MWҼ?8"/,{#i#R7^wRL58 kOfUE֎QGajrkIz'v(A b6K29=S5pF:-\ 1uF@2R&>=bR~co^}5pe5BU c($+W|1MޜII>Fv< 3 / m\f&I~d1S ]$D!A뽜öJZ qn$>5zɮHlJ95^*&9=2/\%cWf▒l[3ŏ,SS4gi} 8xc?=rޫY_N[ 8?v?qt OiBEKPhH XB8\2^BѢzZиO#YrSZ;ċ~~Z24R?mG.@,!q~<G9r'SbўI@QQ"_{Nꭥ=__#rrr8]_=R!Frچ0$[^޾Z΅G7JoIOdMJAU'Η~]Dfv/! ZkZ{*1pk=6%z/oO=rJ͜5]qfbHEfA "GuǠŽ*+\4pCPYh'~֒SixDoY E!ׯ/ D^ jF ݷbzh<"N-t&<\dl m6(>B!7PL!(ġ:O|ݦڡG&(=gnz88+=4K?(TO{ikT *TtsXJ;#UJ :@_^2/!OKs(fj\ YnGwx j{-v9ǗX@^7e#YT>,U€@Ee_*L%ʙ8rg궪dՓ姱\qB.nVy'[0 L?SE`ѕd}t0XpNeVgbp8 gJ5mץˊy]eCV<о].Ɲhl;/t(k*q05ک\bXz&/Z49Ҟ(y>4} ÀKjFzQ1UoQ@ ~6-K gɥg[&'= hH)@gcH) }qHvO:vΫ\\T-WX璒Mf&Cpop#qآzCӖv+#U1I w:K*QF$ȿ+@ս-[}M(h ^\ 0xD&1=-EW|~ _a`W-?gaf'wꖇpMFe& O&seHH.jz(pqIՌK,' ŎP r>7d.|͖g)TG.}vj:mW1Z/ZWI'_n^lYd0 ?=\Ṵʡ"# M+:(mLh$@'L\M EN Q<,[`p4 s0R^@B])*ZL 1$m y3 H Ԭ\Q-2lVhCK`HOuA_'W2ꍨk_c Ȗdz2'ҼrT@%LCP9{(ܙon}ɰmsWF}pNC^Wf DNl:qi& :[r[eщ6A's>C뜜v ͉MНAkcY?E(_g;R̛ܫ.'$I0׏wYqTm(Is%MKIjb9,dAv,U{j\ ,:tT!K%ss ܨu2Vy|ln@霥'3- lҔ IPtBe~3rN:3tGH(KWO_ ? ,Q g$9I_+p![K(:}Ee0;=U @hm^aW5i+)`Alx<'X>ޙlxP@tpŒҙJ=gaInZFT93˝?08Fϫ[ɳtk-tL&!aKg4?o0͜>X[[ E.}^nqSTי-ja,u#14qeVBM~l`( aLSyO+t\xDJqI A*B{p3[&*oxRXhPknxb7d5* 08r,[L~Xk)ji޶1J("࠼.$g\%S"yfsM'Kߵ5A@˜ԿQ>6mUX+Ѣ9mhW҃ˤےfTywp 1XZ,EM- _W8Wn M:Љks _>ˌ3n "oX/Y@\30]$9˕R$x$sSfZl j8-9+ f.鷔2Mj ^tYGcp`YWLFU"Ⱦzɗ:PlbK[QŶE^ UH5JΩ6a\hFRЌa}}JEȖf3WR,ŏb}A>|st*{qj~V+!n Eי7]Q\] -l(Nح\fvO|wOfvss|bS@_=sDӟ¥'Pm ĚOФdL3"Oˌ'$qς%ZKYrڔf|Vb!qj]%me\zz8+W@3VkP/A`ʀZؕ&ԡaEN9Au-qYUy`Co)k;0C1)?$Ekk}+qϸuHێ4?yD\$4֖8w u<> tؠsebx+rЯNN&8ח~z]5銇hΘ v3'6/4m JQ6}^H=&4oOƏshXFk[;yPzV: 6RA[+>Ա0k"NL?_RE먈>{,p̤;k̈́Υ5PF1>n?(GP\ w4m!ZuC a}ճ~u>. 1q:e ̤k(&ةka`d$DßПq~KW &Hu~(h } y C Yѫy,{(t(CPW aseV6 ($}q SF-ʉ(I\{]n?Tqgcu{wig]U\! S{.IV%%O"pv,(_i.;Eŝ4AkO~=nman[Ď oR,J9?sf#PZmᆭ9 Qpf;-G]j 1%90#2|mS1} l <[[iTŎ#bFb]_q{ZP H d+QWY!y7kjr0i{ Ur[CydYi4gN]zrf+TRuHn0¿5FSR ȕBo@zڥxӖ+{[FVEqX 8sRYeMP뻁<{@&HÿpS85c\i5 4$㣘siY9<ssL|ͰjbE qL+'S-Mk:*^r,o[ɆyDq \f2~e>dPGZ@jλrO&緊d Y~_f!t-nrH@@4! ͺd)ZlF77tW$ 7Cu)۩=v6A}H0AK添C:=xΙm|9nZ@5ql*_4G{aB;㸖㉪|qMzL8xCM+1f D2<-Ls3j2s2[-O*u3p'4}H0Hak#& ް6@V@$k5zuQ1hS6nTGUݕN\zhN& 1e_F0a#bP5a鞼nO cȲw8}'FfA%*ǧ6Yi.cwMG#ko};d<"Q Cm4;dBx8nۿD]>C"w_7&]212!Yb@pɋU xDxdmm $r"fFeG9ػ,ax`٪k]Q/6lLOgi4T:(_5,°$+:ZȜĎɵJJծ1IPK/Oc~MX%%)AjEo3\YDߦejT ]o|4{Y!TPtWt5'9w@OZyjơEMjrnRUz`;<'|> ]sExC<R\ۨ&pe oc}eYH[p64LϬʧ@HWi @X*?9ZN# ̾7ݥ*n<A #+g6GǴ|h2/\Cm{oT}A\ X#w~W$䇤+$J/yNiEs0;®\QNJ2J Ȟ ,d`{qkަaxЬU;dްwK`K$$] PʆFz.MY::_S/e6Yy;.ia@Ưt}P K-nWe;E5Zq'\QOpR@\}y/({Z"PGgz>/r$.y ! xR!YpC(XbR)cX>a j zlZlXY@tgb}^fh:v$BõHz£ڼտ]yOuxv':}ήބZq^J05Vx.3 o=42ma@ơoY2='d[/% LF_7iGe@teQ {ݧ]\,;0Nn (D ͆!WU~Wr؎v I &brKh 6]12UZD+{ƯyDzG1/SRJ/t\l*J Vq 0O'[,I&(8]ξ(EG :R]JeꦧvxBz>H̤л⃾lC5 -GTÀȉ^M*{q긩\]'tSoq -Cu*JmwjP9zZ1:4C0GJWYjvNSJi ACXyI}aTc?N.N%@d 2/}Qy H{,}kl'=΀&Za>͗&딹#jB;!ý\_t7?Ll(˚-vIOT6AE8X'/s=, @bYjBsEa8{!d zđϻ7{*HQeB蒪)dCi 1S``xԵi$vqO{>/)8K9%j ŏn<"Qx0Cu$9Srͦ/n@/qDQ4LtSy9ڮ9Svh~hOH MTxߨXs?t"ܣqxަۊKt-jyr;aظ a|ǗRYV#V 1)]5k|۴Gĥ^TO =&y1G->B B̛su* .V+Yx:oc#}"=Z3;JS-@U V,/&' [e$_!zB#5`a[3 1QPWq(9Sp0Z-L$׶}\?Ɉ92!).wvSvH'f.~e$m{|~hv- Job3ZNح{1^Im7 TQJ[ 8!j3MM6JTZ?Q|bGvf S7MןsVxlq#:ٜj>W:J ܶ^vrFF3H1`Uңev졋jpD.,mr̥iwj jyL7 Uk {P~V򆎴ڢ$E` ^8:P5YiC^mg C6i?)煖OT>R$@Ubgt]y5D٧ّjx-oRG8f** תL0Y 7<^A̞gP1 ~;=gbE$Â[X:rHRV8Sr+ݼ USv a5i%zP>*/4X6xDU ;(=5lGD(W"e/d:-V.ɊoOcY2ˍr+Pp[pu Dɽr>m p;?*KV΋Gi{?]C~`e1KhZXi=Q6ltI'ln$۫@u 6\tȟWd#Y"n(_ ײӡD M\~StMʩFڑsgEyvdBl `Kv@#nGq~Hl*~p)ڹ|KM<"Ql)U/T=*?tT|T@=-p+X^W6)Fqly۬qLaMa ߯R|=k+DU7 D|EsQ\jp5֘^cVܓF5 f [8VʵOu"X[2Vw/!8Fn}!~`m̏bo&W[Z.L-+D=,WzSiU|`O8PGZn!"HmUkWX֥bZBϤ>tKA,e !R#B-_B#4sӌI)Ǵ׻\QfV‘WГ++EzVJ6;!2>e4g5yw ssy k0kY|Ib,E"^p7o4Z`ke"P{+h'/˵"J!+G,+gFr0SPaP-bga⸊jNꀻ75s6Bt(n`j7aj"ݕgEiĎe;B90Ѣ~'Gݶ1#!AS {qyD!Æئ^ .j(&҉3Dd0KcT "#ez,d[Su`҆[3NlۑbW{&W"[=jGʷ~}aO`.? VT'C DA檐pG[yv܆Mip IQg,a,׸2H.X<^>|@q.l?E ^13* g<&?<"N9KT} NoH= ]豼Lpv[*o2m[qjr`7W(pf6dp/mg~ܒxD`v#,*]FEۼw t~AY5CU{7qÖJȠbח@FeD pbvz$dw`qZC(; ~fG$jBr{ǯJT-I "%L287n GCzGtyR 1~}hxDհ ۓV2/8F*Bbe!wGI7ԭ(``/#p`A*-] Hmc~ۖQF/j/qGlhqĽP| $]WU1 :˛AdX'{\5jC=,G==jSPȤWZra$=a51O ^FKM|PeyZ=Fs? B`eV>N `.x)Jfs߫LR'=+DHOVY`b1Qg=wa9yXu&B'ދ#JF YN r["Qi-xܒRlÓ.8QPA *O0C9yp?nj-ȻV]] C ,TvM-2,oSznjҥ*J@BSWd 1!|_:~Nnh RbQjuY) p"6͹v\V`(H!K׽dK*,+QaIܠdXA-O 1,O)xlcHJB<ě=~TrRY۲.RE\n(fs[;9TS@J ^:4Qsy4dXpdckRA-hS S^&}K?H X@q= g%2KVJ뻇3%'kZ]WQ?@PC`KJ}8Wˊ3=YY6Ө{>dO- 3g1B׳)o*Ylu>8HdZAJ#H\i6"{V-V]{MΞHqkB}}bw4dhθ$ޠaF1VAs;yH$vAݾ=r߷xswjȞ?7URQ|ޙ>IQxtXG3CEf:UFP+kГoT%N2=G3_̤k][̀Nl3E` {u{ݎ$PP޵&؟NeomoEϱ4&}+ɚ K 76ZF"#D UԚQG][=#;Tvx-웡>%) 8z2Š_ k(nOI>A"c' Hm8./W[aۆ$.Rm&vt4>hy1JK13,7+{4{"ܿ>DQ̜ izz yG*% R :(FQNU@=&$ʂGMT XFV>=k x]ٓ|c{wѿ^fCmlU ࿧e lq9DwЎ{cUtȬ`jž[)vHтjJwfhut;짇]5[i[9ҺP0{Y}O;CeIx "G> 7t׫)˄y9>Eͭ\vU77#X J|byHv L~ݯsw (JC(FpȆeE% o_{#ۥ7NCC|E2%ÛbGclZ}^%us:9j]Nor LOs.vgMwKJx2VL]{MfkyQEkϳхv~u$zw,&8Tv7){l$ (V MpS<"~!d3arVSPH{idzm-֤B.3lcv6R`' ^)Dޣx91bPD0PyB]js`m9f%Lc$ Z) vyd!V*hK:~&Y q4}(dr.XJYP=rj7a+#u07vהejhA@vWr}"9In0S_# iyng.zzRd1cD@HkWSM),TܵPӢ_ JۚCl'JB [g@mi%U%֡-sb)y0!3HKY}: |$]xԨҐ/jTa"ף4/,QcB,vLZsW·@+thH}S>A?ަ]4%i(tGP}Ih "1u]oz6$Z}xA>CW1&1 C}ozбtdn]QV! 5=ϕf$B-dV'NX>t‹,NJkU;>;BMy zC=i8g OvHYGoĚNyԾ]"M:}Kc]xHCfS&X%OenJAZv7RY-zޝ hOc=2ZzfVq.wk5Yv,C1 ! {kSfP >e 'f2٫@z˻]>'逥 Z6FnP@s\],J:=E1Kfkʑ @~lDJ&~\l?S ~x{ZTϷt_/ \0Պ^B(hS;7Po#O :;Ұ51R:fGr?~%i=rAo`ߪOS=HYOǂ`kD7rKac-Ify[Ix#;qΧ~pD;ݎ7Pf ֬z =yO.-7KO3Α|KCdUB;us Cx;TfA+ɍ`_.B8rJj!ѐ8 ɬ{sKL̫\%9qpZa+%|jr`lIβ y쟛$q(ZG|MEuj8cZ耪 ;epRU IXCyTJ{DgO1}j5 4q%$%wHp0ZV>:I06Gm3Ug5I-{P3;.ӧ}7o6>/i-|~w26qHLU\؛ģ0R7 J|: b{|6wrļqp]%vrp y3+߻8glngx)z +|`;,mMLfs:[1tsx4ZR@m]4\ Iy]3UP}Ăuw1 ?4:\Lb'y"I1ǀDڮ-(@#jՄ'tg2X0q*a:-XمQuo>dEj SSpӜڶbUazǪMsA8A/eOp[+EhTMy΅C#CSdLC 1+<;P~vs?u*ok1U[ 4w(E7P|?G.'y 9/M|Pf>8+远PcDkLodߥeMA֢P\@`}Tw$߈w"^W{+f/n:W)\L)01hxy!EHD4l^qn eAE;&<j1yQ lQ2͚`~Yp 6>/IՌ]@N{@s5Ev.Ή@ s{K1RJA8ԁAH*wnmpέ5՝W)HxJu s"bAb|[殆]{ՅmJI4ZTd=z_PNYy[n(xo z "]/܅-5 G^<$8qhERHXBaG4oR:%-s(yHZ׏-^^bTc6|~Ixd ]V4+,a5j1F5 fdm{{q`[gO\/@ў3Ԥ3$#(1v?멺L͡(E n%L:=]tv "]eX* p0GR2}|c" Cl%*s~VV^;`T: Y^9Wn1$IP(n6GN.jb(r^]u7d3}@LVFq>]5я} UHyd]"8bcnx/W`hcYp﵌5K( .6Vb8 )6'Pa/bמÙ GJdHSk\;nΟ{|Ƀ]v^PJUBIh_Vɯpq_Vé fFL§qxD.ݠ&;6թtf/z=iHNjzC;DGdWPMGMfyHOjQX܀y֪ (n/j|ߒ߅ T5߷<},v;m7<xD(֟Y9dNa@3j}ʮ؊V%}zyLX| d(A# ^s2˥a`b~8W $:/'?>-6~s֌-2C i J'PRT쓤@:qh0u–n7 l1/b/O [*eXIrPTJ \,iI N{6`Aj3@'^d9!4ҠmnCRVjnXcQ\=XW߱AeiЅ Cuhwm}LoɶlE 1GNjPY`!3V:[9 dANY#VC "-`l1Q;K8SA@5-m9 F )_֢ ^4%(%Z=aXH61 3i:u=?KV 5ELiǵJ2U`y#[r9$qON do%>L(;JM큁T+@. Y{< Fr,`>y7 */!/Z5j!{B+ZAVe5APHDZ*iW{`~`Rq,>d.vWGM}\V*Kp9O`KnPޅXOv6C'*E.PU1YkjR{X:O#+OX@m%܊Mk8"ݶ]U: ^Fuȃ:\V̥G!`M\rHhǯv {? C:xIn#%wKܥdP ۹|{Frc;CK*`=|!10Fle-6x$e*@qq,.;8K+Yh67gp:8Ko\˺)8ɶR? Du[zqslEejP3OT';X0UF>)FHAYgI`#`ZZE⊩ѝW.џB!EF0ӿ%=&ػ(wvv%%idD!yna|"4ʢ*0Z|Xv8r hݥn\M%yD\EaA]&Z'%ԩO M5bWUkEp1kȱFm E=b;xD\lkD%\e`ߢH@{d mѯ,3RCE׌A0fIKr-3=ƺ%|$@XXp.l-=l'm%rۣlm]&nrlP+LGKE}U}5w Ǻ0"UWœtJD$|Um~\墟+u  LYvgJ.ؑ{ڧI HZn}KĸsE1^=ʰP"ð&_}a쌹o#;w Y%3^ʲ(A-aeb>!q}~3CL!]KѡF ;Җ: _ @Yyxt0C-՝\]/ޜ\&+l>q@VNB%PH~cȝ*;"΀Ԉ06ɮ5A cno-Ԯ-q "IÂ1"@ן ܗ'?.zvA>2V&^ 9!MSv|ʩ JU cv}rQ-pcw.aXfM(J'Z!.:zÊK-KNS̄B&Vh:!3W|Iar2jmqΞ|rG5-d*( QwZhYjh49{ B;T9}[.jPr~>qC4,B@syS }POd|Q߁(g#.pLoA!'vlPݥY=r4pl]ƢURL_;,d +y͘ WoQb\.؁ ~{9Yηx+31xG0Ɩݍ*j&uKLSC5!65YڈPXPZPk .G$jc xy ZqHTo0&\Ro}&޿n;Qv%vkeV9~ B_o (jOQ])wCy8?:;sJ uUQy>!qFx`[Ix~3k7vp,xw|Ѕ\P%#$W . }fؽ[mkQrŇdzl kqCGLoX#@Db(wLf@b_eW.F u$nPޕFoIYn3K!HZ Uv642yA| vjHk2H`!KBj(`NP@b9 /ƄH+8$&i'(Jxۡ1oNc,PP g*G~kDi'LW[$\iŜ-#\$vRT{pA1r'm"֣@f0^BN}A }>$9 s7(: DQ#+\aP6|ǂJ{dt\$v2ȓÅ/U #*{^3ʩ!> [n71~{o=p _i lO|o8 mw0Sk}zxDG_|>,3`-R?%\ꟋeX AU MI8 T xtuY]`/jΘIkƒ8㽱U/wInAr$UY@B;: =\Kabҡa*`T:/Z`Bnǎ.W/D ]&_acNZnNcY%wR" .amv+}4vLm\ZߍJj(%1+5Y}*j 4bextU5:3ǩkpfY? lhs;I!4aP)@CG_PLM6܀ceb F $]XBd%ǽҤ"ΔJ+UW:7W}f'J1)KS*@3 xbnLIl^>ir-μ2* ١U`Lf0辰LBug.3>̛8_.P?&:e&Aif Zbl=QtWQ5]@au 3貃nZT,\1l\muj>BTZz4TSʳS[~R2WEtsہ@C ^ܜM66dSiF5NQ (‹YYsh >1d%Ƨ?~骹 mL(#dS6~VAwk9E̚E$?~!CÆslSlݿQsS}x@f6U[nd)GjpB,C&NFe]V*U(2h%K8< T$eC@a"!azٝE,=}գH+%ˋ\S6orҭKLQیd1q9$RT(@t룶 j( 18U.> "ِİJ ]NjCU3/w$cK@xU_ա? wX.?%NÙ^vP}f]+Ek *렼ŨZ廘b>jtfcFԟ+輠z/W# G"5 ynbw:Tb,DN\ݵ꥗^@eq|fW|Ye@%K G}y\{I}_ńxf'/'ÍKo V6#j:%oAODupjrAi&h 9Niy9KBiԫ88$qe}$&TMm# '!:N2 #H>Q> Wje*_^U~GleHK$*{R ꕚ׃1kT*š^WB=͹!Rx[v;j{̴Pr;.γJ-5  C%"oOe%33zv8Gɂ.%{R{DT=yjj= Qtp>gYDl;oH!%Aٮl 5 ln}Ʒ0q/ؗWlYلB^?s"'*Iѽ $/5*ꁪyL_7Д_bնC/Ϯj pפ gE2'46F_ҥSI'vbO0#=3@Vt7-j8ȓۺ➍)7V4A Gf脗 5kĘ\+ ےee5/3=c!sS{P #fieA q40յ~ P`5}2Q͒K,(⁵Y1P8^, ԦU"(#H9'OoY8.~JPVaNwW Uӌ~ l"l}b:"0#?IGJ:VRx[ɥpLEc ǔH4>Xo;DT}esɊ x鯼f2EX5yEVbB2 ˰|"x&DtC;ͺP"81Ut}j\ga)jV֮&<\-8 ue8:]:t}[u5hU+ 4gmpAIb2p`ѽ-<(f2G 1,Ovwk5훘Z;c<7#k.$RQ-WX 8#h$G~8yv^Ӕ<sP,FfgQ 'yTШny=2]Hb--DZLl)1z"c:`kZ[4uɒ$5[CQ} . kDŽ&C]g6:7@5L&]#AOfGY)gB)eΚR%j z(jz<CrIz( [Q~,A VJ͋tCEJ=+Ti*Ɨq{EoMܶF Bh۲'ӉZxތʔJ?Vpo@鵺C2Lh-u9C/q+x))<d˻;y9ղS/T&}|  _.pT20f9۟ĥ?1My7H \$X: @b0!o# \!(M$w-ǶGLŀ!$eQ ukdF%E qj 3Y&6JPjugBsꗮ|VsHsz>TiFoe@X3pcSR uֵ$9Oˌ-ے#2]fˈu96*W}z hzC8Ѥ@ Y./HA9-%xDfԵ|5$zutd  AnL,9avS j1ITʾ<"Έ Qgε h>"k{9$¦"RÝEEzx(k:6(\OYH YnKqMgC69vV0uؒDEԂj7%AhZj%a"oD=MOwMVHL-Xkl"$靄 <<]Yb\;iX~$ TR44TRJ vKEjUXx?-NQk7g1,ks&CEI =z]Xhai-_S%L&R8Hܷ=} 3-Ķ*sꉲ9gsE>2b0R"渷Xѓ~A0A b<,v{R~PL1b&..|<&{&Guz5 RjΌlvd H}G=EŚrxaf{ ) KXmMjqDH'&yz1 kƻE@ m&zG5|PqrpƔ==k?˻D*fP13U fXB l`@ԧVeg_f-`{k{k S,wG2_W{VծLTGukPLҢz6 =C[vT)01ҥKfڰ! Z!h[n;hMOrޛFjo#.YXG`H9$NɼhcvrLqam07غv8rW~쉓υPte6\OwoчKA6| KZo[p4NFo\" iW[Y|ONo'C%5] uPڤUP0A|;;(/³STyW S7&,Á&^]')`Y|DeD-SΑH2o-R6iUE!&e:QBĆwp_cV@tsFN8^z'(UE趕ߠT/%q%%'r7fDs%”۝.Ȳ\=܅iqi|{+)<ᝇza(xUM^K7!Eo^X8$.ₕ6*oel[v 献RdPڷJzqI2SI^U8Y@_ rnMy9A&dC5Vc`P 01LގV2mЫ%avR9s L,x >ބ|hI+WJdٞQ"׵Y5?Y(jkJ $Șgq<6OC9b'ȮeXyH m} t6e: Jc]I<+ɂH 69 w3ՀnHzM!A+_5)"@{ǶӨ}?Mnܧr'Z~z(X"X^CkY&;38dmȳ.x9OxlZq=aN2_? SSv[_h<)K0oų:}ʑ#%o(náVqokQ@^mILG(z-d>&Mx!'[T {Rq#P뫖= -Mb ㈸ =\Ltci{tEe eԻV^r}բNɟ!}0ө,?7J+@ChR<"|FkgN~iiI.[ssBAC8{[BE 7950xғ h75F d.äR`1iսfxD["\l8}Y=o=t1} o'PB{1)ϕ)Xː4Հ0耿 sq[>[!-p^qxavPr $5;n'7r$)?ئw@"8i0}UÞ5 Pw16E A^Z,û(Vп=?)RV-Il|Lk!c}|ܽg@wT`@:s,j<\Rڲv]z; sOg/ ^>fOa8j^9zuc@Mma.Xε!J<$. =hJGtRq9ezZ<"aWߒiIF¤cO% z34-ztR{&qr+ riw#襪Rc\2`C|!V֐u^|o) 'zը̍MvZG.i}lH%Iڎ\_[AF(y(F|(SӬc0 _jqRDPTy Z~h4+rKY pC&AA-x N3 ^H;N荼KPdIR牌PD'SQ%?YvW;$lLe2ܦ U+'t.`ps9-A55̰qeѧ'F!xaR+X. ML7Px kA(vڗkbgQwŮޥH*U;#rMzrڅYO7}qoي6-̛wl[. ${EaɇVǔ0;funq-P5­*UՄ Y[ [!T b. 4zG'|Z R85w6S s1b Ѿַ]jiKB ےɐ{bxؙqhA_laSls=gm$}'LE˅PZ*vגFO ;ME_(y֪^=CW-{S[W<8]9ZۆDHn2"$%8)8..t] Ukf&7iU! ZmױҍK>>q_4H`hHgFny9sGq,0ܐ*EfVSfe4"(l7G5黽uH@{ h:lf1Q,!cx8a[ dJKh8ԋ8b򼂪h=_]KULzWBD zm+hnqZ)0= ?y<"QX 1SbkH2'`y|98pQLl_ŷ[VZ <>~(XR`q)I]ɔzh 6IHyBmG>awKd<-l~UD}ELIs#fL [rI~Nϰچeɰa &S$`wvc?4$Qlw"mK*Ɗf?ܗt!i4F'2 )[y7ʍ/uv2WolϮ6` \II9ߒ0/i߽DCv =֡:Ś6[{c{ֲWjSReV>8 ԍ9`67S(h}re&}* {ucJmG$ wސ+$H:^9RBɉ9SiI XwPlOJKT7%zFf62to-J<о"о8gZ NiÕrO߮;ew! zwI\e[pQ ŀd|>>ua;u[u7?IΡ`G]< lPxrAAg)I9ZrewG$ &D,OIOp&:飜N) ϵ.kJB\*B*}xD* {IRvR#RY sUwijh9*[BejR@ !ޜWWT9:{}AaeX56F|Jr6,YR7ٲ$B7U[ĺ&v_;SeаJ,["ą_:Ho-NmTJ)u2dvw׽0!h8eQꋩ(&-nD/lˤ= d+~}\Ku_p-ps)J@'k'[{,'1:xxH\ff$m~ߣZ.3ڟE |XNe+2/Ea}iS0!2`d؋"$t߹ǿO®vӕ2"-r}w8STB^% M% ڿbmSO ;V>D; Q3di7VP2J`M6)\?. >ԜT(1t,Ev.+[l FX "5ӇGWhaP/^eP@wT{zXTKg2_ >PP<2ʾV[[:E`xg9XuNk{A}{L݈^ "<`׷,)gr.Y.ޜBKp FvS^nOgc 9 o/,aTl.;dʧFXhe˵e"þU cB"ðX x:QEb :^ cbiU>vMW4cZѴ7vxD6WWumjU`Hgzz,&w2.25F1" ȎKݞewi:|.QU_fȝoUrKy9x,yz'a.,oŘ5Gf3CЗ,yh@eYt޲ j>vw( o EKTkn{q$0zwoHn(QkUCHԤh:HƭzҫEѝ#th ؊g䖶Rp( \PXa]O9-TEI\%vOf7b)^id*w.ay>['i'f>aD8H5^ ũL}ӠfŚ>;#E{>$Q{x?zbTa\*RՑg壯t`1fZ7hpIz 0\@$]¢FaVUx1bqH9ZV9+d.}Z=G$-Q}*[T2*_$jx,u+E[TͰ9#C:1qH(Ρ2^-m W_޷݊UkQ ='O bYP N>:G?3_t&冦:}W+!m mF[m+ whf,#=YHGR!C欪f_3Z>pS]8{o~e)\T%5\(`2ճ6WE%U(VCrū-}5^}nv:HH1JMnRimQ,϶l5&>/ !^yjS/JkkLɀi?XQdByށ-2 PMxH[ /j=3VM)ZS1ӨxD$vQ7RRg"F]2b)EX쮃[j$-U BZ2N6oZYvQ1} wwyUSc2`$y}e>e/a9.[\d'TU),5TOgUe*87 z<|+(]?9V~CnP3AE]KgOh+n!G WJJ8cV-2Ea ϖ[ߑ)%{|{Q.|@Ype{iEn5|gx r"3jFÍ˥:<]`NMh!D?WW8"nL ƄwҵjPDuD[ \v<ӡ;et(S} 6خ,ݪ hrk#*ɮW2ᛷQb*SDo;~ HT)?쪍RfPQrA_> tZBh (sͱR~Vz5sk޳xyI\F| 2fς+U"U$K(Jt3o;D{}U u`-Oq` dQH2o"ꏣ=s yڃ_Vc<0{8^-HR;ѻi 'UkꖳBmx[`<@gV=?"S.j}JIyHʄ{aWM<@28]dOjOf/y4k@i])(c2L K2x\D-*'g˷+2)['5l7ڷ,3iʓ&f{H-ޯyPN$݀͏lwK鳮TZ1"Sɚf x[=.#g ^ C k([5%XD1ȃ%8 󁵴ĮvAgo̐*'4_DX't" % M"r!+y UZ\؋m=f[l Z5$KcB!axONO4HͰm3nͳ#r\-,d34M7[SOAA0tj еF2~DQMh :YrgA):4&tmC)DcA1ه Lɖ@=g!~Sz,tOq>1{0 ܆<tu {`;üPzT/t*(? ~ -(S>s쇪4Wcx[joJt#:W2yDgXK@?w$;$IP`g0ɷNMC|<"N|l9KD-H-3q2>Xu1vts|q3-/jW@A!qz5[̍;'z8uCέmBKoYG]Gac ZL:!IuYtG]?ȅJRCΖC&xU|w?KLed'WzVLq(q5h,+0iPKgG eXt }HQ)N)d_O&VX >u91}֮#`7y:FB`z$Hj1IӤ>}hX6[lS.,9Rd#e KN2K&(-d6i}BsI:9$nQ{}eM =ԓ,(q- 0_M۷% 3e=D0PLo=Ȟ>G{Y{S%5N1HTz5 ޔRzq-_}פcml~5^^4Y|:h($f̼]ql^1L8mu} ~3unXQQۂ~N qDUjz<8*t/x erC[PrQ 'hCVr^|D5Έ*WwqL3TiNF+fs3.n؀F^7I=2ȯg>le˱@\,Lxˁ}fu˦ec?Ռ: hݷߥ=Zw)3ER^-Zl`#:dSޖh)lD߱ɂdK€~Bó@6 81ݥdu, ?]p+/GUZ qIӸd)KpZ!򻗽&;? NhZx;_6k3Zz:$%A 7B?HV(ڟz;9ύܗ$ ^"9ln5W8hQu$ bӟ"KoyҜ2(=b$>Pv}{K7oc}ZE(Rt0b5*M+lDE]n!7z![]7%gIPB9M#h) J#?fULSR) [I//g+۵:Sj-aZZbi1|H%߅bױe/$?ځcxze(8JeRNFaz8pC{! .X |[gl^ ݔ6kE?J<"uUJz)2qƒ6h8;&>Wn%C3RvcF:#CC-/_K SDQ0l-N[19P2I# + F!'Ş9lagÖ3mohui$9!SrA/n$UN22x&mGC>{atmz8[~_3Wl{S_$ 2@Ӕi(²JEÖ6D|_P^Em)rQ7ޘ=Ƅϛ|K(dƻscIINj.Ʌ?u{I_9/<".C鴛b/:-O+,>r>tߩ)dJ*_XgOeb5Iw?-wLV=Tա. Kn!J:e!g:v]ٕCNpb?~nl܇pyoD.Q4`%sJנ&a9ScD=&܆}.GQ=%lQ9+QY Gu`n<ĦkׅQ%9aw#5_v%@_i0 K mUc" +~/]dv-0s+S)& BDόDqNHNtRzV\v`w$A /M%ղpflu-j(MjwЋWE!X.2MiԊFBs6\uGst5{Ʌu$HSFUp- vnPv: 8j!@_Ca/:WBX6XnM#M!ણ٭ǻ\5.ن}w{K j5?{@(KgJG hxUMRZzyDܛ OGPu95[%.o-R ujz]3G :1,EhGFAvS84n>3"h#MOguFeQ5MQ/Bbr~`g9$r%FLib/#W-9wEt~eΧ[yN77E{|Sv]*u$JIao(*Dž%'8c8qMJuS37L!{s1|^.ZmwiC Ov r-_ojvv<"NäO٧z+s*QMQJa٪2b}EgCmqM A3f顧eRY 5zzs9s`h;vJS&$wz Y)PX ?҆rSQC B.p"&t)[{b}HyM Ks 5?*yځ%۪Ts0E V]EGRX]EW-ME1ɰɍEKIF)Z_QDM%V`8c$Vw;<{>_`m`{wVxϦiQ,tzB=w][ 5Yl+WҊ{ SG9[~|n#5QLh"I)v͐;7( zPpj)zVz<=QˈHyx^0>dUHϦHhANk8{ :%Jaz, ,X s.5,jT{SF6\/Tobv3Qf c߸lDџp}շ$8xD& , C? e+}MAjKWM:` $+)03p8`Q@ΡaY"t²|7J=N./jn(Ѐh${~*G{ 7I|{v{ޫUX܍&meӮ;;,EfC;gyrIk-~f Xbk:؅ upf{FL#:7h`!yDQftbkzG:e6v2c=HS=v? ۓ`#$\h٨NcD+a438'w٩~O Qi󆻏 EÁlq1 m-k=z{m_ (q/NT?byLˍ(ĵ%ު5|-xF+HBVJ4xIe ,g7|hLbu2a|ʗYLKӍ} [R[jЃBւ v{T-2.7tcwzt=pJ`56}Q諸t4< ~kRB Ezd!QYaK?`a}̚oGaj`ie(}EK0N2K&?@XHSEyXE%>, CljOLYycnUBRfQGy-p2[V\>;u['aЍȁoopI!N}\sݚB&l?QgHÆ]|soۙֈe;]{؃K[&lkZDgjeadں T(J8r"TS,t?^'Њ:6X]+km%|S‡}Ϡm5dd)Na 55|%OKuBXZ@ A_(^=P~h! wa[JړP׃VxZn#H`m+V'm(Nn6ԳJE qBC5ֽy𐳲iy%}`CnJz=e( 7>hR|69"QjXY$xIm(:Zo*YoI ok&pգiA ػZ6 fWתI- oa2~?I`D<3~M{-N,Y"DRR=yYtqQgX6#@ h2^ 't?")hsE+'Ha?:S6!DFvIamq /*5xH[c8xv RAtH 0aU+~[J{ h_\Yk7F 3k4@HfgAc1 \@jczEY ,nی|ԏu (0An& fƕ Jx+ SN807ca唛:00zk% -SN5* ,x,tԽԦg<(I ̑ {q9,)Yw>읖+~`A=CQF7Pj㳁 TKT%ӿn17ؒs,iV7+ԽseA3qȇ{:2Pʙ<OA2"6Sp{%>d7qa$C”-t|HWc%u9[xWס5$j;_;^񙖧;sYZ-uԼ4@cS>Aa||bwERsPS€]dyDP)kDsw}_:9!o/,wņܛ[=l,R*dȀ'RTlp$i_IMTЙ5BLJZЉ\8H+B7-8Gx:姴iIjhsC ),%uk.F2֭ף&gA^~aO[0A_z'&@3A C&TtE ~Z@0򖸔1&Se`p/JG ?vOӎ=c\NΪT{fW_oDcq#Z~/g? T'0(Ik]ʐ3 ŧ _ai{'ʶ)[fStn5޲cx'o|l@,NRZhQ=ž0voJ$}Rv- h^y`aUO;̱XCO44 Eg).pƒĭҵx>0ej{Rw~M!Sr2bE=qHUH]ێsg >ڥB?7wJ<|` {਺,дCZd c?j@c-%w*,&KMRl؏0}UTk=еt֮)CMl{Ǟ2OJNf$qLi ۊ?:GN *NE':h4ZxsC2Q u65UePYC9*DNXo#C@Pg( }{N[j҃-at`;l}B"e$uoC+2ߠ,>z; <"Q!/IqBGw ]ԺbSPAP S3e MlB3)o+KyK)tM- s`%߮#K(De):]Fʳmj, b4OxV -nMxDFF wWϳMB* Jmt_2 bײP(Lzj]P|9:i6Zy(w&z~Di$t{[ޕ({aD*L9KÆh1bs{^uRS^--zoЙCXE\UЕ^B.z,A5]$K}} 0D.k{}@X_)`kIJdkCV;'vem  ̽ ^n:we؁ T2fǒF3՝(zhBfX}rЉsaݵ[L)>E{z)U0`z֎${Wm{+C'DҒ!Ρ.UP#!Vhې dìub,ʫP-խ~3qFɈɀ> @]Ea~2$[;&ª1M ' .U R|va-9tRthԟ4m0$3bÄ}ܮ}ym%7:Y]j,8=0$ ϸMLǁ:c|\&ib FZ{SoS(p SyBA~$jM}OegW -u0?yB@wF#8#} ]u=֧*{A{E:!"jQpT61Kc,F;耂"|(1ߨóFA/B" ƾJuw:Ps?Pj,15>{&lA>cc4wYe}$^,姻lĈRHԟE{PpC&$6W%fIus*#0]CfІ\ӥ/ƸcaTlW#Y|`[K|Z=b\3-xoUYX!?^,Y .̋a A(&ۻBTUqEoai7bD@8#cX(HFy,HFεڧ(M |nIh]/=QVf$#C/rqNb$!Cqd(&oDP۩j<ATXH+ڌ5 WQiHTOxq=&:jVPr#؟[Q5í6E@{Q&pbw^-4X6|\ E'P2osaOU> #Q9"7U(Ua?bb-L*MB5$+1%0Ǎ/1RJUqzPHA>&UE6Yooh굈u AHhU)l bM'M kBm,;p/Q~}V!&?u|QBf>Fh]5h_Z@og78 gFGpBsB8IWFhj`t],.ؿCHos6X9ʏ5Pf`20s$.ʄbv<ޡG1 80&\6Zؠ&aТH+ wr}6 YG8Nip\ڊ% ki"(H*QaT nCNޙc BHG3#P61uDD}!ab.Rt-Wt+_I[% yyxQ~446 J C0an3^e((B ݗb,q{v #rt[V7G,+aE Ao{|%Ug>l]DF(j^nJu]Bv`ǭ QS= 41, r!\: K ,b3`Y|<2\P4Pﲎ#wbδFAkHB̈́fm$ 8./vF8ÄB2Ė;;v#. TX%lEx(ύ1fkMFa+.A^4ѡ{`|$p{`xE; !bӠ딁`\LW0 d@ƆG$[Tq-f2OO('S(O7!АXp "jnE=< t#ȬZ/\\\dTV`ӠfP>s%C#J;j!lg?G^;f~|qFtˆ*Bq(Cfj3n!5R9S`@:UFT4.y+d"qHL`J=_8q? {R3U@^:U:ۖ^M6^2zKx<"Q<2Pr*h+ ^69=g>unPˮ=e-[UUUEp+J 2 2.煮GG#G!ۯMʺh}\ċyDuS NEg5Y $;S\i}@ J jez! "0dg/~Z$,h{AJQwCn8nn%RGRů4 P) : ^O:a/Ұ+a=z1k\ʣz˝0K CJ\JYoU!6RǫPҼ_$p@2e5YV=nĄA yw {yD\H:PX߷CEq:+P`0KИ6ArhrBN"p[hLJKoSEyRCc3|tEz/vox NH8tcc+-BTe\ܒKF3+1U؀ls~u->%pNo]'aA5ꫲcl$Gx.6*VF+Kp@; my  na$7*n+[VKk?N? Zp;GA5agBxDۛJӦ})oXVWhB,gVYk4~g LI)ΖQTmI`H=`C1]Ђ:9H0" } 6Q4vV W`[h$*w‡u=7=ٸc+aþ$z5ܩ-،J{5Ԃ> [<{ $CӖYY }ViαqdȂ}dtXU#Qot0b󹌧n!jm-jOwqK)K|N“lKlT@vC爻pZdcL^<2,PRW1F nc^ OZ!vCwٝo(W/~qCHO>l o0HW!U9hsW}""nGf^e8MۍAHi]2@i uTJ#KW:SukFv87aA۫{ǪC0:u3sg7,n >a-7X<N&rπmyʤN[wHG'C('op3Pw=s +&e *5a0ߏuW\j-Nk#+]ӟx?N{`%?*s†ƂR+yNN1 򦺬ې1) t?Vlv2J84@E30)PJq"mābt۫ae,FeP O.`˓΋kFjn+DudrI.M A\.\-d7~J%XAF^[ӭv$lÊ6ndqB  Ŋr]Wb %BapkܩǫQN2Ph#mSR&(N #}:~䣉q~QݱU,:=,2y֖l{'3S3/'ez3 \!噧W#=YUDZPlTDK8YX"{, 0A!j h" Nyg.O;"h"!o.Y~GprֻlFx knT;(푖y:nQC ͸tϕA+d0HQ5C #"7?ߵsn qyZ\Ԓ!2?9!8N9* }V(3e沽KCgyalq"QeRN!H*GK7vVr3O5a6Y9&>1aK=x OԄ$ LdE'w%,9Vjֶus ODB'op1%mҐ\2#ℋeqH^Ϩz98{|d]9ts_F`bK-X% so88Pl xNz5V"3ncuaԉmÖ0)KB-u4dg , 3&ڻ]ֶ&)ߔ.i]%6tBxvs,;Μ ,O  _[{HA J6ڭos˭qHTRXMZ)o:)-R8ο-:{B8L:W,t.؟,t~1y}w򩔡@d{e:'Ȓ ]FQkh t#ӽjUX1-!W;/"Hn4ˑ _zΧD@x 3 B=Bc=A8]=\mZIQͰ}"CELJn]^(2+vJ2-JVF '+e Li< u͚z.<]* >Q{l]I4U+eп?qPOӡ>#2E\)މ?m}^{HzRŎ~'H&٪K&#%Z* (9GM#ه?txم$bSFMgBa&ry( ϳ F|ӭ="k@O1`ߒ ů |N8$%ryZm{)9 EGkȔ-9Yk"9FP/N0u!CԘ(HnkuvMݴj`pyٸ 6b ؕ>/;w>IgBkw:kW-9;}JNӪNp9)Ark()_4znK/0=6t ZRiN|P5^GO't!t ʪ{m*kg1>_*P6)zXn!H ŗƌ Ş e+Kmvaኹox z3 y C^b tLF_oWnٿG?G]s:!RWV*Aj|yD,nNײ p>z 'H\`ih'/.)U%}%%+ԘƘԎ,1wKԙ^BEpZuLHu &Ó/V [eV  zJ.GF^mn_WIO#d \?)]gU/eɿEz+A =6х (D9آ!j:)a1XG-{GK/ ̒w ǐa % 7?'\D^`f#nhYrǒ 0!,N?"=b"R$vFSk>Ve:s hڛS!6>Z?l q 6c{ 4//&Ze^%0˶F#u{)E`35 ^bC✙řb-?!*Y [>s]VzdP2U: ŀS 8c+L=;YcwȒc_ gW0<".8~A/EgG.ß}ܲsHrijgU`KY|?H6CA0Z3^G[ALXlu sHjL.-ZH(=ֵ}q]*& ;ܗ%ۥ#F  _^ǔ@NMwv58˶ww5ouqu%TbOٶБzeUNCu+C (k܅ROjm+)~xjRt(2mMrzŵ#6!Θ'ީdCꑹaV+IL@tCm3^WU( .9w G$vHW,2Z)nz{ȯ"w,p\_o΀ȹ5R#Z({wߢ@q:?z\꽡<$q[A aGbY2Uʜ8[#M\O9T[ݶgPsl;->◢`3gJhFWw#*6{@,JpQ188sRvNc-w4r7pHo$>ˎ}8KSO-+cݕQA:(d EgvJsŚ>?E($3P}&P€7`*J\"ppb p=X6Ŕ Wg nHu|3:nSti*R(fVzύ)7=7DF&77!C]snpr3-m +e|=笔.k ?EvɍsqK綈\3l)qƼ9:e} %h{&#f3] j{|_z/*klRŖT@D魕0ދ5) &ۧ~/>1H=KS_œtyB'o=oZڏo/eɼdS-Tn͠ϳH\YAv/у){[lIm(Nf_3{3 aj3eNKj`4 !S?N}wuU)MJ M(Bg}TTd΄>r]Z~hZ+ E@A{gjgeSg8%ABvE˖7 dA@er݄6BTK؃NkOy.BQr}~txs;pn!ҽ#<"QprDpC 55C29&Fځ+}42Pe=FBa4mpړ,WA)@ƛsHabbƙ->j[DQ^Jb 7 ހP2X7Ki/ Yu ] M xR|B)K8m=EԲSp,jpvmXT|g0Q R0Xmk袦Qz?!IfuHVGV3c?ѩfˬ5lQo˂[g!AMݖ2)-A[P%3%M/ZW :lgIeIzў̋_ Z"sGdY(ʦ+mJ.LnMs4 (mǢcmczp̠4XZbCHNRz]_Ck2TXL2#5nYK%CzS^jԷ\svv'u9*h1QvŤ/jArԗgA8H6yt>X@-A`uyu(K ;h;z  }J8s\K.iIRFgo^u4Xmk$S6 a@Yܨ#Є͇sA%֌\Y: etE7N3ϻ]$Cn-ĺNT#j@OԬL5:0zTOO]o(r5ܨT kWfFirR(T}&6@K|']0GKaTvI%=pQ,Kb@>1q!fڕvy(,"PBb eز@25Tc'N|[-QQbXͶҺ!oxWFu0%+ ,Q# U|Y4m ŨVm]OMwgԏy{$$- SqF񢳜ԣl7G!qLS0saMcܽO zb1ISO0-^'6K(Tv1_W#ufHqE}-,3Qaےsp #AaFZrGFw<ܽk{  k~k\l3b鶁gy܂i^@%𲛧,v! KD*,ül|3o^87|hMoK|*%Y[bτH)hSr苳IRL$I 8 /L?W2W9P_?kʹ!CIi` Ԉ`Jպ>gV.TE-eG..2%A[!qB0;LOiqvͯ-(թOZt8$4XF{C+h_IcZ8܆:B_|^t'u-YE W^#`zbv!$G(RvNY̝sbE$B|Q-rAw9bIYǎ"zʹUUPsNzEUmlz;v6ݵ.->m Os,W\2k GE_Y,j [Df/Ca: =oJ[m5Jv4,uz)_w;KHw0AKv YPe-o5˾B s_eC=C#* B]<^D4H Jj@ɸPaؠ< w;1^뷮L`VZcWKzs>p9"Έ!w{ F$ts!R[m[p+u 7.N9eIm4MgQpN9$qWò`ztjuڌdLO{ZqZ0Tݬ2>/~XqSr?~V;t!YdW9w㒴Tf-=OBѨFkuQha.#`6,XkFy>؆qAWebMߎ`APnYиd( ZQjh9ݫ%9Bdw`BcTm]\f3=W||EV.N{wv|UÎ鄬KAV#cdjX l[Ek(_0>C~{dG ;VL$@q[婯c{nWI~ |jq5zpL-"xkT2> ;J:;#%t94AGa (XTŒT3ytv:j O6MgHpT$ѧxM.Yb U#Q,*`\az㎼4R9paϾy X]`宛~Llڸ&G >A֕F Ps::E3T%2N#^ZPdB;ӡr.jf*i_:j ,5;7UȍTE3 m mM[7zPn-,$U_/T{#ℶS-a꽂:E f vڽe7Iey ^zY察i/܈]g]1۟im VJoo2 b{|EjnKV?ҩ  706U'\D==S7`;8cGM 7}Dp;nb5bJ`X{!GonLS):W(~=y՚=e!ŹcAoh"!qnLxSf'=֦:Յsv^- d2>0>a9s+pJbӡ_!oRlU1ݣ[o=/s?.8C5 B3c1~k,,iMXF/݃:9P:u"@k]8n*bf9q,z/!qNe4H+26z4J^aaarJXCP}#[=\8.WUKНo^u. 9NN!`'ţ|Hky}-2>s߈޼{wu@TL.ftYa`Mrz# о2OԫDj P0(_ݍTyI0cҐԲzTu>h\2yu\,{m`.zU\G!0O[>avRd7ܶBǫ,S6z^W XҨArdzb$=$`fZzzx X vW 2yjYfšA8ӚwR Dꖇ h[PW]azbKV%sE\=N-``j[:9LΥQn: gIx<".ؚa4SfB94}RDx5@0(&9=|a+|Z.ev/T$tK+`*ǹ3(܁"0+A2kXP;ͣ~mjZ(tùS)]62ln9sxtdW(>w=m>X|p=Z^L孄w tV4@hDh6/\[rn9M2z$&۶جWhA?g=e'l䚳ec0)3ob0oҲxȺaAOV{42 (Ib?TQ7UMobȴu G_7t~{/ʄ`˒X[gGmѼ{g2h EsO5Ory]FىѪWOyHⲽ*PA_XbE3ćOB;cd(`F o^]Zv][`'vjNQ1ƭe [82MuT|E =\ i82{;> ^]"#}R! Om<579X5AhƳ>㧲CݹVbZ2KDeb͊c =]9N$H_))svoiq݇Tb8!4)U+ޟz<$q->PqETz` !گNF$|7HTHe6;M#kC .G$jPRg2j`H KZ;qeۛON[ ᫮<b[0}UZY 7CPn|B@] j,z@BG$/㰓"a dkdd~ U2>8[?%,9nLd'Y4m;ޡ }مtaM bGjiiXIvY,SqCS9Z6#}r$4 K̄:׻Cd9P4wY<܁0«b] !1,G]M{D>$ӧ#FV{J!q 4VrK,YY\g!qJ{+`P14/u ߖ)\z4]i=]eSKYޣ[v% lm/^{-XGx+L֕uh\ѯ ϼd LH%߸ ^ʲ,Ǿ>A)ܠ֣Z[n)9Tόp=;=dg)z h-x0>mx4ԣtYbdbEE>@7{=U.S*A7Yðu&s֫s*O8.rmUNΩf۔ľ}UӢHԟr9$~%d@x_c&(4)۩&}V]Ӂ$k7 GK.?tZJ{1S)60x,R u)fY \Hp3dMW %djF@l@p}ȟ;tpGd*tX&&t-k\1EQ:0ݓPm ]|24_ks(qNW+,Q[[=Jϔ OVB9sk+eB5,vs;{S{h%_1ԆJ}3f"ζg! e5_qeSa 냺tdB;OmXz;{FuNQX\@$$ 0Vy38%|> P'R 9/e_IaH=ԁҕH*H-# .RӲndۯ~Lg co照߉CEqp?NΔP,Y!yWͬo,Pr,{j 9(ܳ7DZ~7;W̒lPv>m~Kch2qF#A=r3f՚G~C$IL^e7M7[z]Z҉Vr{ `-B\ruq9X/SֿTX^W zk-1"o^OLR}9ne | &dbPNErP0XbJf+:-QgnYd1 sPF]iS(e+kB?N% 6a _{Q x#C T [LG|t{pF@@e(ʵG32' 1 h~rDx#L3($hmc_L$ O68tĹmI~=oWtwnIj劘wAcV>%'&sSp>tMזa#NY?ky^+\rOFs|v:zؓOW(e'jԇx-%%Di:4˶,b{liF;8- Ŧu6f8s=$} e[Xp{UhC yz`Åa[AfQtl6U>ztvVwB6'X`sO= 3BZ~ YF7=, ];u:B̚S}IfP{7"]G*64nQTiGSGUQ(xŏ)Fչ`JD>w2DJ2U|oGиUȎaɉw\+0?ZnGƹhq9?VoKP8gH|^4j0Gy#ℰFK5" G?J xg!fN1n)"X2|o2$sLYJ߼s1Dx $ݠW«ZsAq*̬V0[~ɫ,M+WpUtO@؀j' u _"n5xlo@o着 E0nBCJζwBjtkg`w4syy!.' V&oUUI,QccĞb;Oەd/d9*p+"o_г: ]}9r :Шol=M9S+n8-g/`yx0[+e|G=2 `txRh I-} >4&C(ʽJq %w< k;wEPƒȫxZwme>#}` l;uŏ+K>@?,ke,{ۑ@#§:<7^j*ku#Gy{#G)m>! L P)JHh~^ wعVt8AVJЮ~A-Fn?| ]!? ;El1'z6TټܩA*m!cp 1a}+H3PG䕊jFTT%B.\S =S r{= hY$. 6ȐVtN]=-sɵfu׻RĴEz_ŮRG8dgP:茳G~VbA$E]'މPjB O@@SI5gdO䁅j~<|Tp\nv%c} T Ռhxи)ʚlq╃+("S^|7J퉸Vޕ$Q,n-PqVTR V@m%04S\];)S6]ZKjѤB3Q)͖oxgSjhvB'W~:cH%qOOC┅ktU0b.iS RS @ W?`xIj)˾9(i G`j8xDLYSR , xeqV vD/Yf6o;x(qO["a\Ag i_wCY!-[jl%[B17]iMSI?P=MhzɎ-v %G^'MIH^Lu"1}]-r9XivUܗ/RSyFd[av0w JjeK;<{;tgN0RwCր}t-WîR.`@ȌpEaYJORpԙ\oG951E2+` C/R"rԡ[) fk,:aOIg%}^:99 ꯘQI!%AA5M}jFh#E@}_7!C^k_>L>2#۔ .)VbM Wbq!0P 3TNMjn)tUz@`DַT7w`b)&KNN![z2 öB "-B zWx$@0\]owXj|r!s&>2(ҿ9ƋvWTE'Bg~;cKeCh\QT(UzjOu?RLQ, NvSҧ-IwKZKWHQ܏R صOQȞ%h %\>^,9 hYȮk[ADPS'X{=#D7P-{Vo{M/zRTS s}?0k=O$-=?uKX`;E%(<TkڈV"sK2U!ĆwmgשWlX!_ ER} Gĵނ5$h궒t[)o+sPENJ `Qaa.l\^kr|sb`4ЪA5~[˺p@AWfGqtJH-NO].l?rzpֿPfW 6݆r)^!wWPR?8#>0O>&0}~e3hhC| ҈2-DDXm}v;/=)pV:eTꂖ(r9ӝ[קDLJ\K{X2Z"١a+MPO L⼈-,EP3MնϠj1t=z\f;&9$N(*dބvNFֹ;,͋7#b2G @7fA1 4Ȍ E>ecZ>=a3%j}Y/{1rE)N177c.CdqLw S`Gs뒕Tj=Ozsv@ݴƻ7)3az- `dFӖE q}،rGdp*hYCEQ]ϰ͖L@e(t1>>-2P6y7lmo;PB \'yw T xCrD^ yIe? AU].Ӎ%^n@N>&d+Zp W7JyɯhijF³w)}O\dj:t#D oɇ&3mvڴջUTP̌L݁)뙆:J\9INB ~|,u-Y0lܛI%myz=IGl\6 {alk=;As9c,&MŬ $\i}fh$pc3[8A#ll#GDk3al &UZZ_s'cv ,TXg0 !QZbEz)heppK$Ͳq{˶F֥pgzN2M(8wiC[9[\Z8CKd@GRJG ]x/8B0bm}`Fyfkn- }L5:Piy>)f#Xv|^,N߈0PEqۉ kB 0bg{8a= ꗫKU@ڗlcӟOܗˬWel{a//w{uZ u8wrC;D{~hX'\ ,79Dn4L*N5p"lXB?3vȎW% Ș^/ , ڀMyT'hUpg'rƓHl$.چ;T hh2Yz*4ns_v| ˌ#Qu lPH&~;hשOѾv_!9v:# @f'HLפ߸d ;D{qu&TiuqjI +wn3 TqU$XVdT艅Kl ghPGjn![/_AA']#|u˙jk]i ӟ'mUQJX5/)60{EpMǬpN~ү읩scΏX rv1xU-ٌj*yԚ}=7`$mcIX;"" +wNi w:+E O070obtfBxV0sMnN n/(_YөIoM[:;UNtd*w3x evzNV@Kf>)H"E!<^u>LOӍWk_sH08B`_| Q"WCHtN16lwߐ 8apc8ZЪ57 wzK4ރDHԩ? @S?|Q؀s|ÅZ{f TɱBQA.2WP+lU)Oݬ۔^d~GS휭]jٔ F^yiG7uu#+r69Sh69 !'Իq*I͎ @9H_i lHkj hmk3Ҵ]tM(\0Qi.ID![]uk&ӠxhsLͩx{:9:0ꔜuHFɿ%rC3.LJ\S{ &xBDߺ7fdaJW] 𥗹63$G Zͥ(cITp}Bmޏ 2.{_9[GWeѦF0SQS?oX>-՝vIVz BhԛwpϽwO! ]IoLAE]ӓdIأ{El$*;4 '\Pm*PiAY7ʯ۲£W() #]oBbrtzUyh.OE3Mw9`/OŎc ,lZ}7$l9b-qiƓN!ҺDFq/]ÏzIN3Hy+ڵoO-SĖ;Wnqi{11d6+e[?bƛ] "FZײ&u PyWFr ٯ;BD -?} sdtQ_ ]XVad̓F՚{ ,D}]Ko׈y0,w@uGq~{ } #]A:4я' YlU[m|ZL/s(88낪,?[Dͻ\t~`R3lllEzaFbmhO#;3ԓ YL/f^ Kۧ+BA uH[BpfvOo?dW12r3؆3<){At*)l ɲ/f  9|^̶pe_;e1K~- L9 d9.tZPU}{jԶ} 7ϩ٢~W^f[7gv~ER m9_ޥ~? ;?/ ݳ{ZCFd>PUbqy f2m|t:mkhpJ3EDkm]\<$&9ELQ>t sZe[*➇cJH|aX[X[ZK{ڦzPy&~n)́*y/$PҗR{<¦ň<+Tߝ.8}6EO]t)̵D7_Kx3 dUjdix+uoq]IuZAo2,2ڀۿp]{VmTEf?ߦɻWv~,1^U9&#Lcs/Tz ݅PNPo+`/Tt* f] 56Y$f)o$*[^9>``כn1j Xް9aW,BMr\"bWZ_KۍtsSq05ۋ۟z&UHxFYheIydB\pGR{tPO00uQcr#7z;[V}\F4mh_nD=hm*Nx´˘Ɖ)&^ȋC%E[~Fet众ϩY(xfl$lՆ;Дd|R {kYs#?G +-5 kV|#.RESOl0Y-봢E!\Z`2 \f TمG A O]Щ5Ӥ S(ڽgǬnoϬm+i‘4:\%(aTb@b SF]xى}Q`$ij_dj;[.cV7e'cJm k皼[}:w4ٓ=8X]qej_&oTgoKu_k*#{RbҁtGM/]|9&4]qSnuy/1+M}y](+?s8 -ࠋMSl%ǽOLJ%z>4J6c;?%c"w_#FL.@Xl1 b"CV9*"#Bi w~ᆬr>;mؤ9&"N:4ĶXaƢsY%ψrVk.@*v?W^pؚAJy~ m>^Ad7,}{ה5i.;tW_Q[ĝ%Ln[HM"::r\~.~WQ3{ngʐyqE5[r*S%oj()XɪpgWy; n`@='S3Ou<f<[lg};Fx~_RWC-{_lKh:w3bTכZSNXw~2Ÿ0|]gUtaAn{.&5%rCVc^@DmҪm–U,:)eivJz/rVBM:0;l [NJ+NjVR7~;}wEug_ Y')iv ny>+,Q?{R)z!zrwTbzasRW i/9Za(RIvRU%h8Irɝ!ٚrf? *%oPX/z`c%TJS*j֚jF9 M'tۃM~R˿$~V5r:O4Dq8>FxTWȃL"^CeJ?5G R_::T۞1 J+>5>׺> !]gJUNeL`-JK=X3]Q+{r_XGR4Gw7sqHw6FhZr[8FscPI1@@5a"P*8aL [z7:@mPW>:}!vuyLhT0~$WFiʙBy轓y=aSbqRbEMayU3M#7nmB#2/3~{&tv;so71^[`bJ*06|a-N /VէDce0L }]i/luz&q?L5f :4xvL9 ,:#e]g}߱Lfq8}/CO')'PmUB }Azϙc1{Xp~TgYKw~͈Ћ'Jjeq8aI*>,$&$2O Г^,@=z)4DThovXX:;T349\n:1~"[{s.Z2ό/%BʙC+iOW #]\) {o;{ъloq]сSC?vMQT*Pii.H\M(DmKzƷ$75L=#0T?ayU_&˜:Z˂\ 4 !9#b6w3JЧtWZjm$E#ҍLUp|i!1^ 0X,/Θ9!r~r}lo;_5/`1݊C^4{$P]jWl\e" [DCKfbprYwM khi%gl5@c͑SzYj GK)Ȯp̱ZKwrȢ*=Z)jЊ8o%穚+uOB>'J ӪaѺw%/nAdfjHlDQj!I1S,8`m-mzjh1ܯ漾u?~Ut>7/ąg+GłmUpRVD 3x{yB1ɖX]}+Sa []t/,--x|UV)$jŋ4ĀeйjXɢ4E{1U_ʜZ5ʋ;pBrA&z{#\3HJq:خuuxٚs8 p{iTth\CL`Qv?gUˌr@gP}Wb*‚;Ġ=~ PS`ҠZv[=l7*to۫cA!]$o,od KdGޯ>q!w9뻩;{iRE7q߬%?Bv#I^Ns<{ D|Ԟp{j9Zu hxP{ػzci:YQdiOoFcae7/=] G.rw~׎H RS~,>z|ZsVK8no|S4~k}ݽ0BU7=y59l +U^jMW$8|̀;Zf';ؠ@d\5Ds%F9iTU!7{w3þxr'~S@2ޓs0nDIl |AQB/oM\\-w;|qjzmMw »8Jy;%WI8T P\#lkdH5O@ýYk44۸ 퐸/Eٯ~uC)a+8ߋ[2fW4?WBg9$iMb-t<\3}( C#v:m #MFCW[6HR\`[T\ܲ?a&lle>gծdA/߯&qprHek8)}BL ۋo>D S<<Y 3g퉳^+$t8dOE|+Oo6㜆VH!bE%2m: ak 璒{wh|g%^gX4̢A%qƇ%!"V=: CPJ%B⓮uXr[6ͰmšGnX] \eB/0ndlXȱ5̢;- uѼ{Dpi>&fK]5%}'#ޕG w~Ot,Xƿ8PzuWQ]}a+ER̹=͔vwUt wpۿߟ4e/4Q'CΗ瞽sX$޲Bƫ;/ݎ$Vn~UJ֟KQ#ۿ(`*Tg͓O$*EDždAv'坧":mRMp+Ȕ@5}/( y~|@8ϳ=֊W mRiCo#_9yqcq7`Y|"8A kR6Gح_Ngqɮ $&W)ȃCYTL>Xa*Mjn3EDj+u3F?o* f[p![IU~.W $|LYH+RU3_-|غ. ڤ'ܱM ]޾=JwY޴Qq$ ꡖtۦrJc9tNU! =>jVȈXOQ̿CQ~?x"\ݢdq] N#!+i5gL:,bw#{+5a!"`lq@w${o.rFR(g硨I 5Y5T<3DRUdlϦn43vG8mWQSPBȰ.%pvhW!o]vSzŻ|qS֒v#J*M2=~ͼSJ7Tߣ^KXG.ٳVyQmNx9^>gRBQMjbY)XH/r;JEHE {|΅6U O`:*MWxt#\ uI/nJ:hN܁ g*ڗwM;ZYAth-$!jjkwe ϖB>}=2b"2kFnAns.fd++,( $?CDs ;QfR"I[;!Iߝ/=܁IƈLEʻvH4@ny@jKzũ/{a;:#Ϊr(z/Y?lԡj~3# CE<ւDP2N{@{P*yd8r*݋k tTiXtbIF%Wǻ6@bMx?+r;HȞ Qy1_Lrƒ 5T"7ߏxp?JCYL?rt0 ASB|V"fx΂3ɟy6tŔ jkI ElW^'=,G~rSiYbXE"VjL%@YC<eCofBCoSg"Mr 6^Yrc<]G)-ٺ-="$m<zm?ڶ 78ۨZ[`A1oJZoɂ#80+/,S_'wXD TE}P_Lh#H:TڎlVS?7E6  iou*2#YI$}ou[TCxvJjn{|;z1Ee+ZxZoT̙X̀L +Y識Ѐ`v(*d%k#?TDV5.ztzV:=2Sle.\|sJHM1ew ! gi ȷ<)dE4 +Q+_Y+*RJbMg,,yoӰEx~N 4ȍc%'/&!M=eE ':vD{[;ޭAszMGr˝B1{p$c09A"0m`PfB[,PZ3f(~Ϡ4Z"]ϛJU0ѽF2!fӝ"6,˷(2lݧce^ o$R4)i O=POhyyo$SSU"@AK̹V]M A&۾@C^}@mr;x|6%X:1`Az,y2tC*]+[>b  :2~)b2_t-aބbncM>ǑgO &w*d-|,n^ԧnp.]Q-aÐǐ]RC~NA,#'s89B J=af ROj`Cs΀T~1C , ī{_`pPŧ](!Ic eR!}O%"VD|gP9}u/bԚU2\eƨ3 FB\HIS3wd7RBTc[w7Y  B w> ')9G6?gaq5/WJ K*tesvVrX0+4`vҖ48.:7S"P,9DrLk dUs~,/4Z}ґ}s^ˤt%LweGMWJ,cLyMnWCRt/ rXh"׺'@f~\b&C{i+BDEe\2VxVMIho>4KщZtuS["Nj 5uQ_1 {x96\A{=>aZ\A?NY!mIzNd(mraEFi ['εyD?i\&6! E ɀ/}e?O36/݃I7KO^=%eҜ`bgP1'W 稢q ld= 6JkGx{MyH-5O#>'ٞPX4sB>VO]epJMjgsy&<~T`LY+(ls(&k@05tZAsdE lI|f5Z_2b-pI#*~ %9[&&T.V $9]#XkZQ̀5.~@\1%N(f/rC-?(9|.ȓKV mGI6xS`'4]؞i|Gx8&ԉj\YGJ{cy@.X5q-ƸwD "d֐DOzC}@ȑǭw.vO% 6{5l _ v/ ng/ -!SgV`.QrA.7κ-*C)^˖`2khgC$fyɡ Kb#0nǏtaR^=mRv=ʫAOn^DDrH"/HDyv=m" Ip?D.P-bxKn"XREy;5#rp3aE[/E7ۃlj I*+N_RB-ϓ2k*"~>ϧͨ}os#poOUxB[ZU->h%I{ ﬇'о_|= ڶEz)R a&}r:Mz{SC:&vURiPf!JZz'L ]4[9IzdW"tCS^SēocV)uK&SB /ɯjNޓn~g :Y& o4z gSewOstՑMĊd\$mgyO=zMCߖ21OP} vzsEoU=㩙J1K~N\>)S|xu,Vo9NII~.'p )<n׻{ j"TnաLDRK7V.=4ǻl +WڃBf7=۲fCPwWN$h^$fT[ !A(ǫHf(N[ ݾ%&=,s`PHOKZZ+'罘9  " ?GlSqhFTEVZS@ }jxE%? Փ^&nEC/ "!<+*ִRUy: rP@Ʉ.qrzFbz.tvʥ`qԨp8Nz2))"Ywm0{Е}~6ن7{(vPezu?,<`_^:$g%Y]gس/jjZx E-Xa{$ۭ^ H~ LZI"K`kD ` TޝUw,) B>Եx(TݗZ%^Qz(C6M Y\⧐?~f>()=+W_oizB9bS]=l2̿j<ثAA4A p7zNx=%4/~BE$5¬ftZ4IM.h[9N JE b@U#TѸd37EMfL] Uo9l"s)zb6Eh|0 ~58Ε z% ?{ԧ5Bc @'Pu@,90#;䢗jR|Ggc]Cu`c`5#zh 'CR'cZtFg@vRNL7, & *te) ɒ(gt5ς/ƠňW )J_-Lj,!]q` LZB}h^mm"ɽg~oE͜dC=\޳R]="LհW""#7`6 "2[y-> Pōѥ#ștUPim{vt*s:1(|Tf ^K^97QDnX4ULu%.k84=S_k GWۧ^@iڋ6S'AfD$ge#:ۊwzxN'%0Mx\wIIb?/-{٘4zH=cYtqbQG-L,'8r PX5$b'TI_W0_kn%C_$qxⲁ4o=_DSƔS yW`ϴw_FhZ")uGnA5 㓾i~&`{sÑ9=IyU[\ QN1s:>4y* GD48;Msu!H1 6eHZrvn"9:;y{;(gfP ,/h;M`L;v0F26=6ԬŲGK7adBQ<#З0=ANo~P{;ڴC|t+*>p :{^Ugz}1aю j3|6o{{~`6LH~spwG~2IcDcj@5iʤnSWlqv^)9$" 'qQwmDˑGB'E˄aLҾ.OY= ZByX0暟'96#[Y߰ua%oJ_E'Bs 6\_GE s +!u= 퇽$''-C)-8m*>W D"r+tSd<D6\<ƼexCs<\1r_E,9X6ܞP$RZjoK0ABJ`g. x$Ѫ[tF?,^25,ʶq n̋H3gFϸX t { p/N>z hI0Hh{ml*"R hQ[ʤЩO&/`.c5{oyϹ!]G5.O; U+iE՚&xgS<m U`a,Y[TwlekGr!!jZ&m1Kxʪnψ%jsԬs-0mx"OylAk}=kzv_}b%eyN{P24O=p9n"J5$ &ּ53zBL]9o:o3L`Gg[B|046lYݞy;gc]/r!-ze0>@jOZ gֆ1)T> ThƉblKj%7 TƬǡ %u^,F jT==zT+ΛNfXA5QA007-;-dz+5ENxvZָ"S6|C6A[4l;[DZ4U{Lp eS>{}'9Yиs/lي֪<+sPoYMz 5__mtPCЧPYmUJ,ނ1'{6d-Y{?!`C `ʼr] IP$C O"ȤB"CKY访&=R! ^F[렆 1}>+)Sދi韙 :S03q 'M *Jd_[ +Z'Է34BOOV砫.2نj nF, TmgAn朗M@ 76VTv@cyBfeLt\7!('5"R'}B8p",ÙB ҰN{n8,wRRHFhdk^~U{=afEl)T7K1YWKB!MJjrҊߤt! (K`ݟA^,Ct#R<qPC0 OgKЫxzP>d喋O2- 0(#i>h@ s*p[E;y1lD:y -y;po\.js݃A=Rيr$'"XR տt@H K!wEn!l|Cd|OAh qa2!2"4=xySUe}'<6PKOw~D0MSm xdpe\B2Q<%e EQM2N#'CtvjsӋ1r;gA/hLM;9"_DNS3$uS9nh9-rxDo1:w`&bեG-8{@pP*:H6,ԑg/h5aHtbsb1ԃteS;!w:dd>Uq0)R<>.B爻VlRxb p[SL:>U ArQZUZڦY6! `o,zP*UO)9N#0)&x셧t CLm`Ou#o-LLP;<޷R/It:5s^n'8^fcr򤹤u 9A`Sc-7V" 7e#gE.N^U)Ab-άbDoM &x]S`gnzp ,5Z!n]` F^|”wqN MoǶkk_Tb_b{}%%χ; v A yG)MAz^»66:.Ńa0HW>M?`a@W8kV$M_!4U܁&xՋa@/5rOdW.gW!pOg@G^sYRԈ|TAU2-=}Y a5'­'@A4ؓ6~NoxdBZEeyGiT |0[ A4 ҟ|p=R=p\yL+9$1oYDyGIIOJaIv3`&g絊- %]Gʟa>I&z !Zڇ=)ʪ };j}U #3v{fn(F*>[R-uф bC[D>'堃C}n+3%3?Nb K(OE vk?r~rACZgrX/ܐ  {cka b(E dژOE cVD Ny=WM&EnVZ\pHS/HyS AɨgYjAާZn!7ZV24ۭ#A:k¸ԯɃ#_ ngJղ]ػ AJw8}vվq@ VD ;ė>ƢZ!=0:Cv"y{@->XQNq(+1G\.&|'h [SiH}B֯ʳT_{.y?.QBRSܩ&8܋`0ՃcsX2#+0@_9E>Yz17 %\"S{QrjޓvUpNv1TR6y7cyrHؓԧt[Iہ[unvuSFI;"25D A3I+MXIÂ|=%?@QA{xp JCA46O.5hzu1#♆?$ߌp(*ӑ' O< "u T`ǖg'2Hh~NABtU)Eu?CP{ϝ&ikr.Ea?"2=4ynpRR ƎSt g tjB8bQ 8v?(|}yq8edY߃*>/كN޹x8kB,ݷ0#k>1$@mA7u g6>0xũE-_ot3o}17;fE =qF(ԗ0 ]>%_S'=}BK^5HjZaA2UJ*_x&{p0rr笿#P>iw[Õռ1M2uZuOFԐd׻O;23-F!q hZtuiC މo Ϻ29mfSCoˆf…kP9i| p8 iu),{?oNbBz }|˽^)@LY^gS Ny0Y'4ubmEgI9ɐ9EPL 1~w!Pm ToIz H0DYXEԈd rH=o~PC2vzr!?2qTGS{rs1pMكpf-_w ״` U{̾DšSuP[E`C8iQ`c4-O^X>oh '>k۷ Ouvf? X{/-F咐 2.I:>1pTI|k?vV C=F7TDPhV@\c.g(ueؐx۷pm1J 3e^61;~Hd6蚴G3=*5P;!6z1d>H#Ȳ:c@L]|x=}E$% 4B=h Ȳr J)gϠ 'ARj[4]H=$28{0&y yT~njP5f5/1@u#|&6`Z}10JgQeOU&`%#@f{bEZ;~Ѓ}-PƎ"=Rڃf#xÒ2Euʈ! Dy~lWdNOBCIž*m|1{0XG 5hr DTaVl;y@tɩ;|+J] J9҉l&Z5 j,j5k^ 8U߀ 7!eE"@ gmջn,Tm VzhxTU9+Wנ6אXg7&]!|y8nxK-?AY#L]^hO*em:`~wx2۔3̫b~yY2]rR7/)~UKoSJ4;ܚ!BR}nL)46'F^q9=< BQfJyB8D| 6 Kz DҷmyQ',-Ѯ&CM_!whnu=@/\6)SIW$^%)[&U2*G| bk46USuVX=E#gZzl866M^=]薥8A2zւG;E5XDR.i #srVC @\U.,ڃ2D<66yT|\_{A Ĝ$0-oR=|% gpHWu}/]oS,QT-{( E;5+9戵*ǒ̉dѠizesiD?;[׾٥G%gؗ#@*DM"".#(zm a0U6B4UbiBaWd9Bh3Z5| Bn~Z ą{8C&8{T؃^1|6N(*C{ix;圡F6q \O[n(}ɷ_ D9k/j'؃d))m(PbE=n.k= ۙ'?>Pwݧ.z ۴Nt#0qz{1= /+%PEݷL~TP2?aVZ^~WctPK6%Z<_ԗ>ȪATUHڃ /pʰjWlDKAz*p4>ܫ%dՎ4!}ui6JD}=-8-˶Ƚ.i %LAՉRp$x؝ ڃ IOIHG,nxї9jj"#TbvAANM&Nw9|B$&eZPCxe9}9o AxY> zBPQCɮDX$ߚR1-,*ɮk~;ηlTMS!N|"wFD&Y˹=+#Y]ն@doԏB&_MȈ7|W{o(= qi3!FM}q @40/dt5KF URi@D$B_a;)f䏥K^\5 #lI: f`۷zJ+Bud{|BA%7}8fO vKmR;<4sws ಢ= + zHRyDxRE<""/Mƒ?/$OM2Gzd>"rʤolĮG"m2WB"4@OWO!g6dW %ޜp~X!DY0C!7JWN`R >Aϓkbrw#h*< >B₇Ӳ$Vb2uP34_*834At\-)d[}K-V x-0sɬus^|pܖZjAw+]XZvawёpf@7A=];vw;286_2>si):Fb#/k* H 3w>϶ŤBP`kN/?I$!K G{Nc_DW*T q^/H3S^H^^ n独0QG;u Mm&P+=ht"+#n ^鴂MV>Rv~PEK1\=b\^m Z8З,!=CW,#i28UnTDպtm8%Tr**i0A tL~]oݔf2HЗO<}DEz! &Z> &B"#!R3L7BsB+PS}è9!)CC z|ڞԪ5NB|-tz<+R`SebUjVɗV6&LlvYę9- HAM+1g,.!S+9Rk+>v/<^Ӱ0uՌ:9\笗C( {P.X-5h4yÇ&-"Crh|XOj5RMMfԬU[?Њ Kҥ=2WCf$ˬřlFP륶Y%qZ(-}-Lr,w {7X~]&m8yo'Vo!53RٕalEJPzdC\D>&G[&|s/kDXHA3tRQiDi6jHjsD漋w~M4[!E|8{BfH,:\vbWhF1}|98(D,qF\8JdqOz^)JBx7AARQ< U(g\*bG1橀`XsU( :Re#{x, 5!W=U /v#J)}MAnvAiŖE VPsm^YA $%P~f6TLb0qŪs1B`j).Ybabm `@'!s}/yG$)%̠!] PnH<&O瓎@YR6 .^ǧK )lKʏH& 5EQVx\oބ3/'2kdYo\<&dԹ&'d63 5g^1X=&"G,YPX6g 퓬N*8X;2L$DL>_lHxzp/"i%ѫrϗj`-rnunWwU ~¾y`;2"jI~" {g(lKj{9mv=;>'K!"HzjOKɉ;L*7Xk[K-񴸤(g%2py!i7^4ښCsm4RV;HiƷz|1seya0]q'A@γ)`|9OG6tg[*҈<X'roDj*?RQ)P\RZh.Cn[YcH-`yM3(N4%|YoqhanCwYgIUc6yU_!'~}lSQX0 y9ڹz%]>Y}%yM~f6TAkM۸;YA8?3e-g_Gk"+|Pv>h\3ہ8 פ ?H3%],r MW5bH2Ll8-!/BG5LL:p>Wk_V09/U )-kHyn7=FUW \OZ_Afņt#wfdKr ʵT3i/jI@YBЋ甩]}eASPݓ<PCHlh<Wks?hShxb'5lBYP$4 [}Pu[PyUAtn USދF@# $=앒vQ|DXslwZ0)w{Oݡ &7v'NlE'pYru I\{8߃IH+'_ Z e+XAn}_\Y_>ή Bs}NnJ6ʵO+qH@ކvU۲l7-qέt;g\ZT_9><ޓWxo?x)re(w7FYج?!qG(?I紬?=O[/W-slQ_ν@0njɍ87jZRqw4ïR/{b .Ժ8iOX?;+٩AT NTKm-Vp'; N(M7*'xkm>pd̔OwAn^&">b֔PTifLû>$Iw׺4U7'-׺ _UP>h^Tkyoo.J+曚,vۛ2 KDs+7s`PN[UmojnaP'r=im%2*ІYTe=c]|㨬Ͻͅܙ;kZ'O=TJJ.3=hh>{R8`0Zڴj= :ClHAZjCoY ibH'HrN6Г8SCԬJI>I@{S@wFKGf0(,;@J.T %̀\8>L'/Qr" L'R#9$IƠI;Dnfv֪]r^kvq8wosWZ4E`>Ud]!>{hwrAc[F!7p >=U4N޳DIY:0H '^DhR}P9#6M30oYjPAЏK@9CRs|rHW\2,Ϥ>l+B+ūbgXL[8r.0Pc;vɚ@<%{[sȚ#Gz }@AD vs48LY;w(ޓϧ|6#nx7ou9!Yi@]W;߯B?hPܠQI.ӱȬ@W'^A$qARg 87_L@YyPmB4 pȷ]{A?! UIۋwЁCAPԢJbK'01Z # Ex6RsmPJξg2/" C8֑qreeU :jg i̙s<gvvF."qi%TcFTGf+m:]ÁT=M<ĪV%+:B8m~Ѓ(w9ӿ$BK:MhW`{UOBϥ)_@94,}ՇFdhМ޵"u@OWJbb-eh/BЛ:D`BIi=2A /'l"Z0iUն/ U?.L&%X;tJ/bT>\W wa *4ӯBRDLA}&VaUo:TI7HI ~y-! skԲڶ]oB@`[޳)5+Kv8"u A l :#rX! P (mNO eB%<ň(9Y2)ny+5 S J.EKYR~~a z\L3S̝@75Plnv⚯A^Y- xT? D+>SDwnTe׋I0F81˴*feL"-V^ad6Κ2Fسu`aɬR⛽-Œ2}{:_ǯnEȌx|[@{U]A A(c=K뉠LeX?(e8 [ԍD5'*%4fiXQ1a^ =hxҹտGsԊ FJMB>&j 1TvD#CqT+MsfTN{+*s  ;ބ畓Ѽ fխ֋tUu4Em >e~g`L$J귴 .쩍fBKlVd#^]u0(ӣu `9?AvT uqs@1l_F87~PCab쾿KW2-;%E2ts*bOz4!Y[U\Uӈ0 :,zė޲}D& ̭⬷uf7 ޱTO1rӚ]O^>}=)ۍ:^$y4fW[A A(N׹@FfK?T(^»zQڂ{7~S@P\ ]PagNx/H̀AOR $Zs+W)\Ѝك_^Bت^Q/B8jiﲘ)ڐ9) sKYN3D4ښQvM9}WeuTҧ,vdɦHPبWrr.L%t;콨(׼7]IH 茟fb8!tlI>zpY(}%`{>R-}j6`ydV7azB9M*PZ𮬼Gb2 KqRէ[A `R3N{{⣲7+J>'@y@TǿK؃*"2?h[RaaՃ^`RMy;I{JJ~;RT\=/{R5பڧYC$Wļ'8o7z1D xpoDjZ;w|P{Km־BbyL{(gTP}k6蜪% ]Xy7F RV"\(R d;-$rx~}e1LQ$ś=gpd t(X:=A!W5fd=Jr=eiNn9Xr%9 |t T؃*E ri1}yѣ*/ [Kubj}@{NM UYSli^ɛd41mw~+'އQ*^hC̡`+B-쑝yK2ͻ| 潔c~=' ޤݼ[\q. wI -ղ+:g(V(rIIWD*Uo%~ڃ,:|j y8bcФrVCמyAp3:'W:$QS͹O:l3AǃBsNQ`% ߑ.hF[Bo0)@pEM-mxgl;jݣ cKm!tˬ;1|}<(t$nG-5=z֭D"҂+9W}l M )> -MghT/UՃك`籍fI >"bC$ Zz?3ayZp:)$4@!߶ 7KtSbI_].BOK򖇚z/^\ަ9WmDGNkw+Y0"DU 0lw{%AT1B&>_ YAtABP$$@>ȪWT9OO/'Q<FPOwfN,,U 7W}H,&ﭵ~/AgdKB6E°5Ui慛=mo^BubA,(&UآX-2|PU 7=!g!`za5!Cz{'k7}\j7Li{$e&2^5C7d4yEd$nЇ0Ds2vp5KE=b ?==ȪcIum"@U'$ wRtyrPjhEm1zkP]9 Y!_MNJPCTt՜Ӽd_RYP%>Ŋ0(potrC , VU|.JԚ~b+~â3ac9P%/Bc:JݫC PIyYۘ6Rx*쐹,5z^:dQd-& 3g^DmwA O=Ꭿ, [ ,2C.٭ߺt Zqj>ɜPC0*A2n -^Q~=fW^, _Z.I[^"`_Ȕ&n TZ!zJ/ *+ۓYT. _,/,g=gzԆnƋNQq$ިڇ2wd" KԆ`IՓnoloׁaP=HnGijinξfQ>mW(H[S'ᚥZ@//w*G4Mz.nMԸ77Z)T^a|BI:9 %'=rqN&1,UO5?ȑ٥+I_KwE`iY X2yLs[&=68)RAyi@xM}#EAR2"׋~Pdu]}=of:}0 $_>Vtm+-,ăڃĊګ ;Q)ӆXol Ĩnڮ^LON|2rB{m>!jIJ,>ӭE%Ѝ t'o(0Sq]&-M,E\~'P_QńrΤstS-qkI2i(zeظӂ R:PUڳ ~_}.H/\=ECӊNI0Ubɩ=F^齻?=_Ę+~[rAeVJJ\Wi+TÂvo?!82]zrW~ЀaRm6+6P"6۵ľHhD~BA@h}>aûr {IVoa>JU֕[1{MY?jzi>&wZ076$C˲ehAv7=@.n_TcI5%-@랎89ɗrֲ%/W0-c?RV(݇<‡JK\(ОfS {מh. 43XdӀ:6Lpg.i )˙tIY)S͡l _MOYk-={&[8dE Y6uOlxuB kG 9z5,鐍2}' fQ jJznw,床RJp,tFδG"xO# *Uϙ6BU y!*jJ_[ J^55 pP {76怔@0 fD#eG f}?odw{MњhLwMfS :H8ك(/kcZAPf䱎yƗ(D5s~B#_8ܹ˨Х*Ky2@o-yE/( 8S56#n ^8 ^j#ܨz_'.FJm 2m٨e/ɥc糖=Vb푳+}kr}|z;s' oK.Gjt#hIb03qC/fy$^T%4L*IY0! HorL.Qǰ(:kZnM0jGbfis^C`^>M>^"qR-4KiϬ"eYó8Y,eig|K_m(ا8"@甒<|ڛkWijn!2ڊ_!LuЃ *o:ГiyIȜ^Wۂ/eF9w](t9gCu D+#og!e])U9*9(X #h]EZaO(jL[T# 9tPmoj=x HF"0 V=@ϝ;O%ͶH,?I:)?8蟹HX0% d=pNz\uޟǜQY'U&O0F=[ZzN:YQbh3r]?R 2h[ 0ڂ^No;cb9 7TR#]skJ= ѻF6#]ۻU·t2hk#)6:64n3Kç޺6 z*=Xq6vjWكyVs<{3-F%斿sN5 Ü${,\of?fRڲbw1D!v0}w^z\a!hR^qĨlB{ ˋkRIcFspC\Lb{p 1D+ .5o/JBcVpo6g"^!(1>6׫ {TX ` JV|v 6-l+w0~H0  S0hKX@en9/XZ)iRs޾`a*7μ)p:0{9k#|+\ZbZ>/ܠ"[6K._;?qEjy`a`kNӛ>&s@BYJ#<\i2$j AgTDa>@{Ly3굤ZE֕}Al?Y=/Z^tl$"|ԑa0иr\W_nL, T@d*V3󜉬K?6f\`ᄘ/@uPJr| ZՋ5pG9u`\~ڊkP+8zvATHjٳ DVϴB`5MNUKA3ij*˟=' CJ@⫐G)CIT)WsL| ̧\ץ8`ѿ3|Ut I>ObJiMڷ+PjS')?_AZmYuFՇR4qء;zsZ~NBɼ,7?V'$m9>KeH[9' c;4 Z/]n_?`zG2[sخ&=(U?M<HQAKY$:a{>J( d(f rD|(S(:t˽#~葝 .$~6@zC, e|nX{Z@tAyWT}.YFT̼y·y*8!tQJ ϝ^Gf7;Gy4ܞ CT/DqtȝW묙"*SL;!4KBX/TG/')餚?84d1奯hոbC*; A a yY!hligy\w  gP!NE;{j2i"Ьן!{oo%|$`mǂBJj }8vC- |8uq˿>ЮpU<+Go=?Ht5*^(:4cBHkD[ X\e7vE?k Fnu{)} b {=acT}}:Ws*ijz=؞tS7k;d]/ *y>F}"T] N#)~3c+y#E8騯B"(s \$=0CI%oPln4IW#IW3 }us>Q@| ;HM!x6>FʾL0e|oEAT4ihyۻ_QAC|O>bXAG[;EXmLo^eIvH.,.Jnj*h{P{0#u߯ı ';, TQQK^>~apCzN)i8 쒪K9=U8м>ƉϦ|VU.odHEUk Gcq\}qKA7q:dWrb;e|{Y?!V܆*L}*: Ł @Q^r{HVJ,,Le($Xhh}ȃ@{ҙ߹em*6 }do*ɿ(K_Uf_aPWFGfsv1k./eWt : -Sϩ/{NNO\F)*}'p=nCViz,bhp/^3/G4 K_0Pk(&K#L}ˏ$mQVŻ/Oo4fu7b@Kv9TЁ3bڻꏠn2]g TE/z橇k!b}|2۴}Һhq9BOͯpКԺ΀}]$V4QSwEл@?AIM@˞|l OXXژƿ 8$C掜7TEڨ|dJ3T]tX eqP;A1PVs暷v1uTMg]wl81ruqjY(]n RlOCu/.BpڔYot) %5sv[sT39!hBIhl&V߀*=X',yLaUjɔّ|<7T/QhB˜z߷x0`qD/ jh%bu:Ҭ+B͵YAzS'>7bɼH̊0H 97n4&bnt+#' V$_B)P;hCAȧ!´oaIW 4SP&%xamx ={A+96:@cĻyIrW#3k0).ɧlN"Pz䤬XAA>~rF\+h.,@G(|[\=f;X|T`AO5&V\ 6ēy@PX׋j")bV;큔K|qix%ZYIhqH0]뷻xiҐ Hz%2qSDZKKh+jYjB =A%)@UL>]FxnWlΖDA5;AtbokvHh-WRtЁ`TI9| 4K`~b"u"4E4nw5dJ=>7^G2'KW:y5I$_uRlSr#${\=ضQaujs7~E_iJMf1t<0ɹ`dT]4qq e >S"-޷}HbO@_+Lzźו~aO#ːlN{9!4@_tzZOKϭ?V. kýFhbY&sEdBR7jFx5/۟SmF2@Z)N''Ҿ2*@o YSTYg\Wf5c㳺ߤ:ax$,Sv-bӒVaQDU:eo74!O^d1 0I⤄*O>۝ 8$ѥA#Y;)xS܃/Fljxs|'tv_IRt@Pa6#ovaM:^d?׮#=񖁙0=XU=)o*2n^A0@M頣EBa2ҥz64RđrQOą8YCA+^fiyo1* TΧfev`'0-jkVv_D8.X}J{9?YAs!|j`3-HxG?ro0g>]z{0-qS咭uv9IZtK:W#W滥.vI$%l,XYoV!ZREw=94ePabZ~~xPj,r u=kx@WĄsY,D7{ p堳0N[e0Bm@!Ľ=(J_)iJ9[S26w}-MMW9!k/~(mlEf2}2kdcz {].$6VO̾t`=V ?.݀Mڏuz")z|>\H+}>6 |^;!@O0N>6o E D#|Z;hWeuɾ;O[1! @1/m+HKW^:R?{=/~uqS8]ǵ[v6;L>DuϤ`PNOnOzfn$bwvh1duCa`qW_5 :# ,,4|A2q0Քn%h6;=;z9s2IG=9sBX:F!r+ hzȹZAx 䔏حtj颸4NzOy#Ƕ)4Xudt+dJ_m`S0&%"K2szm󂉬G -u% `u_Şa_<)H s*W`0XK j&ծGJkPnd'(vㄅr`Il\ UW,#t-NJ^^aA?(NuՐ)(JD5xw;d>+@/]XE! R|I/~z?YċGيLcҳMn9 [<5kohS9UN%B|}Z $@Б6 hhN >ji`5KeM  :ЁPG1u]/%^Tj`<l%-]Mx+z$U.89Ӯ'B\g[.t,9Nb9Ր>pl3#A4de ;EhcT_!LN v|d)`aS㼀Y:0 9 hEW8 >b/ŷG3q?\rxBfGl{לC츥)l6taF艁yJALն/R:wuЍtWYNcCxQNp9}wb\y̧!C/óy'V,呕Mo*^ ?O=7sȺ[!{.VجeY"_8D(Hg-@wo᭬K2z&kU}pƑ`@W:P_ex;ǹtHdo}V^)bc|= H#wZey@,&TNyOq?fC˵Ac >!yR4P.wU8zdaЖ̒ywUsG6̢Oo}93Sr{k1\s 4wfFSڻ;jHwPW @?QT| 48m+Y 7;%`r^_B*֔$3aL)L}1Qi1l %z}. kh7v+><k(}Ƙ+֙)$}8nϊs_}C07*Z)IN2Bk2jhA'#9m< '_(y&%}/^4sS)yXJUS ]ۃf݈ \jNz6@h5wryPŻBASea)-o?+C0jJBVfvJ:ZCEQz\h!-?*,נԯ+)q7MPh"{;$8#uq]۟bzd<+)F.@癡]z L']zQh8ЖYlD @[yScK]0a@h5S&b ҬtSFBTF^+tVC,<Ǐ[j PC4\vPHDR y78KMȳ_9S+μz7&Y>خf>KEW;vc7B G pǢiƯX-sd`,ऴ|dLԭ%l(=ҧ~=K2a!z`JzY} X[RKb47?Qz h0(<m?Ph5nhdXB&FB=1dœ<~+pO'~G #S6w~/ ޭ`oU\СEh(ZYd}clH]%R_LX-kg=mdcMY2Jt=2 f_̴*K>ijs٨G\ @F!I_Zy,ͻw*,(iNVءjM+m9+q*D,ٻ㩷'c SUpN+|{h\j)'۷sT 5'`i3 Jx4< ɡ/RiB]-> 3%O /wWL&`asKKDR2~ [s-iokpzF@vCѬt_s!VꦿS\*Cp њ$@ow5i= G}JV?jK{b,ʎJ>$(-0!Gw g]UbLcB;gL4:dIgtN!҂;[=}]=*@3.Oɨf%ϡYM4M"z#.hxPO+-Dl{Ur()A#TӄMX/wo'% hIY+Ӎ< CXqJ=-dIb}|k$Xte'9(Kl8{@ /)Oe@n晰}~B. H'{=S*ͳ@?pgA{(ǺߡmiZurj}S t >J)sѵ68Z BzG7hQ#w{=JmB>VF 2'';eqO .PN jbpPH4sU!<"s5l?[}ϊV}PaOj;`o19Bڐ4jֈ^ZRb?9X=_H"po,K {'U9EI}(Z|ΪvQI@oTzJޫШG  ?0a?aX"h^Y.t*Q6􄀣^6LA8QueUUP)iRR_at5}u`=3@Ji&k>&G e=D-O9;G6fEH :/AAP\^nl|G Nmj2+LUZou{7KmiNMu{]JmO 9, 5G|I{zԦ >@KG bꒋ%tRKj@Q@Mi5f{:LgDp߹Zbj5I"Yi3;w4bF pS]>V{ۃMM<wj(܃u>ʺ:SP!t9/)biOL  JW}^sXʂXB4]r*4o0sxs+q<(nk3k5#s w}_'EN@;5vӺ|)5^~X*1$\*DCkx' F saϊ F-y?P"Lrۓ~j{pH+7rN;.bݷ=l'vؒKu=}T}&:Y)8ݓ!=Asz+΋uPQ2h&l$r hfhPe@QξN'!{c&elzQYT[;91[û*=?J9U`*@e%#N]*/{F ;GP*n'34Sz* 5^ۻ|͍;Aذ77r)AP%}i/͂MnO0*{uݺ@]o7r)RDxZ_"J}Kj@ WrYY؃oj ]f 6+h~CY7Lra (L{n7P* O8&5:ӑyI.؎C<vi_A݆G6ϝ5o~m=؟uМ'I5scGG !`V>M_9A]'Twc5ԁӉz@ݐuHwܦ_A1P'W>"/[z`,%3@{ k1Nm z nT\ӰMoҐtZG.}dj_^g9Fn%-n8Ȭ{==z9z4q[~n::줻OS-Liru*XARu?ƓKJ*,)Y7u͍R.ǝᩪd%XafM=)cE֜Hkw~ۀׁULQ]>\h8N+bA9G{7كb=#pE׳$"Өmex?zXLAGyA{SzR^x|Mp 4BZ/w=h BdqS , ꗿdfIe\vlN%y2z0!p#7rE|ͻAϪ3+/)1ʵ /h`(`q)< Vc լ2*6OaFaK-E3YY{:l!Qd`+S ):KvN<ֶF=|nc)"!~!L2){-pXvJ>B: %﫜z[vN5m Pe#R]TW &$x-#j+ / 5 "Qw<\Y)fqpC(;.iSe\UeD)N,j'5pWzۊ-05i"R#K|uUA} *c'ci\>VߟTJ>4K,j{v1޵eY;ॵQRbiodZ^*=ߝ5NUBitsaz:S/ȦicC]i%璘CuAƗSHe 2c|1KkA yDaﰥ@vƋS3c)z'*_1v. =$z[qz;~@tG-.\'EE:p{p(Vl&b}A{$OS>rsh\|B R0ko؊42_/%yqޗė Я9^s^Fs]9^,.`۹Oh[p*NX)i>=z6ƟضX^ U,ceX~tt?5,BL@q 5"vpїI*nP5HC\tO+u#.5A"b^'bb,$Sjb@ԳXI'kG)%s:Ox=4—|e+*gDd-"O{hP>X 8k& ]ml,I925sH2!L{E 19,Up[;~cI![P:: I+3@OȲΕK z&XBls. HVuZ.S-3#բ^kA{Yp XxyYzLms3a(ػV/%!1twϠYcFcd{W.v2UtD?Deo:]"Y41}ڃ ^R[ S!K*ٳ{x` ᗗ.|]~(]lT 'Yn1=("J)Ԉ=,t\oZ )NYT" I \O QYZ>LSe/ȉSŵ Z۞jcKn=rid`fYi$O- c;AICl1z{l+Ph@nYd{ {W[)cE }نWGS܈ԷnT+9xYCq擋{NCoCW [a  ɱ?'\ury[Z=ض<0Žz0p9nq;O>cߩȈ`VWx 8B ~_$4Zv7|::_65Qӿt)|x:p;Upte гa͛ vIge\no04ʦφ#pik]ba~#P YԎm9%-g#vƒ9CoN\vCQȈgeYȓ 곦Sf=x\nxEuPg>mUޗ D3&q-r"Ѐ:4:JO_RajE_P'WneiEAH]zDѨYE 1 t0}ϱ4Ggn>(tw҅WB:.FC1-"/` gso4X˚!z{‰(&q3CTg=BuV2W\d\/`e%lmޝOlNZ;0+YF~7TuTqw 35$,41WPq~ـsv8LT}IXޓn=懴]HM {{Y+ijhϐV3ꋥ,y=#b2dh?Nec\ޖRپm$!9+o~w|UGB bj{ؾQ_FiL2ct@pj: $&5+ĜVB,b;%QwL[z64̫C졫i#L|0v3?`}xyE~JjKݱ1ڀ6lb7lXQwEnFZg/̩R ⊄tyz6=tyBҫyR7ON1X[ⴧ"$]ą@|@?|x6. ȺbQߦiZb^Lo-rc>euB+؞4șp%hVMYޟyӭ4.bG!(^ޟ7Йu’5AEYb8D`Zhz, U]Bn$:#MkD:NWu~BpgR{^ְKħj0mA'F%,ReA ^rX0@)/F?И0IjYڳBIlyhiF׷.o/4e=V_/IPQ>3"Xچs..xzl|Uo҅sRhv=LXHoS"|6v)Dty(B//} ^ *R8'ҬJ~.o[´@Q>p%2W)]䛾?*zEab0q-ťtLVL냢|RTӕC9Q\":uӣYε>^{5>XG۲ɞwlZYR//h=՛J]O^b{EI{FYFzXa$e1^_}rrc& 4q+7_ŽUDZs08lqX,>`UfDnQ~:=^0BF},7k`\UAA<{ju.n=s՛$쭈=ȝ@#.7V9U۽X0nR"a>p`a`c pW9j J|ՑO$\_ '3@P jtPzb}|@X\g].t# ,zs.vC&֐ʴw3zPb?(~R@m/Sb`5||}0lW}uc^oŒvM*s _ t;T8'PrQ8^S>~{ XRɟtL1#`RIkT?>\^yJǬviQ%K #"P,D<' |e;yntuv}pneU d[|"m-am5;D:`l/^M!L:a [e^bqrD+}c@(X/S; R`_AfkwWĹ1^ٖ"hևOVyOK6;ǧmUP8llg C52wa :>K ib:#DX}B|Q`ɠn;PO>52򝅹 .Weaˎi}y.Pƍ; 3`/8ORyf}^5;Dҩ䣱؈-a7:5^ksQmmL~(ZyTScFՑ_l`\rc\2y<T:+?I4_&gMڌ?S5?:Dj?~58p(gh@[+4MpPt\이zo!ht*_+4YNʔ<B6/wΈ=.m3 0X];߀4hqH g?]' ]5SE>+G1I9]K3z)5{sUl^&SÖu`.2gc]'$K vy*@ @y;> g'Z1 6:ʼnEIk{))8e:CIvM|A0 {F2E {8_֒}/Ҋ -3][B+2w. k^~U>B-)͌3>3Nz$Cܺk_7Scخm\kgƶxէ&\@YF(g=|+HOp^SpȖ|_;o@lM)Wpnn S$>)zl' @tkX:2<σyk^!]^'Ԥsk~S"0t2zyh2ɉt8ٺ&ϛit9h&:m` cX,eȫ9*SRy"@)_zHu~5fs6뺗ϴvWȀ}6Ӣiكď6#j;oiR0 ([[sVgAm(V4Yl>}?8)8-^V;Jδ;p:]+8=~h DttZ5{,6_ēZ˼ơ]G9,uDY׋3RJ _B)ʵmSu&`HL _jܣӎAjkTĭr:qϨ2-CD7uzkhbP#NSZqyx7''ln8mPOq-ATRChݎыtW=p;_en$k%Sq_tJG-@KNc1ND8^q5:Ŗʉ| lI8*S5{۫)&+=i֏3ߖ&>x% pK'GXsvxF_~PЫ{pPCbA[YB<.)Y-ghCޯy8U᫞`=|Fև C%qb~PZ2; 0v].B@\֑DbR;hEy]K]9}r(c"kW'rCh}S2j'"ؕ;@o*,$ ]3 a/6x $qjZ%K^%fV4^ANYœZ,Eg$@R|ƒ{zBa9mEuZKѐe@1ؠ]ֻ@==yu:ZyYϏCx}]lBhZ\DE FX8*YgM݄Sńi[sxNӱ5MZ@Mwm~, 2uxw lꔃbՒbᒼ|̎Bq)+U`ekϊ/vCH]:!-劏oHZ(qU˰3N4 Ц*;\7ƍg]^Z5fւWHSW /vCN aΚ f>|ݟ:'\Tz{~RJFA`v?grIJ={-3hqovPoʛwzHgFOq_^xλzҕU6Iת Ch?ZBkS gH]czjQ]AK M) X8$f\ҳ(%A`I:(83T8K1?+ C -ڡ Elh6]qXp.*ʑ ^j @T,G{y9JjAZ Yu&ɖL{n%$\)%RZ@#wPn߃Kѐ^ZC`@Vjlñ9&e ,m91;7*yĨ˰T !4JAٴz&j D$<HK,Q(|/hY tr:tC~ ?P!(xwө͢ł#v1qa#Kr:[DS ]:4a"Q=zV,JaP˔=dZ^" /vBt:8tu7޲ne]HӊecL25^* kQ-?-S; թu -b}ܜN]ߵ'`UpG3aVC韙6èPgNP9^L^KAL ]JI53iZ<'vBt_b>mi@4A$i\35F/lBIL|Y4F%yR٦۠Lg9)#yߩEBK l4,r>|Sc&uB[I|Mcr%D_,%ʫW,<`οgٔ'vPBw6C!sK̵77(&(]ȠC[;Q4^礄͸RؓAp`$6Յza*$|QR7K2uY+p'а%"[BF!tΡ]qȽmsw5PW?6W\^eYVF2dPg!C58;+v 6͈a9WAp{y+gN9eO|PU ՝v2R|gh Wl|ݐ֝@ǤF!@X=PG;[l(A<%[#`:Nu-J&?uy~b-a6!Z+0x<}lcu^ԼgGoeaUkbq^=~{HuɧQM'd~Z BlDj^Olg*ooJ pRSz.m&*mFCZnm nă`E|?F7\2?/ZL9t|2[[N:Biԋb*DJO)zɣ.ui`|I?^Stkj֧N.Ky{\]@`r nLϏ)a;U.N ]܎rsY"x;CB4xA= _uc;4HoG!Bi镃_N^US`-:ʩR?:EضjO;Ugº-ЉX\Ҏ˩R 8CEEWlxZƠkyX/F]]vX˟&ʒîdO{vo;T2rdgKQ3~@EN7VRrl\TD5([_F<0ë1;KU#Щ\5^Wl{qޠ P.Oc␀(.:gadEo88{!8Жedӕ{~̙H*}lXB$}Ζ 1hɽ^13 9N|rj0|-Ik4A' 8 զ73B5{"Sϖg["|3mbۚ7%3}u.sQ5QGBv/l&ݜ 52d;YVa21Ps'Lϛ%W/Sڞw/dy8JWT<p6!*Fbb=ڳ]%w (~C-UE+Axccar`]ʫ;!L sg ڭ5 H wͧsڝߴ-*F{\vb5䐯C,̰};NH_'H.lrP!'{X[uR"$z]E EMӋ][r6/Iq`Ŏ1\a/ VDyJ1keIu Cw㒜l/:ç[9RU;$%JAz}u2{ׯvch( 1S qU ٳ>BQs$k#` 1Ϯ3f9v;aF0PSkJ( Br9Fzc =ó)nXEl%D1[w 5)3E/W嘐lG$'XlB4a"t*3eC}oLC4MIvR56)*O.%i q|bO?}TY=cn3w JSud&%Z_(H3lENՏ ռF7h[Y^CfcCktv~bf5"DѮvTC`"j;3wٹ~T\JK.hr`w=TäHm3gq (9gm ;֘ߟ hJio'sf&, 5nMv5Gyq{,ѤדZISvGZ/P{=ɊtUh԰F=n;XMщR/ Yj8EW yD譟fcb7ƾދ2XR^5vpz*T7W멿%-rO*xP-f1 ;-UxSij/Xְ.g%J/ʴ%O:EPeIb#F*|6$|eUЫNRCgXخ]P 28N.x>4q(}rElu]ER-5_#HC.]r?zeڣ= /vA`@M]K%`g7)Gg }'ܞ_t/V4zKn*/vAh(dbϢô> h XO՛ ^rA05>|ۍuDzl&(7XP{ hCʥ 0KWOb&1zo4MpA~ftXZ?\a'C2$Ur7cXdLR .KfF/2ླڼ-L~^ A*zaZ&ƪ4!ڝ%j#P B铉O/)O8RVa(3&B?HnZL?MD<M/z =%zBxyhceWtc;!WA=EE/\CqC3N=oD(r{ 5f^ q> n5Mb{X'2i3X|i q`@@$BV;KFB3g F atkQ;QЂFc9cIIM|]،[};9z?76N( 3hwƢ{ dl'at%fFwjy*0,CLIOs(FFU:.z\L/vAH Y}[K uMVKSDBXVQΣjqEf܂<2//>Ҕ,tU;"CX;]`kͭU<&4 tz/!K,e ӵI.H, ml̗Xՙ<5zk?pR`ːT,&A?*C)#Ogvf LAlV,jlܐr[a,_l 4o֨\;rXMѹ=}dD{=_gps@',(ŏDJՅ-6FMaّ-MBHQ Mܞ*6ٷ̼*N,Vy2[giؽ3Edb̍qN,[QpyT1(T?)$3'}U{%RXA2/&aϰ7Bl4Ȫ#E搃VF V-V~A#pOpUr ƑFV(9'pP+v*v5z"VD>d)SVv`j@| Ҡakڍ壩K/T[M@TTӸoJI!nM Cbwm3%+y גB5kF I\|#=4xfޮGTW_TX_ּ T NrqcknD/y8&X|Hd+d ؍__Pчڒm̠b 5db&P*Fnp) t!htGw]^n=Sf?h U3 GP4J =21$,4_Sh>8Dfs| X=vr^wkczى`6~21׾FOt`œ9Dߥ?v"w*JT=!r`/FOG|Ɗ BB\Jke2wcӼt2'VR$ ^RU۰HO+uicgyY^"l} 9~ 6u\j޳^,L4-¾8HaHSM^=RCrSzis[Ld(zA#$tg{~B1oz~)L<~*lU'K N.EЉBo(YO*t́őTHsT6hK'^aPIGi=`x@P͞)>vI`jiXz& kCw)&c#]K ӡؑuǍIaA]ֵ> #*xO-7ZשWRx(0Ƌ~H*. E3|/ klSf`KxzWll u|OfISĂO[vf < Lat #< Bc_QD:g' ;w@'OR4ۺEOhVl}uUy/X; u/uGt]8O1/b,M}jC/=2"Ղ1AWzE@ w667ƻ-=R0&XK$@]6Ge.Fؒ2.$5gQsIwK07vAfc> $UӡRx}I̫?QI=`_ZiSL,vF1lGĦTKKr-XO{zںP>Xp* Bjȇ  nqK*6bIϞB =2Zr1}m72*B7,x\[BܖgJӋZ<3yylj1Tij n4=5.y.[T)%FvB[Lyd˶Ji)Y@ϙo.RB`Q5hdG{mX@cw7'UJK8/8=W=-IX 9 \g^\=>k'WAz9SssG0ǁ%Aaˍ5hEw`)?X<,}JS5E+.]85qьQً*n .WQ$e'+K}5`Je%c?(oV'qD.fw`4Ib2E[&/' , bp Xd_D(aAg8+Ps<@~]ӵ9Db*E>mK`&J-ǩ(2(Deవ edr`;U)HR/s0Y _ȯZn8[EA 9pv8Ex>٥4̃aMթU- 5wI.t{ٰ`ڥ1 S'o|XT2e 4kVYPPyD`[:>Tj!\v۩CDVyfT{yXkwKyT2 !ѝPuw/ +ǰSK<22U [s `})= aq(zM/S(?.ei†&ϸ؋1|%]Lb6Gsgz#nJ^nCfc~p(a!:SX5r ?o/ޓxώ];z4EiL +ei?dPd.lDZ6lQ<[>YZ<2.Nmd _BQL 9oX5[+ qzm)y?#/D'j<njFSaw$ET(H 8`+tϙPHPgq\bt'?(΍^ O"R;<I'{h$s.dŔyʰQW5_xQ;C\V @,FXNWȶhG#ݪ5F!]֡zŘwJྠB(Qg$-:w%\P1t$Z+ϕ2g6QTY YP?FT9gJH&Y^0LRJN+)5toOu6{LY@ż:.x6\Nwl93-dsndǺ5g_~Rqx4FًrFUҤQ~Q}w!:Yl+EEa P;BHzӚN%}_05ۍwMHqu#=U?D6(ٽ ^eO@%LSr/i?P!fcC3N}ϏJv^ɲLj}@ AgVY_4˥(Kh<#Uɯf-:n=p>. m8o6))*-v5T3$g=u5J.bKL)4ʕ܋$j]9}eYH0~0Lzڛ^sCh^s/e6:@$/@ ]UdͷjXSn. Õ) 5~' q4PU\"uQaOя=@ZU>׺Bg ;7l[@F  y^_(3v2 ڎW1L@" 4+ۛ9rPCdQ+F B|VC!ˇQŞiS; ޢryefa#DK88@NM%Uʽȷ6G:d6yL< xфAr*%LnTbFaË]<`0P0 J#1g`șv]J4rpY`mNsз"Y麭.m{pE~]kΙ`xw'K >8:mSBB FvJ8q~YIkw}/+_05{\{=(t!l~Vy{$/6)n<#+SOcXe'6jKi)2FhǵNr tҿ7vʃntǮ|k yi < 5d2f4[ {Su*wXRs<{YwF{H`fjN%<{²hG;O<Nm #ޏ5Q3.З+GshGG\%<7G[WŕR=%\. /'xbH _O%\,J@-ԕRϠ&셵|F.@ze$l![4w\GhI N(K@vk#nuJ/SQL$.jEP5i[``Y\xLg DƠOF!"B^̐}8E`ԕfǰlB ؈nBO6yY/*]2y刦6?\7{c= 5tMh ê+tLyҰҋ`6"eoA^VG/iT@ٴp a=+}LJS? wYF%I_ PӍ5Վ.g*~?i9 ޟLuSV9%d?ml,@&.ċExbd[$r$T-.s UdN'A6w^%q>&iF0FNKLzڙ<84`U*hWBXũ)Zw _.N,@dٮa|Q6J'J|3xo8vIFLO2ahp㫓364*\%aqTmcP,;lLz^N=+~{M5W5P'6XY=^jAw"kMN}˵q`4.8~7lSІi@ ??P!hP9_MHV ѧ`3(T:3X3[^%x\iP-WR%Εh QI{K~[ZQ|A\O Y _('Fp%$~tz%@ %?ek/ucw //5wln{GZD|HK0r1|]E%P[:MuChO-/t!huzOoN&Z QxQ6!Ɛ<*YD^N ٣_mގ~~BP ,-;8ƱȠ/w ꭰgwJ/vA:1,Q|CX DC#g[!I˿`af@VyܫlOΜ42|z>/D'4nϨ$12ٔ|V(-B* ^e}<6W4a@yDO;j` h"?qun͎'חů{Maa币-i"td2Sېs^\UUUovAhHt\eZ6'7y/9D0N0?^ 3К溱-@.,S[[Uh]>0bUFܙTgP=>[,q W?+ *P"zW޹;N:5' zlUE =IfGJt|_( )eJv~+U'Ctf_)z]*~v}aUM%sgMF56 W>#@J*qor%BB.7tg|Bp%j˺(7RzlV0>wåEYRɃg˽wS1Z?wl4aʒ}iif ů"Oܶ^}eDL)Ђ E#g塜!\\ߑb6PK:L%#a8 1) ZQ=_ ?s¢7VCM^Oý_HO+5&/|)k9tio*P?{A:T.U5L}6(?O.AqV]||՝b#YC2Eѕ?{P,se5ügVMF ) ,ZLW!(҅`6 ^yaxY4Hk{<0dp+Hj+rB( BXYf.1b *DWAt,0.IʈINUwzzu`Q; (C5=ǞmA rhYKoU<rBuqzUr](H6l/YKU-h6Z$!D&V> _(so^+w_E#" 9 gy&ےG7WlDtƒMf˲E4lt5YQ  hhJـIbY #,UG3QǞ;/]D9Ǔ?jMu(+|/5M?kNg kAq9olI"[U50(1I$9f# ]ِGpB 5xyR߰B,J&pJ(|]A~&ݎBBp{͌ori:D ycRFbJA3KىҼONBPڟHߑb6歚/gd1:6S`Ӎ]?H/LV{|`ܵ(}b\ '0&KQ ȭ/51evNð7g-)UAz"(W?عM*`;QoJ΋v>pT:B#se"RCt:pnqN,4ޒ|pU{El6 '|lRv^̷1bSƒ5}n%q՝ ތ* z+G4bFN5ՆH#OERȋZ|`4tUߡ:PJjr=Wǒ-b^-$q[3Tw[ï\wmf!v۝C(),__noi_,|.˸R;)3|] 9 4:Aw&)= >h]{H~f6bJ~H豝/ʷIu=T%Jx-X%{ͽ/ @=[ *F{wafck\K ].K;,|B'BJ)W${wңXͥtB%>ъ\Зg.[!ş5BSr˒QA9r_ `X;Nr&ͧ|SL9m588 T@p;1ҬPE. J=}Q}F`-įAѾ>:]^&@ hjXq0M)N!14,fHį}R)@#ҩ1J+lʐF~.l(j49|OiP4f;+2G$ gP% C,a* lĎ@$/z:a hr쁷X ?шYt͗&jz7M]Iz<L;kW2ـ7^qq;!(P^ʙMy[ 1OesksVNzqx>? Ăr%;MDiMYI|GaS ]'#jƅѣV'.+a4UPLz( d = IWPIW}seZv I/t#]C$u=hVc>'R3!YYS N"R'L6RN9e^buff{XdJ)/G "B;`sOΉ*!ݒN(Cj(qPf f?P5cD.hԼJF%]*?TUs +N9T9)6$b"khxv?o`<SxrRw ډK፾v}w!htŔzz| `jxB`mAr,#(ΓSIhyrVZ9Yn䠀=xd [\~i3>]ТPYXʧڵ\6?Xc?pόTj#g'LC,s<Ҳ7zNɟ-Nv:! k89Vc#ic^4 8̺'bk Fi\ңWao؛ E:|FXTIYd'|}u1SPg,p!th%õ$"Oעf2Οd=Ѥ~D`Ul{~8 Vf1gI>wAjhi>]+ٽ3/EUo>Th 9/S"HRцYwU _\1i'CS͙Oʩ_-Sɛ$w}0:p,0SoetD Ul8Mv(WW5D +!"ؙ@!qՕVQAF!FX)Ps  WC8O^L9m^/챡PFxJH>9lFIAhSW^+?a]GWO|C"dSI]䐕XJm N}4ZRCVW$*w k-x9z8e2ܵ=Vk76^{o AmLqY1%[yw**H޻A<{c\J}7cļwՖowod.&8(0OvKvv:)1w%cUlm{@ZJ|b^Sc) ^[[Upd=qp,vggޤD X]޿ DϷH=l{$ ;1,nN! xWUBԗm1Y+7\.)SQ}Vz e6'Kz~%f&/RPJwX]2 R-`0s+JA˸;lKK}Xwf*_y@V1*s?!M$i@u}$d.U*bFn~`3]x|Um2JBŽ+}.3?.Qj̊0.9/Һ`ZmVzߡRsƋ:Ҭq֓ڜ0=>+ c}1'jx'a jsGB?(6TR\cpNR⦘I^;WnWgsPVQ֙xQRULbz£4e i)ߕ b[}g7Jjc@e3T+t/oU$>  qQ` eG:AyV:1 .y 'bzLf ǜKf9Bewk1O/1R\$uOC?Mq%\(d}IP/51x7N 'ϝ^H}fYPq}N\n=1W:ʞ~zsbS]RNQ `['(c]|>*4>੘Ty@2D Օ%Eb(vˍiǼE/z\1`=gx|E*D:ۢxޗd~:n ((V+%#E9;D!ԋt2,gp=-gYL0ZκPt*ٯ-&k&QޙÀ*l^#`8»a816ܝyq"9Usu-or ivjs5{Rk[?_(KE5S޹msĖȨn8ps7-IyAwD'{SRZ:=.-Աty!eTxߋtE n䚑44ʩ;ûġٴo Uɰs=D&&:Ld{wsFD> C?*\MD >D ,iFaORg]3ʻiuvO\Zme7#6r*(,嘍o\I7ﱬ3v#"Ar.եa# ݔAl8Q7CBݪL&xpKB̈́rnuNg.O-r~Nu&S*D1+I2/Syl^ϟLv8D10Fn<*_{mT"vù qaK/m˿وh͢-R6ʄ,{tw4K2^6 8&txnw _O1wFI!)* 54B/} ,Ѭ-/ ՈˆͶ :81mFH.Ԉ@Myy* ZtMm$lP\a^Gr= ,vh wʄ0: Kpn= ǀys썓:!aS1exz=glʱ?J{ 9]~+z{C$BqBia;=)+O7|7D{z1i\( iuu!ĐZCOwg*+5J&IƢ&2(& AtP+#f+8؛IHa{*ٍZbbiP3N%#6,u7 x $?R^NPA>lk˓en~߽gcbb~5HLT5Dո#`Ű{PC$ 0_X\AyhtL]UCvRlѩ셫Reݽ~NPzpt;jz)=v{'AXאZʊjqy3AmD%vjfS[CEPeҢ x*TeEs KP!=niȒ`/Â'8zxSuJ,jS^GgS7:E]z #Mcww abVQ V_c9w*,~#cXe{FOC#tug,y뼎xs$Ӝf\!_)G$b)q{ +<R{$-qòމj0 f33P׾}  6{i1mx LE } މQ옱FjтOoa0 }6%Z{zރb tƓcHdAIʙB"x|97R*r*I畻.EPA_k 6?rΡ1D g4P c\gdȑЁSs(]S8z(\8W\~}兔2N̈ 2+N)]XRhQB$+WxTWK11E t}8MXɿ@iLy0=vEAB5XD ׈Htr*j{B >ӎjw,IzNMm ,j V#*JqlCAن(8gj:\vSwҊ"!t:ؚݱ nȐ!-TCzwQN"=90{* G~4 @mځ^1ɃM5S\RyI/{T=2^Au7۹Hhf.׍bVuepSxŕ8U?%KPG)F~3k $6-{R!m7 8QS4A  S˯ M3IS"j98)s$*G[e3/\Z)GPPUTM>6LXږՔs4_n:qhshHmuq.Sq<+bNdx$|8뜕ݗdx$KjhKtFdf $rmhJ]Ȕ^ơ,U=Y$FYgL۞J._QVE'nlވm4&(7KE yO%&7+RN YvYt 4+Tm@A|u)ms*%\6'~J6HfPu#z{8fWs$-XΗι s}n/b@G.by;ubQ!@"3Z3L+9&7 1p'7,]JqSx*-@}ˏYS2}p@cH1 ʭ,@heGYgzø^ĺ4:sPGTiX-@JůGZj<Đ[2;'B 1[a@7O]T)+-<(_{H{biogo-1.0.4/feat/genome/cow/bt7/bt7.go0000644000175000017500000000601014136731467016652 0ustar nileshnilesh// DO NOT EDIT. This file was autogenerated by parse.assembly // Package bt7 defines chromosome and assembly fragment intervals for the bt7 genome assembly for cow. package bt7 import ( "github.com/biogo/biogo/feat/genome" ) var ( Chr1 = genome.Chromosome{Chr: "Chr1", Desc: "Chromosome", Length: 161428367} Chr2 = genome.Chromosome{Chr: "Chr2", Desc: "Chromosome", Length: 141965563} Chr3 = genome.Chromosome{Chr: "Chr3", Desc: "Chromosome", Length: 126844711} Chr4 = genome.Chromosome{Chr: "Chr4", Desc: "Chromosome", Length: 123809850} Chr5 = genome.Chromosome{Chr: "Chr5", Desc: "Chromosome", Length: 125249322} Chr6 = genome.Chromosome{Chr: "Chr6", Desc: "Chromosome", Length: 122519025} Chr7 = genome.Chromosome{Chr: "Chr7", Desc: "Chromosome", Length: 113029157} Chr8 = genome.Chromosome{Chr: "Chr8", Desc: "Chromosome", Length: 116846264} Chr9 = genome.Chromosome{Chr: "Chr9", Desc: "Chromosome", Length: 108503706} Chr10 = genome.Chromosome{Chr: "Chr10", Desc: "Chromosome", Length: 105982576} Chr11 = genome.Chromosome{Chr: "Chr11", Desc: "Chromosome", Length: 109987751} Chr12 = genome.Chromosome{Chr: "Chr12", Desc: "Chromosome", Length: 85119472} Chr13 = genome.Chromosome{Chr: "Chr13", Desc: "Chromosome", Length: 84213851} Chr14 = genome.Chromosome{Chr: "Chr14", Desc: "Chromosome", Length: 81216349} Chr15 = genome.Chromosome{Chr: "Chr15", Desc: "Chromosome", Length: 84472747} Chr16 = genome.Chromosome{Chr: "Chr16", Desc: "Chromosome", Length: 77710258} Chr17 = genome.Chromosome{Chr: "Chr17", Desc: "Chromosome", Length: 76280064} Chr18 = genome.Chromosome{Chr: "Chr18", Desc: "Chromosome", Length: 65811054} Chr19 = genome.Chromosome{Chr: "Chr19", Desc: "Chromosome", Length: 64845320} Chr20 = genome.Chromosome{Chr: "Chr20", Desc: "Chromosome", Length: 75686341} Chr21 = genome.Chromosome{Chr: "Chr21", Desc: "Chromosome", Length: 69078422} Chr22 = genome.Chromosome{Chr: "Chr22", Desc: "Chromosome", Length: 61598339} Chr23 = genome.Chromosome{Chr: "Chr23", Desc: "Chromosome", Length: 52334015} Chr24 = genome.Chromosome{Chr: "Chr24", Desc: "Chromosome", Length: 64508398} Chr25 = genome.Chromosome{Chr: "Chr25", Desc: "Chromosome", Length: 44081797} Chr26 = genome.Chromosome{Chr: "Chr26", Desc: "Chromosome", Length: 51826547} Chr27 = genome.Chromosome{Chr: "Chr27", Desc: "Chromosome", Length: 48460478} Chr28 = genome.Chromosome{Chr: "Chr28", Desc: "Chromosome", Length: 45964680} Chr29 = genome.Chromosome{Chr: "Chr29", Desc: "Chromosome", Length: 51812796} ChrX = genome.Chromosome{Chr: "ChrX", Desc: "Chromosome", Length: 88654062} ChrY = genome.Chromosome{Chr: "ChrY", Desc: "Chromosome", Length: 43300181} ChrM = genome.Chromosome{Chr: "ChrM", Desc: "Chromosome", Length: 16338} ) var Chromosomes = []*genome.Chromosome{ &Chr1, &Chr2, &Chr3, &Chr4, &Chr5, &Chr6, &Chr7, &Chr8, &Chr9, &Chr10, &Chr11, &Chr12, &Chr13, &Chr14, &Chr15, &Chr16, &Chr17, &Chr18, &Chr19, &Chr20, &Chr21, &Chr22, &Chr23, &Chr24, &Chr25, &Chr26, &Chr27, &Chr28, &Chr29, &ChrX, &ChrY, &ChrM, } biogo-1.0.4/feat/genome/human/0000755000175000017500000000000014136731467015456 5ustar nileshnileshbiogo-1.0.4/feat/genome/human/hg19/0000755000175000017500000000000014136731467016226 5ustar nileshnileshbiogo-1.0.4/feat/genome/human/hg19/hg19_cytoBand.txt.gz0000644000175000017500000001472114136731467022006 0ustar nileshnileshG5JcytoBand.txttY$ DK)_80t~EV&HF L/t^|j/f??~{Ó@?~:^@KDgDWh2"3/3x+š jgTtI+ S&{`>j%>'Eu &{0,˟+`LB"M1jH{n <5yn'+FK%})L 鋚j+P9V4E$[E"4uDV$R#4; 2BӜ5 M.3_o{U.k9kLFM LH<Ș#4N2cP,IUF"3CRuTIS5Y;kW5;0cSUiIVs/j 8wHTb?qxR D5bÛwD+ H)jd-O90O~dj3 Z nTwyEywZ9>KK!MAqhNJ$ۘfלalz&(ɾTZ,ai$ *!$)q!1 u{YhH2@<^ xd$ugҴ1ͪ=8Od~\u(Ѻ`;ҙGͅ ?e7Y/d(ȩP߲[n~w1o!ˆ尃2+|1D*/4/5XfWk6"t5X]j+-ÞEPf&Ig FU?1Ƹ__d뫦M}d@P\ Ͽ!dH5mE*-a$;RD{;B7N^Y!yKRDd.ntmI:!:a+R1b6A| iNI)l)f':JIۨ`k Eez[½2A g7;dqQ߯j1Co".2$"LmP%d$!aK,I JY@-+ @[eG%-@yygd%}fLF- ÓZէD_PνTPwNj˺*2-[DIt2ݦrH+3dGVWBKȏGՔ6Nw W+ ?St2+px{e~l4j'DN/2%9EeA&^iF/gd n"3ٱAwIdTSs]9|- YJk7eZ=z%n} dmK]!9m/^19Zsf*UG<2Ĵ[Cub\ӭP+;BiN^92s6@$ʻDPIw5$+eDڔړ2*n-7#3Uw+dd6Rb'lޡc>oS#%b}}N@WZkdWEQ2jl3©GI#%1IsX-Z~I#]#eA3Z>ٸni#|o}i#9Gt}WHMi+EUqJN!K4*N1<S"W{/]j3E"F"{z+IC'a& >}-R,S9$NblN0cX-ٙ p?Z ~0ܺ{Z=|jɘw)d]ڲ!'}.$3wI4:0A^YVKll -Vwo-xz-?ӓY_1JaK֌3')]!)jDxŌ ,oZ+TҥgAbbwšf 8)Ie0KMDY$v|zId5;`f)>I Tyv)}bjр82d[ xH!lk dݴA6s.c\鷬[ 8W-ŐazԻc`kf9j?63ꂁ ;YȹӛH;`r0Sc@gʰ$$n *)C 'f; r3'OIZbm5Al춭2ޗes2(dPV.g옢 dK Dsbc7,쏳~QH,vWF7gE*[.!BDjծ\*7DTˢ",ÿKX-I7Cp\ ̹knS-I#1䙚TsќNdml6Y#3BNp9s ss# Hf%'hA:,M\K!R5X" 5jS!4Vt[ E$ͮt?_CytHBnք] Z4]dz沔-wj?qYUpˈW-_7dG@A rd5հ ٭ul|.ٺI}W}Sgw6ΉSDy4O.%иBb@i}U:c1E]5$!jH"d )Ձ=mS.G3?ZH1ĴO6lջ _5C{sJC.kQ =P@\ַPڝjAi"pD3-3U :DE&@3[5XG4؟/,yuטYd'H&"*IO(L[- 1:Yç 7eNID/8}'6 O챓-EmK+uYD (og?c&c&!ޫN8Se 'w<O6;BRΓ?@Vy[: 10rF+, T"}z2  }H1f% iz-~ 3 햧x0?[W wǸ`2{{ bz񧐊x+[Yx}\-GQ}H$Xʬ/̼^9~$@;D*P| yGp D3lY0DXJoe3ƐF/=rWxWd[W-#8FhS /ꐗ{wտI2@oZN }(]贏[>kUD<2b}N@#]"nӯE;{xӷE0 pz@@A/|鿣fǕ=⬸%!/lL$hI !RTn xFS>L&ECdrlc,7B_mCZg2 lQ CTd$ I-(%0fY#eWB7>P3U? xz)ؒͅo043j&uiZ0kߘ@I@Pz ODk-{bP*PBAMP> 5ڏoY24uKv0 DM yډ(Fu 46Ė%ɾVS?DNTI5.Ӳ q ԧ/Iҟ!$Y1+O"o4Xd Euj3 ,#oMGN>N^҇Ӭ1.fVx43').ŎY;K1m .IҎJmKyڤi?.qy.3bi\{D8h }Bby6-^>iFEeb~o8R8OItѓgF?Y6 8xÑ4^!6ͼi2C7]wvp3/${y CKu`#h% Cl:0 z|k76^8,9V:&=rC"kZq~oA4c 5þj:mP@|@52]-W]c*\XR j;I ; i=ɏXV&1+0B}TYjk.>E0#ۣ>khiF\[7Q4+FKw ef;/wP| 'kO4\bɯ1ِ*;x/ѓd0?xS;~|7{ozG'}_:@KDgDWh2"33x+š jgTtI+ S&{`>j%>'Eu &{0,ß+`LB"M1jHsn <5yn'+FK%}(L 鋚j+P9V4E$[E"4uDV$R#4; 2BӜ5oCD4vM" ;|TkJ - xzʊu'9Cjˆ尃2+n" ,h2"t5X]j,ÞDMuIWǤJ)>dǝ6Q=Rx !㍴Oo |#dGp(po\u1\?$H MDN6 ߘd2)*n!#ao\LsJʕ^Y]Pmv#J PT;y BQU&#td\6/"[&RePW~ÒwbIWSZt,eipH!ˎ%-@y{dO~Dž_~~{{4W,XK&RIQv Ub%=*h)ؠd7Y< ߲J,X6R zmG* ّ"Z+Yu#Z|Jb O)H +pxe~.=8*iHN';%EeA&*ci'K /(T n%3ٱAwR?dTSݡs";~ZN6eZ=)n} mK]a;m/^q;Zsf*yUG$<P=ͷn 7=c\&]Qg} d栕mH\[2P +#R497UjʈR;T)*v@!BHaT xy>6K> MT):E@}`ib#nd; L6#y49^$& p@ҏ ikL7bի}_G ymOKHΑ$3s޹6NzJdQU\#q{[ChAR >ڗ.^TKy=x$㡓" ^~n;YsA M)^;aTgNNQFH7cKSaPg bm;z>=՝jɦ^ 9̝T3 LW@cJP+w-xzQ?ӳZ_1 MIމxikƗ“瀮Y"bFVFE-Z+TW~x=PJgszIgˡf A)IeJMݷDy[+1H< jvR|*3 47R>֨qP{%dN / 7%ms > (2zw l ټzZ` vȹӻI;`r0S|ChaI&|cIT;vUR,B=SO"v@4pu5g NbuLUNEZՠ=IFۥ27 ="Ѿ\`cyX3uJD]6Zy0`?/&:qZY5ٴP<촍fR$ßN&y5՛.[@饲d͕)9kD*e{/w%FKS*,YۼEG͗\Eo[-GXYL~: & Sl춭2˲2(dPV.g옢 t͎6 6͢,KOrH@UEs۲e?!ٙyb[_وۑAҾﳽnV{6M6#M6m<:K;V8UV ,;_MK;P- \(v[&"7fq_$aW{`2QA~ ݤ U%?$R_ۺ/%}iQu-ψ̛Y^dx;DrMݦ::lϯSMMT~S,r YamBNA rZGXD æ[?VE{#:ὀzD9"`2{]DX s1 !e;M{NXFGYz^xQ(2tKDh K4H?"5~2̗3`.F +fC /<,a$^<<;,0'JVeJ-qȎ ˿PbSز>5@qI.j|u27@"85Ͷ݅1xݺBZsљ?Y$4mjH"6 *DmwF#i)i&yU"bX 1bMUſQ _jfY*3|^XTkц &EGޣM @/bhD=zAװt)YeuIQ>'&j b,:"^ _W@% Y&)j`D ;oB"ҵIii&_.U2>^stc"j6؟eiت& I5I S+,X)}mDB$@  GijԵuqf;jHнx(B)ذ+:|.~u"tWk'KaZ}.<;D|Un%r_肒Jh,|\:D}0 w6wp1.NS% 3a )uK{c-1a8|mK-|]G&2yf̃_:[>c)5m؊=ltayVHIȈR@]譇  &▣ll M?v7tHM+v;I]z #6IHv61 B"<䈡a|ϯۊr4ǿ )_|yg埻3Q}{৯v_OÿOkf&O}AwѱfU,ll%UL (l71F.d]w@ @ qd6B!i?2 m =}С93bIROd368C}U=j9pte9ii: 07C,/cINYq,b?[j<\*qRͷvd~do}Q(Dq7 ! PizCe!yxucK<"T?W'~4{TE="[u\ >.[+zd Wܱ[vi,S3F߻p5w'+;fJagoŮƚ@~7*[膘D<2rK]R cfΔ&2Sz8Bb'IըY2hAA@$6 g$aͦy&ADt)u͉1q"/r-8 |ɩ=T0T5@/=&ɩ U0aWbFDV`T*HLhBGظ"V#RkaLF)P]Vq1DVeMɋU)n L/[>R>xlIϹB4ɲC]/|X < &n\qBDБdS=$^zKtKM1h3QicbnB1^R)kRQcI&pbTgPҲL0U;l2xǷ{ 3"YZ3 &@ADҗ[VXOeya1QHۍ@q% 2}5RomwSX@OW?y0ZuӥZ=78ӴLG!%0'M,A4Σ,F6-ikſ`7TG}TW)g*n:~GWd75GL5jZ*[+j NKviK]4oknNzZ6#ցɳtvcSt4H)x:(:{f2-q{3(^q"#{Rb|] 1'%W!g~1}vW Ľ~<.^/yrkLH6}P =z{ :O>t8&!?S/8#.fȵ"\)_"EK}r-ƾbEN:\j~ XUTտyw}9[Vk#"H0N Ra-"Z#<)=L~j$;ziLV"~}WDMN|)"ўAOoE?ObMw;x֟}a&.tEl %wQnCIy $uEwVz']Lubiogo-1.0.4/feat/genome/mouse/0000755000175000017500000000000014136731467015476 5ustar nileshnileshbiogo-1.0.4/feat/genome/mouse/mm10/0000755000175000017500000000000014136731467016250 5ustar nileshnileshbiogo-1.0.4/feat/genome/mouse/mm10/mm10_cytoBandIdeo.txt.gz0000644000175000017500000001072214136731467022630 0ustar nileshnilesh}QcytoBandIdeo.txtlXKn%7 \;1įe#&|I_6"QRHC/e m_Kk@_1!32 s#q \ȕ35Ѝ!ҦDT<6y3^prB%cjԉ}% Tʸ3 ro61NQɹ ̐}72: JGxҕ#7/ vSGֱA׷+2dIƠSv44;,%1g' ‘ktZO8C8fwiA*=b3B!:p3 IBDj?J2yk z%Aa^YG5tmIpLN7i2cu&2'Coosd*~:Jwy ϧθkYGb`Ø;MteDH."%(.hMCOaRU?m -@g!eEac})[';K"\82-  n #~+ Uv%*iߏ8{h05|l'!8Bݴ2z$u0$†]+„T)]L!D?} (Dosd\uz/b4YFt|icSwob2>pFHBo^R$/CWӀe(őqe|܏8!x7kѼHX7ޏXBI0 ؁B-ۛN+ΰQHo E /v<ɴ0L@ 28s?_+nB[GxxyR׊czP̽nZ$y?.wL8dO%-Zǣw-|z*B6(|U5K|,mDa wr'C{Vc.&8>/ǡ|+Oss+ѭ;Zݕv?R Cx!2!X8"e1c5.Αq>C'+/`VГU$f};X21;CSkzPX{#c_Y'qӛ Y)r#Jpbǻnz͸^9gu+N/a}>O:ǡB1^*9 [slaf 29ř#ām`F36EOq2GȘ+]s9BXw\ (ZT.& s`_iPpI3`}P!c,wKc4Pj!m[Ɏ% ̌a&2+'GF ޺UBY6K]L>o#{[Up1[By23<ӖS*,!09jt&jL[BbwUgQ6iuVvzGAx:[ۻ2,M vM!6vul10ף $Y5?3Kn;Ulm刈v c͂ޝD ;td!@3#Nβ1rc5$0 #"W[3s5X1 Atv5L `8kY01dUf4PhYCN!||v5dg0ApMaZdx#ᾠNR9WZw04,*9O: @fS&YBԝ>Jqrc c!s6Y,{"n4Do$A&\FA=NY MAKQgZw z5k}Yk96 JKc5a 3+'rftޛ-eYQS&#c5rXr,RriQpLU@dZ{@8߯NSf:}:}_K#;;Y.^ꒀWpcVUiP˯PΗ 3+41wyΕ03_RY\(S^#'߬PW uvyq[晁cu2x(i9iԶGYi&gӚnwEXMA0d6gA$>kŵJ& > B`iÀQ[z|01 sDjÀ^gKw;l1?{x e(k kl` ho.Y6+IkC8=yڇB蓳lpPf uz=t?@Z+'ϕ].LS3\əa njkLSN! &8$%}OO{YմoeU#2Ζ/*e +im>ɥ ۩$_e2e@3WQK ̠zn-<yz"^'#/ք ar_S_k;biogo-1.0.4/feat/genome/mouse/mm10/mm10.go0000644000175000017500000015706314136731467017365 0ustar nileshnilesh// DO NOT EDIT. This file was autogenerated by parse.karyotype // Package mm10 defines chromosome and band intervals for the mouse karyotype based on the mm10 assembly. package mm10 import ( "github.com/biogo/biogo/feat" "github.com/biogo/biogo/feat/genome" ) var ( Chr1 = genome.Chromosome{Chr: "Chr1", Desc: "Chromosome", Length: 195471971} Chr2 = genome.Chromosome{Chr: "Chr2", Desc: "Chromosome", Length: 182113224} Chr3 = genome.Chromosome{Chr: "Chr3", Desc: "Chromosome", Length: 160039680} Chr4 = genome.Chromosome{Chr: "Chr4", Desc: "Chromosome", Length: 156508116} Chr5 = genome.Chromosome{Chr: "Chr5", Desc: "Chromosome", Length: 151834684} Chr6 = genome.Chromosome{Chr: "Chr6", Desc: "Chromosome", Length: 149736546} Chr7 = genome.Chromosome{Chr: "Chr7", Desc: "Chromosome", Length: 145441459} Chr8 = genome.Chromosome{Chr: "Chr8", Desc: "Chromosome", Length: 129401213} Chr9 = genome.Chromosome{Chr: "Chr9", Desc: "Chromosome", Length: 124595110} Chr10 = genome.Chromosome{Chr: "Chr10", Desc: "Chromosome", Length: 130694993} Chr11 = genome.Chromosome{Chr: "Chr11", Desc: "Chromosome", Length: 122082543} Chr12 = genome.Chromosome{Chr: "Chr12", Desc: "Chromosome", Length: 120129022} Chr13 = genome.Chromosome{Chr: "Chr13", Desc: "Chromosome", Length: 120421639} Chr14 = genome.Chromosome{Chr: "Chr14", Desc: "Chromosome", Length: 124902244} Chr15 = genome.Chromosome{Chr: "Chr15", Desc: "Chromosome", Length: 104043685} Chr16 = genome.Chromosome{Chr: "Chr16", Desc: "Chromosome", Length: 98207768} Chr17 = genome.Chromosome{Chr: "Chr17", Desc: "Chromosome", Length: 94987271} Chr18 = genome.Chromosome{Chr: "Chr18", Desc: "Chromosome", Length: 90702639} Chr19 = genome.Chromosome{Chr: "Chr19", Desc: "Chromosome", Length: 61431566} ChrX = genome.Chromosome{Chr: "ChrX", Desc: "Chromosome", Length: 171031299} ChrY = genome.Chromosome{Chr: "ChrY", Desc: "Chromosome", Length: 91744698} ) var Chromosomes = []*genome.Chromosome{ &Chr1, &Chr2, &Chr3, &Chr4, &Chr5, &Chr6, &Chr7, &Chr8, &Chr9, &Chr10, &Chr11, &Chr12, &Chr13, &Chr14, &Chr15, &Chr16, &Chr17, &Chr18, &Chr19, &ChrX, &ChrY, } var ( Chr1_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 8840440, Giemsa: "gpos100", Chr: &Chr1} Chr1_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 8840440, EndPos: 12278390, Giemsa: "gneg", Chr: &Chr1} Chr1_qA3 = genome.Band{Band: "qA3", Desc: "Band", StartPos: 12278390, EndPos: 20136559, Giemsa: "gpos33", Chr: &Chr1} Chr1_qA4 = genome.Band{Band: "qA4", Desc: "Band", StartPos: 20136559, EndPos: 22101102, Giemsa: "gneg", Chr: &Chr1} Chr1_qA5 = genome.Band{Band: "qA5", Desc: "Band", StartPos: 22101102, EndPos: 30941543, Giemsa: "gpos100", Chr: &Chr1} Chr1_qB = genome.Band{Band: "qB", Desc: "Band", StartPos: 30941543, EndPos: 43219933, Giemsa: "gneg", Chr: &Chr1} Chr1_qC1_1 = genome.Band{Band: "qC1.1", Desc: "Band", StartPos: 43219933, EndPos: 54516052, Giemsa: "gpos66", Chr: &Chr1} Chr1_qC1_2 = genome.Band{Band: "qC1.2", Desc: "Band", StartPos: 54516052, EndPos: 55989459, Giemsa: "gneg", Chr: &Chr1} Chr1_qC1_3 = genome.Band{Band: "qC1.3", Desc: "Band", StartPos: 55989459, EndPos: 59427408, Giemsa: "gpos75", Chr: &Chr1} Chr1_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 59427408, EndPos: 65321035, Giemsa: "gneg", Chr: &Chr1} Chr1_qC3 = genome.Band{Band: "qC3", Desc: "Band", StartPos: 65321035, EndPos: 74652612, Giemsa: "gpos33", Chr: &Chr1} Chr1_qC4 = genome.Band{Band: "qC4", Desc: "Band", StartPos: 74652612, EndPos: 80055103, Giemsa: "gneg", Chr: &Chr1} Chr1_qC5 = genome.Band{Band: "qC5", Desc: "Band", StartPos: 80055103, EndPos: 87422137, Giemsa: "gpos33", Chr: &Chr1} Chr1_qD = genome.Band{Band: "qD", Desc: "Band", StartPos: 87422137, EndPos: 99700527, Giemsa: "gneg", Chr: &Chr1} Chr1_qE1_1 = genome.Band{Band: "qE1.1", Desc: "Band", StartPos: 99700527, EndPos: 102647341, Giemsa: "gpos33", Chr: &Chr1} Chr1_qE1_2 = genome.Band{Band: "qE1.2", Desc: "Band", StartPos: 102647341, EndPos: 103629612, Giemsa: "gneg", Chr: &Chr1} Chr1_qE2_1 = genome.Band{Band: "qE2.1", Desc: "Band", StartPos: 103629612, EndPos: 112470053, Giemsa: "gpos100", Chr: &Chr1} Chr1_qE2_2 = genome.Band{Band: "qE2.2", Desc: "Band", StartPos: 112470053, EndPos: 113943460, Giemsa: "gneg", Chr: &Chr1} Chr1_qE2_3 = genome.Band{Band: "qE2.3", Desc: "Band", StartPos: 113943460, EndPos: 125730715, Giemsa: "gpos100", Chr: &Chr1} Chr1_qE3 = genome.Band{Band: "qE3", Desc: "Band", StartPos: 125730715, EndPos: 128677528, Giemsa: "gneg", Chr: &Chr1} Chr1_qE4 = genome.Band{Band: "qE4", Desc: "Band", StartPos: 128677528, EndPos: 139482511, Giemsa: "gpos66", Chr: &Chr1} Chr1_qF = genome.Band{Band: "qF", Desc: "Band", StartPos: 139482511, EndPos: 147340681, Giemsa: "gneg", Chr: &Chr1} Chr1_qG1 = genome.Band{Band: "qG1", Desc: "Band", StartPos: 147340681, EndPos: 151760902, Giemsa: "gpos100", Chr: &Chr1} Chr1_qG2 = genome.Band{Band: "qG2", Desc: "Band", StartPos: 151760902, EndPos: 152743173, Giemsa: "gneg", Chr: &Chr1} Chr1_qG3 = genome.Band{Band: "qG3", Desc: "Band", StartPos: 152743173, EndPos: 157163393, Giemsa: "gpos100", Chr: &Chr1} Chr1_qH1 = genome.Band{Band: "qH1", Desc: "Band", StartPos: 157163393, EndPos: 160110207, Giemsa: "gneg", Chr: &Chr1} Chr1_qH2_1 = genome.Band{Band: "qH2.1", Desc: "Band", StartPos: 160110207, EndPos: 164039292, Giemsa: "gpos33", Chr: &Chr1} Chr1_qH2_2 = genome.Band{Band: "qH2.2", Desc: "Band", StartPos: 164039292, EndPos: 165512699, Giemsa: "gneg", Chr: &Chr1} Chr1_qH2_3 = genome.Band{Band: "qH2.3", Desc: "Band", StartPos: 165512699, EndPos: 169932919, Giemsa: "gpos33", Chr: &Chr1} Chr1_qH3 = genome.Band{Band: "qH3", Desc: "Band", StartPos: 169932919, EndPos: 175826546, Giemsa: "gneg", Chr: &Chr1} Chr1_qH4 = genome.Band{Band: "qH4", Desc: "Band", StartPos: 175826546, EndPos: 181720174, Giemsa: "gpos33", Chr: &Chr1} Chr1_qH5 = genome.Band{Band: "qH5", Desc: "Band", StartPos: 181720174, EndPos: 188104936, Giemsa: "gneg", Chr: &Chr1} Chr1_qH6 = genome.Band{Band: "qH6", Desc: "Band", StartPos: 188104936, EndPos: 195471971, Giemsa: "gpos33", Chr: &Chr1} Chr2_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 14080919, Giemsa: "gpos100", Chr: &Chr2} Chr2_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 14080919, EndPos: 16427739, Giemsa: "gneg", Chr: &Chr2} Chr2_qA3 = genome.Band{Band: "qA3", Desc: "Band", StartPos: 16427739, EndPos: 29100566, Giemsa: "gpos33", Chr: &Chr2} Chr2_qB = genome.Band{Band: "qB", Desc: "Band", StartPos: 29100566, EndPos: 48344489, Giemsa: "gneg", Chr: &Chr2} Chr2_qC1_1 = genome.Band{Band: "qC1.1", Desc: "Band", StartPos: 48344489, EndPos: 60547953, Giemsa: "gpos100", Chr: &Chr2} Chr2_qC1_2 = genome.Band{Band: "qC1.2", Desc: "Band", StartPos: 60547953, EndPos: 61017317, Giemsa: "gneg", Chr: &Chr2} Chr2_qC1_3 = genome.Band{Band: "qC1.3", Desc: "Band", StartPos: 61017317, EndPos: 68527140, Giemsa: "gpos100", Chr: &Chr2} Chr2_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 68527140, EndPos: 71812688, Giemsa: "gneg", Chr: &Chr2} Chr2_qC3 = genome.Band{Band: "qC3", Desc: "Band", StartPos: 71812688, EndPos: 81199968, Giemsa: "gpos66", Chr: &Chr2} Chr2_qD = genome.Band{Band: "qD", Desc: "Band", StartPos: 81199968, EndPos: 88709792, Giemsa: "gneg", Chr: &Chr2} Chr2_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 88709792, EndPos: 101382619, Giemsa: "gpos100", Chr: &Chr2} Chr2_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 101382619, EndPos: 105137531, Giemsa: "gneg", Chr: &Chr2} Chr2_qE3 = genome.Band{Band: "qE3", Desc: "Band", StartPos: 105137531, EndPos: 113116719, Giemsa: "gpos33", Chr: &Chr2} Chr2_qE4 = genome.Band{Band: "qE4", Desc: "Band", StartPos: 113116719, EndPos: 115932902, Giemsa: "gneg", Chr: &Chr2} Chr2_qE5 = genome.Band{Band: "qE5", Desc: "Band", StartPos: 115932902, EndPos: 123912090, Giemsa: "gpos66", Chr: &Chr2} Chr2_qF1 = genome.Band{Band: "qF1", Desc: "Band", StartPos: 123912090, EndPos: 131891278, Giemsa: "gneg", Chr: &Chr2} Chr2_qF2 = genome.Band{Band: "qF2", Desc: "Band", StartPos: 131891278, EndPos: 134707462, Giemsa: "gpos33", Chr: &Chr2} Chr2_qF3 = genome.Band{Band: "qF3", Desc: "Band", StartPos: 134707462, EndPos: 141278557, Giemsa: "gneg", Chr: &Chr2} Chr2_qG1 = genome.Band{Band: "qG1", Desc: "Band", StartPos: 141278557, EndPos: 146910925, Giemsa: "gpos100", Chr: &Chr2} Chr2_qG2 = genome.Band{Band: "qG2", Desc: "Band", StartPos: 146910925, EndPos: 147849653, Giemsa: "gneg", Chr: &Chr2} Chr2_qG3 = genome.Band{Band: "qG3", Desc: "Band", StartPos: 147849653, EndPos: 152543293, Giemsa: "gpos100", Chr: &Chr2} Chr2_qH1 = genome.Band{Band: "qH1", Desc: "Band", StartPos: 152543293, EndPos: 159114389, Giemsa: "gneg", Chr: &Chr2} Chr2_qH2 = genome.Band{Band: "qH2", Desc: "Band", StartPos: 159114389, EndPos: 163338664, Giemsa: "gpos33", Chr: &Chr2} Chr2_qH3 = genome.Band{Band: "qH3", Desc: "Band", StartPos: 163338664, EndPos: 173664672, Giemsa: "gneg", Chr: &Chr2} Chr2_qH4 = genome.Band{Band: "qH4", Desc: "Band", StartPos: 173664672, EndPos: 182113224, Giemsa: "gpos33", Chr: &Chr2} Chr3_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 18541182, Giemsa: "gpos100", Chr: &Chr3} Chr3_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 18541182, EndPos: 20492885, Giemsa: "gneg", Chr: &Chr3} Chr3_qA3 = genome.Band{Band: "qA3", Desc: "Band", StartPos: 20492885, EndPos: 35618587, Giemsa: "gpos66", Chr: &Chr3} Chr3_qB = genome.Band{Band: "qB", Desc: "Band", StartPos: 35618587, EndPos: 46840881, Giemsa: "gneg", Chr: &Chr3} Chr3_qC = genome.Band{Band: "qC", Desc: "Band", StartPos: 46840881, EndPos: 56599399, Giemsa: "gpos100", Chr: &Chr3} Chr3_qD = genome.Band{Band: "qD", Desc: "Band", StartPos: 56599399, EndPos: 60990731, Giemsa: "gneg", Chr: &Chr3} Chr3_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 60990731, EndPos: 69773397, Giemsa: "gpos33", Chr: &Chr3} Chr3_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 69773397, EndPos: 72700952, Giemsa: "gneg", Chr: &Chr3} Chr3_qE3 = genome.Band{Band: "qE3", Desc: "Band", StartPos: 72700952, EndPos: 83923246, Giemsa: "gpos100", Chr: &Chr3} Chr3_qF1 = genome.Band{Band: "qF1", Desc: "Band", StartPos: 83923246, EndPos: 93193838, Giemsa: "gneg", Chr: &Chr3} Chr3_qF2_1 = genome.Band{Band: "qF2.1", Desc: "Band", StartPos: 93193838, EndPos: 97585170, Giemsa: "gpos33", Chr: &Chr3} Chr3_qF2_2 = genome.Band{Band: "qF2.2", Desc: "Band", StartPos: 97585170, EndPos: 106367836, Giemsa: "gneg", Chr: &Chr3} Chr3_qF2_3 = genome.Band{Band: "qF2.3", Desc: "Band", StartPos: 106367836, EndPos: 108319539, Giemsa: "gpos33", Chr: &Chr3} Chr3_qF3 = genome.Band{Band: "qF3", Desc: "Band", StartPos: 108319539, EndPos: 115150501, Giemsa: "gneg", Chr: &Chr3} Chr3_qG1 = genome.Band{Band: "qG1", Desc: "Band", StartPos: 115150501, EndPos: 126860721, Giemsa: "gpos100", Chr: &Chr3} Chr3_qG2 = genome.Band{Band: "qG2", Desc: "Band", StartPos: 126860721, EndPos: 128812425, Giemsa: "gneg", Chr: &Chr3} Chr3_qG3 = genome.Band{Band: "qG3", Desc: "Band", StartPos: 128812425, EndPos: 138570942, Giemsa: "gpos66", Chr: &Chr3} Chr3_qH1 = genome.Band{Band: "qH1", Desc: "Band", StartPos: 138570942, EndPos: 143938126, Giemsa: "gneg", Chr: &Chr3} Chr3_qH2 = genome.Band{Band: "qH2", Desc: "Band", StartPos: 143938126, EndPos: 148329459, Giemsa: "gpos33", Chr: &Chr3} Chr3_qH3 = genome.Band{Band: "qH3", Desc: "Band", StartPos: 148329459, EndPos: 154184569, Giemsa: "gneg", Chr: &Chr3} Chr3_qH4 = genome.Band{Band: "qH4", Desc: "Band", StartPos: 154184569, EndPos: 160039680, Giemsa: "gpos33", Chr: &Chr3} Chr4_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 14882673, Giemsa: "gpos100", Chr: &Chr4} Chr4_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 14882673, EndPos: 17763191, Giemsa: "gneg", Chr: &Chr4} Chr4_qA3 = genome.Band{Band: "qA3", Desc: "Band", StartPos: 17763191, EndPos: 28325088, Giemsa: "gpos100", Chr: &Chr4} Chr4_qA4 = genome.Band{Band: "qA4", Desc: "Band", StartPos: 28325088, EndPos: 30245433, Giemsa: "gneg", Chr: &Chr4} Chr4_qA5 = genome.Band{Band: "qA5", Desc: "Band", StartPos: 30245433, EndPos: 43687848, Giemsa: "gpos66", Chr: &Chr4} Chr4_qB1 = genome.Band{Band: "qB1", Desc: "Band", StartPos: 43687848, EndPos: 51849314, Giemsa: "gneg", Chr: &Chr4} Chr4_qB2 = genome.Band{Band: "qB2", Desc: "Band", StartPos: 51849314, EndPos: 55209918, Giemsa: "gpos33", Chr: &Chr4} Chr4_qB3 = genome.Band{Band: "qB3", Desc: "Band", StartPos: 55209918, EndPos: 63371384, Giemsa: "gneg", Chr: &Chr4} Chr4_qC1 = genome.Band{Band: "qC1", Desc: "Band", StartPos: 63371384, EndPos: 69612505, Giemsa: "gpos33", Chr: &Chr4} Chr4_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 69612505, EndPos: 72012936, Giemsa: "gneg", Chr: &Chr4} Chr4_qC3 = genome.Band{Band: "qC3", Desc: "Band", StartPos: 72012936, EndPos: 84015092, Giemsa: "gpos100", Chr: &Chr4} Chr4_qC4 = genome.Band{Band: "qC4", Desc: "Band", StartPos: 84015092, EndPos: 89776127, Giemsa: "gneg", Chr: &Chr4} Chr4_qC5 = genome.Band{Band: "qC5", Desc: "Band", StartPos: 89776127, EndPos: 97457507, Giemsa: "gpos66", Chr: &Chr4} Chr4_qC6 = genome.Band{Band: "qC6", Desc: "Band", StartPos: 97457507, EndPos: 105618973, Giemsa: "gneg", Chr: &Chr4} Chr4_qC7 = genome.Band{Band: "qC7", Desc: "Band", StartPos: 105618973, EndPos: 110899922, Giemsa: "gpos66", Chr: &Chr4} Chr4_qD1 = genome.Band{Band: "qD1", Desc: "Band", StartPos: 110899922, EndPos: 117621130, Giemsa: "gneg", Chr: &Chr4} Chr4_qD2_1 = genome.Band{Band: "qD2.1", Desc: "Band", StartPos: 117621130, EndPos: 120501647, Giemsa: "gpos33", Chr: &Chr4} Chr4_qD2_2 = genome.Band{Band: "qD2.2", Desc: "Band", StartPos: 120501647, EndPos: 131063544, Giemsa: "gneg", Chr: &Chr4} Chr4_qD2_3 = genome.Band{Band: "qD2.3", Desc: "Band", StartPos: 131063544, EndPos: 133944062, Giemsa: "gpos33", Chr: &Chr4} Chr4_qD3 = genome.Band{Band: "qD3", Desc: "Band", StartPos: 133944062, EndPos: 141625442, Giemsa: "gneg", Chr: &Chr4} Chr4_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 141625442, EndPos: 147866563, Giemsa: "gpos100", Chr: &Chr4} Chr4_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 147866563, EndPos: 156508116, Giemsa: "gneg", Chr: &Chr4} Chr5_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 14895174, Giemsa: "gpos100", Chr: &Chr5} Chr5_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 14895174, EndPos: 16336643, Giemsa: "gneg", Chr: &Chr5} Chr5_qA3 = genome.Band{Band: "qA3", Desc: "Band", StartPos: 16336643, EndPos: 25465943, Giemsa: "gpos66", Chr: &Chr5} Chr5_qB1 = genome.Band{Band: "qB1", Desc: "Band", StartPos: 25465943, EndPos: 33634265, Giemsa: "gneg", Chr: &Chr5} Chr5_qB2 = genome.Band{Band: "qB2", Desc: "Band", StartPos: 33634265, EndPos: 35556223, Giemsa: "gpos33", Chr: &Chr5} Chr5_qB3 = genome.Band{Band: "qB3", Desc: "Band", StartPos: 35556223, EndPos: 50451398, Giemsa: "gneg", Chr: &Chr5} Chr5_qC1 = genome.Band{Band: "qC1", Desc: "Band", StartPos: 50451398, EndPos: 58619719, Giemsa: "gpos33", Chr: &Chr5} Chr5_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 58619719, EndPos: 61022167, Giemsa: "gneg", Chr: &Chr5} Chr5_qC3_1 = genome.Band{Band: "qC3.1", Desc: "Band", StartPos: 61022167, EndPos: 71592936, Giemsa: "gpos100", Chr: &Chr5} Chr5_qC3_2 = genome.Band{Band: "qC3.2", Desc: "Band", StartPos: 71592936, EndPos: 73514894, Giemsa: "gneg", Chr: &Chr5} Chr5_qC3_3 = genome.Band{Band: "qC3.3", Desc: "Band", StartPos: 73514894, EndPos: 77839300, Giemsa: "gpos66", Chr: &Chr5} Chr5_qD = genome.Band{Band: "qD", Desc: "Band", StartPos: 77839300, EndPos: 81683216, Giemsa: "gneg", Chr: &Chr5} Chr5_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 81683216, EndPos: 91293006, Giemsa: "gpos100", Chr: &Chr5} Chr5_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 91293006, EndPos: 93695453, Giemsa: "gneg", Chr: &Chr5} Chr5_qE3 = genome.Band{Band: "qE3", Desc: "Band", StartPos: 93695453, EndPos: 99461327, Giemsa: "gpos33", Chr: &Chr5} Chr5_qE4 = genome.Band{Band: "qE4", Desc: "Band", StartPos: 99461327, EndPos: 101863775, Giemsa: "gneg", Chr: &Chr5} Chr5_qE5 = genome.Band{Band: "qE5", Desc: "Band", StartPos: 101863775, EndPos: 107629649, Giemsa: "gpos33", Chr: &Chr5} Chr5_qF = genome.Band{Band: "qF", Desc: "Band", StartPos: 107629649, EndPos: 124927271, Giemsa: "gneg", Chr: &Chr5} Chr5_qG1_1 = genome.Band{Band: "qG1.1", Desc: "Band", StartPos: 124927271, EndPos: 126849229, Giemsa: "gpos33", Chr: &Chr5} Chr5_qG1_2 = genome.Band{Band: "qG1.2", Desc: "Band", StartPos: 126849229, EndPos: 127810208, Giemsa: "gneg", Chr: &Chr5} Chr5_qG1_3 = genome.Band{Band: "qG1.3", Desc: "Band", StartPos: 127810208, EndPos: 130693145, Giemsa: "gpos33", Chr: &Chr5} Chr5_qG2 = genome.Band{Band: "qG2", Desc: "Band", StartPos: 130693145, EndPos: 146068809, Giemsa: "gneg", Chr: &Chr5} Chr5_qG3 = genome.Band{Band: "qG3", Desc: "Band", StartPos: 146068809, EndPos: 151834684, Giemsa: "gpos33", Chr: &Chr5} Chr6_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 16637394, Giemsa: "gpos100", Chr: &Chr6} Chr6_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 16637394, EndPos: 21530745, Giemsa: "gneg", Chr: &Chr6} Chr6_qA3_1 = genome.Band{Band: "qA3.1", Desc: "Band", StartPos: 21530745, EndPos: 27402766, Giemsa: "gpos100", Chr: &Chr6} Chr6_qA3_2 = genome.Band{Band: "qA3.2", Desc: "Band", StartPos: 27402766, EndPos: 28381436, Giemsa: "gneg", Chr: &Chr6} Chr6_qA3_3 = genome.Band{Band: "qA3.3", Desc: "Band", StartPos: 28381436, EndPos: 34253458, Giemsa: "gpos100", Chr: &Chr6} Chr6_qB1 = genome.Band{Band: "qB1", Desc: "Band", StartPos: 34253458, EndPos: 41593485, Giemsa: "gneg", Chr: &Chr6} Chr6_qB2_1 = genome.Band{Band: "qB2.1", Desc: "Band", StartPos: 41593485, EndPos: 44529495, Giemsa: "gpos66", Chr: &Chr6} Chr6_qB2_2 = genome.Band{Band: "qB2.2", Desc: "Band", StartPos: 44529495, EndPos: 45997501, Giemsa: "gneg", Chr: &Chr6} Chr6_qB2_3 = genome.Band{Band: "qB2.3", Desc: "Band", StartPos: 45997501, EndPos: 50890852, Giemsa: "gpos66", Chr: &Chr6} Chr6_qB3 = genome.Band{Band: "qB3", Desc: "Band", StartPos: 50890852, EndPos: 62634895, Giemsa: "gneg", Chr: &Chr6} Chr6_qC1 = genome.Band{Band: "qC1", Desc: "Band", StartPos: 62634895, EndPos: 74378937, Giemsa: "gpos100", Chr: &Chr6} Chr6_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 74378937, EndPos: 76825613, Giemsa: "gneg", Chr: &Chr6} Chr6_qC3 = genome.Band{Band: "qC3", Desc: "Band", StartPos: 76825613, EndPos: 86122980, Giemsa: "gpos66", Chr: &Chr6} Chr6_qD1 = genome.Band{Band: "qD1", Desc: "Band", StartPos: 86122980, EndPos: 94441677, Giemsa: "gneg", Chr: &Chr6} Chr6_qD2 = genome.Band{Band: "qD2", Desc: "Band", StartPos: 94441677, EndPos: 95909683, Giemsa: "gpos33", Chr: &Chr6} Chr6_qD3 = genome.Band{Band: "qD3", Desc: "Band", StartPos: 95909683, EndPos: 103249709, Giemsa: "gneg", Chr: &Chr6} Chr6_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 103249709, EndPos: 108632396, Giemsa: "gpos100", Chr: &Chr6} Chr6_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 108632396, EndPos: 109611066, Giemsa: "gneg", Chr: &Chr6} Chr6_qE3 = genome.Band{Band: "qE3", Desc: "Band", StartPos: 109611066, EndPos: 116951093, Giemsa: "gpos100", Chr: &Chr6} Chr6_qF1 = genome.Band{Band: "qF1", Desc: "Band", StartPos: 116951093, EndPos: 122823114, Giemsa: "gneg", Chr: &Chr6} Chr6_qF2 = genome.Band{Band: "qF2", Desc: "Band", StartPos: 122823114, EndPos: 125269790, Giemsa: "gpos33", Chr: &Chr6} Chr6_qF3 = genome.Band{Band: "qF3", Desc: "Band", StartPos: 125269790, EndPos: 132120481, Giemsa: "gneg", Chr: &Chr6} Chr6_qG1 = genome.Band{Band: "qG1", Desc: "Band", StartPos: 132120481, EndPos: 139460508, Giemsa: "gpos66", Chr: &Chr6} Chr6_qG2 = genome.Band{Band: "qG2", Desc: "Band", StartPos: 139460508, EndPos: 142885854, Giemsa: "gneg", Chr: &Chr6} Chr6_qG3 = genome.Band{Band: "qG3", Desc: "Band", StartPos: 142885854, EndPos: 149736546, Giemsa: "gpos33", Chr: &Chr6} Chr7_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 15202939, Giemsa: "gpos100", Chr: &Chr7} Chr7_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 15202939, EndPos: 18243527, Giemsa: "gneg", Chr: &Chr7} Chr7_qA3 = genome.Band{Band: "qA3", Desc: "Band", StartPos: 18243527, EndPos: 28378821, Giemsa: "gpos33", Chr: &Chr7} Chr7_qB1 = genome.Band{Band: "qB1", Desc: "Band", StartPos: 28378821, EndPos: 34459997, Giemsa: "gneg", Chr: &Chr7} Chr7_qB2 = genome.Band{Band: "qB2", Desc: "Band", StartPos: 34459997, EndPos: 37500585, Giemsa: "gpos33", Chr: &Chr7} Chr7_qB3 = genome.Band{Band: "qB3", Desc: "Band", StartPos: 37500585, EndPos: 47635878, Giemsa: "gneg", Chr: &Chr7} Chr7_qB4 = genome.Band{Band: "qB4", Desc: "Band", StartPos: 47635878, EndPos: 54223819, Giemsa: "gpos33", Chr: &Chr7} Chr7_qB5 = genome.Band{Band: "qB5", Desc: "Band", StartPos: 54223819, EndPos: 60811759, Giemsa: "gneg", Chr: &Chr7} Chr7_qC = genome.Band{Band: "qC", Desc: "Band", StartPos: 60811759, EndPos: 71453817, Giemsa: "gpos100", Chr: &Chr7} Chr7_qD1 = genome.Band{Band: "qD1", Desc: "Band", StartPos: 71453817, EndPos: 77028229, Giemsa: "gneg", Chr: &Chr7} Chr7_qD2 = genome.Band{Band: "qD2", Desc: "Band", StartPos: 77028229, EndPos: 80575581, Giemsa: "gpos66", Chr: &Chr7} Chr7_qD3 = genome.Band{Band: "qD3", Desc: "Band", StartPos: 80575581, EndPos: 90204110, Giemsa: "gneg", Chr: &Chr7} Chr7_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 90204110, EndPos: 99832639, Giemsa: "gpos100", Chr: &Chr7} Chr7_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 99832639, EndPos: 102366462, Giemsa: "gneg", Chr: &Chr7} Chr7_qE3 = genome.Band{Band: "qE3", Desc: "Band", StartPos: 102366462, EndPos: 111488226, Giemsa: "gpos33", Chr: &Chr7} Chr7_qF1 = genome.Band{Band: "qF1", Desc: "Band", StartPos: 111488226, EndPos: 118582931, Giemsa: "gneg", Chr: &Chr7} Chr7_qF2 = genome.Band{Band: "qF2", Desc: "Band", StartPos: 118582931, EndPos: 123143813, Giemsa: "gpos33", Chr: &Chr7} Chr7_qF3 = genome.Band{Band: "qF3", Desc: "Band", StartPos: 123143813, EndPos: 137333224, Giemsa: "gneg", Chr: &Chr7} Chr7_qF4 = genome.Band{Band: "qF4", Desc: "Band", StartPos: 137333224, EndPos: 140880577, Giemsa: "gpos33", Chr: &Chr7} Chr7_qF5 = genome.Band{Band: "qF5", Desc: "Band", StartPos: 140880577, EndPos: 145441459, Giemsa: "gneg", Chr: &Chr7} Chr8_qA1_1 = genome.Band{Band: "qA1.1", Desc: "Band", StartPos: 0, EndPos: 15940729, Giemsa: "gpos100", Chr: &Chr8} Chr8_qA1_2 = genome.Band{Band: "qA1.2", Desc: "Band", StartPos: 15940729, EndPos: 16878419, Giemsa: "gneg", Chr: &Chr8} Chr8_qA1_3 = genome.Band{Band: "qA1.3", Desc: "Band", StartPos: 16878419, EndPos: 20160333, Giemsa: "gpos33", Chr: &Chr8} Chr8_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 20160333, EndPos: 29537233, Giemsa: "gneg", Chr: &Chr8} Chr8_qA3 = genome.Band{Band: "qA3", Desc: "Band", StartPos: 29537233, EndPos: 33756838, Giemsa: "gpos33", Chr: &Chr8} Chr8_qA4 = genome.Band{Band: "qA4", Desc: "Band", StartPos: 33756838, EndPos: 44071427, Giemsa: "gneg", Chr: &Chr8} Chr8_qB1_1 = genome.Band{Band: "qB1.1", Desc: "Band", StartPos: 44071427, EndPos: 48291032, Giemsa: "gpos66", Chr: &Chr8} Chr8_qB1_2 = genome.Band{Band: "qB1.2", Desc: "Band", StartPos: 48291032, EndPos: 50166412, Giemsa: "gneg", Chr: &Chr8} Chr8_qB1_3 = genome.Band{Band: "qB1.3", Desc: "Band", StartPos: 50166412, EndPos: 55792551, Giemsa: "gpos66", Chr: &Chr8} Chr8_qB2 = genome.Band{Band: "qB2", Desc: "Band", StartPos: 55792551, EndPos: 59543311, Giemsa: "gneg", Chr: &Chr8} Chr8_qB3_1 = genome.Band{Band: "qB3.1", Desc: "Band", StartPos: 59543311, EndPos: 67044831, Giemsa: "gpos100", Chr: &Chr8} Chr8_qB3_2 = genome.Band{Band: "qB3.2", Desc: "Band", StartPos: 67044831, EndPos: 67982521, Giemsa: "gneg", Chr: &Chr8} Chr8_qB3_3 = genome.Band{Band: "qB3.3", Desc: "Band", StartPos: 67982521, EndPos: 74546350, Giemsa: "gpos100", Chr: &Chr8} Chr8_qC1 = genome.Band{Band: "qC1", Desc: "Band", StartPos: 74546350, EndPos: 80172490, Giemsa: "gneg", Chr: &Chr8} Chr8_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 80172490, EndPos: 84860940, Giemsa: "gpos33", Chr: &Chr8} Chr8_qC3 = genome.Band{Band: "qC3", Desc: "Band", StartPos: 84860940, EndPos: 90018235, Giemsa: "gneg", Chr: &Chr8} Chr8_qC4 = genome.Band{Band: "qC4", Desc: "Band", StartPos: 90018235, EndPos: 91424770, Giemsa: "gpos33", Chr: &Chr8} Chr8_qC5 = genome.Band{Band: "qC5", Desc: "Band", StartPos: 91424770, EndPos: 95644374, Giemsa: "gneg", Chr: &Chr8} Chr8_qD1 = genome.Band{Band: "qD1", Desc: "Band", StartPos: 95644374, EndPos: 103145894, Giemsa: "gpos100", Chr: &Chr8} Chr8_qD2 = genome.Band{Band: "qD2", Desc: "Band", StartPos: 103145894, EndPos: 104083584, Giemsa: "gneg", Chr: &Chr8} Chr8_qD3 = genome.Band{Band: "qD3", Desc: "Band", StartPos: 104083584, EndPos: 110647414, Giemsa: "gpos33", Chr: &Chr8} Chr8_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 110647414, EndPos: 123775073, Giemsa: "gneg", Chr: &Chr8} Chr8_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 123775073, EndPos: 129401213, Giemsa: "gpos33", Chr: &Chr8} Chr9_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 14412120, Giemsa: "gpos100", Chr: &Chr9} Chr9_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 14412120, EndPos: 19526099, Giemsa: "gneg", Chr: &Chr9} Chr9_qA3 = genome.Band{Band: "qA3", Desc: "Band", StartPos: 19526099, EndPos: 24175170, Giemsa: "gpos33", Chr: &Chr9} Chr9_qA4 = genome.Band{Band: "qA4", Desc: "Band", StartPos: 24175170, EndPos: 38122384, Giemsa: "gneg", Chr: &Chr9} Chr9_qA5_1 = genome.Band{Band: "qA5.1", Desc: "Band", StartPos: 38122384, EndPos: 44166177, Giemsa: "gpos66", Chr: &Chr9} Chr9_qA5_2 = genome.Band{Band: "qA5.2", Desc: "Band", StartPos: 44166177, EndPos: 46490712, Giemsa: "gneg", Chr: &Chr9} Chr9_qA5_3 = genome.Band{Band: "qA5.3", Desc: "Band", StartPos: 46490712, EndPos: 54859040, Giemsa: "gpos66", Chr: &Chr9} Chr9_qB = genome.Band{Band: "qB", Desc: "Band", StartPos: 54859040, EndPos: 63227369, Giemsa: "gneg", Chr: &Chr9} Chr9_qC = genome.Band{Band: "qC", Desc: "Band", StartPos: 63227369, EndPos: 69736069, Giemsa: "gpos33", Chr: &Chr9} Chr9_qD = genome.Band{Band: "qD", Desc: "Band", StartPos: 69736069, EndPos: 77639490, Giemsa: "gneg", Chr: &Chr9} Chr9_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 77639490, EndPos: 82753468, Giemsa: "gpos33", Chr: &Chr9} Chr9_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 82753468, EndPos: 84613097, Giemsa: "gneg", Chr: &Chr9} Chr9_qE3_1 = genome.Band{Band: "qE3.1", Desc: "Band", StartPos: 84613097, EndPos: 91121796, Giemsa: "gpos100", Chr: &Chr9} Chr9_qE3_2 = genome.Band{Band: "qE3.2", Desc: "Band", StartPos: 91121796, EndPos: 91586703, Giemsa: "gneg", Chr: &Chr9} Chr9_qE3_3 = genome.Band{Band: "qE3.3", Desc: "Band", StartPos: 91586703, EndPos: 100884846, Giemsa: "gpos100", Chr: &Chr9} Chr9_qE4 = genome.Band{Band: "qE4", Desc: "Band", StartPos: 100884846, EndPos: 101814660, Giemsa: "gpos66", Chr: &Chr9} Chr9_qF1 = genome.Band{Band: "qF1", Desc: "Band", StartPos: 101814660, EndPos: 108323360, Giemsa: "gneg", Chr: &Chr9} Chr9_qF2 = genome.Band{Band: "qF2", Desc: "Band", StartPos: 108323360, EndPos: 111112803, Giemsa: "gpos33", Chr: &Chr9} Chr9_qF3 = genome.Band{Band: "qF3", Desc: "Band", StartPos: 111112803, EndPos: 119946038, Giemsa: "gneg", Chr: &Chr9} Chr9_qF4 = genome.Band{Band: "qF4", Desc: "Band", StartPos: 119946038, EndPos: 124595110, Giemsa: "gpos33", Chr: &Chr9} Chr10_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 12822904, Giemsa: "gpos100", Chr: &Chr10} Chr10_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 12822904, EndPos: 17754791, Giemsa: "gneg", Chr: &Chr10} Chr10_qA3 = genome.Band{Band: "qA3", Desc: "Band", StartPos: 17754791, EndPos: 23673055, Giemsa: "gpos33", Chr: &Chr10} Chr10_qA4 = genome.Band{Band: "qA4", Desc: "Band", StartPos: 23673055, EndPos: 33536828, Giemsa: "gneg", Chr: &Chr10} Chr10_qB1 = genome.Band{Band: "qB1", Desc: "Band", StartPos: 33536828, EndPos: 41427846, Giemsa: "gpos100", Chr: &Chr10} Chr10_qB2 = genome.Band{Band: "qB2", Desc: "Band", StartPos: 41427846, EndPos: 48332487, Giemsa: "gneg", Chr: &Chr10} Chr10_qB3 = genome.Band{Band: "qB3", Desc: "Band", StartPos: 48332487, EndPos: 56223506, Giemsa: "gpos100", Chr: &Chr10} Chr10_qB4 = genome.Band{Band: "qB4", Desc: "Band", StartPos: 56223506, EndPos: 64114524, Giemsa: "gneg", Chr: &Chr10} Chr10_qB5_1 = genome.Band{Band: "qB5.1", Desc: "Band", StartPos: 64114524, EndPos: 68060034, Giemsa: "gpos100", Chr: &Chr10} Chr10_qB5_2 = genome.Band{Band: "qB5.2", Desc: "Band", StartPos: 68060034, EndPos: 68553222, Giemsa: "gneg", Chr: &Chr10} Chr10_qB5_3 = genome.Band{Band: "qB5.3", Desc: "Band", StartPos: 68553222, EndPos: 74964675, Giemsa: "gpos100", Chr: &Chr10} Chr10_qC1 = genome.Band{Band: "qC1", Desc: "Band", StartPos: 74964675, EndPos: 89267146, Giemsa: "gneg", Chr: &Chr10} Chr10_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 89267146, EndPos: 96171787, Giemsa: "gpos33", Chr: &Chr10} Chr10_qC3 = genome.Band{Band: "qC3", Desc: "Band", StartPos: 96171787, EndPos: 99130919, Giemsa: "gneg", Chr: &Chr10} Chr10_qD1 = genome.Band{Band: "qD1", Desc: "Band", StartPos: 99130919, EndPos: 111953824, Giemsa: "gpos100", Chr: &Chr10} Chr10_qD2 = genome.Band{Band: "qD2", Desc: "Band", StartPos: 111953824, EndPos: 124776729, Giemsa: "gneg", Chr: &Chr10} Chr10_qD3 = genome.Band{Band: "qD3", Desc: "Band", StartPos: 124776729, EndPos: 130694993, Giemsa: "gpos33", Chr: &Chr10} Chr11_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 13046989, Giemsa: "gpos100", Chr: &Chr11} Chr11_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 13046989, EndPos: 17240664, Giemsa: "gneg", Chr: &Chr11} Chr11_qA3_1 = genome.Band{Band: "qA3.1", Desc: "Band", StartPos: 17240664, EndPos: 21900303, Giemsa: "gpos100", Chr: &Chr11} Chr11_qA3_2 = genome.Band{Band: "qA3.2", Desc: "Band", StartPos: 21900303, EndPos: 25628014, Giemsa: "gneg", Chr: &Chr11} Chr11_qA3_3 = genome.Band{Band: "qA3.3", Desc: "Band", StartPos: 25628014, EndPos: 30287653, Giemsa: "gpos100", Chr: &Chr11} Chr11_qA4 = genome.Band{Band: "qA4", Desc: "Band", StartPos: 30287653, EndPos: 36345184, Giemsa: "gneg", Chr: &Chr11} Chr11_qA5 = genome.Band{Band: "qA5", Desc: "Band", StartPos: 36345184, EndPos: 43334643, Giemsa: "gpos100", Chr: &Chr11} Chr11_qB1_1 = genome.Band{Band: "qB1.1", Desc: "Band", StartPos: 43334643, EndPos: 47994282, Giemsa: "gneg", Chr: &Chr11} Chr11_qB1_2 = genome.Band{Band: "qB1.2", Desc: "Band", StartPos: 47994282, EndPos: 49858137, Giemsa: "gpos33", Chr: &Chr11} Chr11_qB1_3 = genome.Band{Band: "qB1.3", Desc: "Band", StartPos: 49858137, EndPos: 60109343, Giemsa: "gneg", Chr: &Chr11} Chr11_qB2 = genome.Band{Band: "qB2", Desc: "Band", StartPos: 60109343, EndPos: 62905127, Giemsa: "gpos33", Chr: &Chr11} Chr11_qB3 = genome.Band{Band: "qB3", Desc: "Band", StartPos: 62905127, EndPos: 70826513, Giemsa: "gneg", Chr: &Chr11} Chr11_qB4 = genome.Band{Band: "qB4", Desc: "Band", StartPos: 70826513, EndPos: 74088260, Giemsa: "gpos33", Chr: &Chr11} Chr11_qB5 = genome.Band{Band: "qB5", Desc: "Band", StartPos: 74088260, EndPos: 82009647, Giemsa: "gneg", Chr: &Chr11} Chr11_qC = genome.Band{Band: "qC", Desc: "Band", StartPos: 82009647, EndPos: 90396997, Giemsa: "gpos100", Chr: &Chr11} Chr11_qD = genome.Band{Band: "qD", Desc: "Band", StartPos: 90396997, EndPos: 102512059, Giemsa: "gneg", Chr: &Chr11} Chr11_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 102512059, EndPos: 110433445, Giemsa: "gpos66", Chr: &Chr11} Chr11_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 110433445, EndPos: 122082543, Giemsa: "gneg", Chr: &Chr11} Chr12_qA1_1 = genome.Band{Band: "qA1.1", Desc: "Band", StartPos: 0, EndPos: 17601321, Giemsa: "gpos100", Chr: &Chr12} Chr12_qA1_2 = genome.Band{Band: "qA1.2", Desc: "Band", StartPos: 17601321, EndPos: 21121586, Giemsa: "gneg", Chr: &Chr12} Chr12_qA1_3 = genome.Band{Band: "qA1.3", Desc: "Band", StartPos: 21121586, EndPos: 25961949, Giemsa: "gpos66", Chr: &Chr12} Chr12_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 25961949, EndPos: 31682379, Giemsa: "gneg", Chr: &Chr12} Chr12_qA3 = genome.Band{Band: "qA3", Desc: "Band", StartPos: 31682379, EndPos: 39162941, Giemsa: "gpos33", Chr: &Chr12} Chr12_qB1 = genome.Band{Band: "qB1", Desc: "Band", StartPos: 39162941, EndPos: 44003304, Giemsa: "gneg", Chr: &Chr12} Chr12_qB2 = genome.Band{Band: "qB2", Desc: "Band", StartPos: 44003304, EndPos: 44883370, Giemsa: "gpos33", Chr: &Chr12} Chr12_qB3 = genome.Band{Band: "qB3", Desc: "Band", StartPos: 44883370, EndPos: 51923899, Giemsa: "gneg", Chr: &Chr12} Chr12_qC1 = genome.Band{Band: "qC1", Desc: "Band", StartPos: 51923899, EndPos: 66004957, Giemsa: "gpos100", Chr: &Chr12} Chr12_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 66004957, EndPos: 71285353, Giemsa: "gneg", Chr: &Chr12} Chr12_qC3 = genome.Band{Band: "qC3", Desc: "Band", StartPos: 71285353, EndPos: 80966080, Giemsa: "gpos100", Chr: &Chr12} Chr12_qD1 = genome.Band{Band: "qD1", Desc: "Band", StartPos: 80966080, EndPos: 85366411, Giemsa: "gneg", Chr: &Chr12} Chr12_qD2 = genome.Band{Band: "qD2", Desc: "Band", StartPos: 85366411, EndPos: 88446642, Giemsa: "gpos33", Chr: &Chr12} Chr12_qD3 = genome.Band{Band: "qD3", Desc: "Band", StartPos: 88446642, EndPos: 95487171, Giemsa: "gneg", Chr: &Chr12} Chr12_qE = genome.Band{Band: "qE", Desc: "Band", StartPos: 95487171, EndPos: 106047964, Giemsa: "gpos100", Chr: &Chr12} Chr12_qF1 = genome.Band{Band: "qF1", Desc: "Band", StartPos: 106047964, EndPos: 114408592, Giemsa: "gneg", Chr: &Chr12} Chr12_qF2 = genome.Band{Band: "qF2", Desc: "Band", StartPos: 114408592, EndPos: 120129022, Giemsa: "gpos66", Chr: &Chr12} Chr13_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 16286533, Giemsa: "gpos100", Chr: &Chr13} Chr13_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 16286533, EndPos: 21221846, Giemsa: "gneg", Chr: &Chr13} Chr13_qA3_1 = genome.Band{Band: "qA3.1", Desc: "Band", StartPos: 21221846, EndPos: 29611878, Giemsa: "gpos66", Chr: &Chr13} Chr13_qA3_2 = genome.Band{Band: "qA3.2", Desc: "Band", StartPos: 29611878, EndPos: 33066597, Giemsa: "gneg", Chr: &Chr13} Chr13_qA3_3 = genome.Band{Band: "qA3.3", Desc: "Band", StartPos: 33066597, EndPos: 41456629, Giemsa: "gpos33", Chr: &Chr13} Chr13_qA4 = genome.Band{Band: "qA4", Desc: "Band", StartPos: 41456629, EndPos: 44417817, Giemsa: "gneg", Chr: &Chr13} Chr13_qA5 = genome.Band{Band: "qA5", Desc: "Band", StartPos: 44417817, EndPos: 52807849, Giemsa: "gpos33", Chr: &Chr13} Chr13_qB1 = genome.Band{Band: "qB1", Desc: "Band", StartPos: 52807849, EndPos: 59223756, Giemsa: "gneg", Chr: &Chr13} Chr13_qB2 = genome.Band{Band: "qB2", Desc: "Band", StartPos: 59223756, EndPos: 61691413, Giemsa: "gpos33", Chr: &Chr13} Chr13_qB3 = genome.Band{Band: "qB3", Desc: "Band", StartPos: 61691413, EndPos: 69587914, Giemsa: "gneg", Chr: &Chr13} Chr13_qC1 = genome.Band{Band: "qC1", Desc: "Band", StartPos: 69587914, EndPos: 78471477, Giemsa: "gpos33", Chr: &Chr13} Chr13_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 78471477, EndPos: 80939134, Giemsa: "gneg", Chr: &Chr13} Chr13_qC3 = genome.Band{Band: "qC3", Desc: "Band", StartPos: 80939134, EndPos: 94758011, Giemsa: "gpos100", Chr: &Chr13} Chr13_qD1 = genome.Band{Band: "qD1", Desc: "Band", StartPos: 94758011, EndPos: 106602762, Giemsa: "gneg", Chr: &Chr13} Chr13_qD2_1 = genome.Band{Band: "qD2.1", Desc: "Band", StartPos: 106602762, EndPos: 110551012, Giemsa: "gpos33", Chr: &Chr13} Chr13_qD2_2 = genome.Band{Band: "qD2.2", Desc: "Band", StartPos: 110551012, EndPos: 116473388, Giemsa: "gneg", Chr: &Chr13} Chr13_qD2_3 = genome.Band{Band: "qD2.3", Desc: "Band", StartPos: 116473388, EndPos: 120421639, Giemsa: "gpos33", Chr: &Chr13} Chr14_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 14988269, Giemsa: "gpos100", Chr: &Chr14} Chr14_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 14988269, EndPos: 19484750, Giemsa: "gneg", Chr: &Chr14} Chr14_qA3 = genome.Band{Band: "qA3", Desc: "Band", StartPos: 19484750, EndPos: 29976538, Giemsa: "gpos33", Chr: &Chr14} Chr14_qB = genome.Band{Band: "qB", Desc: "Band", StartPos: 29976538, EndPos: 43465980, Giemsa: "gneg", Chr: &Chr14} Chr14_qC1 = genome.Band{Band: "qC1", Desc: "Band", StartPos: 43465980, EndPos: 51959333, Giemsa: "gpos100", Chr: &Chr14} Chr14_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 51959333, EndPos: 54956987, Giemsa: "gneg", Chr: &Chr14} Chr14_qC3 = genome.Band{Band: "qC3", Desc: "Band", StartPos: 54956987, EndPos: 59953077, Giemsa: "gpos66", Chr: &Chr14} Chr14_qD1 = genome.Band{Band: "qD1", Desc: "Band", StartPos: 59953077, EndPos: 68946038, Giemsa: "gneg", Chr: &Chr14} Chr14_qD2 = genome.Band{Band: "qD2", Desc: "Band", StartPos: 68946038, EndPos: 72942910, Giemsa: "gpos33", Chr: &Chr14} Chr14_qD3 = genome.Band{Band: "qD3", Desc: "Band", StartPos: 72942910, EndPos: 84933525, Giemsa: "gneg", Chr: &Chr14} Chr14_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 84933525, EndPos: 88930397, Giemsa: "gpos66", Chr: &Chr14} Chr14_qE2_1 = genome.Band{Band: "qE2.1", Desc: "Band", StartPos: 88930397, EndPos: 98922577, Giemsa: "gpos100", Chr: &Chr14} Chr14_qE2_2 = genome.Band{Band: "qE2.2", Desc: "Band", StartPos: 98922577, EndPos: 99921795, Giemsa: "gneg", Chr: &Chr14} Chr14_qE2_3 = genome.Band{Band: "qE2.3", Desc: "Band", StartPos: 99921795, EndPos: 107415929, Giemsa: "gpos100", Chr: &Chr14} Chr14_qE3 = genome.Band{Band: "qE3", Desc: "Band", StartPos: 107415929, EndPos: 110913192, Giemsa: "gneg", Chr: &Chr14} Chr14_qE4 = genome.Band{Band: "qE4", Desc: "Band", StartPos: 110913192, EndPos: 120905372, Giemsa: "gpos100", Chr: &Chr14} Chr14_qE5 = genome.Band{Band: "qE5", Desc: "Band", StartPos: 120905372, EndPos: 124902244, Giemsa: "gneg", Chr: &Chr14} Chr15_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 16500320, Giemsa: "gpos100", Chr: &Chr15} Chr15_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 16500320, EndPos: 24292137, Giemsa: "gneg", Chr: &Chr15} Chr15_qB1 = genome.Band{Band: "qB1", Desc: "Band", StartPos: 24292137, EndPos: 29792244, Giemsa: "gpos33", Chr: &Chr15} Chr15_qB2 = genome.Band{Band: "qB2", Desc: "Band", StartPos: 29792244, EndPos: 32083955, Giemsa: "gneg", Chr: &Chr15} Chr15_qB3_1 = genome.Band{Band: "qB3.1", Desc: "Band", StartPos: 32083955, EndPos: 43084169, Giemsa: "gpos100", Chr: &Chr15} Chr15_qB3_2 = genome.Band{Band: "qB3.2", Desc: "Band", StartPos: 43084169, EndPos: 44917538, Giemsa: "gneg", Chr: &Chr15} Chr15_qB3_3 = genome.Band{Band: "qB3.3", Desc: "Band", StartPos: 44917538, EndPos: 49959302, Giemsa: "gpos66", Chr: &Chr15} Chr15_qC = genome.Band{Band: "qC", Desc: "Band", StartPos: 49959302, EndPos: 53626040, Giemsa: "gneg", Chr: &Chr15} Chr15_qD1 = genome.Band{Band: "qD1", Desc: "Band", StartPos: 53626040, EndPos: 66459622, Giemsa: "gpos100", Chr: &Chr15} Chr15_qD2 = genome.Band{Band: "qD2", Desc: "Band", StartPos: 66459622, EndPos: 68751333, Giemsa: "gneg", Chr: &Chr15} Chr15_qD3 = genome.Band{Band: "qD3", Desc: "Band", StartPos: 68751333, EndPos: 77459835, Giemsa: "gpos66", Chr: &Chr15} Chr15_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 77459835, EndPos: 83876627, Giemsa: "gneg", Chr: &Chr15} Chr15_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 83876627, EndPos: 87085022, Giemsa: "gpos33", Chr: &Chr15} Chr15_qE3 = genome.Band{Band: "qE3", Desc: "Band", StartPos: 87085022, EndPos: 95793524, Giemsa: "gneg", Chr: &Chr15} Chr15_qF1 = genome.Band{Band: "qF1", Desc: "Band", StartPos: 95793524, EndPos: 101293631, Giemsa: "gpos66", Chr: &Chr15} Chr15_qF2 = genome.Band{Band: "qF2", Desc: "Band", StartPos: 101293631, EndPos: 102210316, Giemsa: "gneg", Chr: &Chr15} Chr15_qF3 = genome.Band{Band: "qF3", Desc: "Band", StartPos: 102210316, EndPos: 104043685, Giemsa: "gpos33", Chr: &Chr15} Chr16_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 15432649, Giemsa: "gpos100", Chr: &Chr16} Chr16_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 15432649, EndPos: 16367961, Giemsa: "gneg", Chr: &Chr16} Chr16_qA3 = genome.Band{Band: "qA3", Desc: "Band", StartPos: 16367961, EndPos: 20576865, Giemsa: "gpos33", Chr: &Chr16} Chr16_qB1 = genome.Band{Band: "qB1", Desc: "Band", StartPos: 20576865, EndPos: 26188738, Giemsa: "gneg", Chr: &Chr16} Chr16_qB2 = genome.Band{Band: "qB2", Desc: "Band", StartPos: 26188738, EndPos: 32268266, Giemsa: "gpos33", Chr: &Chr16} Chr16_qB3 = genome.Band{Band: "qB3", Desc: "Band", StartPos: 32268266, EndPos: 38347795, Giemsa: "gneg", Chr: &Chr16} Chr16_qB4 = genome.Band{Band: "qB4", Desc: "Band", StartPos: 38347795, EndPos: 44894979, Giemsa: "gpos33", Chr: &Chr16} Chr16_qB5 = genome.Band{Band: "qB5", Desc: "Band", StartPos: 44894979, EndPos: 53780444, Giemsa: "gneg", Chr: &Chr16} Chr16_qC1_1 = genome.Band{Band: "qC1.1", Desc: "Band", StartPos: 53780444, EndPos: 57989348, Giemsa: "gpos66", Chr: &Chr16} Chr16_qC1_2 = genome.Band{Band: "qC1.2", Desc: "Band", StartPos: 57989348, EndPos: 58924660, Giemsa: "gneg", Chr: &Chr16} Chr16_qC1_3 = genome.Band{Band: "qC1.3", Desc: "Band", StartPos: 58924660, EndPos: 66874813, Giemsa: "gpos66", Chr: &Chr16} Chr16_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 66874813, EndPos: 70616061, Giemsa: "gneg", Chr: &Chr16} Chr16_qC3_1 = genome.Band{Band: "qC3.1", Desc: "Band", StartPos: 70616061, EndPos: 79033870, Giemsa: "gpos100", Chr: &Chr16} Chr16_qC3_2 = genome.Band{Band: "qC3.2", Desc: "Band", StartPos: 79033870, EndPos: 79501526, Giemsa: "gneg", Chr: &Chr16} Chr16_qC3_3 = genome.Band{Band: "qC3.3", Desc: "Band", StartPos: 79501526, EndPos: 91660583, Giemsa: "gpos100", Chr: &Chr16} Chr16_qC4 = genome.Band{Band: "qC4", Desc: "Band", StartPos: 91660583, EndPos: 98207768, Giemsa: "gneg", Chr: &Chr16} Chr17_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 13943085, Giemsa: "gpos100", Chr: &Chr17} Chr17_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 13943085, EndPos: 16121692, Giemsa: "gneg", Chr: &Chr17} Chr17_qA3_1 = genome.Band{Band: "qA3.1", Desc: "Band", StartPos: 16121692, EndPos: 17428857, Giemsa: "gpos33", Chr: &Chr17} Chr17_qA3_2 = genome.Band{Band: "qA3.2", Desc: "Band", StartPos: 17428857, EndPos: 21786071, Giemsa: "gneg", Chr: &Chr17} Chr17_qA3_3 = genome.Band{Band: "qA3.3", Desc: "Band", StartPos: 21786071, EndPos: 31371942, Giemsa: "gpos66", Chr: &Chr17} Chr17_qB1 = genome.Band{Band: "qB1", Desc: "Band", StartPos: 31371942, EndPos: 40086371, Giemsa: "gneg", Chr: &Chr17} Chr17_qB2 = genome.Band{Band: "qB2", Desc: "Band", StartPos: 40086371, EndPos: 41393535, Giemsa: "gpos33", Chr: &Chr17} Chr17_qB3 = genome.Band{Band: "qB3", Desc: "Band", StartPos: 41393535, EndPos: 45750749, Giemsa: "gneg", Chr: &Chr17} Chr17_qC = genome.Band{Band: "qC", Desc: "Band", StartPos: 45750749, EndPos: 55772342, Giemsa: "gpos66", Chr: &Chr17} Chr17_qD = genome.Band{Band: "qD", Desc: "Band", StartPos: 55772342, EndPos: 60129556, Giemsa: "gneg", Chr: &Chr17} Chr17_qE1_1 = genome.Band{Band: "qE1.1", Desc: "Band", StartPos: 60129556, EndPos: 67972542, Giemsa: "gpos100", Chr: &Chr17} Chr17_qE1_2 = genome.Band{Band: "qE1.2", Desc: "Band", StartPos: 67972542, EndPos: 68843985, Giemsa: "gneg", Chr: &Chr17} Chr17_qE1_3 = genome.Band{Band: "qE1.3", Desc: "Band", StartPos: 68843985, EndPos: 73201199, Giemsa: "gpos100", Chr: &Chr17} Chr17_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 73201199, EndPos: 78429856, Giemsa: "gneg", Chr: &Chr17} Chr17_qE3 = genome.Band{Band: "qE3", Desc: "Band", StartPos: 78429856, EndPos: 82787071, Giemsa: "gpos33", Chr: &Chr17} Chr17_qE4 = genome.Band{Band: "qE4", Desc: "Band", StartPos: 82787071, EndPos: 88887171, Giemsa: "gneg", Chr: &Chr17} Chr17_qE5 = genome.Band{Band: "qE5", Desc: "Band", StartPos: 88887171, EndPos: 94987271, Giemsa: "gpos33", Chr: &Chr17} Chr18_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 19406146, Giemsa: "gpos100", Chr: &Chr18} Chr18_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 19406146, EndPos: 29531091, Giemsa: "gneg", Chr: &Chr18} Chr18_qB1 = genome.Band{Band: "qB1", Desc: "Band", StartPos: 29531091, EndPos: 35437310, Giemsa: "gpos66", Chr: &Chr18} Chr18_qB2 = genome.Band{Band: "qB2", Desc: "Band", StartPos: 35437310, EndPos: 37124801, Giemsa: "gneg", Chr: &Chr18} Chr18_qB3 = genome.Band{Band: "qB3", Desc: "Band", StartPos: 37124801, EndPos: 45562255, Giemsa: "gpos100", Chr: &Chr18} Chr18_qC = genome.Band{Band: "qC", Desc: "Band", StartPos: 45562255, EndPos: 49780983, Giemsa: "gneg", Chr: &Chr18} Chr18_qD1 = genome.Band{Band: "qD1", Desc: "Band", StartPos: 49780983, EndPos: 53999710, Giemsa: "gpos100", Chr: &Chr18} Chr18_qD2 = genome.Band{Band: "qD2", Desc: "Band", StartPos: 53999710, EndPos: 54421583, Giemsa: "gneg", Chr: &Chr18} Chr18_qD3 = genome.Band{Band: "qD3", Desc: "Band", StartPos: 54421583, EndPos: 60749674, Giemsa: "gpos100", Chr: &Chr18} Chr18_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 60749674, EndPos: 67921511, Giemsa: "gneg", Chr: &Chr18} Chr18_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 67921511, EndPos: 75093347, Giemsa: "gpos33", Chr: &Chr18} Chr18_qE3 = genome.Band{Band: "qE3", Desc: "Band", StartPos: 75093347, EndPos: 83530802, Giemsa: "gneg", Chr: &Chr18} Chr18_qE4 = genome.Band{Band: "qE4", Desc: "Band", StartPos: 83530802, EndPos: 90702639, Giemsa: "gpos33", Chr: &Chr18} Chr19_qA = genome.Band{Band: "qA", Desc: "Band", StartPos: 0, EndPos: 16680094, Giemsa: "gpos100", Chr: &Chr19} Chr19_qB = genome.Band{Band: "qB", Desc: "Band", StartPos: 16680094, EndPos: 25630388, Giemsa: "gneg", Chr: &Chr19} Chr19_qC1 = genome.Band{Band: "qC1", Desc: "Band", StartPos: 25630388, EndPos: 34987514, Giemsa: "gpos66", Chr: &Chr19} Chr19_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 34987514, EndPos: 38242166, Giemsa: "gneg", Chr: &Chr19} Chr19_qC3 = genome.Band{Band: "qC3", Desc: "Band", StartPos: 38242166, EndPos: 47599292, Giemsa: "gpos66", Chr: &Chr19} Chr19_qD1 = genome.Band{Band: "qD1", Desc: "Band", StartPos: 47599292, EndPos: 51667608, Giemsa: "gneg", Chr: &Chr19} Chr19_qD2 = genome.Band{Band: "qD2", Desc: "Band", StartPos: 51667608, EndPos: 58990576, Giemsa: "gpos33", Chr: &Chr19} Chr19_qD3 = genome.Band{Band: "qD3", Desc: "Band", StartPos: 58990576, EndPos: 61431566, Giemsa: "gneg", Chr: &Chr19} ChrX_qA1_1 = genome.Band{Band: "qA1.1", Desc: "Band", StartPos: 0, EndPos: 15772338, Giemsa: "gpos100", Chr: &ChrX} ChrX_qA1_2 = genome.Band{Band: "qA1.2", Desc: "Band", StartPos: 15772338, EndPos: 18236766, Giemsa: "gneg", Chr: &ChrX} ChrX_qA1_3 = genome.Band{Band: "qA1.3", Desc: "Band", StartPos: 18236766, EndPos: 21194080, Giemsa: "gpos33", Chr: &ChrX} ChrX_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 21194080, EndPos: 28094478, Giemsa: "gneg", Chr: &ChrX} ChrX_qA3_1 = genome.Band{Band: "qA3.1", Desc: "Band", StartPos: 28094478, EndPos: 33516219, Giemsa: "gpos66", Chr: &ChrX} ChrX_qA3_2 = genome.Band{Band: "qA3.2", Desc: "Band", StartPos: 33516219, EndPos: 34501991, Giemsa: "gneg", Chr: &ChrX} ChrX_qA3_3 = genome.Band{Band: "qA3.3", Desc: "Band", StartPos: 34501991, EndPos: 39923732, Giemsa: "gpos66", Chr: &ChrX} ChrX_qA4 = genome.Band{Band: "qA4", Desc: "Band", StartPos: 39923732, EndPos: 47809902, Giemsa: "gneg", Chr: &ChrX} ChrX_qA5 = genome.Band{Band: "qA5", Desc: "Band", StartPos: 47809902, EndPos: 56188957, Giemsa: "gpos66", Chr: &ChrX} ChrX_qA6 = genome.Band{Band: "qA6", Desc: "Band", StartPos: 56188957, EndPos: 63089355, Giemsa: "gneg", Chr: &ChrX} ChrX_qA7_1 = genome.Band{Band: "qA7.1", Desc: "Band", StartPos: 63089355, EndPos: 69496867, Giemsa: "gpos66", Chr: &ChrX} ChrX_qA7_2 = genome.Band{Band: "qA7.2", Desc: "Band", StartPos: 69496867, EndPos: 70975524, Giemsa: "gneg", Chr: &ChrX} ChrX_qA7_3 = genome.Band{Band: "qA7.3", Desc: "Band", StartPos: 70975524, EndPos: 77383037, Giemsa: "gpos66", Chr: &ChrX} ChrX_qB = genome.Band{Band: "qB", Desc: "Band", StartPos: 77383037, EndPos: 82311893, Giemsa: "gneg", Chr: &ChrX} ChrX_qC1 = genome.Band{Band: "qC1", Desc: "Band", StartPos: 82311893, EndPos: 91183833, Giemsa: "gpos100", Chr: &ChrX} ChrX_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 91183833, EndPos: 92169604, Giemsa: "gneg", Chr: &ChrX} ChrX_qC3 = genome.Band{Band: "qC3", Desc: "Band", StartPos: 92169604, EndPos: 101041545, Giemsa: "gpos100", Chr: &ChrX} ChrX_qD = genome.Band{Band: "qD", Desc: "Band", StartPos: 101041545, EndPos: 109913486, Giemsa: "gneg", Chr: &ChrX} ChrX_qE1 = genome.Band{Band: "qE1", Desc: "Band", StartPos: 109913486, EndPos: 120264083, Giemsa: "gpos100", Chr: &ChrX} ChrX_qE2 = genome.Band{Band: "qE2", Desc: "Band", StartPos: 120264083, EndPos: 121249854, Giemsa: "gneg", Chr: &ChrX} ChrX_qE3 = genome.Band{Band: "qE3", Desc: "Band", StartPos: 121249854, EndPos: 135050651, Giemsa: "gpos100", Chr: &ChrX} ChrX_qF1 = genome.Band{Band: "qF1", Desc: "Band", StartPos: 135050651, EndPos: 141458163, Giemsa: "gneg", Chr: &ChrX} ChrX_qF2 = genome.Band{Band: "qF2", Desc: "Band", StartPos: 141458163, EndPos: 148851447, Giemsa: "gpos33", Chr: &ChrX} ChrX_qF3 = genome.Band{Band: "qF3", Desc: "Band", StartPos: 148851447, EndPos: 156244731, Giemsa: "gneg", Chr: &ChrX} ChrX_qF4 = genome.Band{Band: "qF4", Desc: "Band", StartPos: 156244731, EndPos: 163638015, Giemsa: "gpos33", Chr: &ChrX} ChrX_qF5 = genome.Band{Band: "qF5", Desc: "Band", StartPos: 163638015, EndPos: 171031299, Giemsa: "gneg", Chr: &ChrX} ChrY_qA1 = genome.Band{Band: "qA1", Desc: "Band", StartPos: 0, EndPos: 20642557, Giemsa: "gpos100", Chr: &ChrY} ChrY_qA2 = genome.Band{Band: "qA2", Desc: "Band", StartPos: 20642557, EndPos: 32684048, Giemsa: "gpos66", Chr: &ChrY} ChrY_qB = genome.Band{Band: "qB", Desc: "Band", StartPos: 32684048, EndPos: 45298944, Giemsa: "gpos33", Chr: &ChrY} ChrY_qC1 = genome.Band{Band: "qC1", Desc: "Band", StartPos: 45298944, EndPos: 54473414, Giemsa: "gpos100", Chr: &ChrY} ChrY_qC2 = genome.Band{Band: "qC2", Desc: "Band", StartPos: 54473414, EndPos: 61927671, Giemsa: "gpos33", Chr: &ChrY} ChrY_qC3 = genome.Band{Band: "qC3", Desc: "Band", StartPos: 61927671, EndPos: 72248949, Giemsa: "gpos100", Chr: &ChrY} ChrY_qD = genome.Band{Band: "qD", Desc: "Band", StartPos: 72248949, EndPos: 83143632, Giemsa: "gpos33", Chr: &ChrY} ChrY_qE = genome.Band{Band: "qE", Desc: "Band", StartPos: 83143632, EndPos: 91744698, Giemsa: "gpos66", Chr: &ChrY} ) var Bands = []*genome.Band{ &Chr1_qA1, &Chr1_qA2, &Chr1_qA3, &Chr1_qA4, &Chr1_qA5, &Chr1_qB, &Chr1_qC1_1, &Chr1_qC1_2, &Chr1_qC1_3, &Chr1_qC2, &Chr1_qC3, &Chr1_qC4, &Chr1_qC5, &Chr1_qD, &Chr1_qE1_1, &Chr1_qE1_2, &Chr1_qE2_1, &Chr1_qE2_2, &Chr1_qE2_3, &Chr1_qE3, &Chr1_qE4, &Chr1_qF, &Chr1_qG1, &Chr1_qG2, &Chr1_qG3, &Chr1_qH1, &Chr1_qH2_1, &Chr1_qH2_2, &Chr1_qH2_3, &Chr1_qH3, &Chr1_qH4, &Chr1_qH5, &Chr1_qH6, &Chr2_qA1, &Chr2_qA2, &Chr2_qA3, &Chr2_qB, &Chr2_qC1_1, &Chr2_qC1_2, &Chr2_qC1_3, &Chr2_qC2, &Chr2_qC3, &Chr2_qD, &Chr2_qE1, &Chr2_qE2, &Chr2_qE3, &Chr2_qE4, &Chr2_qE5, &Chr2_qF1, &Chr2_qF2, &Chr2_qF3, &Chr2_qG1, &Chr2_qG2, &Chr2_qG3, &Chr2_qH1, &Chr2_qH2, &Chr2_qH3, &Chr2_qH4, &Chr3_qA1, &Chr3_qA2, &Chr3_qA3, &Chr3_qB, &Chr3_qC, &Chr3_qD, &Chr3_qE1, &Chr3_qE2, &Chr3_qE3, &Chr3_qF1, &Chr3_qF2_1, &Chr3_qF2_2, &Chr3_qF2_3, &Chr3_qF3, &Chr3_qG1, &Chr3_qG2, &Chr3_qG3, &Chr3_qH1, &Chr3_qH2, &Chr3_qH3, &Chr3_qH4, &Chr4_qA1, &Chr4_qA2, &Chr4_qA3, &Chr4_qA4, &Chr4_qA5, &Chr4_qB1, &Chr4_qB2, &Chr4_qB3, &Chr4_qC1, &Chr4_qC2, &Chr4_qC3, &Chr4_qC4, &Chr4_qC5, &Chr4_qC6, &Chr4_qC7, &Chr4_qD1, &Chr4_qD2_1, &Chr4_qD2_2, &Chr4_qD2_3, &Chr4_qD3, &Chr4_qE1, &Chr4_qE2, &Chr5_qA1, &Chr5_qA2, &Chr5_qA3, &Chr5_qB1, &Chr5_qB2, &Chr5_qB3, &Chr5_qC1, &Chr5_qC2, &Chr5_qC3_1, &Chr5_qC3_2, &Chr5_qC3_3, &Chr5_qD, &Chr5_qE1, &Chr5_qE2, &Chr5_qE3, &Chr5_qE4, &Chr5_qE5, &Chr5_qF, &Chr5_qG1_1, &Chr5_qG1_2, &Chr5_qG1_3, &Chr5_qG2, &Chr5_qG3, &Chr6_qA1, &Chr6_qA2, &Chr6_qA3_1, &Chr6_qA3_2, &Chr6_qA3_3, &Chr6_qB1, &Chr6_qB2_1, &Chr6_qB2_2, &Chr6_qB2_3, &Chr6_qB3, &Chr6_qC1, &Chr6_qC2, &Chr6_qC3, &Chr6_qD1, &Chr6_qD2, &Chr6_qD3, &Chr6_qE1, &Chr6_qE2, &Chr6_qE3, &Chr6_qF1, &Chr6_qF2, &Chr6_qF3, &Chr6_qG1, &Chr6_qG2, &Chr6_qG3, &Chr7_qA1, &Chr7_qA2, &Chr7_qA3, &Chr7_qB1, &Chr7_qB2, &Chr7_qB3, &Chr7_qB4, &Chr7_qB5, &Chr7_qC, &Chr7_qD1, &Chr7_qD2, &Chr7_qD3, &Chr7_qE1, &Chr7_qE2, &Chr7_qE3, &Chr7_qF1, &Chr7_qF2, &Chr7_qF3, &Chr7_qF4, &Chr7_qF5, &Chr8_qA1_1, &Chr8_qA1_2, &Chr8_qA1_3, &Chr8_qA2, &Chr8_qA3, &Chr8_qA4, &Chr8_qB1_1, &Chr8_qB1_2, &Chr8_qB1_3, &Chr8_qB2, &Chr8_qB3_1, &Chr8_qB3_2, &Chr8_qB3_3, &Chr8_qC1, &Chr8_qC2, &Chr8_qC3, &Chr8_qC4, &Chr8_qC5, &Chr8_qD1, &Chr8_qD2, &Chr8_qD3, &Chr8_qE1, &Chr8_qE2, &Chr9_qA1, &Chr9_qA2, &Chr9_qA3, &Chr9_qA4, &Chr9_qA5_1, &Chr9_qA5_2, &Chr9_qA5_3, &Chr9_qB, &Chr9_qC, &Chr9_qD, &Chr9_qE1, &Chr9_qE2, &Chr9_qE3_1, &Chr9_qE3_2, &Chr9_qE3_3, &Chr9_qE4, &Chr9_qF1, &Chr9_qF2, &Chr9_qF3, &Chr9_qF4, &Chr10_qA1, &Chr10_qA2, &Chr10_qA3, &Chr10_qA4, &Chr10_qB1, &Chr10_qB2, &Chr10_qB3, &Chr10_qB4, &Chr10_qB5_1, &Chr10_qB5_2, &Chr10_qB5_3, &Chr10_qC1, &Chr10_qC2, &Chr10_qC3, &Chr10_qD1, &Chr10_qD2, &Chr10_qD3, &Chr11_qA1, &Chr11_qA2, &Chr11_qA3_1, &Chr11_qA3_2, &Chr11_qA3_3, &Chr11_qA4, &Chr11_qA5, &Chr11_qB1_1, &Chr11_qB1_2, &Chr11_qB1_3, &Chr11_qB2, &Chr11_qB3, &Chr11_qB4, &Chr11_qB5, &Chr11_qC, &Chr11_qD, &Chr11_qE1, &Chr11_qE2, &Chr12_qA1_1, &Chr12_qA1_2, &Chr12_qA1_3, &Chr12_qA2, &Chr12_qA3, &Chr12_qB1, &Chr12_qB2, &Chr12_qB3, &Chr12_qC1, &Chr12_qC2, &Chr12_qC3, &Chr12_qD1, &Chr12_qD2, &Chr12_qD3, &Chr12_qE, &Chr12_qF1, &Chr12_qF2, &Chr13_qA1, &Chr13_qA2, &Chr13_qA3_1, &Chr13_qA3_2, &Chr13_qA3_3, &Chr13_qA4, &Chr13_qA5, &Chr13_qB1, &Chr13_qB2, &Chr13_qB3, &Chr13_qC1, &Chr13_qC2, &Chr13_qC3, &Chr13_qD1, &Chr13_qD2_1, &Chr13_qD2_2, &Chr13_qD2_3, &Chr14_qA1, &Chr14_qA2, &Chr14_qA3, &Chr14_qB, &Chr14_qC1, &Chr14_qC2, &Chr14_qC3, &Chr14_qD1, &Chr14_qD2, &Chr14_qD3, &Chr14_qE1, &Chr14_qE2_1, &Chr14_qE2_2, &Chr14_qE2_3, &Chr14_qE3, &Chr14_qE4, &Chr14_qE5, &Chr15_qA1, &Chr15_qA2, &Chr15_qB1, &Chr15_qB2, &Chr15_qB3_1, &Chr15_qB3_2, &Chr15_qB3_3, &Chr15_qC, &Chr15_qD1, &Chr15_qD2, &Chr15_qD3, &Chr15_qE1, &Chr15_qE2, &Chr15_qE3, &Chr15_qF1, &Chr15_qF2, &Chr15_qF3, &Chr16_qA1, &Chr16_qA2, &Chr16_qA3, &Chr16_qB1, &Chr16_qB2, &Chr16_qB3, &Chr16_qB4, &Chr16_qB5, &Chr16_qC1_1, &Chr16_qC1_2, &Chr16_qC1_3, &Chr16_qC2, &Chr16_qC3_1, &Chr16_qC3_2, &Chr16_qC3_3, &Chr16_qC4, &Chr17_qA1, &Chr17_qA2, &Chr17_qA3_1, &Chr17_qA3_2, &Chr17_qA3_3, &Chr17_qB1, &Chr17_qB2, &Chr17_qB3, &Chr17_qC, &Chr17_qD, &Chr17_qE1_1, &Chr17_qE1_2, &Chr17_qE1_3, &Chr17_qE2, &Chr17_qE3, &Chr17_qE4, &Chr17_qE5, &Chr18_qA1, &Chr18_qA2, &Chr18_qB1, &Chr18_qB2, &Chr18_qB3, &Chr18_qC, &Chr18_qD1, &Chr18_qD2, &Chr18_qD3, &Chr18_qE1, &Chr18_qE2, &Chr18_qE3, &Chr18_qE4, &Chr19_qA, &Chr19_qB, &Chr19_qC1, &Chr19_qC2, &Chr19_qC3, &Chr19_qD1, &Chr19_qD2, &Chr19_qD3, &ChrX_qA1_1, &ChrX_qA1_2, &ChrX_qA1_3, &ChrX_qA2, &ChrX_qA3_1, &ChrX_qA3_2, &ChrX_qA3_3, &ChrX_qA4, &ChrX_qA5, &ChrX_qA6, &ChrX_qA7_1, &ChrX_qA7_2, &ChrX_qA7_3, &ChrX_qB, &ChrX_qC1, &ChrX_qC2, &ChrX_qC3, &ChrX_qD, &ChrX_qE1, &ChrX_qE2, &ChrX_qE3, &ChrX_qF1, &ChrX_qF2, &ChrX_qF3, &ChrX_qF4, &ChrX_qF5, &ChrY_qA1, &ChrY_qA2, &ChrY_qB, &ChrY_qC1, &ChrY_qC2, &ChrY_qC3, &ChrY_qD, &ChrY_qE, } //line parse.karyotype:82 func init() { for _, b := range Bands { b.Chr.(*genome.Chromosome).Features = append(b.Chr.(*genome.Chromosome).Features, b) } for _, c := range Chromosomes { bc := make([]feat.Feature, len(c.Features)) copy(bc, c.Features) c.Features = bc } } biogo-1.0.4/feat/genome/mouse/mm10/mm10_cytoBand.txt.gz0000644000175000017500000001007314136731467022026 0ustar nileshnileshPcytoBand.txtlXKn%7 \;1įe#&|I_6"QRHC/e m_Kk@_1!32 s#q \ȕ35Ѝ!ҦDT<6y3^prB%cjԉ}% Tʸ3 ro61NQɹ ̐}72: JGxҕ#7/ vSGֱA׷+2dIƠSv44;,%1g' ‘ktZO8C8fwiA*=b3B!:p3 IBDj?J2yk z%Aa^YG5tmIpLN7i2cu&2'Coosd*~:Jwy ϧθkYGb`Ø;MteDH."%(.hMCOaRU?m -@g!eEac})[';K"\82-  n #~+ Uv%*iߏ8{h05|l'!8Bݴ2z$u0$†]+„T)]L!D?} (Dosd\uz/b4YFt|icSwob2>pFHBo^R$/CWӀe(őqe|܏8!x7kѼHX7ޏXBI0 ؁B-ۛN+ΰQHo E /v<ɴ0L@ 28s?_+nB[GxxyR׊czP̽nZ$y?.wL8dO%-Zǣw-|z*B6(|U5K|,mDa wr'C{Vc.&8>/ǡ|+Oss+ѭ;Zݕv?R Cx!2!X8"e1c5.Αq>C'+/`VГU$f};X21;CSkzPX{#c_Y'qӛ Y)r#Jpbǻnz͸^9gu+N/a}>O:ǡB1^*9 [slaf 29ř#ām`F36EOq2GȘ+]s9BXw\ (ZT.& s`_iPpI3`}P!c,wKc4Pj!e[Ir: \˸8$#&n%=ˀIq>kܕL3Xjs@Ww0iv2WFCWQ)K kބ GkhŹƯaPcIc6%<4Ӓ:{zl Ws5E6{$jL8$.i:d4\He>u >Q+Q)ҡT+BXCSctB1zwdTcϡ?tLKTc`5 _@xբcP1jl )lZ;$bDC>cY EF+eqdb\%l7Ⱦ3H1x2J< jǿb(۳no;)aB%t:jLn0^x41M3M$M%6j{kh5Y!7Yl&6"w!kwaG܅lH/`%ȥ~#6{lڈM <(Ox acr- GkrG 5c2BIV.NKz *9iw36GAr%ܖf~nкxbDܭT ِv3,s}5Szlc5jVbܨmiG.F ^ܩ)#PNJIwJzU[G# XAs턔8<*,Cv7]%~E6ˈ㨗x]cmfͨӖz_edUMRǑ ;#޷_ O}8C7Z̛Leܕ۱&Y?#_Hm2cnDZW]یn nM W6X7 .ëlCӤ[Ew:JN~j}.1OT9.c\^b!YodžU4!ףfFq̾ꈇsvGATpO##&*tg͂§\J5UJw P3jpPs֘{36_#"ףƠ6huݻs~5 g (s ^+uwy0E&Jy  dMz!|IvP05}1Һ3AOÏ(jlx4sw "*b3¥f8&^`Yw]o~1]~=x.`{쬃dV/ %Qmi\^zn(9W BvF9JBj\94p\&Pu_Y1F-ם&DVٔ(K[>RC13i\^1RF 6x_rŽf=3M4%+a_7 խaF8- ސ] /cڙRݤחl.pYPm$5bR'!Ԫlc Ñ8}{ ΄MIH|OE pu FW|uuxO-qq]*deׯ9[ڗq~kq.#Pk[Ꭸ}\(zv]<2=sz8o=.`]F ^םV0o"8eSl˺glb:k*[6G'lGcytoBand.txten헱OutS'c>UU8&ג( )_+x5{Z&;DR /١\*-_z͡}Dž-@G0~y GX>|^{+yhfyڞ'-y3<miUi+oGoiz~+7陽7WoxZd8pن-)x(~oJ0XN5ءoZyHNQ\Y]\⊸ţqz#]nc7Nݞ=EqPD_N}2,2N91U'&V~>8VSC>8--IY lw~z(,g=ŕE\lwUZaOMYl+NG]\bǥA,#V_.:iE5\̧(A|Vׯ\Kh[`io\\,#E#jKU[X1B-&6[̦ b91O3ah^Câ~C:frbxZ`,Zri3ؔpϫ. @G,}ݎˍE[o \MHъM^LN~[\vy+NG]<|+.W%t{73E'-?X.:90s||^'Ʀ>sxg$WoSz.*;}oǠݣ&*;Ml =EqOcSEe6cfi#{.=nmb闊7f˘.*=3afgE<,ptы8W73|^ ~D/60mԌ l6auw ^{3狩e7o:(xc;]j޳%om&.z5p3Շ.z5]W-]jއ9rIݦX.tno ʁKg. ,ݎ7h:Op PupReX|>wVPCz6C*12B qwT!N[ O_-x v*=6B,ry^!'xhCO&&r7(2y|` y{;fx\eye!Yn;xdӟ[NaXʉlcfǿSŎ _ !Zj`lZj`^%j5;6{նDudQGmɊ9Ӄ%-SA.Um/C;x*'ˡ)YOpKrTy<ͽi<6 Rq*'Ȫ<xI~b|x, $>Y{͖dM7 vl<< ٘dX6{|(koBB\Eʅ'qƋqZƋU-}*l@,}*|mO^US}t9X0qVejt/bW5ЮeX^- aX`._q>#Q5i]E/[˴E/<5X6nPC5:4PТC=: : Gtσay?re1s2}]8tЫy8 ''ƧtX!=]Zry1S?ӒiέGOp޾ƧssL_/FA^n {g0K:.%Z +]t>̚]9N/8 g }8 S:Oְ[gw>347a@47t\> mjI exʗR 6ˎ͏;fOC> D<OxVj~b[tM'!=@ͦGSNz[Fl)OJT~KXV\;?:мCC;?:t`31<۬0xb٘T4rk 7OUcaal1OܿAd*O)#` tέasC;lnޤ]3߸qI;54rkj|y3۟?xb=p5@rS'! (i4IR n <;j(Ô.v؜9H -@qn#ѣD{?zvG=#zw9k֘3E4r&kѼCC;?:˭1c Ѹ<̾BNSmpkZqUSF1@km n'6 Fc\16#Y n )ȸ|T/Ua37)ʸ<ߠO4z)~5Z'4:s5|ׯ>=GxV<̜z=v|CS7F 4F!8Avoԣ nF#:hܟL=í1[rj,l>h˱OA磷?ѵvC;lV̝ǻ*0w[`jY=lDt؜l<i8ntև4rk_y*6hi n ʪ)5: t>.و[>mX(>P:G` {gƜu'mX[z|XW5rT:]q[#.7f kA/֘ 0jVۑd?p4ڝ1CÈ;?:gv'79Z4rkTGAOp#4rkٛwлpk^q-5rv7qմ=jְkՈ˭1kżj婚X]ͨi n L5ZFJkJFJpk\YjРSM,0jU[ޡi+GɊpxv Jx.gRC=íaNlz a \췜F\[Ncj.Oզ$Q5[cV Ը;9^4TmѸX[sX˭a?Rk.OlRm('BZWT4r"T#m.H6' 5r1-g TOw~C n - =Ó]2A2'rass- V-;. +h|7w4čUr HHS'LU>u;?:落CC OhaѡE=: 0cF3,#%y>{BU_Of@na*pk~O.í1_l6YfNtT? bdA/3jvfgkagkZG>}(t$:GPLI[,~F']n M=ÓM~8L5yW4Fr4$ /8x4Nrk2Mwڮ6C$YǠ+5*۱P1gf!Eۄ8 nƠi\u[>q8OA4cߠ/8qH*FӴ[#c4Dރx˭Qy'7;iÊ$]M=7F%]x͆ӢqI'|F&]N1Yůڿ:m1j[@ n ӽbiͭ1Z~zWvFuб< I]n M:`N&蠃}]Txu NN:OC[pk]`׺F'c|rn.,oIrɺvxbc,(Ѓ[4bz[pBn; :-s5𕂡 =8I<)u[&5J{Ug>G!с;؂DNF, 롖'nTPCmwD u}h0䣩'Z}.+僩:? ,j~]n l+xZf݆kc4d =íѹŬڝ4 (]n Ӭ: c<-Y NОi(弾'ԬW8Apv2T50;#F]UH+\v9aKeqH.=lK˭Q ':Yn=]b呬O: n4)I:h,ǗĔI.CtpXҀ K?5^pľС:8L:|Rbn.Wd~bNn᛬5ƼӨoa@ҳ8ٶk~ Fi^ÉʾHC.1']փwk)G`2 E-h0徽]zS\h&oía7o3*5jrk2ƭ]ىՒ=gLP45zB[58Yw̥ Qgb N(wy&c[o+6itNZtc$t$ϾA$z>Iyx*gq8j Aᙩ tζRwЃ<4hhLt&YM5~86c nlGAnepg!j֨뢃ܝ NDG/8U;vLkC=O}. qƉ]~i}p`H.&T$ 2(.-?l=)..⍓Gs ˑΑ#?=!#bkT~ˑ&FwXG݇&G~݂TC&" k6Oc_ ]̫]H'y9eEƄ?΢dlE5جsk6kP.xS {W#']lv-zO$։L,z/NdXvLف<|sST#{ U\u.]Lֵ n-*wnq^ "<{R},ob#\\vW_+&GM,f$}MKmlnG_zh5qqk7q媋A 7ٿ\.fMKŎs'znS<> bigYV̫xjqpa;8ϱ?W8|Ş m<6Ջb{Zɠ΋4ڿr΋$I \>s,&1Ǔ콨ox01 $.5=jmؒgbKYE,}0=1fCWH_ o/߸Plu/*v\oԍ+.V lDU옷CJpϷT2r3g/ r `(Kr ᥯%2z۝_ⱜonLj2"jQx}Oǃ)2yUc{㷍]IWI^PQ&ZU\PU+G<\ܿq+G\&G&z~h~cbo/{z3tXNkQ*b_˰μkw K`\=Ë.}Ë XR8b~p]>b~Tw7 .ػMnb.泻W<\L* SN$^ܟKZ^Lu>3B,xPԋIu돿ԋ#.pl[v}W]}pɯ3t۠(J`3xĮJ`[oWpkri^?؆'-`wtJ`J6GeeY卬~vx$CFFB?u5*ըl溱v5*7B`Ԩl֮F`9(kWr}]M[nVqc3j4nkS)55XecuguX6F׎lò}Ţ]Wec)z]YNrR܀.,p' g;{YbҜسv77ug;W\= L{س$>2} ʖ! =0\ps/1OXq2=Άܕo\y;:Lw#y7dzƧ2= ̮euez& 5dzxw὚ tXEwYI|,}N[ *wNLk~v@{ [ZY6wx*`YŎ;&ʈ:A,~Ϸ\x* lvooO;dq_.`}E`LRԡJ޻'C=aeOB\^US>Afqr7x*s ^T3/h[,%.O%@%3]t|yNF:)Z],'v0C|򰋛7 Cx:+n"b1Z}h~Acxo&1Yrm\grǁB{xo&ǁ'_mb{>b E,W=\<ݮ=LR^M;2n֦.*wN +brG!Qu $m_ Gp&*wN*x";ybP)F`qnxOLS^9}HLo6'ֽN19>)&3}NA2#x4 Xol枻X|cco<()&30d6d:!iI罱M3)S ">x.~cx|f +NGWLlN`,._q9XLR`$v cyw7b=5$xPſ\M){Cw09]ܾج>W[柁P?L%gJuꖕk<.O*wnw;h\.wL$.A??W܏x|㈧W<ؕ3#u= Rr%4$ _$= LcSi`T48"/cvOxkd؛Ӧ>u_boB|4/d؛V[`Juf6} Te y?ȰcW>|ny瑯-/_ˬ%GAɬ76׹,o(u1 <+Iw1@N:w;fYiiv.1{30 T`X>v&K0t ᳓ {Jly`헣Kly` [Ė#'}?+6l:x{xË%%4r_bOOVҖ<' /b0tq=EK]j0$kF s8K ^b_kV*~j0&FC*&)9#4#1I4q9\ܾbTXC_b/.1I=.1Ii_b/ <~b6o\j֛Jȳʝ7._v_9}/gO#&10u3o1w{1̓qp#&10Ek#&109ߖz0vFoh-EULr^W@*Y}h9Dt7"aⲊI lONOLj`sr==bR)(>m*;6^=t?4gai=bRVMI le"zyC÷,Fpʎ:zOj>=u5>PzO5짇$#k 4)'E[(SLRgn!}N֚RM5-xt4xMs;;G{lAbcyr'%5̾%8橅>]'jf>>je1OT%:؇3z>%5f1%(tܷoPTմ{|Rl5Ht4Kz'gLШ11)[E#T^7A+'Lp H`Xj2&(`G@c}>yd{`=^qOX|ߟ<>Mpk1 $z [)jY\n jf O  Oi˓WcP_ 8՚^D=Mi1T_ 5 zN>1ĮԱR)GYjRo"8%ASo"8ֻwΩ9M=X:@Ni֖˽(5[֠.6DpjNCu8Df p /DXnF!~#Pڷ CGU=>ӶԼPIp*r8կ-,X7Ԯ&-44ԣCtpΛ$U4ѼCg NV㧡=T؞޹ם;M\N\Ot!פGix )݇ߟޜɣw`oNc,:|{HǏg Xxmͦ.Ȅ=t0Ԙ6=P1<bHé#tl8IKFSG]NEݦɣ. .hj>R[ÎGS݅Teouf5#:E?&QOsя6\#`"5顃U־:Gǡyl (a=]n|i.F+4u ֺ|7\-܅wzGwthp7E]8ȷu yA7V]8r6qIKj*wpkp8=.AQ.Nc.wpk;|{s={i+wp-q||݅#BO~A?BafXY5p(c K2gm$)<>y*oa5Q7635lA3R]n-:On |c(5+| 9v]~];lJ1;=|7<F;?:!?{ovG=董ǹe`ì.<k;v#,kh$=E [lN%K[ݨ!ѡz%C|u9 a^kwl5Xd ԋ rzk<$Nj iZxq!+g0 Q75Qd7P*5j&iˉ; uUpԿ N5MYvy2?yCpM]F1|rw=TuX~Wan: PanCpk?񹩎 33\ٟllӡ|:8F:8t('UiL|.g=,}lTR nc#Ync#g楤iypkx!v1[樂1Xl#z5L2PcDQuku9 6ѡ:8k6 C;lNc!|\'=;,9 /@=g5o1!0U1!Hl7rތ,6l7uyfH4lGW\ OGjxhD_,`ZXz9F!rNlrA[cy4o'mkLby ˣ9.Qn5+ְoҼdXi nӛ%I렆%5mp8o–/k˭a' zQQpM Kpko:MsM’4[u>e[#{ fF;Y`n 21h~Wspk4SXcg94V?z&l3VCg9;!Hn>j냓cbuVhf˩?A&{ )!2C];?:1C=yHMvy"_ceN]n4OMíaJv?uO 9?O8&ɱjn )2dG@|';(GGu(G}qOИoLD6\t$R*LB` ?lSMup =VTqҫW4Mw:n v_7nw-&%eOi;'R')j5F̞qW@q=.!LXШU A)n3x(0>iٮ 3ayq=1|Þg< A#A$?ϘnAM2w5)rT]0DsXoTS]5&$sPW2xvq]dpkRW25{x v܌չ 5,u[x.g/.J4lHj̓s5`uR708/ˇ70$X;t0}702_l{'|_.\D5Ϯ.OgOD]7kֽ˭Aj?H`F;sPrMpLe(A/4g\kf?;zTޭ)/O(ߠ}ݠ,rzrg7Mw5ʞ1klr'Aía_] A 7K`:V'57'0odz+!:ѓDv[@iؘiO0/y.'קtiv咗S p^yIí1$oXvMv9f! ~DoxԽz|7wht!{j٦.OEL4&|fZc dalF5+Mm6?Ӝ&3|Ἲ5;A6NN'?uhaskP-k8xZVA25}r*Rz[c_4ml}r[،ahͭY?6]tXask7²LfB>5j{X5Fڵ>t_V7Mw9QeTvMv5ztMv53wq8GvMv5Vgkz)C'AlS6#$8=^)ƅCH6ȱE# .UBtj'b sPrf5 ᄤdzټT&V^ ~;ރp(El*_ٵn^!Wf-+*KoƤbhrƉP-nW$6N/-_~0W$<=o_eMrĺ'3ʘS3h7fW$oLz?W "!| b9I *|h',v`syX`e'}0Iȏ_I\1|)_)\17kwuv]nu_w!'/HAUN*Eֿ8s6X4˰lwAhSraqeN6[ oeO!*vjk I.ʰȰNa9 q;ܧÿ^L(Tm>͢gW8'03S'{ OCWgћI Es8j+s.sɦxcV-z90|!^L"BQ,z9pn=pS+'v0iRC;svoWo 6{Qt,%0wTbQI4G.%pl(3{-`Xٞ6׬ElB`:ElB|!."2q# c,Jr`؄H/[&&d^D.d'.*v\^ѺKx.Ѻ aLEnbfd_&;g>&^*vLA}IT7[5Q9]g;/Me/9g ;ܼ&&?1G_߸KJv^~olV/KsD-qS;p)9,Xb֬l\=ѻK#{Bn`=Hыx"z70ۃ|JYD.}2"z7p6zտ\ zALybbѻyKY*wSeѻYj~AE.W.a9\xۍ\E-tbϪlQ:mn9k*볨gxci3Wh*j9pe_"޸f%+hih$+zUW=xyѬ UFZHgɯl;6M>Cb47 R{b4:8db4AƏ\`\5 $Vj4SbՍNURY/#wL].Cwx\e 2x_W1CsW:A`Qu%` ԫ$m-vtpKOR{h(.oS#B[&}[O^{<*wl4 .ߜh.Rw䇳 _r[ofDs"xp/cwx7b5!;k';0p[2K l#Wn; \փrzp~?ٴSv\x K>,-n5~nv]ŎQٳWH X׃gqޯeQr獝=~GᦊHbn<9 z_q;WV7^ VV7BkXjo\{Fq%.">7[\E|& M)e;pG&UU [ =t?4c.G sc.'~syɌ7ݗD]N @hYFo\\͏..&6L3?4ğc#D񆳉MqeĦ^rhG'Z` ozlLgM,vbg-%vEVW ]h؅:a8xPVGM`QB4QU(DMAxuU(}h] ol^[^_lʯL~b7xw<k}OOs`JYS߲7Q쁇Ei0{˰l[,~(;ɰ~B) s+;CQr2SƞkX(&*Cl7qU~bփGPeX6wcf4hP"ׂeX,w1J`aa=7Ca=|*w8|[W&=6h.;||l(7|=Ofc˝<>97 b|ʝS2~7HeU|>\n`"iNn[+Ye$!Dﲈxz!kڪ"B`v,6tYDlS唛ܶ)AC4rh4S/#."P/mۓ*S.GKW^s',O鿭ɫEWe9|޹k\9Krq};o7Dν֔sJk]_ l}z7tx_RCXS^D k0W˭cHCqp&ᅲ;|_N?wǁDs|$yCq`d{4ACq`}hrY^_.`vMe‹\DCiE-!rQ2CL+ `i451{x~hİ^N).z9uސ!rhpj^b6~,& S(CG`)~|j5m[zxzUmYjNUF0h;_Mݱc|SO-Sw*9eï1leSp8eS=7h*ZTEnb/XSf~r1N^9pk局^é5:L5W~+S X$^S:GN}{[D`$#9x=)jW;|voN9>Tja @)ݧZzPb}JPSUzpLUu:U`T}RgSmp& &r9NB>5!8=)TBasB. xT>[SE|:8n ^Gu~pJY.:?)E6AmpjmTG68E z[#倥qHBM KrpjHBNEKrp:}BNIw^ Aé׫_nU)>}tBRfQ!`"9=t,4⤯>6 頃}8r" &*H^ݹ/U)ηZSWW#TֿTOL|{s7@ *u5K}˾soF蝥mpkqKMj}Ik}Ԋ+료RpV`}hK}6Ol/( <;⡯OxBv Ng~Q] N6 n9'4'nPg<_`蠧yNty[09U)q5WujS=ԧ_0\ iƣ+5˥+G-Wp2~N=iᏏZ6$XT<$@QƤxrF7rAp:3ӟ\zkl\Ѳ>~(>ћ'WIj37+W頧y8YSX) T\N34>pʩ$߿jZJ杫u}xNj5ZoS^:-Mp jV',C.\NRPȚzr5͌TZ.8q˥Y.'Oh˭aկjXO;JUPpv6w3>)[SfUFAQIUPpk,j~Zt'Bpk# [Ǡ!5Ǡy8'// ' A(oíADv}rNsi؈~p8ӃyV$}σsxeb.04D>g4r-,"F_;?:G/𰗞 \M|ӤZ~8C/1>4rʬso'vpǠ$O=Ad@iF#؍{?z4ޢ=t0K"S#NUDpVꥃ^í1C`f^A/zti4o_~g^ O8DU<|,;HqC/J1lNLH˭A@u8ESed|r*9vzNV' +aSyͅrw'It8AVāˉ'=tZc>8Ui' g64s|UFnbN<:nw)aޣ2: :H~4&G(é=Gan R7AN͝=+}8Y2]Aᔺ﨏> ކ^N&ݡ!SZtc8ܫդ{Aܜ$y9eaRam=>pOGG;y9o[ pVL*eGn;7XMv851)EMv8  0?Sߐ2I3Wْ@=c QY葴 {OXⷝn%kx͓CI/ƜDipokt v5i;r$6 v8D޶[`{BoF^NXV˭NP}UgOMz9sFJVpslxp/uڄ^\L:8NApkE5Ѯ'{ Ts NAp>Wzy‡˩‘ r)6O6_K/ A>v؜2|5rkPxSǃBW@W6:؇rt>ܼOJS/:`n'Ayz5 F'^N714>rkPᡃְ'(^n6A/iROpk|aAiNL`zXXI{a7Sf)>:?2nWp1'i0T-ɣ5rl2^N(чSa)nGE N ;NSNp/Y'kf<LJ3tu8/JKl x˭n#'ԨiWbt5t9[gF*(UF蠧y8/&Uí1vgP[̳X <[cA4N Ўg2l:¥'^:j5rk"fEn|'hé\H?4hޡѡE`32^wy&e>p3Q\ v< 5=i*$4'%4Ļ[D 湜$y8Uß 湜.54rktO6ix11?(.94r>$_-4tXS0k![/j>iFsyL5rf3 u_Ɋ:P3ue>Bi؃0?(W:4rkX? U3<\ysΞ\ I•1Uϼ NUI \YZs9xgF`L\״syL@4r*4WLo}hyAE=í~! éVzr}ᙂn3 :4HZ.xv+! + \N/t4Lŋ <]_6pkؤgs}F~[קr֘$֎8ܮprq9}2m\324hrkFšAH6%*G/5 ;7 XZ ڸ+[6.b4J6.d߆A[ÆT ڸ<s5hrkPPo ,dqys1Fry6Pf>g>8 ny6 {(L:A }g?uS^6K7_ɎJ6ᩛ/ 'tF(/*^L7_9[/7}ɞ o?j뽛?G;j w`eMڝSJEXM)L*LsΜ_P"N_Pz6r3Jr a퉣CM}~Pr5zwRL^{%_TyСm46&K?}]T}gP{yʛy0P\-"}U""t{8:!g`_,X*S)Ea6d7&uMyr +oQlE:,N7#a=Td,/ L{'&z}6..ofX<"4p":40K6kEh`!XZm]L̖&|ob2V]LR|DR2 R8pD&`쿖a9ɔӘE}IU">00Sɰ 1޿dXf P&a9 A.bi 4ϑASՇEM`^ Dd-bpgvBQBmY94Jqhbg*"0llSʹH4YJُ؉ۤE,E`TFes9lXvXΤÁ/b. ٜ;N zWѩLJ-YESfpggex9v:s|ŝ. l$FTy(˳ WeEĢg+-ƙIbGMqfG15(+0/=3!d7kəU4S`@VQ==1l6Dc:p妖;psj!֬.%Q~pWp#Dq}~bg]E`J2po涾w9 &36)[gTx}WQˁ U E-.#LX~b}ǐVQˁJ׈eL\,2^xb 5Q)lA]nC_[Svx!?prͷ#\eF=/ol~Iɇ?'X-;\Fp*Nנi nÜ~'YU'rI^&;puӘ&;p%I;wE^l\"6_ˡ+h{7Yk2 \Yck2 \mGdl/MIa.xH~ěg=|`ě\qсMuP@K*D1]ŎF1&̥!1LW^٣LŽU ԳJ\gbgӵV\W&ubYW]~.{ZAW%p%/a9uJITJDֻFqRLle?Jfx}V &TƖ-*vlw&Tiߗ%0iIYM#]w'>Irxrή}ܞ8L qeGǓ| Ph62~gvy~|eW^J;M+02~7s>W4᭒Qu ټyʵ]a2~7OU/X`rx&n`&iNgO7pk4+5&n`Oxc\l{MVaSg殧KS\՟ve6֢tl6n˱رvFl7=xʁI(nxO9p#ȟW7 Yh)nӪrFpҗBcSO9x[/#wx[qzx[F/cw8 |ܼϯ:xʁ(^WO90 2xʁk.rNvg4qO9pO;))qOuwVxʁmpO,=ŕ ]ٝŕ L^{?.lG+~h6#Br}ʢ ܫ͌( Lr[N]4X m9o/v6SG uW܏xx}$H똭fnlߋmæVy!B ޙ 0%A I:[yx߯ϕao5pF ZB;mR=?w:^ R ߄Wu6b0>ry>9 <+Cv9o$~CcN19 <[`Ovo$0vcȺ]`31߳]3sO8,D83J3ę8~QIJo(0VeP`6!⃉bhȺ6Omyqɸ'|q%x9z ^|rv㱿]jV_[7^^Ə|x>4lyϡe ؚegbm{,&9tFC<63yx*Web)uC<6' 3 |6?b}v4S ̻*H=6JB.v" ᬾ*OKpb>t]'b18؈mn~ u6S H})^t3gSS lite=x)2S SiY]+nn ) 둵~48[2' ^`( n T?ṫ[cpk1.dc>ŗ\- NUO%K;ln L_PzAzWNį}{4@>|:les;7ujpkdԝnjX}8MAs}xzFyp}8_`gJApkPg׽%u() C<1^~r9M)N6a)!N嬔T7Sܖ˽@d]or9ROM U8Ɯtp=Pp4? G@VxVM]nDGG6Ac:|~cs-3''~&hLIpr?EQ%YZ:q%'wd|jdIpNL<-9K~?%?ϥ!)CK#D{Rð4F$x ET(dApJ2tЁ:Ws:PF5:=P= 1Ck3=t0ˆCGߟ<-v/5'/lR_#5CNNcV^^,58m3dyd)ڒ_r5Sd]htXas(vJ.X%+"H A"C%!RG@{p z{4ih=t@ d㿓\@.CzT:P3czvGuz-n*d+7?!GJt ^bhޡѡEW{%ߍFtӌ\>yg(Ai:M@\9ݠ>inNYY^Kԍ? NWznZz_b냥]}mKuYR+.C {4/1z_bB4l<4קD9},WW+؈Ez`5]}Xߟٜ6Qb, NAB6 N|:|BO7'=zԱ zԱ NKf:6iTޭz5?[{xA}|Y$~頧y5co<;lmQw 8U[ Ӥ;̵ݜ Bt)2|ڌTp$tODL:˭6#8/S7CaJ1A8n bBj3't0,tиyeLM(G{l%9z.ߍ+ʧTfƀAp]K ~jSv?x=j4[LXl桃HҰzSBtwਢἢ/krתp٫_oUix|Tحjn[Ump,ӡ}:88nes=: NmID75؏@D78`. Uԣ=_SYAR:[cUoq8oq8)H1jtS yNjt[UOuq8F>h:|IlnjTꌃd@I Bpk;i{UՌ$#!5Ƴͮ5lA}ĒYgS}pjvB=íX[^S]Lܪ΃[(U '8,O6[)A"n$萢C9:0PC5:4N Q!Fc{h2#ΝI_^5&Uz:gHMBpkEAI<DIMvxb"mweko vxjvY2SS]NZZsQ n 261;<+w:;9; ?{X= R#I#&lǥPC[prʥ.tCѥ9. ,ͳvn,谼Cݳ-8Y0=Y[pk7 [ SԱ>PzIYGpAj '4mshs HS:؇S@Yt'rM2w5lZw)OO5&3<,O8#r H =pk=t[HV?Ȯ6A y:OTK]ot_M] NuIu.F#6v32.Miwyr yk4xtЁ:qYYpkئi.t;>[!Ug)/6 <kؓ<`Oyh:G@Ey.LLPթ Nixթ N /8E{uNMpLHO4z NivA/&6N ~Шl^t!x\kP=t4>s2$ N9[}ɷSf7ޡaD} 3:,0N' `PCϨ.:iN:sS ߟܜFmO:֘l347H OJ4-$ :IY;-CLWғC(4mjkX#Hf? ƍ'I[z들0xh/~~z⛨pk4r}ASn 22TMOM>MFۿAOpkTjAOpoCtp~ ;n\&Ә\E^As2LMWEv,2P*f+l~C:PN/74ET\-t(O޽P_(rKS%^n Qt( :Pn rO|"6 jcyKQt؜f8 AEjnK=}H33^Ncufv#ϻu>kfP;&7<5fzaW;i~>j0UCG<|Թ N4;nPMvyaL دZDy+Mzy7iƷ|C):d落zX#gEv &!xyzhYb4s=ҧ9Lhˉ+dD/se;\{,&z9w/'z5Xoг8Mw AoíѽupjJSz[n Rg(-+7q>SK\j*vM~z5̕Duk)\=<D^fR'6&Au z[v84hŵUWA!w'Mܚc0ϬD͇SI|5~7o NqDǥYS/Fii4_̩[M>:Pzd}^A:G@nvx#~r^)qᡱK^~'P,85 Yp+%W,8Xc/cyx; N֙i˓Ϣ\4Ve,Tnk^Pwv釩,&~{A.=:G@]w@{#4~Uw4zR8]5HhJY^Në.M)z9֤[j(ȧ6ɫ1Ģ s^zirI nizߪiI1zq6 G@5cBXޡaU8~>5qgS~q)'/Fj$Ztrvg .x9% CX-x5:)Y9A<3 |5{j];lNw2~as/0+^rQX.FN,\LW@Tt}\%XUJO+~<|P{yvk+FRT2^B`բ֠q4XCtpnYfg<{uЋ~5&%1p0i)DHnNcE?LF`>ўSq;֫~8 /^Y8}?PK =>ِg0 ?3y=t4TC2;K?X8t@ 3qLe`3.;6tLH.F7קD}Z)x&cԌ|4F=v<{ f*rk 4lo F\v=K;lNoٺ@mğܚArkGpuP:PsQApk7GC ݂q<&O}óaO|*}G =4]5܃M&6/8}_rڭrne&<?[ \/uguw)?/v?zi?/*$YğW@qsqXoL qC}TS^/6| L^I44Ud^h7VQ<lcJgot[UO G/fcҔSU G{lg3/vLG/[M=z9/JOM5|6r/M?z5X?mtС<m!e:WiUpkCy89DW@R+[53ռ97&Apkح4G~^nW3Ӕz5OK{X5Tm筟WS4'%XW>鷀pc;/$ԝؓ:{5dNcz&v@j˭QRuáFpkT >kP3G@\M\Sh^n~M Myy&7My5c蠃}8)f5f>ƘTMy9~ɛt>yhJ˭Q>95u ,'XKUg!1ݥE`J>B};>?l!Tg#̝TnQfQ%5FqN3w^͙M(g n^AzH4sDf<(yy&@gI_s^nw8Iu8;'ڛ[cʎ/My99kbɻg>#G~م{ -/Fe G3Mhy9iЄ[ Mhyy&Tx&68qP</5xcN5"͕KM^n(warEBçL=:YNz5 :YN(d]h%?ͩ6g3x5ӓwPu^`t\9*Ru/P<c>uߍFtޡaz押nki .y9e1jtK<{M槃sk4v=aiI}FrkG{l5l(iXxnr2D:؇[c?:؇V N蠃}xfK<^nNmhcy*f2rlUy눊ЌgvIni3#4֘'ҌgBJ>EKښqrk "蠃}x&rAp3-MIx5[4%֠6yu4ϔJrߗkJbgӔg6:הӘ) /vBa$F2Qtas_$0LHt'q$NSmtꆷi.+~/Mw5\S]n5 XآAfpkEV<84Yj[k@=c hվ>&8h+Nяfk0GjC)5w9xR+&)wsœ>v rGP3t6ad[գKzG`uk+eGLMTX)Q&쁙ep5X rjB%rxLژ VJ?QdCF,KN13!4MP҄ /ZzZ,W`D~jKB)_95&!`n򽯏kzE8 g??;Ϣy^j<[Wj"WRs]Kx( [4^v\ˋ|<ѓ=?5( }^r.ˮ-tZ)ʓs)Ŝ:-ܥ<ڴ:C)}uV/yj>~U~Pgˮp+NX5;^)jjfp|m <R:C fkJIsif{ _G{h$rvt䣳_ihja^u~e5h}x}>-<(LjFW?[ :C)O[_Y%[,*aS&^w~ /ܭ+I^bn;0]6=KcqfIOơ~ >_~ mIj2V{6˧DʏZvn^.o0uJ^-oR p(Wyff_uX[yVX`d#mf| ]k,:^q`#8^r`uX^CrMy= mF;mqp: c^u)Mɲ5 2Ju2^qش)? a6mL^q2 ǿ:有7E_?v<4]HRJMȃٷE\1~(>ط. HD)1I@G$#}k坬{싧n~?yGE|i~?Qk^LͦjLn{F%hƽDIH~ CJ *pgy5_}4X?h=L&uP<u(1#QGP赓^JX/)uO@^P9O@UH+'`Z7; hd:( ;Oz*yx}7ky qdʿ޷āO/%ġ3ed"X[3^H4 Kox![+t5/y[?oW|L_RLVV|dbj=CB1[E^~W~B@{~mDG@6bt@ӷauf=,'Ua;0Dq4 (]i;0ʫ#oᆦ}q M Y'}WYI]޶ Iq޶ `-ŧ0:x"|сyﭦI#; '9[MdeT@Ņ学f)u}2_jǞ'_hvpAQSOߖRBY.ޖR{4LdcVqڭo_.=6owaǑVq<;_ lo i HM[]ئ(oBl)oBڔ@@!'N}ȔBjVb AilƷBL i子/2R$H٤Wng\}lo=hDiַXH7PzBs6([zBL]>ox mVDVA j1qW{piz{Me=PAYǯ6`oUdRUߪ1xW} mHުIUvVߪijۦ/\QUk6&2]cSߪ>Kt-?6V}[dmY6Y6" s@nƷf H=֬d&oᆭPz)oG {O#Y#;{$d"uCqgdjF܁ծ /uujȶ |_-_/M@{o_?0į QKԺPO.M6}R\8ӿY0frova'Wv["hov۸]؋yQvdovaǤ} ;^[wkK0aA(&(܋(drMۢ^hټ-hfۢ^8wgۢ^h-6ҴEprzWӅTB3y! joЌ~1NY)`86o&6h[aOw h؅6]YO{<5YJn)y4{ y ilW{RRF}=K YtY&|Ҁ ۖg<Xش{Sv޶4`gB>;+\yP$:˅^Nm^.L!õ7/4Oq7/iox +UoȻi[]h&VD#eN ߿Д []f?[]HRV??DߊB &ߊB2[_T3`#hӮ[_ذ;5Nlx;K pm@.\;6 N 8ԎpFȿ\h`23B21Ij;߷Д)x '6ܾ^K4ω/d>V.3ᕿ|B@Bl<ފ<$m^?-,~*S@LG0 <i>RGw>}o;^J:\\r|ì/%ћHe6ei|&t>˓ЛTjS.]щCS\,!=V2kIcu(Ș\O7;޶6$>#'), $|mmis H9ŜhoN:Ş{9RRtnV<7lKo pr]M-|IJ$;=x[%0> e-%򍷅8^x[6C*p@2->6BDϷ &|o~!ۉMη cjlQ͎ocx6vKc5 ηp۷6b.oc{!)oc{Მx _5l0B& gF>|af7^8߷ hzԄ{3}zr)/hݥIN{KEfkAH.aEL[.]^̤-&,e\\v.v..|;E@­:E@6}*.R<o"Pi\]fkt{]{]NUm@=pyOշ (U}̀R{x\F f@_ m0gk)oְgCě=ep ULXU_Kw )A23FwXsA.Cw0 ;rDŽe%;|Z&b JczaDLdoPvvl7("7<7(W~9C=#G~h"gx?r(4J߿ۇ&tq+}5Nq `_K" L% Ail3oWSk3< XXN;(_yѼR0lo:l.v{zJ6nU>$"5zs1Շs1)гk,p>b}-sgUQu\LT>b?](\0pG0p2;xtx&'rs$Ԇ7ֽN M'DCl8$s.fīl=$\N&p5lb7bRz]G6||QĦ{)\L 䅤.OL4\dgI^7ŋ|4 3*K\k`MgH^[]}+V?__垸(mv¬;HPpp#o\<VMM2:&MIJJ6o0IznmVe\y SJ&oړpORJ FɒpӤB0891_e.'jLdRŏ cpoa|;pN/dZMd4%I؅dBnğ8T׋O\ Paj'Y~5vEyI{\}I`.98h$b3P$98/{d| ⼈`_ۨ Mkȝu^22/<`k,Sȳ7.6 YL4ib1ny.fyˇ.YY~~S{",I\ZߞI\^|ey(컥[8E\^ظӼ {-g>rm<|QKSI\ljryOQ`iu-!N̰bmBU/M_oN 9bq״ɑN常T.4}|r.=rnu9./%}(hC2'qqiq0\\wv#p#4q.FrSȳW|?iʎK7f`B: WMdq1n4@b/.dtvKB2MLb&kqq1m14Ŭ@)iv˴ f;|q!弻b/.AD>XMQrb.&ARSJX+}&2-`/FE~0"*ŲX+F+v1j^=:IKG:n[^Zgt}MN~ JJcAՈ&t?钱Wʋ)6:;Ձsq$ >~7W|>.cД$Y/wP`rs}~zQɑAۓi.:TDe43mIސܨ"\:LX>ĚI*˒T,L*p l܉_J]<˗6U9$MBō~b.n$$_b.6oxb.FwyOO.)K~03#FVdb.nqk'Fbk,O'D~0/{[{1B75G(ߋ3J~+9>1BN~%B~0kWŭ$B~0>>>*B`7=2m$Hd7ɹҩT̓7hJYiwa NÞ+2S2tЁ7R[/~K -l~/I{P%٣aĩ؜HIh \U)y85w2w(NTW7xwУ%mBQ/IܙB#s~pwO< \HIMq>ٽO˃}U5ee|{ýS_;o;^v6g~)._Λs4]H܌~Acbj $F r8foW??7fڧOd53f#$PF^mILP/HLv=?M^Q?bwsOb_l/<$$a%K`/LHbTXݟSSFCq1$9zXJ8?f9qmP\ܙ=\Nw=P\)x殅=Q?%p~n"N#jҬ8?b@apC$&0+J lWNMMM`;Sb}hxMzRS ORw*(6`lOG4` ]M5X`zTuTS *~@8w'ObT$drxq7M7S,5`rU;@:`B$owŃ fbRIH?o y*I2`}$m-Z󊆼<5hȋ1M4\~-sw4\sE_h&(#|/|μ2.7\nmE_<xC *b_*z~0wg8[c6es}ۿ )߇JrL4 u~x x𮀕6ɲ٤H$v~S1[MFe7抮=b.|z~ U < Ϙڠ;ڐogEmH`xՀ\/X,jCSLn_V;/dMZr`o3&6bvLCɦ7b#.$7؈'9טIƛLqmlF\o'k,K|i鶃F@kq[JI dH3;%G֘mnJ3u}7Fo/bzH=dZ\ KKwLZln2RLGKQ=ulDC"`x GN.t"R*brY `kt6gI'y bJQ(KV.g C?].2b(̑.*K̆M*WJ΅EY_ϋseWܟMl#3I6vbiogo-1.0.4/feat/genome/drosophila/dm3/dm3_cytoBandIdeo.txt.gz0000644000175000017500000001260014136731467023463 0ustar nileshnilesh>GcytoBandIdeo.txte$KnDE^DQyFD/ZT iEeE; p*_?|߬1$#^8Xb/z r֚4Z{[oKg)ڢVS:MDt.Jwᥣ2[QӹƜܨeK]OsF4i~i/kQQ_|w)G5;Zޣf}\alssG/rgIKGks>wDFGVwDF.FΈ3ڒ5Ry팚Nzdli8tne"̨w sO,\ѤSM4t^S#g%/k̲4tᝪLƊғ y;j6J*_ 5埡n<QэDNo^螕bU'j6' Ϗ*vDFIhR,pk c(sqDfZ7j6z1CՍnߦצR5ol*DHQQ@:uQQnJ&5*֊fZyQ8ʋ.◊'[1L7}X ሒ11VLerD܁cob9~,!ud1C'stLş'+Z2HǴrWmj/-7pU=U(7gIU+*f2JTxH#'t\x,s)(f[YI}}~ov=)ڵ,qipO ӎ۞xoy8׾:N[zLgb*2TIaӋgPǕ*Kkē~ÌSI6bO Wy#J.-_2SǼ  dZA2TuRka&KuL;=J ;y>VW=G3cT5?:qܰ16wxo^v6$ҥI븞RiO PVYǸ^E;q}jӍ-kē~C[Q3٭zt!]YbmQ|O 'U|:Q^߰ACA<7\?h+Yc092[+ٯc>KU<5Hiˤ Z$MN߮ϪҨ. =>K셔gy{!s1jҊRٜQѪZz$4< ޹EF)®c\-J6xQFLJ4j6{QQF],GFUzFFz{lWm5冪!5nWtDFI=<5ZT݈N]Qc,{5fw56jvڱ2󌚝jsk/jvfѨ齗"hlT۠*p׌A@_3j6/0Vl0eƮ(E˳Vlho\+j6zƴ56j6zkGFhlj7KwGFkR kMnC<Sˏgh< kFK9׽#NJ 俻)bjK1`;Ia*m@$IU0yr"&kcTiG`ݤ߰csnoÓz?7U&LN/na_~YrԲ$g]~ԲZV<7ɬxoXIajYzaM앆UYcKԪ<~'U-o:qIaZɽKoē~zL9INIa~JiY BP̃#O$f߫lq]C{vҗ\Ru-Z'3u4IQkXOg/֎Щ,1u?c:i{'cuqҦ0Z$#YR3)g/wvmW.K&X@Q"f#ɐq=\F'u\/CvIaj}Juj1uRwUKEE'Ycڔ:?&Hí%3! IÍ>|NX !w&ul5ٯcz |JחQC<_H"B/>'uӎO k7KkqcЯLSo1JqӖ>俎AGJЗq'O똢ܪqktڑ78(ZO”%qō>%qȋzN_ڭ2Srb~ބF$O*Kl:5o0e AUM~ė}C,4U?C\"'1s|EFbv7"dzk <zkwxONپο-mДRqhF/հO#5E+\v-i$hsiw(=#j6JG_gFF)䩦7%Rho'j6:2mșQQR"i.J(-5]TchO)j6uTi~]+FFS;Vlt/'W~ST=:;jvڹ) ;jv:E+ZgGFJSi RͲ52;$4{'ahxkzTW48tjxOSȋ%Y,=77LW It|6ը&k77L]<-9 l-I)F':pw%7L'OtJ7cn&yNwk3֤0ٜbnI:hԨ&'*sO 3ZAI᧓$XIa[kMݿ䛎ТxoYǠ%S'ubVJIa:qF ө0Zٴp:V/+[[eUfIfMB6)Rk3?Lձ:!O S11R+c:>lVUxo2Wnj~s=7LYkA2X G 'bTt:f`f4c1B}Sj?u6Ko2[ǭ2NOaoYp7FMX' LױVVn]~t\>?Yc*Kїr1b*d[3NSQj'uܴqNݒ?$uL]KLjo_mtMEē~LѻsYKO 30Z1&J5俎1 9"NΩW:,9ϩ<عS씏 } j܋B)ND-wE>p,Z'{!Z|>FCRD " bW9R~U6SМ~|"/RᠥȋE1?ç:zFA1<  i9HD:#W Y3NgaZ;}XLYzΦRA5lޫt^:hXJ]Cѿ\Neώʝ2|V)%cB ;M#;g%FuZc?ߝʝQ : W!*wJ齞hj:[9;ƥu RS+2n:QS`OqԖ|6:}(0Jhv(˷fS]s&)] ]XǩOʍrk;3)7ޢ3rL&;ZLrG4ֳ}C1֔~wuQSͣr:lޞ衘ʝ :,L|DгtLFrgc.t8}vRnTBC@R@C_%j^ӳ?MC9Ɔn_TbQSkTT~CQCQ_hQ4PmԛyXձ34ѣ:m(F>%N5(k;ծR=ClENuwmyGNCY?,N+Hbiogo-1.0.4/feat/genome/drosophila/dm3/dm3.go0000644000175000017500000245211614136731467020222 0ustar nileshnilesh// DO NOT EDIT. This file was autogenerated by parse.karyotype // Package dm3 defines chromosome and band intervals for the drosophila karyotype based on the dm3 assembly. package dm3 import ( "github.com/biogo/biogo/feat" "github.com/biogo/biogo/feat/genome" ) var ( Chr2L = genome.Chromosome{Chr: "Chr2L", Desc: "Chromosome", Length: 22570260} Chr2R = genome.Chromosome{Chr: "Chr2R", Desc: "Chromosome", Length: 21146708} Chr3L = genome.Chromosome{Chr: "Chr3L", Desc: "Chromosome", Length: 23849507} Chr3R = genome.Chromosome{Chr: "Chr3R", Desc: "Chromosome", Length: 27905053} Chr4 = genome.Chromosome{Chr: "Chr4", Desc: "Chromosome", Length: 1351857} ChrX = genome.Chromosome{Chr: "ChrX", Desc: "Chromosome", Length: 22422827} ) var Chromosomes = []*genome.Chromosome{ &Chr2L, &Chr2R, &Chr3L, &Chr3R, &Chr4, &ChrX, } var ( Chr2L_21A5 = genome.Band{Band: "21A5", Desc: "Band", StartPos: 0, EndPos: 22221, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21B1 = genome.Band{Band: "21B1", Desc: "Band", StartPos: 22221, EndPos: 98619, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21B2 = genome.Band{Band: "21B2", Desc: "Band", StartPos: 98619, EndPos: 134010, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21B3 = genome.Band{Band: "21B3", Desc: "Band", StartPos: 134010, EndPos: 161234, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21B4 = genome.Band{Band: "21B4", Desc: "Band", StartPos: 161234, EndPos: 213130, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21B5 = genome.Band{Band: "21B5", Desc: "Band", StartPos: 213130, EndPos: 256688, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21B6 = genome.Band{Band: "21B6", Desc: "Band", StartPos: 256688, EndPos: 267408, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21B7 = genome.Band{Band: "21B7", Desc: "Band", StartPos: 267408, EndPos: 294632, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21B8 = genome.Band{Band: "21B8", Desc: "Band", StartPos: 294632, EndPos: 324485, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21C1 = genome.Band{Band: "21C1", Desc: "Band", StartPos: 324485, EndPos: 390347, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21C2 = genome.Band{Band: "21C2", Desc: "Band", StartPos: 390347, EndPos: 456209, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21C3 = genome.Band{Band: "21C3", Desc: "Band", StartPos: 456209, EndPos: 456219, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21C4 = genome.Band{Band: "21C4", Desc: "Band", StartPos: 456219, EndPos: 456229, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21C5 = genome.Band{Band: "21C5", Desc: "Band", StartPos: 456229, EndPos: 456239, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21C6 = genome.Band{Band: "21C6", Desc: "Band", StartPos: 456239, EndPos: 456249, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21C7 = genome.Band{Band: "21C7", Desc: "Band", StartPos: 456249, EndPos: 458430, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21C8 = genome.Band{Band: "21C8", Desc: "Band", StartPos: 458430, EndPos: 464653, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21D1 = genome.Band{Band: "21D1", Desc: "Band", StartPos: 464653, EndPos: 482425, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21D2 = genome.Band{Band: "21D2", Desc: "Band", StartPos: 482425, EndPos: 500197, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21D3 = genome.Band{Band: "21D3", Desc: "Band", StartPos: 500197, EndPos: 510759, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21D4 = genome.Band{Band: "21D4", Desc: "Band", StartPos: 510759, EndPos: 518418, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21E1 = genome.Band{Band: "21E1", Desc: "Band", StartPos: 518418, EndPos: 533318, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21E2 = genome.Band{Band: "21E2", Desc: "Band", StartPos: 533318, EndPos: 987803, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21E3 = genome.Band{Band: "21E3", Desc: "Band", StartPos: 987803, EndPos: 1048634, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21E4 = genome.Band{Band: "21E4", Desc: "Band", StartPos: 1048634, EndPos: 1086654, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21F1 = genome.Band{Band: "21F1", Desc: "Band", StartPos: 1086654, EndPos: 1170535, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21F2 = genome.Band{Band: "21F2", Desc: "Band", StartPos: 1170535, EndPos: 1224563, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21F3 = genome.Band{Band: "21F3", Desc: "Band", StartPos: 1224563, EndPos: 1277401, Giemsa: "n/a", Chr: &Chr2L} Chr2L_21F4 = genome.Band{Band: "21F4", Desc: "Band", StartPos: 1277401, EndPos: 1326937, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22A1 = genome.Band{Band: "22A1", Desc: "Band", StartPos: 1326937, EndPos: 1428804, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22A2 = genome.Band{Band: "22A2", Desc: "Band", StartPos: 1428804, EndPos: 1530671, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22A3 = genome.Band{Band: "22A3", Desc: "Band", StartPos: 1530671, EndPos: 1644731, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22A4 = genome.Band{Band: "22A4", Desc: "Band", StartPos: 1644731, EndPos: 1644741, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22A5 = genome.Band{Band: "22A5", Desc: "Band", StartPos: 1644741, EndPos: 1654988, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22A6 = genome.Band{Band: "22A6", Desc: "Band", StartPos: 1654988, EndPos: 1667727, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22A7 = genome.Band{Band: "22A7", Desc: "Band", StartPos: 1667727, EndPos: 1687818, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22A8 = genome.Band{Band: "22A8", Desc: "Band", StartPos: 1687818, EndPos: 1698637, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22B1 = genome.Band{Band: "22B1", Desc: "Band", StartPos: 1698637, EndPos: 1737370, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22B2 = genome.Band{Band: "22B2", Desc: "Band", StartPos: 1737370, EndPos: 1802684, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22B3 = genome.Band{Band: "22B3", Desc: "Band", StartPos: 1802684, EndPos: 1852361, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22B4 = genome.Band{Band: "22B4", Desc: "Band", StartPos: 1852361, EndPos: 1902039, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22B5 = genome.Band{Band: "22B5", Desc: "Band", StartPos: 1902039, EndPos: 1920281, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22B6 = genome.Band{Band: "22B6", Desc: "Band", StartPos: 1920281, EndPos: 1954160, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22B7 = genome.Band{Band: "22B7", Desc: "Band", StartPos: 1954160, EndPos: 1964421, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22B8 = genome.Band{Band: "22B8", Desc: "Band", StartPos: 1964421, EndPos: 2014098, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22B9 = genome.Band{Band: "22B9", Desc: "Band", StartPos: 2014098, EndPos: 2027808, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22C1 = genome.Band{Band: "22C1", Desc: "Band", StartPos: 2027808, EndPos: 2061629, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22C2 = genome.Band{Band: "22C2", Desc: "Band", StartPos: 2061629, EndPos: 2090832, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22C3 = genome.Band{Band: "22C3", Desc: "Band", StartPos: 2090832, EndPos: 2132199, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22D1 = genome.Band{Band: "22D1", Desc: "Band", StartPos: 2132199, EndPos: 2204105, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22D2 = genome.Band{Band: "22D2", Desc: "Band", StartPos: 2204105, EndPos: 2204115, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22D3 = genome.Band{Band: "22D3", Desc: "Band", StartPos: 2204115, EndPos: 2204125, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22D4 = genome.Band{Band: "22D4", Desc: "Band", StartPos: 2204125, EndPos: 2234802, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22D5 = genome.Band{Band: "22D5", Desc: "Band", StartPos: 2234802, EndPos: 2261169, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22D6 = genome.Band{Band: "22D6", Desc: "Band", StartPos: 2261169, EndPos: 2298835, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22E1 = genome.Band{Band: "22E1", Desc: "Band", StartPos: 2298835, EndPos: 2425019, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22E2 = genome.Band{Band: "22E2", Desc: "Band", StartPos: 2425019, EndPos: 2425029, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22E3 = genome.Band{Band: "22E3", Desc: "Band", StartPos: 2425029, EndPos: 2425039, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22E4 = genome.Band{Band: "22E4", Desc: "Band", StartPos: 2425039, EndPos: 2425049, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22F1 = genome.Band{Band: "22F1", Desc: "Band", StartPos: 2425049, EndPos: 2432797, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22F2 = genome.Band{Band: "22F2", Desc: "Band", StartPos: 2432797, EndPos: 2458422, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22F3 = genome.Band{Band: "22F3", Desc: "Band", StartPos: 2458422, EndPos: 2492448, Giemsa: "n/a", Chr: &Chr2L} Chr2L_22F4 = genome.Band{Band: "22F4", Desc: "Band", StartPos: 2492448, EndPos: 2564558, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23A1 = genome.Band{Band: "23A1", Desc: "Band", StartPos: 2564558, EndPos: 2642867, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23A2 = genome.Band{Band: "23A2", Desc: "Band", StartPos: 2642867, EndPos: 2721176, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23A3 = genome.Band{Band: "23A3", Desc: "Band", StartPos: 2721176, EndPos: 2761795, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23A4 = genome.Band{Band: "23A4", Desc: "Band", StartPos: 2761795, EndPos: 2762015, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23A5 = genome.Band{Band: "23A5", Desc: "Band", StartPos: 2762015, EndPos: 2774487, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23A6 = genome.Band{Band: "23A6", Desc: "Band", StartPos: 2774487, EndPos: 2786959, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23A7 = genome.Band{Band: "23A7", Desc: "Band", StartPos: 2786959, EndPos: 2790737, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23B1 = genome.Band{Band: "23B1", Desc: "Band", StartPos: 2790737, EndPos: 2809025, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23B2 = genome.Band{Band: "23B2", Desc: "Band", StartPos: 2809025, EndPos: 2827313, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23B3 = genome.Band{Band: "23B3", Desc: "Band", StartPos: 2827313, EndPos: 2839785, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23B4 = genome.Band{Band: "23B4", Desc: "Band", StartPos: 2839785, EndPos: 2846501, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23B5 = genome.Band{Band: "23B5", Desc: "Band", StartPos: 2846501, EndPos: 2856095, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23B6 = genome.Band{Band: "23B6", Desc: "Band", StartPos: 2856095, EndPos: 2864302, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23B7 = genome.Band{Band: "23B7", Desc: "Band", StartPos: 2864302, EndPos: 2870047, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23B8 = genome.Band{Band: "23B8", Desc: "Band", StartPos: 2870047, EndPos: 2875792, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23C1 = genome.Band{Band: "23C1", Desc: "Band", StartPos: 2875792, EndPos: 2888923, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23C2 = genome.Band{Band: "23C2", Desc: "Band", StartPos: 2888923, EndPos: 2946983, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23C3 = genome.Band{Band: "23C3", Desc: "Band", StartPos: 2946983, EndPos: 2972384, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23C4 = genome.Band{Band: "23C4", Desc: "Band", StartPos: 2972384, EndPos: 3030443, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23C5 = genome.Band{Band: "23C5", Desc: "Band", StartPos: 3030443, EndPos: 3066730, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23D1 = genome.Band{Band: "23D1", Desc: "Band", StartPos: 3066730, EndPos: 3124790, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23D2 = genome.Band{Band: "23D2", Desc: "Band", StartPos: 3124790, EndPos: 3145048, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23D3 = genome.Band{Band: "23D3", Desc: "Band", StartPos: 3145048, EndPos: 3161507, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23D4 = genome.Band{Band: "23D4", Desc: "Band", StartPos: 3161507, EndPos: 3186062, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23D5 = genome.Band{Band: "23D5", Desc: "Band", StartPos: 3186062, EndPos: 3202164, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23D6 = genome.Band{Band: "23D6", Desc: "Band", StartPos: 3202164, EndPos: 3218266, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23E1 = genome.Band{Band: "23E1", Desc: "Band", StartPos: 3218266, EndPos: 3295327, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23E2 = genome.Band{Band: "23E2", Desc: "Band", StartPos: 3295327, EndPos: 3298921, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23E3 = genome.Band{Band: "23E3", Desc: "Band", StartPos: 3298921, EndPos: 3321924, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23E4 = genome.Band{Band: "23E4", Desc: "Band", StartPos: 3321924, EndPos: 3344927, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23E5 = genome.Band{Band: "23E5", Desc: "Band", StartPos: 3344927, EndPos: 3361029, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23E6 = genome.Band{Band: "23E6", Desc: "Band", StartPos: 3361029, EndPos: 3370087, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23F1 = genome.Band{Band: "23F1", Desc: "Band", StartPos: 3370087, EndPos: 3440247, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23F2 = genome.Band{Band: "23F2", Desc: "Band", StartPos: 3440247, EndPos: 3443841, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23F3 = genome.Band{Band: "23F3", Desc: "Band", StartPos: 3443841, EndPos: 3486253, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23F4 = genome.Band{Band: "23F4", Desc: "Band", StartPos: 3486253, EndPos: 3486263, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23F5 = genome.Band{Band: "23F5", Desc: "Band", StartPos: 3486263, EndPos: 3486273, Giemsa: "n/a", Chr: &Chr2L} Chr2L_23F6 = genome.Band{Band: "23F6", Desc: "Band", StartPos: 3486273, EndPos: 3526909, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24A1 = genome.Band{Band: "24A1", Desc: "Band", StartPos: 3526909, EndPos: 3619317, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24A2 = genome.Band{Band: "24A2", Desc: "Band", StartPos: 3619317, EndPos: 3636539, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24A3 = genome.Band{Band: "24A3", Desc: "Band", StartPos: 3636539, EndPos: 3648283, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24A4 = genome.Band{Band: "24A4", Desc: "Band", StartPos: 3648283, EndPos: 3660028, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24A5 = genome.Band{Band: "24A5", Desc: "Band", StartPos: 3660028, EndPos: 3666352, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24B1 = genome.Band{Band: "24B1", Desc: "Band", StartPos: 3666352, EndPos: 3693907, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24B2 = genome.Band{Band: "24B2", Desc: "Band", StartPos: 3693907, EndPos: 3695319, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24B3 = genome.Band{Band: "24B3", Desc: "Band", StartPos: 3695319, EndPos: 3698876, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24C1 = genome.Band{Band: "24C1", Desc: "Band", StartPos: 3698876, EndPos: 3726431, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24C2 = genome.Band{Band: "24C2", Desc: "Band", StartPos: 3726431, EndPos: 3750533, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24C3 = genome.Band{Band: "24C3", Desc: "Band", StartPos: 3750533, EndPos: 3780679, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24C4 = genome.Band{Band: "24C4", Desc: "Band", StartPos: 3780679, EndPos: 3789809, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24C5 = genome.Band{Band: "24C5", Desc: "Band", StartPos: 3789809, EndPos: 3819955, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24C6 = genome.Band{Band: "24C6", Desc: "Band", StartPos: 3819955, EndPos: 3829085, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24C7 = genome.Band{Band: "24C7", Desc: "Band", StartPos: 3829085, EndPos: 3859230, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24C8 = genome.Band{Band: "24C8", Desc: "Band", StartPos: 3859230, EndPos: 3896332, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24C9 = genome.Band{Band: "24C9", Desc: "Band", StartPos: 3896332, EndPos: 3912565, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24D1 = genome.Band{Band: "24D1", Desc: "Band", StartPos: 3912565, EndPos: 3956768, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24D2 = genome.Band{Band: "24D2", Desc: "Band", StartPos: 3956768, EndPos: 4000971, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24D3 = genome.Band{Band: "24D3", Desc: "Band", StartPos: 4000971, EndPos: 4024160, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24D4 = genome.Band{Band: "24D4", Desc: "Band", StartPos: 4024160, EndPos: 4073079, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24D5 = genome.Band{Band: "24D5", Desc: "Band", StartPos: 4073079, EndPos: 4113515, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24D6 = genome.Band{Band: "24D6", Desc: "Band", StartPos: 4113515, EndPos: 4153950, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24D7 = genome.Band{Band: "24D7", Desc: "Band", StartPos: 4153950, EndPos: 4185054, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24D8 = genome.Band{Band: "24D8", Desc: "Band", StartPos: 4185054, EndPos: 4225489, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24E1 = genome.Band{Band: "24E1", Desc: "Band", StartPos: 4225489, EndPos: 4376539, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24E2 = genome.Band{Band: "24E2", Desc: "Band", StartPos: 4376539, EndPos: 4376549, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24E3 = genome.Band{Band: "24E3", Desc: "Band", StartPos: 4376549, EndPos: 4376559, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24E4 = genome.Band{Band: "24E4", Desc: "Band", StartPos: 4376559, EndPos: 4388970, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24E5 = genome.Band{Band: "24E5", Desc: "Band", StartPos: 4388970, EndPos: 4397910, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24F1 = genome.Band{Band: "24F1", Desc: "Band", StartPos: 4397910, EndPos: 4417635, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24F2 = genome.Band{Band: "24F2", Desc: "Band", StartPos: 4417635, EndPos: 4448498, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24F3 = genome.Band{Band: "24F3", Desc: "Band", StartPos: 4448498, EndPos: 4464159, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24F4 = genome.Band{Band: "24F4", Desc: "Band", StartPos: 4464159, EndPos: 4479821, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24F5 = genome.Band{Band: "24F5", Desc: "Band", StartPos: 4479821, EndPos: 4485987, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24F6 = genome.Band{Band: "24F6", Desc: "Band", StartPos: 4485987, EndPos: 4506347, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24F7 = genome.Band{Band: "24F7", Desc: "Band", StartPos: 4506347, EndPos: 4526707, Giemsa: "n/a", Chr: &Chr2L} Chr2L_24F8 = genome.Band{Band: "24F8", Desc: "Band", StartPos: 4526707, EndPos: 4537964, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25A1 = genome.Band{Band: "25A1", Desc: "Band", StartPos: 4537964, EndPos: 4614998, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25A2 = genome.Band{Band: "25A2", Desc: "Band", StartPos: 4614998, EndPos: 4673141, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25A3 = genome.Band{Band: "25A3", Desc: "Band", StartPos: 4673141, EndPos: 4731284, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25A4 = genome.Band{Band: "25A4", Desc: "Band", StartPos: 4731284, EndPos: 4780031, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25A5 = genome.Band{Band: "25A5", Desc: "Band", StartPos: 4780031, EndPos: 4790994, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25A6 = genome.Band{Band: "25A6", Desc: "Band", StartPos: 4790994, EndPos: 4816052, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25A7 = genome.Band{Band: "25A7", Desc: "Band", StartPos: 4816052, EndPos: 4827015, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25A8 = genome.Band{Band: "25A8", Desc: "Band", StartPos: 4827015, EndPos: 4842676, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25B1 = genome.Band{Band: "25B1", Desc: "Band", StartPos: 4842676, EndPos: 4899841, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25B2 = genome.Band{Band: "25B2", Desc: "Band", StartPos: 4899841, EndPos: 4905152, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25B3 = genome.Band{Band: "25B3", Desc: "Band", StartPos: 4905152, EndPos: 4932619, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25B4 = genome.Band{Band: "25B4", Desc: "Band", StartPos: 4932619, EndPos: 4960086, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25B5 = genome.Band{Band: "25B5", Desc: "Band", StartPos: 4960086, EndPos: 4982402, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25B6 = genome.Band{Band: "25B6", Desc: "Band", StartPos: 4982402, EndPos: 4982412, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25B7 = genome.Band{Band: "25B7", Desc: "Band", StartPos: 4982412, EndPos: 4982422, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25B8 = genome.Band{Band: "25B8", Desc: "Band", StartPos: 4982422, EndPos: 4982432, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25B9 = genome.Band{Band: "25B9", Desc: "Band", StartPos: 4982432, EndPos: 4994196, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25B10 = genome.Band{Band: "25B10", Desc: "Band", StartPos: 4994196, EndPos: 5006014, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25C1 = genome.Band{Band: "25C1", Desc: "Band", StartPos: 5006014, EndPos: 5049149, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25C2 = genome.Band{Band: "25C2", Desc: "Band", StartPos: 5049149, EndPos: 5049825, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25C3 = genome.Band{Band: "25C3", Desc: "Band", StartPos: 5049825, EndPos: 5064389, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25C4 = genome.Band{Band: "25C4", Desc: "Band", StartPos: 5064389, EndPos: 5078952, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25C5 = genome.Band{Band: "25C5", Desc: "Band", StartPos: 5078952, EndPos: 5093516, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25C6 = genome.Band{Band: "25C6", Desc: "Band", StartPos: 5093516, EndPos: 5111649, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25C7 = genome.Band{Band: "25C7", Desc: "Band", StartPos: 5111649, EndPos: 5133967, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25C8 = genome.Band{Band: "25C8", Desc: "Band", StartPos: 5133967, EndPos: 5164742, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25C9 = genome.Band{Band: "25C9", Desc: "Band", StartPos: 5164742, EndPos: 5195516, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25C10 = genome.Band{Band: "25C10", Desc: "Band", StartPos: 5195516, EndPos: 5213649, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25D1 = genome.Band{Band: "25D1", Desc: "Band", StartPos: 5213649, EndPos: 5240239, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25D2 = genome.Band{Band: "25D2", Desc: "Band", StartPos: 5240239, EndPos: 5273491, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25D3 = genome.Band{Band: "25D3", Desc: "Band", StartPos: 5273491, EndPos: 5285701, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25D4 = genome.Band{Band: "25D4", Desc: "Band", StartPos: 5285701, EndPos: 5303145, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25D5 = genome.Band{Band: "25D5", Desc: "Band", StartPos: 5303145, EndPos: 5320589, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25D6 = genome.Band{Band: "25D6", Desc: "Band", StartPos: 5320589, EndPos: 5362864, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25D7 = genome.Band{Band: "25D7", Desc: "Band", StartPos: 5362864, EndPos: 5372874, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25E1 = genome.Band{Band: "25E1", Desc: "Band", StartPos: 5372874, EndPos: 5421339, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25E2 = genome.Band{Band: "25E2", Desc: "Band", StartPos: 5421339, EndPos: 5477431, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25E3 = genome.Band{Band: "25E3", Desc: "Band", StartPos: 5477431, EndPos: 5495228, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25E4 = genome.Band{Band: "25E4", Desc: "Band", StartPos: 5495228, EndPos: 5513025, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25E5 = genome.Band{Band: "25E5", Desc: "Band", StartPos: 5513025, EndPos: 5538449, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25E6 = genome.Band{Band: "25E6", Desc: "Band", StartPos: 5538449, EndPos: 5572913, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25F1 = genome.Band{Band: "25F1", Desc: "Band", StartPos: 5572913, EndPos: 5631715, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25F2 = genome.Band{Band: "25F2", Desc: "Band", StartPos: 5631715, EndPos: 5682521, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25F3 = genome.Band{Band: "25F3", Desc: "Band", StartPos: 5682521, EndPos: 5725165, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25F4 = genome.Band{Band: "25F4", Desc: "Band", StartPos: 5725165, EndPos: 5798832, Giemsa: "n/a", Chr: &Chr2L} Chr2L_25F5 = genome.Band{Band: "25F5", Desc: "Band", StartPos: 5798832, EndPos: 5831061, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26A1 = genome.Band{Band: "26A1", Desc: "Band", StartPos: 5831061, EndPos: 5932640, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26A2 = genome.Band{Band: "26A2", Desc: "Band", StartPos: 5932640, EndPos: 5942497, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26A3 = genome.Band{Band: "26A3", Desc: "Band", StartPos: 5942497, EndPos: 5960484, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26A4 = genome.Band{Band: "26A4", Desc: "Band", StartPos: 5960484, EndPos: 5968636, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26A5 = genome.Band{Band: "26A5", Desc: "Band", StartPos: 5968636, EndPos: 5979234, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26A6 = genome.Band{Band: "26A6", Desc: "Band", StartPos: 5979234, EndPos: 5979590, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26A7 = genome.Band{Band: "26A7", Desc: "Band", StartPos: 5979590, EndPos: 5979698, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26A8 = genome.Band{Band: "26A8", Desc: "Band", StartPos: 5979698, EndPos: 5979890, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26A9 = genome.Band{Band: "26A9", Desc: "Band", StartPos: 5979890, EndPos: 5980164, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26B1 = genome.Band{Band: "26B1", Desc: "Band", StartPos: 5980164, EndPos: 5981001, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26B2 = genome.Band{Band: "26B2", Desc: "Band", StartPos: 5981001, EndPos: 6018789, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26B3 = genome.Band{Band: "26B3", Desc: "Band", StartPos: 6018789, EndPos: 6056899, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26B4 = genome.Band{Band: "26B4", Desc: "Band", StartPos: 6056899, EndPos: 6080719, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26B5 = genome.Band{Band: "26B5", Desc: "Band", StartPos: 6080719, EndPos: 6110195, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26B6 = genome.Band{Band: "26B6", Desc: "Band", StartPos: 6110195, EndPos: 6113916, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26B7 = genome.Band{Band: "26B7", Desc: "Band", StartPos: 6113916, EndPos: 6130590, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26B8 = genome.Band{Band: "26B8", Desc: "Band", StartPos: 6130590, EndPos: 6154409, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26B9 = genome.Band{Band: "26B9", Desc: "Band", StartPos: 6154409, EndPos: 6178228, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26B10 = genome.Band{Band: "26B10", Desc: "Band", StartPos: 6178228, EndPos: 6194901, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26B11 = genome.Band{Band: "26B11", Desc: "Band", StartPos: 6194901, EndPos: 6233012, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26C1 = genome.Band{Band: "26C1", Desc: "Band", StartPos: 6233012, EndPos: 6278417, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26C2 = genome.Band{Band: "26C2", Desc: "Band", StartPos: 6278417, EndPos: 6323822, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26C3 = genome.Band{Band: "26C3", Desc: "Band", StartPos: 6323822, EndPos: 6363576, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26C4 = genome.Band{Band: "26C4", Desc: "Band", StartPos: 6363576, EndPos: 6384431, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26D1 = genome.Band{Band: "26D1", Desc: "Band", StartPos: 6384431, EndPos: 6448037, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26D2 = genome.Band{Band: "26D2", Desc: "Band", StartPos: 6448037, EndPos: 6448047, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26D3 = genome.Band{Band: "26D3", Desc: "Band", StartPos: 6448047, EndPos: 6448057, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26D4 = genome.Band{Band: "26D4", Desc: "Band", StartPos: 6448057, EndPos: 6455070, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26D5 = genome.Band{Band: "26D5", Desc: "Band", StartPos: 6455070, EndPos: 6461743, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26D6 = genome.Band{Band: "26D6", Desc: "Band", StartPos: 6461743, EndPos: 6465497, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26D7 = genome.Band{Band: "26D7", Desc: "Band", StartPos: 6465497, EndPos: 6477889, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26D8 = genome.Band{Band: "26D8", Desc: "Band", StartPos: 6477889, EndPos: 6484562, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26D9 = genome.Band{Band: "26D9", Desc: "Band", StartPos: 6484562, EndPos: 6499666, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26D10 = genome.Band{Band: "26D10", Desc: "Band", StartPos: 6499666, EndPos: 6504882, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26D11 = genome.Band{Band: "26D11", Desc: "Band", StartPos: 6504882, EndPos: 6514155, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26E1 = genome.Band{Band: "26E1", Desc: "Band", StartPos: 6514155, EndPos: 6531376, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26E2 = genome.Band{Band: "26E2", Desc: "Band", StartPos: 6531376, EndPos: 6548598, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26E3 = genome.Band{Band: "26E3", Desc: "Band", StartPos: 6548598, EndPos: 6569793, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26E4 = genome.Band{Band: "26E4", Desc: "Band", StartPos: 6569793, EndPos: 6583040, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26F1 = genome.Band{Band: "26F1", Desc: "Band", StartPos: 6583040, EndPos: 6619386, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26F2 = genome.Band{Band: "26F2", Desc: "Band", StartPos: 6619386, EndPos: 6621456, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26F3 = genome.Band{Band: "26F3", Desc: "Band", StartPos: 6621456, EndPos: 6649854, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26F4 = genome.Band{Band: "26F4", Desc: "Band", StartPos: 6649854, EndPos: 6651924, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26F5 = genome.Band{Band: "26F5", Desc: "Band", StartPos: 6651924, EndPos: 6661197, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26F6 = genome.Band{Band: "26F6", Desc: "Band", StartPos: 6661197, EndPos: 6674444, Giemsa: "n/a", Chr: &Chr2L} Chr2L_26F7 = genome.Band{Band: "26F7", Desc: "Band", StartPos: 6674444, EndPos: 6687691, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27A1 = genome.Band{Band: "27A1", Desc: "Band", StartPos: 6687691, EndPos: 6728922, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27A2 = genome.Band{Band: "27A2", Desc: "Band", StartPos: 6728922, EndPos: 6746143, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27B1 = genome.Band{Band: "27B1", Desc: "Band", StartPos: 6746143, EndPos: 6798469, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27B2 = genome.Band{Band: "27B2", Desc: "Band", StartPos: 6798469, EndPos: 6800539, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27B3 = genome.Band{Band: "27B3", Desc: "Band", StartPos: 6800539, EndPos: 6813786, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27B4 = genome.Band{Band: "27B4", Desc: "Band", StartPos: 6813786, EndPos: 6839038, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27C1 = genome.Band{Band: "27C1", Desc: "Band", StartPos: 6839038, EndPos: 6880269, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27C2 = genome.Band{Band: "27C2", Desc: "Band", StartPos: 6880269, EndPos: 6889264, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27C3 = genome.Band{Band: "27C3", Desc: "Band", StartPos: 6889264, EndPos: 6904649, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27C4 = genome.Band{Band: "27C4", Desc: "Band", StartPos: 6904649, EndPos: 6933568, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27C5 = genome.Band{Band: "27C5", Desc: "Band", StartPos: 6933568, EndPos: 6939661, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27C6 = genome.Band{Band: "27C6", Desc: "Band", StartPos: 6939661, EndPos: 6950229, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27C7 = genome.Band{Band: "27C7", Desc: "Band", StartPos: 6950229, EndPos: 6969857, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27C8 = genome.Band{Band: "27C8", Desc: "Band", StartPos: 6969857, EndPos: 6969867, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27C9 = genome.Band{Band: "27C9", Desc: "Band", StartPos: 6969867, EndPos: 6969877, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27D1 = genome.Band{Band: "27D1", Desc: "Band", StartPos: 6969877, EndPos: 6973359, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27D2 = genome.Band{Band: "27D2", Desc: "Band", StartPos: 6973359, EndPos: 6996526, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27D3 = genome.Band{Band: "27D3", Desc: "Band", StartPos: 6996526, EndPos: 7012040, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27D4 = genome.Band{Band: "27D4", Desc: "Band", StartPos: 7012040, EndPos: 7027554, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27D5 = genome.Band{Band: "27D5", Desc: "Band", StartPos: 7027554, EndPos: 7038414, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27D6 = genome.Band{Band: "27D6", Desc: "Band", StartPos: 7038414, EndPos: 7049273, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27D7 = genome.Band{Band: "27D7", Desc: "Band", StartPos: 7049273, EndPos: 7069441, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27E1 = genome.Band{Band: "27E1", Desc: "Band", StartPos: 7069441, EndPos: 7117728, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27E2 = genome.Band{Band: "27E2", Desc: "Band", StartPos: 7117728, EndPos: 7156609, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27E3 = genome.Band{Band: "27E3", Desc: "Band", StartPos: 7156609, EndPos: 7181431, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27E4 = genome.Band{Band: "27E4", Desc: "Band", StartPos: 7181431, EndPos: 7206253, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27E5 = genome.Band{Band: "27E5", Desc: "Band", StartPos: 7206253, EndPos: 7226421, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27E6 = genome.Band{Band: "27E6", Desc: "Band", StartPos: 7226421, EndPos: 7246589, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27E7 = genome.Band{Band: "27E7", Desc: "Band", StartPos: 7246589, EndPos: 7275192, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27E8 = genome.Band{Band: "27E8", Desc: "Band", StartPos: 7275192, EndPos: 7277616, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27F1 = genome.Band{Band: "27F1", Desc: "Band", StartPos: 7277616, EndPos: 7334242, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27F2 = genome.Band{Band: "27F2", Desc: "Band", StartPos: 7334242, EndPos: 7369686, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27F3 = genome.Band{Band: "27F3", Desc: "Band", StartPos: 7369686, EndPos: 7422270, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27F4 = genome.Band{Band: "27F4", Desc: "Band", StartPos: 7422270, EndPos: 7445275, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27F5 = genome.Band{Band: "27F5", Desc: "Band", StartPos: 7445275, EndPos: 7445285, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27F6 = genome.Band{Band: "27F6", Desc: "Band", StartPos: 7445285, EndPos: 7445295, Giemsa: "n/a", Chr: &Chr2L} Chr2L_27F7 = genome.Band{Band: "27F7", Desc: "Band", StartPos: 7445295, EndPos: 7445305, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28A1 = genome.Band{Band: "28A1", Desc: "Band", StartPos: 7445305, EndPos: 7485292, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28A2 = genome.Band{Band: "28A2", Desc: "Band", StartPos: 7485292, EndPos: 7487228, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28A3 = genome.Band{Band: "28A3", Desc: "Band", StartPos: 7487228, EndPos: 7495902, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28A4 = genome.Band{Band: "28A4", Desc: "Band", StartPos: 7495902, EndPos: 7512009, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28A5 = genome.Band{Band: "28A5", Desc: "Band", StartPos: 7512009, EndPos: 7524400, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28A6 = genome.Band{Band: "28A6", Desc: "Band", StartPos: 7524400, EndPos: 7548020, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28B1 = genome.Band{Band: "28B1", Desc: "Band", StartPos: 7548020, EndPos: 7578299, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28B2 = genome.Band{Band: "28B2", Desc: "Band", StartPos: 7578299, EndPos: 7580235, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28B3 = genome.Band{Band: "28B3", Desc: "Band", StartPos: 7580235, EndPos: 7592626, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28B4 = genome.Band{Band: "28B4", Desc: "Band", StartPos: 7592626, EndPos: 7644956, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28C1 = genome.Band{Band: "28C1", Desc: "Band", StartPos: 7644956, EndPos: 7719532, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28C2 = genome.Band{Band: "28C2", Desc: "Band", StartPos: 7719532, EndPos: 7767141, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28C3 = genome.Band{Band: "28C3", Desc: "Band", StartPos: 7767141, EndPos: 7787970, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28C4 = genome.Band{Band: "28C4", Desc: "Band", StartPos: 7787970, EndPos: 7815866, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28C5 = genome.Band{Band: "28C5", Desc: "Band", StartPos: 7815866, EndPos: 7820516, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28C6 = genome.Band{Band: "28C6", Desc: "Band", StartPos: 7820516, EndPos: 7820526, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28C7 = genome.Band{Band: "28C7", Desc: "Band", StartPos: 7820526, EndPos: 7820536, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28C8 = genome.Band{Band: "28C8", Desc: "Band", StartPos: 7820536, EndPos: 7820546, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28C9 = genome.Band{Band: "28C9", Desc: "Band", StartPos: 7820546, EndPos: 7820556, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28D1 = genome.Band{Band: "28D1", Desc: "Band", StartPos: 7820556, EndPos: 7829302, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28D2 = genome.Band{Band: "28D2", Desc: "Band", StartPos: 7829302, EndPos: 7912688, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28D3 = genome.Band{Band: "28D3", Desc: "Band", StartPos: 7912688, EndPos: 8048738, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28D4 = genome.Band{Band: "28D4", Desc: "Band", StartPos: 8048738, EndPos: 8048748, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28D5 = genome.Band{Band: "28D5", Desc: "Band", StartPos: 8048748, EndPos: 8048758, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28D6 = genome.Band{Band: "28D6", Desc: "Band", StartPos: 8048758, EndPos: 8048768, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28D7 = genome.Band{Band: "28D7", Desc: "Band", StartPos: 8048768, EndPos: 8048778, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28D8 = genome.Band{Band: "28D8", Desc: "Band", StartPos: 8048778, EndPos: 8048788, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28D9 = genome.Band{Band: "28D9", Desc: "Band", StartPos: 8048788, EndPos: 8048798, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28D10 = genome.Band{Band: "28D10", Desc: "Band", StartPos: 8048798, EndPos: 8048808, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28D11 = genome.Band{Band: "28D11", Desc: "Band", StartPos: 8048808, EndPos: 8056361, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28D12 = genome.Band{Band: "28D12", Desc: "Band", StartPos: 8056361, EndPos: 8060238, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28E1 = genome.Band{Band: "28E1", Desc: "Band", StartPos: 8060238, EndPos: 8074119, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28E2 = genome.Band{Band: "28E2", Desc: "Band", StartPos: 8074119, EndPos: 8078995, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28E3 = genome.Band{Band: "28E3", Desc: "Band", StartPos: 8078995, EndPos: 8083671, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28E4 = genome.Band{Band: "28E4", Desc: "Band", StartPos: 8083671, EndPos: 8090529, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28E5 = genome.Band{Band: "28E5", Desc: "Band", StartPos: 8090529, EndPos: 8114481, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28E6 = genome.Band{Band: "28E6", Desc: "Band", StartPos: 8114481, EndPos: 8120218, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28E7 = genome.Band{Band: "28E7", Desc: "Band", StartPos: 8120218, EndPos: 8155827, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28E8 = genome.Band{Band: "28E8", Desc: "Band", StartPos: 8155827, EndPos: 8158104, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28E9 = genome.Band{Band: "28E9", Desc: "Band", StartPos: 8158104, EndPos: 8168304, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28F1 = genome.Band{Band: "28F1", Desc: "Band", StartPos: 8168304, EndPos: 8208284, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28F2 = genome.Band{Band: "28F2", Desc: "Band", StartPos: 8208284, EndPos: 8210561, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28F3 = genome.Band{Band: "28F3", Desc: "Band", StartPos: 8210561, EndPos: 8220761, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28F4 = genome.Band{Band: "28F4", Desc: "Band", StartPos: 8220761, EndPos: 8235332, Giemsa: "n/a", Chr: &Chr2L} Chr2L_28F5 = genome.Band{Band: "28F5", Desc: "Band", StartPos: 8235332, EndPos: 8254275, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29A1 = genome.Band{Band: "29A1", Desc: "Band", StartPos: 8254275, EndPos: 8282052, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29A2 = genome.Band{Band: "29A2", Desc: "Band", StartPos: 8282052, EndPos: 8300970, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29A3 = genome.Band{Band: "29A3", Desc: "Band", StartPos: 8300970, EndPos: 8315525, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29A4 = genome.Band{Band: "29A4", Desc: "Band", StartPos: 8315525, EndPos: 8325714, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29A5 = genome.Band{Band: "29A5", Desc: "Band", StartPos: 8325714, EndPos: 8340270, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29B1 = genome.Band{Band: "29B1", Desc: "Band", StartPos: 8340270, EndPos: 8363559, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29B2 = genome.Band{Band: "29B2", Desc: "Band", StartPos: 8363559, EndPos: 8375066, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29B3 = genome.Band{Band: "29B3", Desc: "Band", StartPos: 8375066, EndPos: 8382259, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29B4 = genome.Band{Band: "29B4", Desc: "Band", StartPos: 8382259, EndPos: 8387293, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29C1 = genome.Band{Band: "29C1", Desc: "Band", StartPos: 8387293, EndPos: 8404869, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29C2 = genome.Band{Band: "29C2", Desc: "Band", StartPos: 8404869, EndPos: 8405993, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29C3 = genome.Band{Band: "29C3", Desc: "Band", StartPos: 8405993, EndPos: 8422378, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29C4 = genome.Band{Band: "29C4", Desc: "Band", StartPos: 8422378, EndPos: 8438367, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29C5 = genome.Band{Band: "29C5", Desc: "Band", StartPos: 8438367, EndPos: 8454356, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29D1 = genome.Band{Band: "29D1", Desc: "Band", StartPos: 8454356, EndPos: 8491870, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29D2 = genome.Band{Band: "29D2", Desc: "Band", StartPos: 8491870, EndPos: 8506397, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29D3 = genome.Band{Band: "29D3", Desc: "Band", StartPos: 8506397, EndPos: 8514336, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29D4 = genome.Band{Band: "29D4", Desc: "Band", StartPos: 8514336, EndPos: 8528450, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29D5 = genome.Band{Band: "29D5", Desc: "Band", StartPos: 8528450, EndPos: 8531210, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29D6 = genome.Band{Band: "29D6", Desc: "Band", StartPos: 8531210, EndPos: 8532762, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29D7 = genome.Band{Band: "29D7", Desc: "Band", StartPos: 8532762, EndPos: 8536704, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29E1 = genome.Band{Band: "29E1", Desc: "Band", StartPos: 8536704, EndPos: 8544219, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29E2 = genome.Band{Band: "29E2", Desc: "Band", StartPos: 8544219, EndPos: 8637546, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29E3 = genome.Band{Band: "29E3", Desc: "Band", StartPos: 8637546, EndPos: 8686504, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29E4 = genome.Band{Band: "29E4", Desc: "Band", StartPos: 8686504, EndPos: 8711541, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29E5 = genome.Band{Band: "29E5", Desc: "Band", StartPos: 8711541, EndPos: 8736577, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29E6 = genome.Band{Band: "29E6", Desc: "Band", StartPos: 8736577, EndPos: 8761614, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29F1 = genome.Band{Band: "29F1", Desc: "Band", StartPos: 8761614, EndPos: 8816851, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29F2 = genome.Band{Band: "29F2", Desc: "Band", StartPos: 8816851, EndPos: 8856909, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29F3 = genome.Band{Band: "29F3", Desc: "Band", StartPos: 8856909, EndPos: 8912146, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29F4 = genome.Band{Band: "29F4", Desc: "Band", StartPos: 8912146, EndPos: 8937183, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29F5 = genome.Band{Band: "29F5", Desc: "Band", StartPos: 8937183, EndPos: 8962220, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29F6 = genome.Band{Band: "29F6", Desc: "Band", StartPos: 8962220, EndPos: 8987256, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29F7 = genome.Band{Band: "29F7", Desc: "Band", StartPos: 8987256, EndPos: 9019804, Giemsa: "n/a", Chr: &Chr2L} Chr2L_29F8 = genome.Band{Band: "29F8", Desc: "Band", StartPos: 9019804, EndPos: 9059863, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30A1 = genome.Band{Band: "30A1", Desc: "Band", StartPos: 9059863, EndPos: 9122611, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30A2 = genome.Band{Band: "30A2", Desc: "Band", StartPos: 9122611, EndPos: 9185359, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30A3 = genome.Band{Band: "30A3", Desc: "Band", StartPos: 9185359, EndPos: 9202884, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30A4 = genome.Band{Band: "30A4", Desc: "Band", StartPos: 9202884, EndPos: 9220410, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30A5 = genome.Band{Band: "30A5", Desc: "Band", StartPos: 9220410, EndPos: 9233750, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30A6 = genome.Band{Band: "30A6", Desc: "Band", StartPos: 9233750, EndPos: 9254801, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30A7 = genome.Band{Band: "30A7", Desc: "Band", StartPos: 9254801, EndPos: 9301244, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30A8 = genome.Band{Band: "30A8", Desc: "Band", StartPos: 9301244, EndPos: 9347687, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30A9 = genome.Band{Band: "30A9", Desc: "Band", StartPos: 9347687, EndPos: 9362423, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30B1 = genome.Band{Band: "30B1", Desc: "Band", StartPos: 9362423, EndPos: 9413865, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30B2 = genome.Band{Band: "30B2", Desc: "Band", StartPos: 9413865, EndPos: 9417155, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30B3 = genome.Band{Band: "30B3", Desc: "Band", StartPos: 9417155, EndPos: 9438205, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30B4 = genome.Band{Band: "30B4", Desc: "Band", StartPos: 9438205, EndPos: 9459256, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30B5 = genome.Band{Band: "30B5", Desc: "Band", StartPos: 9459256, EndPos: 9517014, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30B6 = genome.Band{Band: "30B6", Desc: "Band", StartPos: 9517014, EndPos: 9517024, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30B7 = genome.Band{Band: "30B7", Desc: "Band", StartPos: 9517024, EndPos: 9517034, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30B8 = genome.Band{Band: "30B8", Desc: "Band", StartPos: 9517034, EndPos: 9517044, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30B9 = genome.Band{Band: "30B9", Desc: "Band", StartPos: 9517044, EndPos: 9519663, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30B10 = genome.Band{Band: "30B10", Desc: "Band", StartPos: 9519663, EndPos: 9548855, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30B11 = genome.Band{Band: "30B11", Desc: "Band", StartPos: 9548855, EndPos: 9559859, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30B12 = genome.Band{Band: "30B12", Desc: "Band", StartPos: 9559859, EndPos: 9589828, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30C1 = genome.Band{Band: "30C1", Desc: "Band", StartPos: 9589828, EndPos: 9629228, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30C2 = genome.Band{Band: "30C2", Desc: "Band", StartPos: 9629228, EndPos: 9659196, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30C3 = genome.Band{Band: "30C3", Desc: "Band", StartPos: 9659196, EndPos: 9670201, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30C4 = genome.Band{Band: "30C4", Desc: "Band", StartPos: 9670201, EndPos: 9681206, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30C5 = genome.Band{Band: "30C5", Desc: "Band", StartPos: 9681206, EndPos: 9711174, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30C6 = genome.Band{Band: "30C6", Desc: "Band", StartPos: 9711174, EndPos: 9741915, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30C7 = genome.Band{Band: "30C7", Desc: "Band", StartPos: 9741915, EndPos: 9766831, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30C8 = genome.Band{Band: "30C8", Desc: "Band", StartPos: 9766831, EndPos: 9773464, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30C9 = genome.Band{Band: "30C9", Desc: "Band", StartPos: 9773464, EndPos: 9785847, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30D1 = genome.Band{Band: "30D1", Desc: "Band", StartPos: 9785847, EndPos: 9860918, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30D2 = genome.Band{Band: "30D2", Desc: "Band", StartPos: 9860918, EndPos: 9862853, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30D3 = genome.Band{Band: "30D3", Desc: "Band", StartPos: 9862853, EndPos: 9871521, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30D4 = genome.Band{Band: "30D4", Desc: "Band", StartPos: 9871521, EndPos: 9880189, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30E1 = genome.Band{Band: "30E1", Desc: "Band", StartPos: 9880189, EndPos: 9910450, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30E2 = genome.Band{Band: "30E2", Desc: "Band", StartPos: 9910450, EndPos: 9910460, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30E3 = genome.Band{Band: "30E3", Desc: "Band", StartPos: 9910460, EndPos: 9911998, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30E4 = genome.Band{Band: "30E4", Desc: "Band", StartPos: 9911998, EndPos: 9920729, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30F1 = genome.Band{Band: "30F1", Desc: "Band", StartPos: 9920729, EndPos: 9951990, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30F2 = genome.Band{Band: "30F2", Desc: "Band", StartPos: 9951990, EndPos: 9964463, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30F3 = genome.Band{Band: "30F3", Desc: "Band", StartPos: 9964463, EndPos: 9973195, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30F4 = genome.Band{Band: "30F4", Desc: "Band", StartPos: 9973195, EndPos: 9981926, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30F5 = genome.Band{Band: "30F5", Desc: "Band", StartPos: 9981926, EndPos: 10020749, Giemsa: "n/a", Chr: &Chr2L} Chr2L_30F6 = genome.Band{Band: "30F6", Desc: "Band", StartPos: 10020749, EndPos: 10033194, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31A1 = genome.Band{Band: "31A1", Desc: "Band", StartPos: 10033194, EndPos: 10056945, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31A2 = genome.Band{Band: "31A2", Desc: "Band", StartPos: 10056945, EndPos: 10131554, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31A3 = genome.Band{Band: "31A3", Desc: "Band", StartPos: 10131554, EndPos: 10170693, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31B1 = genome.Band{Band: "31B1", Desc: "Band", StartPos: 10170693, EndPos: 10280527, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31B2 = genome.Band{Band: "31B2", Desc: "Band", StartPos: 10280527, EndPos: 10280537, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31B3 = genome.Band{Band: "31B3", Desc: "Band", StartPos: 10280537, EndPos: 10280547, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31B4 = genome.Band{Band: "31B4", Desc: "Band", StartPos: 10280547, EndPos: 10280557, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31B5 = genome.Band{Band: "31B5", Desc: "Band", StartPos: 10280557, EndPos: 10280567, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31C1 = genome.Band{Band: "31C1", Desc: "Band", StartPos: 10280567, EndPos: 10280577, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31C2 = genome.Band{Band: "31C2", Desc: "Band", StartPos: 10280577, EndPos: 10280587, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31C3 = genome.Band{Band: "31C3", Desc: "Band", StartPos: 10280587, EndPos: 10280597, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31C4 = genome.Band{Band: "31C4", Desc: "Band", StartPos: 10280597, EndPos: 10283867, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31C5 = genome.Band{Band: "31C5", Desc: "Band", StartPos: 10283867, EndPos: 10288343, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31C6 = genome.Band{Band: "31C6", Desc: "Band", StartPos: 10288343, EndPos: 10292820, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31C7 = genome.Band{Band: "31C7", Desc: "Band", StartPos: 10292820, EndPos: 10297297, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31D1 = genome.Band{Band: "31D1", Desc: "Band", StartPos: 10297297, EndPos: 10309580, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31D2 = genome.Band{Band: "31D2", Desc: "Band", StartPos: 10309580, EndPos: 10309590, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31D3 = genome.Band{Band: "31D3", Desc: "Band", StartPos: 10309590, EndPos: 10310873, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31D4 = genome.Band{Band: "31D4", Desc: "Band", StartPos: 10310873, EndPos: 10312897, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31D5 = genome.Band{Band: "31D5", Desc: "Band", StartPos: 10312897, EndPos: 10316656, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31D6 = genome.Band{Band: "31D6", Desc: "Band", StartPos: 10316656, EndPos: 10320415, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31D7 = genome.Band{Band: "31D7", Desc: "Band", StartPos: 10320415, EndPos: 10323307, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31D8 = genome.Band{Band: "31D8", Desc: "Band", StartPos: 10323307, EndPos: 10328820, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31D9 = genome.Band{Band: "31D9", Desc: "Band", StartPos: 10328820, EndPos: 10350578, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31D10 = genome.Band{Band: "31D10", Desc: "Band", StartPos: 10350578, EndPos: 10373169, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31D11 = genome.Band{Band: "31D11", Desc: "Band", StartPos: 10373169, EndPos: 10391524, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31E1 = genome.Band{Band: "31E1", Desc: "Band", StartPos: 10391524, EndPos: 10431146, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31E2 = genome.Band{Band: "31E2", Desc: "Band", StartPos: 10431146, EndPos: 10441698, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31E3 = genome.Band{Band: "31E3", Desc: "Band", StartPos: 10441698, EndPos: 10451138, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31E4 = genome.Band{Band: "31E4", Desc: "Band", StartPos: 10451138, EndPos: 10457039, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31E5 = genome.Band{Band: "31E5", Desc: "Band", StartPos: 10457039, EndPos: 10462939, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31E6 = genome.Band{Band: "31E6", Desc: "Band", StartPos: 10462939, EndPos: 10467069, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31E7 = genome.Band{Band: "31E7", Desc: "Band", StartPos: 10467069, EndPos: 10472969, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31F1 = genome.Band{Band: "31F1", Desc: "Band", StartPos: 10472969, EndPos: 10494506, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31F2 = genome.Band{Band: "31F2", Desc: "Band", StartPos: 10494506, EndPos: 10495428, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31F3 = genome.Band{Band: "31F3", Desc: "Band", StartPos: 10495428, EndPos: 10499558, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31F4 = genome.Band{Band: "31F4", Desc: "Band", StartPos: 10499558, EndPos: 10514346, Giemsa: "n/a", Chr: &Chr2L} Chr2L_31F5 = genome.Band{Band: "31F5", Desc: "Band", StartPos: 10514346, EndPos: 10557961, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32A1 = genome.Band{Band: "32A1", Desc: "Band", StartPos: 10557961, EndPos: 10614466, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32A2 = genome.Band{Band: "32A2", Desc: "Band", StartPos: 10614466, EndPos: 10664207, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32A3 = genome.Band{Band: "32A3", Desc: "Band", StartPos: 10664207, EndPos: 10679989, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32A4 = genome.Band{Band: "32A4", Desc: "Band", StartPos: 10679989, EndPos: 10709298, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32A5 = genome.Band{Band: "32A5", Desc: "Band", StartPos: 10709298, EndPos: 10774975, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32B1 = genome.Band{Band: "32B1", Desc: "Band", StartPos: 10774975, EndPos: 10856377, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32B2 = genome.Band{Band: "32B2", Desc: "Band", StartPos: 10856377, EndPos: 10861013, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32B3 = genome.Band{Band: "32B3", Desc: "Band", StartPos: 10861013, EndPos: 10899582, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32B4 = genome.Band{Band: "32B4", Desc: "Band", StartPos: 10899582, EndPos: 10929250, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32C1 = genome.Band{Band: "32C1", Desc: "Band", StartPos: 10929250, EndPos: 11019738, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32C2 = genome.Band{Band: "32C2", Desc: "Band", StartPos: 11019738, EndPos: 11019748, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32C3 = genome.Band{Band: "32C3", Desc: "Band", StartPos: 11019748, EndPos: 11019758, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32C4 = genome.Band{Band: "32C4", Desc: "Band", StartPos: 11019758, EndPos: 11019768, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32C5 = genome.Band{Band: "32C5", Desc: "Band", StartPos: 11019768, EndPos: 11021965, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32D1 = genome.Band{Band: "32D1", Desc: "Band", StartPos: 11021965, EndPos: 11067015, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32D2 = genome.Band{Band: "32D2", Desc: "Band", StartPos: 11067015, EndPos: 11093465, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32D3 = genome.Band{Band: "32D3", Desc: "Band", StartPos: 11093465, EndPos: 11109050, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32D4 = genome.Band{Band: "32D4", Desc: "Band", StartPos: 11109050, EndPos: 11131904, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32D5 = genome.Band{Band: "32D5", Desc: "Band", StartPos: 11131904, EndPos: 11169360, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32E1 = genome.Band{Band: "32E1", Desc: "Band", StartPos: 11169360, EndPos: 11218807, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32E2 = genome.Band{Band: "32E2", Desc: "Band", StartPos: 11218807, EndPos: 11288234, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32E3 = genome.Band{Band: "32E3", Desc: "Band", StartPos: 11288234, EndPos: 11313013, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32E4 = genome.Band{Band: "32E4", Desc: "Band", StartPos: 11313013, EndPos: 11367439, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32E5 = genome.Band{Band: "32E5", Desc: "Band", StartPos: 11367439, EndPos: 11372970, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32F1 = genome.Band{Band: "32F1", Desc: "Band", StartPos: 11372970, EndPos: 11440449, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32F2 = genome.Band{Band: "32F2", Desc: "Band", StartPos: 11440449, EndPos: 11537701, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32F3 = genome.Band{Band: "32F3", Desc: "Band", StartPos: 11537701, EndPos: 11609243, Giemsa: "n/a", Chr: &Chr2L} Chr2L_32F4 = genome.Band{Band: "32F4", Desc: "Band", StartPos: 11609243, EndPos: 11680785, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33A1 = genome.Band{Band: "33A1", Desc: "Band", StartPos: 11680785, EndPos: 11806263, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33A2 = genome.Band{Band: "33A2", Desc: "Band", StartPos: 11806263, EndPos: 11836578, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33A3 = genome.Band{Band: "33A3", Desc: "Band", StartPos: 11836578, EndPos: 11847381, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33A4 = genome.Band{Band: "33A4", Desc: "Band", StartPos: 11847381, EndPos: 11858183, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33A5 = genome.Band{Band: "33A5", Desc: "Band", StartPos: 11858183, EndPos: 11871552, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33A6 = genome.Band{Band: "33A6", Desc: "Band", StartPos: 11871552, EndPos: 11873240, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33A7 = genome.Band{Band: "33A7", Desc: "Band", StartPos: 11873240, EndPos: 11887283, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33A8 = genome.Band{Band: "33A8", Desc: "Band", StartPos: 11887283, EndPos: 11901327, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B1 = genome.Band{Band: "33B1", Desc: "Band", StartPos: 11901327, EndPos: 11931641, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B2 = genome.Band{Band: "33B2", Desc: "Band", StartPos: 11931641, EndPos: 11961956, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B3 = genome.Band{Band: "33B3", Desc: "Band", StartPos: 11961956, EndPos: 11976000, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B4 = genome.Band{Band: "33B4", Desc: "Band", StartPos: 11976000, EndPos: 11980753, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B5 = genome.Band{Band: "33B5", Desc: "Band", StartPos: 11980753, EndPos: 12001757, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B6 = genome.Band{Band: "33B6", Desc: "Band", StartPos: 12001757, EndPos: 12003537, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B7 = genome.Band{Band: "33B7", Desc: "Band", StartPos: 12003537, EndPos: 12008022, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B8 = genome.Band{Band: "33B8", Desc: "Band", StartPos: 12008022, EndPos: 12019414, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B9 = genome.Band{Band: "33B9", Desc: "Band", StartPos: 12019414, EndPos: 12037642, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B10 = genome.Band{Band: "33B10", Desc: "Band", StartPos: 12037642, EndPos: 12042127, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B11 = genome.Band{Band: "33B11", Desc: "Band", StartPos: 12042127, EndPos: 12053520, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B12 = genome.Band{Band: "33B12", Desc: "Band", StartPos: 12053520, EndPos: 12053530, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B13 = genome.Band{Band: "33B13", Desc: "Band", StartPos: 12053530, EndPos: 12053540, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33B14 = genome.Band{Band: "33B14", Desc: "Band", StartPos: 12053540, EndPos: 12053550, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33C1 = genome.Band{Band: "33C1", Desc: "Band", StartPos: 12053550, EndPos: 12060150, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33C2 = genome.Band{Band: "33C2", Desc: "Band", StartPos: 12060150, EndPos: 12078332, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33C3 = genome.Band{Band: "33C3", Desc: "Band", StartPos: 12078332, EndPos: 12088107, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33C4 = genome.Band{Band: "33C4", Desc: "Band", StartPos: 12088107, EndPos: 12118045, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33C5 = genome.Band{Band: "33C5", Desc: "Band", StartPos: 12118045, EndPos: 12118055, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33C6 = genome.Band{Band: "33C6", Desc: "Band", StartPos: 12118055, EndPos: 12118065, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33D1 = genome.Band{Band: "33D1", Desc: "Band", StartPos: 12118065, EndPos: 12118075, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33D2 = genome.Band{Band: "33D2", Desc: "Band", StartPos: 12118075, EndPos: 12176015, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33D3 = genome.Band{Band: "33D3", Desc: "Band", StartPos: 12176015, EndPos: 12235162, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33D4 = genome.Band{Band: "33D4", Desc: "Band", StartPos: 12235162, EndPos: 12294308, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33D5 = genome.Band{Band: "33D5", Desc: "Band", StartPos: 12294308, EndPos: 12313074, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33E1 = genome.Band{Band: "33E1", Desc: "Band", StartPos: 12313074, EndPos: 12378588, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33E2 = genome.Band{Band: "33E2", Desc: "Band", StartPos: 12378588, EndPos: 12382777, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33E3 = genome.Band{Band: "33E3", Desc: "Band", StartPos: 12382777, EndPos: 12409585, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33E4 = genome.Band{Band: "33E4", Desc: "Band", StartPos: 12409585, EndPos: 12436394, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33E5 = genome.Band{Band: "33E5", Desc: "Band", StartPos: 12436394, EndPos: 12463203, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33E6 = genome.Band{Band: "33E6", Desc: "Band", StartPos: 12463203, EndPos: 12481969, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33E7 = genome.Band{Band: "33E7", Desc: "Band", StartPos: 12481969, EndPos: 12533073, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33E8 = genome.Band{Band: "33E8", Desc: "Band", StartPos: 12533073, EndPos: 12536338, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33E9 = genome.Band{Band: "33E9", Desc: "Band", StartPos: 12536338, EndPos: 12556019, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33E10 = genome.Band{Band: "33E10", Desc: "Band", StartPos: 12556019, EndPos: 12581605, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33F1 = genome.Band{Band: "33F1", Desc: "Band", StartPos: 12581605, EndPos: 12619122, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33F2 = genome.Band{Band: "33F2", Desc: "Band", StartPos: 12619122, EndPos: 12674151, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33F3 = genome.Band{Band: "33F3", Desc: "Band", StartPos: 12674151, EndPos: 12720340, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33F4 = genome.Band{Band: "33F4", Desc: "Band", StartPos: 12720340, EndPos: 12749208, Giemsa: "n/a", Chr: &Chr2L} Chr2L_33F5 = genome.Band{Band: "33F5", Desc: "Band", StartPos: 12749208, EndPos: 12778076, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34A1 = genome.Band{Band: "34A1", Desc: "Band", StartPos: 12778076, EndPos: 12859086, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34A2 = genome.Band{Band: "34A2", Desc: "Band", StartPos: 12859086, EndPos: 12942602, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34A3 = genome.Band{Band: "34A3", Desc: "Band", StartPos: 12942602, EndPos: 12985594, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34A4 = genome.Band{Band: "34A4", Desc: "Band", StartPos: 12985594, EndPos: 13028587, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34A5 = genome.Band{Band: "34A5", Desc: "Band", StartPos: 13028587, EndPos: 13131522, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34A6 = genome.Band{Band: "34A6", Desc: "Band", StartPos: 13131522, EndPos: 13156534, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34A7 = genome.Band{Band: "34A7", Desc: "Band", StartPos: 13156534, EndPos: 13172747, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34A8 = genome.Band{Band: "34A8", Desc: "Band", StartPos: 13172747, EndPos: 13192701, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34A9 = genome.Band{Band: "34A9", Desc: "Band", StartPos: 13192701, EndPos: 13212655, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34A10 = genome.Band{Band: "34A10", Desc: "Band", StartPos: 13212655, EndPos: 13228868, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34A11 = genome.Band{Band: "34A11", Desc: "Band", StartPos: 13228868, EndPos: 13241340, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34B1 = genome.Band{Band: "34B1", Desc: "Band", StartPos: 13241340, EndPos: 13253032, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34B2 = genome.Band{Band: "34B2", Desc: "Band", StartPos: 13253032, EndPos: 13258574, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34B3 = genome.Band{Band: "34B3", Desc: "Band", StartPos: 13258574, EndPos: 13277618, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34B4 = genome.Band{Band: "34B4", Desc: "Band", StartPos: 13277618, EndPos: 13296662, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34B5 = genome.Band{Band: "34B5", Desc: "Band", StartPos: 13296662, EndPos: 13315705, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34B6 = genome.Band{Band: "34B6", Desc: "Band", StartPos: 13315705, EndPos: 13352007, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34B7 = genome.Band{Band: "34B7", Desc: "Band", StartPos: 13352007, EndPos: 13368962, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34B8 = genome.Band{Band: "34B8", Desc: "Band", StartPos: 13368962, EndPos: 13376897, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34B9 = genome.Band{Band: "34B9", Desc: "Band", StartPos: 13376897, EndPos: 13393105, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34B10 = genome.Band{Band: "34B10", Desc: "Band", StartPos: 13393105, EndPos: 13410173, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34B11 = genome.Band{Band: "34B11", Desc: "Band", StartPos: 13410173, EndPos: 13426175, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34B12 = genome.Band{Band: "34B12", Desc: "Band", StartPos: 13426175, EndPos: 13428842, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34C1 = genome.Band{Band: "34C1", Desc: "Band", StartPos: 13428842, EndPos: 13461378, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34C2 = genome.Band{Band: "34C2", Desc: "Band", StartPos: 13461378, EndPos: 13493915, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34C3 = genome.Band{Band: "34C3", Desc: "Band", StartPos: 13493915, EndPos: 13516104, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34C4 = genome.Band{Band: "34C4", Desc: "Band", StartPos: 13516104, EndPos: 13568162, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34C5 = genome.Band{Band: "34C5", Desc: "Band", StartPos: 13568162, EndPos: 13629299, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34C6 = genome.Band{Band: "34C6", Desc: "Band", StartPos: 13629299, EndPos: 13685223, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34C7 = genome.Band{Band: "34C7", Desc: "Band", StartPos: 13685223, EndPos: 13702162, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34D1 = genome.Band{Band: "34D1", Desc: "Band", StartPos: 13702162, EndPos: 13833369, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34D2 = genome.Band{Band: "34D2", Desc: "Band", StartPos: 13833369, EndPos: 13833379, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34D3 = genome.Band{Band: "34D3", Desc: "Band", StartPos: 13833379, EndPos: 13833389, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34D4 = genome.Band{Band: "34D4", Desc: "Band", StartPos: 13833389, EndPos: 13833399, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34D5 = genome.Band{Band: "34D5", Desc: "Band", StartPos: 13833399, EndPos: 13833409, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34D6 = genome.Band{Band: "34D6", Desc: "Band", StartPos: 13833409, EndPos: 13840769, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34D7 = genome.Band{Band: "34D7", Desc: "Band", StartPos: 13840769, EndPos: 13848431, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34D8 = genome.Band{Band: "34D8", Desc: "Band", StartPos: 13848431, EndPos: 13858651, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34E1 = genome.Band{Band: "34E1", Desc: "Band", StartPos: 13858651, EndPos: 13886483, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34E2 = genome.Band{Band: "34E2", Desc: "Band", StartPos: 13886483, EndPos: 13914315, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34E3 = genome.Band{Band: "34E3", Desc: "Band", StartPos: 13914315, EndPos: 13920064, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34E4 = genome.Band{Band: "34E4", Desc: "Band", StartPos: 13920064, EndPos: 13952276, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34E5 = genome.Band{Band: "34E5", Desc: "Band", StartPos: 13952276, EndPos: 13984488, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34E6 = genome.Band{Band: "34E6", Desc: "Band", StartPos: 13984488, EndPos: 14003468, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34F1 = genome.Band{Band: "34F1", Desc: "Band", StartPos: 14003468, EndPos: 14031300, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34F2 = genome.Band{Band: "34F2", Desc: "Band", StartPos: 14031300, EndPos: 14059132, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34F3 = genome.Band{Band: "34F3", Desc: "Band", StartPos: 14059132, EndPos: 14082493, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34F4 = genome.Band{Band: "34F4", Desc: "Band", StartPos: 14082493, EndPos: 14110325, Giemsa: "n/a", Chr: &Chr2L} Chr2L_34F5 = genome.Band{Band: "34F5", Desc: "Band", StartPos: 14110325, EndPos: 14129305, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35A1 = genome.Band{Band: "35A1", Desc: "Band", StartPos: 14129305, EndPos: 14191448, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35A2 = genome.Band{Band: "35A2", Desc: "Band", StartPos: 14191448, EndPos: 14260776, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35A3 = genome.Band{Band: "35A3", Desc: "Band", StartPos: 14260776, EndPos: 14319262, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35A4 = genome.Band{Band: "35A4", Desc: "Band", StartPos: 14319262, EndPos: 14364252, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35B1 = genome.Band{Band: "35B1", Desc: "Band", StartPos: 14364252, EndPos: 14463510, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35B2 = genome.Band{Band: "35B2", Desc: "Band", StartPos: 14463510, EndPos: 14562769, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35B3 = genome.Band{Band: "35B3", Desc: "Band", StartPos: 14562769, EndPos: 14648531, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35B4 = genome.Band{Band: "35B4", Desc: "Band", StartPos: 14648531, EndPos: 14728138, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35B5 = genome.Band{Band: "35B5", Desc: "Band", StartPos: 14728138, EndPos: 14784679, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35B6 = genome.Band{Band: "35B6", Desc: "Band", StartPos: 14784679, EndPos: 14880636, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35B7 = genome.Band{Band: "35B7", Desc: "Band", StartPos: 14880636, EndPos: 14976593, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35B8 = genome.Band{Band: "35B8", Desc: "Band", StartPos: 14976593, EndPos: 15046182, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35B9 = genome.Band{Band: "35B9", Desc: "Band", StartPos: 15046182, EndPos: 15058675, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35B10 = genome.Band{Band: "35B10", Desc: "Band", StartPos: 15058675, EndPos: 15063839, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35C1 = genome.Band{Band: "35C1", Desc: "Band", StartPos: 15063839, EndPos: 15092774, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35C2 = genome.Band{Band: "35C2", Desc: "Band", StartPos: 15092774, EndPos: 15152068, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35C3 = genome.Band{Band: "35C3", Desc: "Band", StartPos: 15152068, EndPos: 15214582, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35C4 = genome.Band{Band: "35C4", Desc: "Band", StartPos: 15214582, EndPos: 15242917, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35C5 = genome.Band{Band: "35C5", Desc: "Band", StartPos: 15242917, EndPos: 15271253, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35D1 = genome.Band{Band: "35D1", Desc: "Band", StartPos: 15271253, EndPos: 15333767, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35D2 = genome.Band{Band: "35D2", Desc: "Band", StartPos: 15333767, EndPos: 15515146, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35D3 = genome.Band{Band: "35D3", Desc: "Band", StartPos: 15515146, EndPos: 15721189, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35D4 = genome.Band{Band: "35D4", Desc: "Band", StartPos: 15721189, EndPos: 15853531, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35D5 = genome.Band{Band: "35D5", Desc: "Band", StartPos: 15853531, EndPos: 15880296, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35D6 = genome.Band{Band: "35D6", Desc: "Band", StartPos: 15880296, EndPos: 15930004, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35D7 = genome.Band{Band: "35D7", Desc: "Band", StartPos: 15930004, EndPos: 15968241, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35E1 = genome.Band{Band: "35E1", Desc: "Band", StartPos: 15968241, EndPos: 16041130, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35E2 = genome.Band{Band: "35E2", Desc: "Band", StartPos: 16041130, EndPos: 16125490, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35E3 = genome.Band{Band: "35E3", Desc: "Band", StartPos: 16125490, EndPos: 16140546, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35E4 = genome.Band{Band: "35E4", Desc: "Band", StartPos: 16140546, EndPos: 16155602, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35E5 = genome.Band{Band: "35E5", Desc: "Band", StartPos: 16155602, EndPos: 16182368, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35E6 = genome.Band{Band: "35E6", Desc: "Band", StartPos: 16182368, EndPos: 16209133, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35F1 = genome.Band{Band: "35F1", Desc: "Band", StartPos: 16209133, EndPos: 16348698, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35F2 = genome.Band{Band: "35F2", Desc: "Band", StartPos: 16348698, EndPos: 16348708, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35F3 = genome.Band{Band: "35F3", Desc: "Band", StartPos: 16348708, EndPos: 16348718, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35F4 = genome.Band{Band: "35F4", Desc: "Band", StartPos: 16348718, EndPos: 16348728, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35F5 = genome.Band{Band: "35F5", Desc: "Band", StartPos: 16348728, EndPos: 16348738, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35F6 = genome.Band{Band: "35F6", Desc: "Band", StartPos: 16348738, EndPos: 16348748, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35F7 = genome.Band{Band: "35F7", Desc: "Band", StartPos: 16348748, EndPos: 16348758, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35F8 = genome.Band{Band: "35F8", Desc: "Band", StartPos: 16348758, EndPos: 16348768, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35F9 = genome.Band{Band: "35F9", Desc: "Band", StartPos: 16348768, EndPos: 16348778, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35F10 = genome.Band{Band: "35F10", Desc: "Band", StartPos: 16348778, EndPos: 16348788, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35F11 = genome.Band{Band: "35F11", Desc: "Band", StartPos: 16348788, EndPos: 16348798, Giemsa: "n/a", Chr: &Chr2L} Chr2L_35F12 = genome.Band{Band: "35F12", Desc: "Band", StartPos: 16348798, EndPos: 16411601, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A1 = genome.Band{Band: "36A1", Desc: "Band", StartPos: 16411601, EndPos: 16485982, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A2 = genome.Band{Band: "36A2", Desc: "Band", StartPos: 16485982, EndPos: 16516883, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A3 = genome.Band{Band: "36A3", Desc: "Band", StartPos: 16516883, EndPos: 16537956, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A4 = genome.Band{Band: "36A4", Desc: "Band", StartPos: 16537956, EndPos: 16554167, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A5 = genome.Band{Band: "36A5", Desc: "Band", StartPos: 16554167, EndPos: 16570377, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A6 = genome.Band{Band: "36A6", Desc: "Band", StartPos: 16570377, EndPos: 16606141, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A7 = genome.Band{Band: "36A7", Desc: "Band", StartPos: 16606141, EndPos: 16637042, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A8 = genome.Band{Band: "36A8", Desc: "Band", StartPos: 16637042, EndPos: 16658116, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A9 = genome.Band{Band: "36A9", Desc: "Band", StartPos: 16658116, EndPos: 16669463, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A10 = genome.Band{Band: "36A10", Desc: "Band", StartPos: 16669463, EndPos: 16700364, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A11 = genome.Band{Band: "36A11", Desc: "Band", StartPos: 16700364, EndPos: 16720500, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A12 = genome.Band{Band: "36A12", Desc: "Band", StartPos: 16720500, EndPos: 16734233, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A13 = genome.Band{Band: "36A13", Desc: "Band", StartPos: 16734233, EndPos: 16741627, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36A14 = genome.Band{Band: "36A14", Desc: "Band", StartPos: 16741627, EndPos: 16765029, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36B1 = genome.Band{Band: "36B1", Desc: "Band", StartPos: 16765029, EndPos: 16824975, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36B2 = genome.Band{Band: "36B2", Desc: "Band", StartPos: 16824975, EndPos: 16867932, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36B3 = genome.Band{Band: "36B3", Desc: "Band", StartPos: 16867932, EndPos: 16894285, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36B4 = genome.Band{Band: "36B4", Desc: "Band", StartPos: 16894285, EndPos: 16943227, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36B5 = genome.Band{Band: "36B5", Desc: "Band", StartPos: 16943227, EndPos: 16980874, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36B6 = genome.Band{Band: "36B6", Desc: "Band", StartPos: 16980874, EndPos: 17050286, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36B7 = genome.Band{Band: "36B7", Desc: "Band", StartPos: 17050286, EndPos: 17056168, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36B8 = genome.Band{Band: "36B8", Desc: "Band", StartPos: 17056168, EndPos: 17093815, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36C1 = genome.Band{Band: "36C1", Desc: "Band", StartPos: 17093815, EndPos: 17154051, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36C2 = genome.Band{Band: "36C2", Desc: "Band", StartPos: 17154051, EndPos: 17214286, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36C3 = genome.Band{Band: "36C3", Desc: "Band", StartPos: 17214286, EndPos: 17240639, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36C4 = genome.Band{Band: "36C4", Desc: "Band", StartPos: 17240639, EndPos: 17278287, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36C5 = genome.Band{Band: "36C5", Desc: "Band", StartPos: 17278287, EndPos: 17315934, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36C6 = genome.Band{Band: "36C6", Desc: "Band", StartPos: 17315934, EndPos: 17364875, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36C7 = genome.Band{Band: "36C7", Desc: "Band", StartPos: 17364875, EndPos: 17413816, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36C8 = genome.Band{Band: "36C8", Desc: "Band", StartPos: 17413816, EndPos: 17440169, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36C9 = genome.Band{Band: "36C9", Desc: "Band", StartPos: 17440169, EndPos: 17477817, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36C10 = genome.Band{Band: "36C10", Desc: "Band", StartPos: 17477817, EndPos: 17526758, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36C11 = genome.Band{Band: "36C11", Desc: "Band", StartPos: 17526758, EndPos: 17552485, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36D1 = genome.Band{Band: "36D1", Desc: "Band", StartPos: 17552485, EndPos: 17649720, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36D2 = genome.Band{Band: "36D2", Desc: "Band", StartPos: 17649720, EndPos: 17746956, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36D3 = genome.Band{Band: "36D3", Desc: "Band", StartPos: 17746956, EndPos: 17817472, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36E1 = genome.Band{Band: "36E1", Desc: "Band", StartPos: 17817472, EndPos: 17901486, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36E2 = genome.Band{Band: "36E2", Desc: "Band", StartPos: 17901486, EndPos: 17958780, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36E3 = genome.Band{Band: "36E3", Desc: "Band", StartPos: 17958780, EndPos: 18093202, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36E4 = genome.Band{Band: "36E4", Desc: "Band", StartPos: 18093202, EndPos: 18100088, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36E5 = genome.Band{Band: "36E5", Desc: "Band", StartPos: 18100088, EndPos: 18130939, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36E6 = genome.Band{Band: "36E6", Desc: "Band", StartPos: 18130939, EndPos: 18188234, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36F1 = genome.Band{Band: "36F1", Desc: "Band", StartPos: 18188234, EndPos: 18258750, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36F2 = genome.Band{Band: "36F2", Desc: "Band", StartPos: 18258750, EndPos: 18329266, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36F3 = genome.Band{Band: "36F3", Desc: "Band", StartPos: 18329266, EndPos: 18386561, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36F4 = genome.Band{Band: "36F4", Desc: "Band", StartPos: 18386561, EndPos: 18443855, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36F5 = genome.Band{Band: "36F5", Desc: "Band", StartPos: 18443855, EndPos: 18501150, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36F6 = genome.Band{Band: "36F6", Desc: "Band", StartPos: 18501150, EndPos: 18598385, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36F7 = genome.Band{Band: "36F7", Desc: "Band", StartPos: 18598385, EndPos: 18643592, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36F8 = genome.Band{Band: "36F8", Desc: "Band", StartPos: 18643592, EndPos: 18655059, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36F9 = genome.Band{Band: "36F9", Desc: "Band", StartPos: 18655059, EndPos: 18666525, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36F10 = genome.Band{Band: "36F10", Desc: "Band", StartPos: 18666525, EndPos: 18677991, Giemsa: "n/a", Chr: &Chr2L} Chr2L_36F11 = genome.Band{Band: "36F11", Desc: "Band", StartPos: 18677991, EndPos: 18684441, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37A1 = genome.Band{Band: "37A1", Desc: "Band", StartPos: 18684441, EndPos: 18725494, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37A2 = genome.Band{Band: "37A2", Desc: "Band", StartPos: 18725494, EndPos: 18766548, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37A3 = genome.Band{Band: "37A3", Desc: "Band", StartPos: 18766548, EndPos: 18782928, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37A4 = genome.Band{Band: "37A4", Desc: "Band", StartPos: 18782928, EndPos: 18813129, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37A5 = genome.Band{Band: "37A5", Desc: "Band", StartPos: 18813129, EndPos: 18815689, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37A6 = genome.Band{Band: "37A6", Desc: "Band", StartPos: 18815689, EndPos: 18822138, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B1 = genome.Band{Band: "37B1", Desc: "Band", StartPos: 18822138, EndPos: 18881927, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B2 = genome.Band{Band: "37B2", Desc: "Band", StartPos: 18881927, EndPos: 18884486, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B3 = genome.Band{Band: "37B3", Desc: "Band", StartPos: 18884486, EndPos: 18905781, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B4 = genome.Band{Band: "37B4", Desc: "Band", StartPos: 18905781, EndPos: 18912231, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B5 = genome.Band{Band: "37B5", Desc: "Band", StartPos: 18912231, EndPos: 18928611, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B6 = genome.Band{Band: "37B6", Desc: "Band", StartPos: 18928611, EndPos: 18949905, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B7 = genome.Band{Band: "37B7", Desc: "Band", StartPos: 18949905, EndPos: 18971200, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B8 = genome.Band{Band: "37B8", Desc: "Band", StartPos: 18971200, EndPos: 18997409, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B9 = genome.Band{Band: "37B9", Desc: "Band", StartPos: 18997409, EndPos: 19028634, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B10 = genome.Band{Band: "37B10", Desc: "Band", StartPos: 19028634, EndPos: 19035083, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B11 = genome.Band{Band: "37B11", Desc: "Band", StartPos: 19035083, EndPos: 19046550, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B12 = genome.Band{Band: "37B12", Desc: "Band", StartPos: 19046550, EndPos: 19061933, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37B13 = genome.Band{Band: "37B13", Desc: "Band", StartPos: 19061933, EndPos: 19085148, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37C1 = genome.Band{Band: "37C1", Desc: "Band", StartPos: 19085148, EndPos: 19150331, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37C2 = genome.Band{Band: "37C2", Desc: "Band", StartPos: 19150331, EndPos: 19150341, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37C3 = genome.Band{Band: "37C3", Desc: "Band", StartPos: 19150341, EndPos: 19150351, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37C4 = genome.Band{Band: "37C4", Desc: "Band", StartPos: 19150351, EndPos: 19156532, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37C5 = genome.Band{Band: "37C5", Desc: "Band", StartPos: 19156532, EndPos: 19168098, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37C6 = genome.Band{Band: "37C6", Desc: "Band", StartPos: 19168098, EndPos: 19182334, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37C7 = genome.Band{Band: "37C7", Desc: "Band", StartPos: 19182334, EndPos: 19217604, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37D1 = genome.Band{Band: "37D1", Desc: "Band", StartPos: 19217604, EndPos: 19292950, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37D2 = genome.Band{Band: "37D2", Desc: "Band", StartPos: 19292950, EndPos: 19368297, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37D3 = genome.Band{Band: "37D3", Desc: "Band", StartPos: 19368297, EndPos: 19386227, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37D4 = genome.Band{Band: "37D4", Desc: "Band", StartPos: 19386227, EndPos: 19397438, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37D5 = genome.Band{Band: "37D5", Desc: "Band", StartPos: 19397438, EndPos: 19405286, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37D6 = genome.Band{Band: "37D6", Desc: "Band", StartPos: 19405286, EndPos: 19419860, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37D7 = genome.Band{Band: "37D7", Desc: "Band", StartPos: 19419860, EndPos: 19427708, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37E1 = genome.Band{Band: "37E1", Desc: "Band", StartPos: 19427708, EndPos: 19461902, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37E2 = genome.Band{Band: "37E2", Desc: "Band", StartPos: 19461902, EndPos: 19463654, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37E3 = genome.Band{Band: "37E3", Desc: "Band", StartPos: 19463654, EndPos: 19485025, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37E4 = genome.Band{Band: "37E4", Desc: "Band", StartPos: 19485025, EndPos: 19506396, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37E5 = genome.Band{Band: "37E5", Desc: "Band", StartPos: 19506396, EndPos: 19531130, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37F1 = genome.Band{Band: "37F1", Desc: "Band", StartPos: 19531130, EndPos: 19566025, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37F2 = genome.Band{Band: "37F2", Desc: "Band", StartPos: 19566025, EndPos: 19619070, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37F3 = genome.Band{Band: "37F3", Desc: "Band", StartPos: 19619070, EndPos: 19634370, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37F4 = genome.Band{Band: "37F4", Desc: "Band", StartPos: 19634370, EndPos: 19654861, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37F5 = genome.Band{Band: "37F5", Desc: "Band", StartPos: 19654861, EndPos: 19658276, Giemsa: "n/a", Chr: &Chr2L} Chr2L_37F6 = genome.Band{Band: "37F6", Desc: "Band", StartPos: 19658276, EndPos: 19673576, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38A1 = genome.Band{Band: "38A1", Desc: "Band", StartPos: 19673576, EndPos: 19721797, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38A2 = genome.Band{Band: "38A2", Desc: "Band", StartPos: 19721797, EndPos: 19763462, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38A3 = genome.Band{Band: "38A3", Desc: "Band", StartPos: 19763462, EndPos: 19805126, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38A4 = genome.Band{Band: "38A4", Desc: "Band", StartPos: 19805126, EndPos: 19840097, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38A5 = genome.Band{Band: "38A5", Desc: "Band", StartPos: 19840097, EndPos: 19868511, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38A6 = genome.Band{Band: "38A6", Desc: "Band", StartPos: 19868511, EndPos: 19896924, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38A7 = genome.Band{Band: "38A7", Desc: "Band", StartPos: 19896924, EndPos: 19938589, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38A8 = genome.Band{Band: "38A8", Desc: "Band", StartPos: 19938589, EndPos: 20000958, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38B1 = genome.Band{Band: "38B1", Desc: "Band", StartPos: 20000958, EndPos: 20060935, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38B2 = genome.Band{Band: "38B2", Desc: "Band", StartPos: 20060935, EndPos: 20073177, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38B3 = genome.Band{Band: "38B3", Desc: "Band", StartPos: 20073177, EndPos: 20076190, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38B4 = genome.Band{Band: "38B4", Desc: "Band", StartPos: 20076190, EndPos: 20086136, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38B5 = genome.Band{Band: "38B5", Desc: "Band", StartPos: 20086136, EndPos: 20091492, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38B6 = genome.Band{Band: "38B6", Desc: "Band", StartPos: 20091492, EndPos: 20098210, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38C1 = genome.Band{Band: "38C1", Desc: "Band", StartPos: 20098210, EndPos: 20117316, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38C2 = genome.Band{Band: "38C2", Desc: "Band", StartPos: 20117316, EndPos: 20224465, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38C3 = genome.Band{Band: "38C3", Desc: "Band", StartPos: 20224465, EndPos: 20277205, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38C4 = genome.Band{Band: "38C4", Desc: "Band", StartPos: 20277205, EndPos: 20297972, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38C5 = genome.Band{Band: "38C5", Desc: "Band", StartPos: 20297972, EndPos: 20382357, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38C6 = genome.Band{Band: "38C6", Desc: "Band", StartPos: 20382357, EndPos: 20430073, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38C7 = genome.Band{Band: "38C7", Desc: "Band", StartPos: 20430073, EndPos: 20459895, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38C8 = genome.Band{Band: "38C8", Desc: "Band", StartPos: 20459895, EndPos: 20498664, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38C9 = genome.Band{Band: "38C9", Desc: "Band", StartPos: 20498664, EndPos: 20555512, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38C10 = genome.Band{Band: "38C10", Desc: "Band", StartPos: 20555512, EndPos: 20576388, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38D1 = genome.Band{Band: "38D1", Desc: "Band", StartPos: 20576388, EndPos: 20642183, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38D2 = genome.Band{Band: "38D2", Desc: "Band", StartPos: 20642183, EndPos: 20661175, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38D3 = genome.Band{Band: "38D3", Desc: "Band", StartPos: 20661175, EndPos: 20667201, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38D4 = genome.Band{Band: "38D4", Desc: "Band", StartPos: 20667201, EndPos: 20678392, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38D5 = genome.Band{Band: "38D5", Desc: "Band", StartPos: 20678392, EndPos: 20687000, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38E1 = genome.Band{Band: "38E1", Desc: "Band", StartPos: 20687000, EndPos: 20705454, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38E2 = genome.Band{Band: "38E2", Desc: "Band", StartPos: 20705454, EndPos: 20706799, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38E3 = genome.Band{Band: "38E3", Desc: "Band", StartPos: 20706799, EndPos: 20723209, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38E4 = genome.Band{Band: "38E4", Desc: "Band", StartPos: 20723209, EndPos: 20731817, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38E5 = genome.Band{Band: "38E5", Desc: "Band", StartPos: 20731817, EndPos: 20740426, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38E6 = genome.Band{Band: "38E6", Desc: "Band", StartPos: 20740426, EndPos: 20754199, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38E7 = genome.Band{Band: "38E7", Desc: "Band", StartPos: 20754199, EndPos: 20762807, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38E8 = genome.Band{Band: "38E8", Desc: "Band", StartPos: 20762807, EndPos: 20768833, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38E9 = genome.Band{Band: "38E9", Desc: "Band", StartPos: 20768833, EndPos: 20780024, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38E10 = genome.Band{Band: "38E10", Desc: "Band", StartPos: 20780024, EndPos: 20812419, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38F1 = genome.Band{Band: "38F1", Desc: "Band", StartPos: 20812419, EndPos: 20837566, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38F2 = genome.Band{Band: "38F2", Desc: "Band", StartPos: 20837566, EndPos: 20852971, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38F3 = genome.Band{Band: "38F3", Desc: "Band", StartPos: 20852971, EndPos: 20881654, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38F4 = genome.Band{Band: "38F4", Desc: "Band", StartPos: 20881654, EndPos: 20910336, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38F5 = genome.Band{Band: "38F5", Desc: "Band", StartPos: 20910336, EndPos: 20922885, Giemsa: "n/a", Chr: &Chr2L} Chr2L_38F6 = genome.Band{Band: "38F6", Desc: "Band", StartPos: 20922885, EndPos: 20966124, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39A1 = genome.Band{Band: "39A1", Desc: "Band", StartPos: 20966124, EndPos: 21102403, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39A2 = genome.Band{Band: "39A2", Desc: "Band", StartPos: 21102403, EndPos: 21122174, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39A3 = genome.Band{Band: "39A3", Desc: "Band", StartPos: 21122174, EndPos: 21136513, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39A4 = genome.Band{Band: "39A4", Desc: "Band", StartPos: 21136513, EndPos: 21148163, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39A5 = genome.Band{Band: "39A5", Desc: "Band", StartPos: 21148163, EndPos: 21154436, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39A6 = genome.Band{Band: "39A6", Desc: "Band", StartPos: 21154436, EndPos: 21160709, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39A7 = genome.Band{Band: "39A7", Desc: "Band", StartPos: 21160709, EndPos: 21175048, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39B1 = genome.Band{Band: "39B1", Desc: "Band", StartPos: 21175048, EndPos: 21202380, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39B2 = genome.Band{Band: "39B2", Desc: "Band", StartPos: 21202380, EndPos: 21209793, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39B3 = genome.Band{Band: "39B3", Desc: "Band", StartPos: 21209793, EndPos: 21234025, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39B4 = genome.Band{Band: "39B4", Desc: "Band", StartPos: 21234025, EndPos: 21254364, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39C1 = genome.Band{Band: "39C1", Desc: "Band", StartPos: 21254364, EndPos: 21300763, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39C2 = genome.Band{Band: "39C2", Desc: "Band", StartPos: 21300763, EndPos: 21314164, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39C3 = genome.Band{Band: "39C3", Desc: "Band", StartPos: 21314164, EndPos: 21321531, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39C4 = genome.Band{Band: "39C4", Desc: "Band", StartPos: 21321531, EndPos: 21328898, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39D1 = genome.Band{Band: "39D1", Desc: "Band", StartPos: 21328898, EndPos: 21364563, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39D2 = genome.Band{Band: "39D2", Desc: "Band", StartPos: 21364563, EndPos: 21400229, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39D3 = genome.Band{Band: "39D3", Desc: "Band", StartPos: 21400229, EndPos: 21447120, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39D4 = genome.Band{Band: "39D4", Desc: "Band", StartPos: 21447120, EndPos: 21471443, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39D5 = genome.Band{Band: "39D5", Desc: "Band", StartPos: 21471443, EndPos: 21512721, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39E1 = genome.Band{Band: "39E1", Desc: "Band", StartPos: 21512721, EndPos: 21548387, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39E2 = genome.Band{Band: "39E2", Desc: "Band", StartPos: 21548387, EndPos: 21592349, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39E3 = genome.Band{Band: "39E3", Desc: "Band", StartPos: 21592349, EndPos: 21662689, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39E4 = genome.Band{Band: "39E4", Desc: "Band", StartPos: 21662689, EndPos: 21662699, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39E5 = genome.Band{Band: "39E5", Desc: "Band", StartPos: 21662699, EndPos: 21662709, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39E6 = genome.Band{Band: "39E6", Desc: "Band", StartPos: 21662709, EndPos: 21670401, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39E7 = genome.Band{Band: "39E7", Desc: "Band", StartPos: 21670401, EndPos: 21684084, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39F1 = genome.Band{Band: "39F1", Desc: "Band", StartPos: 21684084, EndPos: 21716185, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39F2 = genome.Band{Band: "39F2", Desc: "Band", StartPos: 21716185, EndPos: 21717830, Giemsa: "n/a", Chr: &Chr2L} Chr2L_39F3 = genome.Band{Band: "39F3", Desc: "Band", StartPos: 21717830, EndPos: 21731512, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40A1 = genome.Band{Band: "40A1", Desc: "Band", StartPos: 21731512, EndPos: 21754733, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40A2 = genome.Band{Band: "40A2", Desc: "Band", StartPos: 21754733, EndPos: 21777954, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40A3 = genome.Band{Band: "40A3", Desc: "Band", StartPos: 21777954, EndPos: 21804332, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40A4 = genome.Band{Band: "40A4", Desc: "Band", StartPos: 21804332, EndPos: 21824395, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40A5 = genome.Band{Band: "40A5", Desc: "Band", StartPos: 21824395, EndPos: 21838078, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40A6 = genome.Band{Band: "40A6", Desc: "Band", StartPos: 21838078, EndPos: 21858141, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40B1 = genome.Band{Band: "40B1", Desc: "Band", StartPos: 21858141, EndPos: 21871823, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40B2 = genome.Band{Band: "40B2", Desc: "Band", StartPos: 21871823, EndPos: 21885506, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40B3 = genome.Band{Band: "40B3", Desc: "Band", StartPos: 21885506, EndPos: 21902346, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40B4 = genome.Band{Band: "40B4", Desc: "Band", StartPos: 21902346, EndPos: 21919186, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40B5 = genome.Band{Band: "40B5", Desc: "Band", StartPos: 21919186, EndPos: 21929711, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40C1 = genome.Band{Band: "40C1", Desc: "Band", StartPos: 21929711, EndPos: 21946551, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40C2 = genome.Band{Band: "40C2", Desc: "Band", StartPos: 21946551, EndPos: 21963391, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40C3 = genome.Band{Band: "40C3", Desc: "Band", StartPos: 21963391, EndPos: 21973916, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40D1 = genome.Band{Band: "40D1", Desc: "Band", StartPos: 21973916, EndPos: 21991348, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40D2 = genome.Band{Band: "40D2", Desc: "Band", StartPos: 21991348, EndPos: 22008780, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40D3 = genome.Band{Band: "40D3", Desc: "Band", StartPos: 22008780, EndPos: 22026212, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40D4 = genome.Band{Band: "40D4", Desc: "Band", StartPos: 22026212, EndPos: 22043644, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40D5 = genome.Band{Band: "40D5", Desc: "Band", StartPos: 22043644, EndPos: 22061076, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40E1 = genome.Band{Band: "40E1", Desc: "Band", StartPos: 22061076, EndPos: 22078508, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40E2 = genome.Band{Band: "40E2", Desc: "Band", StartPos: 22078508, EndPos: 22095940, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40E3 = genome.Band{Band: "40E3", Desc: "Band", StartPos: 22095940, EndPos: 22113372, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40E4 = genome.Band{Band: "40E4", Desc: "Band", StartPos: 22113372, EndPos: 22130804, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40E5 = genome.Band{Band: "40E5", Desc: "Band", StartPos: 22130804, EndPos: 22148236, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40F1 = genome.Band{Band: "40F1", Desc: "Band", StartPos: 22148236, EndPos: 22165668, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40F2 = genome.Band{Band: "40F2", Desc: "Band", StartPos: 22165668, EndPos: 22183100, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40F3 = genome.Band{Band: "40F3", Desc: "Band", StartPos: 22183100, EndPos: 22200532, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40F4 = genome.Band{Band: "40F4", Desc: "Band", StartPos: 22200532, EndPos: 22217964, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40F5 = genome.Band{Band: "40F5", Desc: "Band", StartPos: 22217964, EndPos: 22235396, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40F6 = genome.Band{Band: "40F6", Desc: "Band", StartPos: 22235396, EndPos: 22252828, Giemsa: "n/a", Chr: &Chr2L} Chr2L_40F7 = genome.Band{Band: "40F7", Desc: "Band", StartPos: 22252828, EndPos: 22570260, Giemsa: "n/a", Chr: &Chr2L} Chr2R_41A1 = genome.Band{Band: "41A1", Desc: "Band", StartPos: 348419, EndPos: 388082, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41A2 = genome.Band{Band: "41A2", Desc: "Band", StartPos: 388082, EndPos: 428900, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41A3 = genome.Band{Band: "41A3", Desc: "Band", StartPos: 428900, EndPos: 469718, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41B1 = genome.Band{Band: "41B1", Desc: "Band", StartPos: 469718, EndPos: 510536, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41B2 = genome.Band{Band: "41B2", Desc: "Band", StartPos: 510536, EndPos: 551353, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41B3 = genome.Band{Band: "41B3", Desc: "Band", StartPos: 551353, EndPos: 592171, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41C1 = genome.Band{Band: "41C1", Desc: "Band", StartPos: 592171, EndPos: 653937, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41C2 = genome.Band{Band: "41C2", Desc: "Band", StartPos: 653937, EndPos: 715703, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41C3 = genome.Band{Band: "41C3", Desc: "Band", StartPos: 715703, EndPos: 740348, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41C4 = genome.Band{Band: "41C4", Desc: "Band", StartPos: 740348, EndPos: 772386, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41C5 = genome.Band{Band: "41C5", Desc: "Band", StartPos: 772386, EndPos: 826759, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41C6 = genome.Band{Band: "41C6", Desc: "Band", StartPos: 826759, EndPos: 886985, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41C7 = genome.Band{Band: "41C7", Desc: "Band", StartPos: 886985, EndPos: 890835, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41D1 = genome.Band{Band: "41D1", Desc: "Band", StartPos: 890835, EndPos: 966002, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41D2 = genome.Band{Band: "41D2", Desc: "Band", StartPos: 966002, EndPos: 969853, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41D3 = genome.Band{Band: "41D3", Desc: "Band", StartPos: 969853, EndPos: 1016832, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41D4 = genome.Band{Band: "41D4", Desc: "Band", StartPos: 1016832, EndPos: 1034083, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41E1 = genome.Band{Band: "41E1", Desc: "Band", StartPos: 1034083, EndPos: 1124036, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41E2 = genome.Band{Band: "41E2", Desc: "Band", StartPos: 1124036, EndPos: 1127887, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41E3 = genome.Band{Band: "41E3", Desc: "Band", StartPos: 1127887, EndPos: 1174866, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41E4 = genome.Band{Band: "41E4", Desc: "Band", StartPos: 1174866, EndPos: 1199511, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41E5 = genome.Band{Band: "41E5", Desc: "Band", StartPos: 1199511, EndPos: 1253884, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41E6 = genome.Band{Band: "41E6", Desc: "Band", StartPos: 1253884, EndPos: 1293315, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41F1 = genome.Band{Band: "41F1", Desc: "Band", StartPos: 1293315, EndPos: 1347688, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41F2 = genome.Band{Band: "41F2", Desc: "Band", StartPos: 1347688, EndPos: 1394667, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41F3 = genome.Band{Band: "41F3", Desc: "Band", StartPos: 1394667, EndPos: 1456433, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41F4 = genome.Band{Band: "41F4", Desc: "Band", StartPos: 1456433, EndPos: 1488471, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41F5 = genome.Band{Band: "41F5", Desc: "Band", StartPos: 1488471, EndPos: 1520509, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41F6 = genome.Band{Band: "41F6", Desc: "Band", StartPos: 1520509, EndPos: 1567488, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41F7 = genome.Band{Band: "41F7", Desc: "Band", StartPos: 1567488, EndPos: 1577192, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41F8 = genome.Band{Band: "41F8", Desc: "Band", StartPos: 1577192, EndPos: 1616624, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41F9 = genome.Band{Band: "41F9", Desc: "Band", StartPos: 1616624, EndPos: 1656056, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41F10 = genome.Band{Band: "41F10", Desc: "Band", StartPos: 1656056, EndPos: 1665760, Giemsa: "n/a", Chr: &Chr2R} Chr2R_41F11 = genome.Band{Band: "41F11", Desc: "Band", StartPos: 1665760, EndPos: 1690404, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A1 = genome.Band{Band: "42A1", Desc: "Band", StartPos: 1690404, EndPos: 1752170, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A2 = genome.Band{Band: "42A2", Desc: "Band", StartPos: 1752170, EndPos: 1804021, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A3 = genome.Band{Band: "42A3", Desc: "Band", StartPos: 1804021, EndPos: 1816712, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A4 = genome.Band{Band: "42A4", Desc: "Band", StartPos: 1816712, EndPos: 1855575, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A5 = genome.Band{Band: "42A5", Desc: "Band", StartPos: 1855575, EndPos: 1858408, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A6 = genome.Band{Band: "42A6", Desc: "Band", StartPos: 1858408, EndPos: 1876536, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A7 = genome.Band{Band: "42A7", Desc: "Band", StartPos: 1876536, EndPos: 1905542, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A8 = genome.Band{Band: "42A8", Desc: "Band", StartPos: 1905542, EndPos: 1945539, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A9 = genome.Band{Band: "42A9", Desc: "Band", StartPos: 1945539, EndPos: 1980097, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A10 = genome.Band{Band: "42A10", Desc: "Band", StartPos: 1980097, EndPos: 2009103, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A11 = genome.Band{Band: "42A11", Desc: "Band", StartPos: 2009103, EndPos: 2038109, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A12 = genome.Band{Band: "42A12", Desc: "Band", StartPos: 2038109, EndPos: 2067115, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A13 = genome.Band{Band: "42A13", Desc: "Band", StartPos: 2067115, EndPos: 2111417, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A14 = genome.Band{Band: "42A14", Desc: "Band", StartPos: 2111417, EndPos: 2199592, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A15 = genome.Band{Band: "42A15", Desc: "Band", StartPos: 2199592, EndPos: 2242434, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A16 = genome.Band{Band: "42A16", Desc: "Band", StartPos: 2242434, EndPos: 2303194, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A17 = genome.Band{Band: "42A17", Desc: "Band", StartPos: 2303194, EndPos: 2308344, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A18 = genome.Band{Band: "42A18", Desc: "Band", StartPos: 2308344, EndPos: 2378991, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42A19 = genome.Band{Band: "42A19", Desc: "Band", StartPos: 2378991, EndPos: 2384140, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42B1 = genome.Band{Band: "42B1", Desc: "Band", StartPos: 2384140, EndPos: 2446960, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42B2 = genome.Band{Band: "42B2", Desc: "Band", StartPos: 2446960, EndPos: 2539440, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42B3 = genome.Band{Band: "42B3", Desc: "Band", StartPos: 2539440, EndPos: 2539450, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42B4 = genome.Band{Band: "42B4", Desc: "Band", StartPos: 2539450, EndPos: 2539460, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42B5 = genome.Band{Band: "42B5", Desc: "Band", StartPos: 2539460, EndPos: 2539470, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42C1 = genome.Band{Band: "42C1", Desc: "Band", StartPos: 2539470, EndPos: 2541544, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42C2 = genome.Band{Band: "42C2", Desc: "Band", StartPos: 2541544, EndPos: 2545848, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42C3 = genome.Band{Band: "42C3", Desc: "Band", StartPos: 2545848, EndPos: 2555685, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42C4 = genome.Band{Band: "42C4", Desc: "Band", StartPos: 2555685, EndPos: 2577951, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42C5 = genome.Band{Band: "42C5", Desc: "Band", StartPos: 2577951, EndPos: 2592815, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42C6 = genome.Band{Band: "42C6", Desc: "Band", StartPos: 2592815, EndPos: 2613312, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42C7 = genome.Band{Band: "42C7", Desc: "Band", StartPos: 2613312, EndPos: 2633809, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42C8 = genome.Band{Band: "42C8", Desc: "Band", StartPos: 2633809, EndPos: 2653725, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42C9 = genome.Band{Band: "42C9", Desc: "Band", StartPos: 2653725, EndPos: 2655177, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42C10 = genome.Band{Band: "42C10", Desc: "Band", StartPos: 2655177, EndPos: 2664467, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42D1 = genome.Band{Band: "42D1", Desc: "Band", StartPos: 2664467, EndPos: 2692803, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42D2 = genome.Band{Band: "42D2", Desc: "Band", StartPos: 2692803, EndPos: 2694255, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42D3 = genome.Band{Band: "42D3", Desc: "Band", StartPos: 2694255, EndPos: 2695706, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42D4 = genome.Band{Band: "42D4", Desc: "Band", StartPos: 2695706, EndPos: 2724042, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42D5 = genome.Band{Band: "42D5", Desc: "Band", StartPos: 2724042, EndPos: 2725493, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42D6 = genome.Band{Band: "42D6", Desc: "Band", StartPos: 2725493, EndPos: 2795827, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42E1 = genome.Band{Band: "42E1", Desc: "Band", StartPos: 2795827, EndPos: 2879408, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42E2 = genome.Band{Band: "42E2", Desc: "Band", StartPos: 2879408, EndPos: 2879418, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42E3 = genome.Band{Band: "42E3", Desc: "Band", StartPos: 2879418, EndPos: 2879428, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42E4 = genome.Band{Band: "42E4", Desc: "Band", StartPos: 2879428, EndPos: 2893274, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42E5 = genome.Band{Band: "42E5", Desc: "Band", StartPos: 2893274, EndPos: 2936340, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42E6 = genome.Band{Band: "42E6", Desc: "Band", StartPos: 2936340, EndPos: 2939479, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42E7 = genome.Band{Band: "42E7", Desc: "Band", StartPos: 2939479, EndPos: 2965596, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42F1 = genome.Band{Band: "42F1", Desc: "Band", StartPos: 2965596, EndPos: 2997739, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42F2 = genome.Band{Band: "42F2", Desc: "Band", StartPos: 2997739, EndPos: 3036035, Giemsa: "n/a", Chr: &Chr2R} Chr2R_42F3 = genome.Band{Band: "42F3", Desc: "Band", StartPos: 3036035, EndPos: 3068178, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43A1 = genome.Band{Band: "43A1", Desc: "Band", StartPos: 3068178, EndPos: 3130707, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43A2 = genome.Band{Band: "43A2", Desc: "Band", StartPos: 3130707, EndPos: 3169002, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43A3 = genome.Band{Band: "43A3", Desc: "Band", StartPos: 3169002, EndPos: 3189092, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43A4 = genome.Band{Band: "43A4", Desc: "Band", StartPos: 3189092, EndPos: 3221235, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43B1 = genome.Band{Band: "43B1", Desc: "Band", StartPos: 3221235, EndPos: 3271585, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43B2 = genome.Band{Band: "43B2", Desc: "Band", StartPos: 3271585, EndPos: 3300194, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43B3 = genome.Band{Band: "43B3", Desc: "Band", StartPos: 3300194, EndPos: 3315613, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43C1 = genome.Band{Band: "43C1", Desc: "Band", StartPos: 3315613, EndPos: 3339161, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43C2 = genome.Band{Band: "43C2", Desc: "Band", StartPos: 3339161, EndPos: 3340667, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43C3 = genome.Band{Band: "43C3", Desc: "Band", StartPos: 3340667, EndPos: 3353194, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43C4 = genome.Band{Band: "43C4", Desc: "Band", StartPos: 3353194, EndPos: 3365721, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43C5 = genome.Band{Band: "43C5", Desc: "Band", StartPos: 3365721, EndPos: 3383488, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43C6 = genome.Band{Band: "43C6", Desc: "Band", StartPos: 3383488, EndPos: 3384994, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43C7 = genome.Band{Band: "43C7", Desc: "Band", StartPos: 3384994, EndPos: 3394630, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43D1 = genome.Band{Band: "43D1", Desc: "Band", StartPos: 3394630, EndPos: 3412397, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43D2 = genome.Band{Band: "43D2", Desc: "Band", StartPos: 3412397, EndPos: 3413903, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43D3 = genome.Band{Band: "43D3", Desc: "Band", StartPos: 3413903, EndPos: 3437452, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43D4 = genome.Band{Band: "43D4", Desc: "Band", StartPos: 3437452, EndPos: 3437462, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43D5 = genome.Band{Band: "43D5", Desc: "Band", StartPos: 3437462, EndPos: 3443944, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43D6 = genome.Band{Band: "43D6", Desc: "Band", StartPos: 3443944, EndPos: 3451486, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43D7 = genome.Band{Band: "43D7", Desc: "Band", StartPos: 3451486, EndPos: 3459027, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E1 = genome.Band{Band: "43E1", Desc: "Band", StartPos: 3459027, EndPos: 3472932, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E2 = genome.Band{Band: "43E2", Desc: "Band", StartPos: 3472932, EndPos: 3474111, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E3 = genome.Band{Band: "43E3", Desc: "Band", StartPos: 3474111, EndPos: 3488487, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E4 = genome.Band{Band: "43E4", Desc: "Band", StartPos: 3488487, EndPos: 3505126, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E5 = genome.Band{Band: "43E5", Desc: "Band", StartPos: 3505126, EndPos: 3514930, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E6 = genome.Band{Band: "43E6", Desc: "Band", StartPos: 3514930, EndPos: 3536084, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E7 = genome.Band{Band: "43E7", Desc: "Band", StartPos: 3536084, EndPos: 3545080, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E8 = genome.Band{Band: "43E8", Desc: "Band", StartPos: 3545080, EndPos: 3551378, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E9 = genome.Band{Band: "43E9", Desc: "Band", StartPos: 3551378, EndPos: 3573362, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E10 = genome.Band{Band: "43E10", Desc: "Band", StartPos: 3573362, EndPos: 3574768, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E11 = genome.Band{Band: "43E11", Desc: "Band", StartPos: 3574768, EndPos: 3591917, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E12 = genome.Band{Band: "43E12", Desc: "Band", StartPos: 3591917, EndPos: 3606311, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E13 = genome.Band{Band: "43E13", Desc: "Band", StartPos: 3606311, EndPos: 3635783, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E14 = genome.Band{Band: "43E14", Desc: "Band", StartPos: 3635783, EndPos: 3644234, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E15 = genome.Band{Band: "43E15", Desc: "Band", StartPos: 3644234, EndPos: 3663550, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E16 = genome.Band{Band: "43E16", Desc: "Band", StartPos: 3663550, EndPos: 3679244, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E17 = genome.Band{Band: "43E17", Desc: "Band", StartPos: 3679244, EndPos: 3691316, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43E18 = genome.Band{Band: "43E18", Desc: "Band", StartPos: 3691316, EndPos: 3749018, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43F1 = genome.Band{Band: "43F1", Desc: "Band", StartPos: 3749018, EndPos: 3807533, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43F2 = genome.Band{Band: "43F2", Desc: "Band", StartPos: 3807533, EndPos: 3822701, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43F3 = genome.Band{Band: "43F3", Desc: "Band", StartPos: 3822701, EndPos: 3826297, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43F4 = genome.Band{Band: "43F4", Desc: "Band", StartPos: 3826297, EndPos: 3829893, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43F5 = genome.Band{Band: "43F5", Desc: "Band", StartPos: 3829893, EndPos: 3835030, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43F6 = genome.Band{Band: "43F6", Desc: "Band", StartPos: 3835030, EndPos: 3843249, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43F7 = genome.Band{Band: "43F7", Desc: "Band", StartPos: 3843249, EndPos: 3846845, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43F8 = genome.Band{Band: "43F8", Desc: "Band", StartPos: 3846845, EndPos: 3851982, Giemsa: "n/a", Chr: &Chr2R} Chr2R_43F9 = genome.Band{Band: "43F9", Desc: "Band", StartPos: 3851982, EndPos: 3860202, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44A1 = genome.Band{Band: "44A1", Desc: "Band", StartPos: 3860202, EndPos: 3866880, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44A2 = genome.Band{Band: "44A2", Desc: "Band", StartPos: 3866880, EndPos: 3912516, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44A3 = genome.Band{Band: "44A3", Desc: "Band", StartPos: 3912516, EndPos: 3931763, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44A4 = genome.Band{Band: "44A4", Desc: "Band", StartPos: 3931763, EndPos: 3998955, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44A5 = genome.Band{Band: "44A5", Desc: "Band", StartPos: 3998955, EndPos: 3998965, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44A6 = genome.Band{Band: "44A6", Desc: "Band", StartPos: 3998965, EndPos: 3998975, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44A7 = genome.Band{Band: "44A7", Desc: "Band", StartPos: 3998975, EndPos: 3998985, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44A8 = genome.Band{Band: "44A8", Desc: "Band", StartPos: 3998985, EndPos: 3998995, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44B1 = genome.Band{Band: "44B1", Desc: "Band", StartPos: 3998995, EndPos: 4001089, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44B2 = genome.Band{Band: "44B2", Desc: "Band", StartPos: 4001089, EndPos: 4011227, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44B3 = genome.Band{Band: "44B3", Desc: "Band", StartPos: 4011227, EndPos: 4023305, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44B4 = genome.Band{Band: "44B4", Desc: "Band", StartPos: 4023305, EndPos: 4031542, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44B5 = genome.Band{Band: "44B5", Desc: "Band", StartPos: 4031542, EndPos: 4047026, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44B6 = genome.Band{Band: "44B6", Desc: "Band", StartPos: 4047026, EndPos: 4047312, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44B7 = genome.Band{Band: "44B7", Desc: "Band", StartPos: 4047312, EndPos: 4056583, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44B8 = genome.Band{Band: "44B8", Desc: "Band", StartPos: 4056583, EndPos: 4064115, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44B9 = genome.Band{Band: "44B9", Desc: "Band", StartPos: 4064115, EndPos: 4073386, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44C1 = genome.Band{Band: "44C1", Desc: "Band", StartPos: 4073386, EndPos: 4098048, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44C2 = genome.Band{Band: "44C2", Desc: "Band", StartPos: 4098048, EndPos: 4144988, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44C3 = genome.Band{Band: "44C3", Desc: "Band", StartPos: 4144988, EndPos: 4171648, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44C4 = genome.Band{Band: "44C4", Desc: "Band", StartPos: 4171648, EndPos: 4285118, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44C5 = genome.Band{Band: "44C5", Desc: "Band", StartPos: 4285118, EndPos: 4289284, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44C6 = genome.Band{Band: "44C6", Desc: "Band", StartPos: 4289284, EndPos: 4323941, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44D1 = genome.Band{Band: "44D1", Desc: "Band", StartPos: 4323941, EndPos: 4382759, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44D2 = genome.Band{Band: "44D2", Desc: "Band", StartPos: 4382759, EndPos: 4449575, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44D3 = genome.Band{Band: "44D3", Desc: "Band", StartPos: 4449575, EndPos: 4476235, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44D4 = genome.Band{Band: "44D4", Desc: "Band", StartPos: 4476235, EndPos: 4510892, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44D5 = genome.Band{Band: "44D5", Desc: "Band", StartPos: 4510892, EndPos: 4545550, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44D6 = genome.Band{Band: "44D6", Desc: "Band", StartPos: 4545550, EndPos: 4545560, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44D7 = genome.Band{Band: "44D7", Desc: "Band", StartPos: 4545560, EndPos: 4545570, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44D8 = genome.Band{Band: "44D8", Desc: "Band", StartPos: 4545570, EndPos: 4547749, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44E1 = genome.Band{Band: "44E1", Desc: "Band", StartPos: 4547749, EndPos: 4564095, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44E2 = genome.Band{Band: "44E2", Desc: "Band", StartPos: 4564095, EndPos: 4607174, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44E3 = genome.Band{Band: "44E3", Desc: "Band", StartPos: 4607174, EndPos: 4629370, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44E4 = genome.Band{Band: "44E4", Desc: "Band", StartPos: 4629370, EndPos: 4670591, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44F1 = genome.Band{Band: "44F1", Desc: "Band", StartPos: 4670591, EndPos: 4750061, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44F2 = genome.Band{Band: "44F2", Desc: "Band", StartPos: 4750061, EndPos: 4776755, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44F3 = genome.Band{Band: "44F3", Desc: "Band", StartPos: 4776755, EndPos: 4789935, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44F4 = genome.Band{Band: "44F4", Desc: "Band", StartPos: 4789935, EndPos: 4789945, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44F5 = genome.Band{Band: "44F5", Desc: "Band", StartPos: 4789945, EndPos: 4795266, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44F6 = genome.Band{Band: "44F6", Desc: "Band", StartPos: 4795266, EndPos: 4803204, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44F7 = genome.Band{Band: "44F7", Desc: "Band", StartPos: 4803204, EndPos: 4811142, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44F8 = genome.Band{Band: "44F8", Desc: "Band", StartPos: 4811142, EndPos: 4816699, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44F9 = genome.Band{Band: "44F9", Desc: "Band", StartPos: 4816699, EndPos: 4833716, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44F10 = genome.Band{Band: "44F10", Desc: "Band", StartPos: 4833716, EndPos: 4834956, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44F11 = genome.Band{Band: "44F11", Desc: "Band", StartPos: 4834956, EndPos: 4840513, Giemsa: "n/a", Chr: &Chr2R} Chr2R_44F12 = genome.Band{Band: "44F12", Desc: "Band", StartPos: 4840513, EndPos: 4872992, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A1 = genome.Band{Band: "45A1", Desc: "Band", StartPos: 4872992, EndPos: 4975359, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A2 = genome.Band{Band: "45A2", Desc: "Band", StartPos: 4975359, EndPos: 4983242, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A3 = genome.Band{Band: "45A3", Desc: "Band", StartPos: 4983242, EndPos: 4987887, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A4 = genome.Band{Band: "45A4", Desc: "Band", StartPos: 4987887, EndPos: 4993381, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A5 = genome.Band{Band: "45A5", Desc: "Band", StartPos: 4993381, EndPos: 4993940, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A6 = genome.Band{Band: "45A6", Desc: "Band", StartPos: 4993940, EndPos: 4995346, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A7 = genome.Band{Band: "45A7", Desc: "Band", StartPos: 4995346, EndPos: 5000840, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A8 = genome.Band{Band: "45A8", Desc: "Band", StartPos: 5000840, EndPos: 5007898, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A9 = genome.Band{Band: "45A9", Desc: "Band", StartPos: 5007898, EndPos: 5012805, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A10 = genome.Band{Band: "45A10", Desc: "Band", StartPos: 5012805, EndPos: 5019816, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A11 = genome.Band{Band: "45A11", Desc: "Band", StartPos: 5019816, EndPos: 5028930, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A12 = genome.Band{Band: "45A12", Desc: "Band", StartPos: 5028930, EndPos: 5033838, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45A13 = genome.Band{Band: "45A13", Desc: "Band", StartPos: 5033838, EndPos: 5040849, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45B1 = genome.Band{Band: "45B1", Desc: "Band", StartPos: 5040849, EndPos: 5062232, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45B2 = genome.Band{Band: "45B2", Desc: "Band", StartPos: 5062232, EndPos: 5072146, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45B3 = genome.Band{Band: "45B3", Desc: "Band", StartPos: 5072146, EndPos: 5092165, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45B4 = genome.Band{Band: "45B4", Desc: "Band", StartPos: 5092165, EndPos: 5100923, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45B5 = genome.Band{Band: "45B5", Desc: "Band", StartPos: 5100923, EndPos: 5105850, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45B6 = genome.Band{Band: "45B6", Desc: "Band", StartPos: 5105850, EndPos: 5114608, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45B7 = genome.Band{Band: "45B7", Desc: "Band", StartPos: 5114608, EndPos: 5133845, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45B8 = genome.Band{Band: "45B8", Desc: "Band", StartPos: 5133845, EndPos: 5135800, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45B9 = genome.Band{Band: "45B9", Desc: "Band", StartPos: 5135800, EndPos: 5137755, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45C1 = genome.Band{Band: "45C1", Desc: "Band", StartPos: 5137755, EndPos: 5175916, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45C2 = genome.Band{Band: "45C2", Desc: "Band", StartPos: 5175916, EndPos: 5175926, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45C3 = genome.Band{Band: "45C3", Desc: "Band", StartPos: 5175926, EndPos: 5175936, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45C4 = genome.Band{Band: "45C4", Desc: "Band", StartPos: 5175936, EndPos: 5187487, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45C5 = genome.Band{Band: "45C5", Desc: "Band", StartPos: 5187487, EndPos: 5198095, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45C6 = genome.Band{Band: "45C6", Desc: "Band", StartPos: 5198095, EndPos: 5208702, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45C7 = genome.Band{Band: "45C7", Desc: "Band", StartPos: 5208702, EndPos: 5227455, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45C8 = genome.Band{Band: "45C8", Desc: "Band", StartPos: 5227455, EndPos: 5229823, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45C9 = genome.Band{Band: "45C9", Desc: "Band", StartPos: 5229823, EndPos: 5232191, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45D1 = genome.Band{Band: "45D1", Desc: "Band", StartPos: 5232191, EndPos: 5282957, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45D2 = genome.Band{Band: "45D2", Desc: "Band", StartPos: 5282957, EndPos: 5285324, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45D3 = genome.Band{Band: "45D3", Desc: "Band", StartPos: 5285324, EndPos: 5291291, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45D4 = genome.Band{Band: "45D4", Desc: "Band", StartPos: 5291291, EndPos: 5301899, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45D5 = genome.Band{Band: "45D5", Desc: "Band", StartPos: 5301899, EndPos: 5316203, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45D6 = genome.Band{Band: "45D6", Desc: "Band", StartPos: 5316203, EndPos: 5320892, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45D7 = genome.Band{Band: "45D7", Desc: "Band", StartPos: 5320892, EndPos: 5323103, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45D8 = genome.Band{Band: "45D8", Desc: "Band", StartPos: 5323103, EndPos: 5346546, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45D9 = genome.Band{Band: "45D9", Desc: "Band", StartPos: 5346546, EndPos: 5348757, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45D10 = genome.Band{Band: "45D10", Desc: "Band", StartPos: 5348757, EndPos: 5352738, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45E1 = genome.Band{Band: "45E1", Desc: "Band", StartPos: 5352738, EndPos: 5400154, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45E2 = genome.Band{Band: "45E2", Desc: "Band", StartPos: 5400154, EndPos: 5402366, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45E3 = genome.Band{Band: "45E3", Desc: "Band", StartPos: 5402366, EndPos: 5412274, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45E4 = genome.Band{Band: "45E4", Desc: "Band", StartPos: 5412274, EndPos: 5422182, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45F1 = genome.Band{Band: "45F1", Desc: "Band", StartPos: 5422182, EndPos: 5456771, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45F2 = genome.Band{Band: "45F2", Desc: "Band", StartPos: 5456771, EndPos: 5456781, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45F3 = genome.Band{Band: "45F3", Desc: "Band", StartPos: 5456781, EndPos: 5460260, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45F4 = genome.Band{Band: "45F4", Desc: "Band", StartPos: 5460260, EndPos: 5471801, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45F5 = genome.Band{Band: "45F5", Desc: "Band", StartPos: 5471801, EndPos: 5480150, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45F6 = genome.Band{Band: "45F6", Desc: "Band", StartPos: 5480150, EndPos: 5501106, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45F7 = genome.Band{Band: "45F7", Desc: "Band", StartPos: 5501106, EndPos: 5503236, Giemsa: "n/a", Chr: &Chr2R} Chr2R_45F8 = genome.Band{Band: "45F8", Desc: "Band", StartPos: 5503236, EndPos: 5525043, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46A1 = genome.Band{Band: "46A1", Desc: "Band", StartPos: 5525043, EndPos: 5599497, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46A2 = genome.Band{Band: "46A2", Desc: "Band", StartPos: 5599497, EndPos: 5599507, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46A3 = genome.Band{Band: "46A3", Desc: "Band", StartPos: 5599507, EndPos: 5599517, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46A4 = genome.Band{Band: "46A4", Desc: "Band", StartPos: 5599517, EndPos: 5599527, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B1 = genome.Band{Band: "46B1", Desc: "Band", StartPos: 5599527, EndPos: 5605561, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B2 = genome.Band{Band: "46B2", Desc: "Band", StartPos: 5605561, EndPos: 5669010, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B3 = genome.Band{Band: "46B3", Desc: "Band", StartPos: 5669010, EndPos: 5689956, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B4 = genome.Band{Band: "46B4", Desc: "Band", StartPos: 5689956, EndPos: 5755789, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B5 = genome.Band{Band: "46B5", Desc: "Band", StartPos: 5755789, EndPos: 5755799, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B6 = genome.Band{Band: "46B6", Desc: "Band", StartPos: 5755799, EndPos: 5755809, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B7 = genome.Band{Band: "46B7", Desc: "Band", StartPos: 5755809, EndPos: 5755819, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B8 = genome.Band{Band: "46B8", Desc: "Band", StartPos: 5755819, EndPos: 5755829, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B9 = genome.Band{Band: "46B9", Desc: "Band", StartPos: 5755829, EndPos: 5755839, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B10 = genome.Band{Band: "46B10", Desc: "Band", StartPos: 5755839, EndPos: 5755849, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B11 = genome.Band{Band: "46B11", Desc: "Band", StartPos: 5755849, EndPos: 5755859, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B12 = genome.Band{Band: "46B12", Desc: "Band", StartPos: 5755859, EndPos: 5755869, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B13 = genome.Band{Band: "46B13", Desc: "Band", StartPos: 5755869, EndPos: 5756452, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46B14 = genome.Band{Band: "46B14", Desc: "Band", StartPos: 5756452, EndPos: 5757127, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46C1 = genome.Band{Band: "46C1", Desc: "Band", StartPos: 5757127, EndPos: 5767686, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46C2 = genome.Band{Band: "46C2", Desc: "Band", StartPos: 5767686, EndPos: 5782841, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46C3 = genome.Band{Band: "46C3", Desc: "Band", StartPos: 5782841, EndPos: 5785257, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46C4 = genome.Band{Band: "46C4", Desc: "Band", StartPos: 5785257, EndPos: 5805354, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46C5 = genome.Band{Band: "46C5", Desc: "Band", StartPos: 5805354, EndPos: 5820814, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46C6 = genome.Band{Band: "46C6", Desc: "Band", StartPos: 5820814, EndPos: 5845549, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46C7 = genome.Band{Band: "46C7", Desc: "Band", StartPos: 5845549, EndPos: 5851637, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46C8 = genome.Band{Band: "46C8", Desc: "Band", StartPos: 5851637, EndPos: 5857643, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46C9 = genome.Band{Band: "46C9", Desc: "Band", StartPos: 5857643, EndPos: 5860361, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46C10 = genome.Band{Band: "46C10", Desc: "Band", StartPos: 5860361, EndPos: 5873089, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46C11 = genome.Band{Band: "46C11", Desc: "Band", StartPos: 5873089, EndPos: 5874168, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46C12 = genome.Band{Band: "46C12", Desc: "Band", StartPos: 5874168, EndPos: 5876110, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46D1 = genome.Band{Band: "46D1", Desc: "Band", StartPos: 5876110, EndPos: 5892980, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46D2 = genome.Band{Band: "46D2", Desc: "Band", StartPos: 5892980, EndPos: 5896249, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46D3 = genome.Band{Band: "46D3", Desc: "Band", StartPos: 5896249, EndPos: 5902261, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46D4 = genome.Band{Band: "46D4", Desc: "Band", StartPos: 5902261, EndPos: 5915465, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46D5 = genome.Band{Band: "46D5", Desc: "Band", StartPos: 5915465, EndPos: 5916807, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46D6 = genome.Band{Band: "46D6", Desc: "Band", StartPos: 5916807, EndPos: 5920189, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46D7 = genome.Band{Band: "46D7", Desc: "Band", StartPos: 5920189, EndPos: 5936024, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46D8 = genome.Band{Band: "46D8", Desc: "Band", StartPos: 5936024, EndPos: 5937366, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46D9 = genome.Band{Band: "46D9", Desc: "Band", StartPos: 5937366, EndPos: 5948530, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46E1 = genome.Band{Band: "46E1", Desc: "Band", StartPos: 5948530, EndPos: 5966942, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46E2 = genome.Band{Band: "46E2", Desc: "Band", StartPos: 5966942, EndPos: 5968284, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46E3 = genome.Band{Band: "46E3", Desc: "Band", StartPos: 5968284, EndPos: 5974295, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46E4 = genome.Band{Band: "46E4", Desc: "Band", StartPos: 5974295, EndPos: 5984924, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46E5 = genome.Band{Band: "46E5", Desc: "Band", StartPos: 5984924, EndPos: 5986265, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46E6 = genome.Band{Band: "46E6", Desc: "Band", StartPos: 5986265, EndPos: 5994317, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46E7 = genome.Band{Band: "46E7", Desc: "Band", StartPos: 5994317, EndPos: 5995659, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46E8 = genome.Band{Band: "46E8", Desc: "Band", StartPos: 5995659, EndPos: 5997911, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46E9 = genome.Band{Band: "46E9", Desc: "Band", StartPos: 5997911, EndPos: 5998724, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46F1 = genome.Band{Band: "46F1", Desc: "Band", StartPos: 5998724, EndPos: 6012997, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46F2 = genome.Band{Band: "46F2", Desc: "Band", StartPos: 6012997, EndPos: 6031292, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46F3 = genome.Band{Band: "46F3", Desc: "Band", StartPos: 6031292, EndPos: 6053727, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46F4 = genome.Band{Band: "46F4", Desc: "Band", StartPos: 6053727, EndPos: 6076163, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46F5 = genome.Band{Band: "46F5", Desc: "Band", StartPos: 6076163, EndPos: 6098599, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46F6 = genome.Band{Band: "46F6", Desc: "Band", StartPos: 6098599, EndPos: 6115204, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46F7 = genome.Band{Band: "46F7", Desc: "Band", StartPos: 6115204, EndPos: 6135641, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46F8 = genome.Band{Band: "46F8", Desc: "Band", StartPos: 6135641, EndPos: 6140670, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46F9 = genome.Band{Band: "46F9", Desc: "Band", StartPos: 6140670, EndPos: 6175717, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46F10 = genome.Band{Band: "46F10", Desc: "Band", StartPos: 6175717, EndPos: 6177713, Giemsa: "n/a", Chr: &Chr2R} Chr2R_46F11 = genome.Band{Band: "46F11", Desc: "Band", StartPos: 6177713, EndPos: 6181305, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A1 = genome.Band{Band: "47A1", Desc: "Band", StartPos: 6181305, EndPos: 6224893, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A2 = genome.Band{Band: "47A2", Desc: "Band", StartPos: 6224893, EndPos: 6268482, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A3 = genome.Band{Band: "47A3", Desc: "Band", StartPos: 6268482, EndPos: 6281255, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A4 = genome.Band{Band: "47A4", Desc: "Band", StartPos: 6281255, EndPos: 6286284, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A5 = genome.Band{Band: "47A5", Desc: "Band", StartPos: 6286284, EndPos: 6290036, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A6 = genome.Band{Band: "47A6", Desc: "Band", StartPos: 6290036, EndPos: 6298977, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A7 = genome.Band{Band: "47A7", Desc: "Band", StartPos: 6298977, EndPos: 6337935, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A8 = genome.Band{Band: "47A8", Desc: "Band", StartPos: 6337935, EndPos: 6339931, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A9 = genome.Band{Band: "47A9", Desc: "Band", StartPos: 6339931, EndPos: 6360368, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A10 = genome.Band{Band: "47A10", Desc: "Band", StartPos: 6360368, EndPos: 6365398, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A11 = genome.Band{Band: "47A11", Desc: "Band", StartPos: 6365398, EndPos: 6427427, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A12 = genome.Band{Band: "47A12", Desc: "Band", StartPos: 6427427, EndPos: 6429423, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A13 = genome.Band{Band: "47A13", Desc: "Band", StartPos: 6429423, EndPos: 6483789, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A14 = genome.Band{Band: "47A14", Desc: "Band", StartPos: 6483789, EndPos: 6488774, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A15 = genome.Band{Band: "47A15", Desc: "Band", StartPos: 6488774, EndPos: 6497321, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47A16 = genome.Band{Band: "47A16", Desc: "Band", StartPos: 6497321, EndPos: 6499416, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B1 = genome.Band{Band: "47B1", Desc: "Band", StartPos: 6499416, EndPos: 6536203, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B2 = genome.Band{Band: "47B2", Desc: "Band", StartPos: 6536203, EndPos: 6538298, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B3 = genome.Band{Band: "47B3", Desc: "Band", StartPos: 6538298, EndPos: 6543577, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B4 = genome.Band{Band: "47B4", Desc: "Band", StartPos: 6543577, EndPos: 6588492, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B5 = genome.Band{Band: "47B5", Desc: "Band", StartPos: 6588492, EndPos: 6590587, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B6 = genome.Band{Band: "47B6", Desc: "Band", StartPos: 6590587, EndPos: 6595867, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B7 = genome.Band{Band: "47B7", Desc: "Band", StartPos: 6595867, EndPos: 6620587, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B8 = genome.Band{Band: "47B8", Desc: "Band", StartPos: 6620587, EndPos: 6622682, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B9 = genome.Band{Band: "47B9", Desc: "Band", StartPos: 6622682, EndPos: 6632067, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B10 = genome.Band{Band: "47B10", Desc: "Band", StartPos: 6632067, EndPos: 6637346, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B11 = genome.Band{Band: "47B11", Desc: "Band", StartPos: 6637346, EndPos: 6654776, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B12 = genome.Band{Band: "47B12", Desc: "Band", StartPos: 6654776, EndPos: 6668183, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B13 = genome.Band{Band: "47B13", Desc: "Band", StartPos: 6668183, EndPos: 6684775, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47B14 = genome.Band{Band: "47B14", Desc: "Band", StartPos: 6684775, EndPos: 6686870, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47C1 = genome.Band{Band: "47C1", Desc: "Band", StartPos: 6686870, EndPos: 6719635, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47C2 = genome.Band{Band: "47C2", Desc: "Band", StartPos: 6719635, EndPos: 6723618, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47C3 = genome.Band{Band: "47C3", Desc: "Band", StartPos: 6723618, EndPos: 6755474, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47C4 = genome.Band{Band: "47C4", Desc: "Band", StartPos: 6755474, EndPos: 6757796, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47C5 = genome.Band{Band: "47C5", Desc: "Band", StartPos: 6757796, EndPos: 6781572, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47C6 = genome.Band{Band: "47C6", Desc: "Band", StartPos: 6781572, EndPos: 6825614, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47C7 = genome.Band{Band: "47C7", Desc: "Band", StartPos: 6825614, EndPos: 6864605, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47D1 = genome.Band{Band: "47D1", Desc: "Band", StartPos: 6864605, EndPos: 6953552, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47D2 = genome.Band{Band: "47D2", Desc: "Band", StartPos: 6953552, EndPos: 6957360, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47D3 = genome.Band{Band: "47D3", Desc: "Band", StartPos: 6957360, EndPos: 6989040, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47D4 = genome.Band{Band: "47D4", Desc: "Band", StartPos: 6989040, EndPos: 7020720, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47D5 = genome.Band{Band: "47D5", Desc: "Band", StartPos: 7020720, EndPos: 7052400, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47D6 = genome.Band{Band: "47D6", Desc: "Band", StartPos: 7052400, EndPos: 7091391, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47D7 = genome.Band{Band: "47D7", Desc: "Band", StartPos: 7091391, EndPos: 7108449, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47D8 = genome.Band{Band: "47D8", Desc: "Band", StartPos: 7108449, EndPos: 7108459, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47E1 = genome.Band{Band: "47E1", Desc: "Band", StartPos: 7108459, EndPos: 7139049, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47E2 = genome.Band{Band: "47E2", Desc: "Band", StartPos: 7139049, EndPos: 7139059, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47E3 = genome.Band{Band: "47E3", Desc: "Band", StartPos: 7139059, EndPos: 7147574, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47E4 = genome.Band{Band: "47E4", Desc: "Band", StartPos: 7147574, EndPos: 7156557, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47E5 = genome.Band{Band: "47E5", Desc: "Band", StartPos: 7156557, EndPos: 7168235, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47E6 = genome.Band{Band: "47E6", Desc: "Band", StartPos: 7168235, EndPos: 7174523, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F1 = genome.Band{Band: "47F1", Desc: "Band", StartPos: 7174523, EndPos: 7212757, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F2 = genome.Band{Band: "47F2", Desc: "Band", StartPos: 7212757, EndPos: 7221011, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F3 = genome.Band{Band: "47F3", Desc: "Band", StartPos: 7221011, EndPos: 7229472, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F4 = genome.Band{Band: "47F4", Desc: "Band", StartPos: 7229472, EndPos: 7241560, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F5 = genome.Band{Band: "47F5", Desc: "Band", StartPos: 7241560, EndPos: 7252892, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F6 = genome.Band{Band: "47F6", Desc: "Band", StartPos: 7252892, EndPos: 7254781, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F7 = genome.Band{Band: "47F7", Desc: "Band", StartPos: 7254781, EndPos: 7269740, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F8 = genome.Band{Band: "47F8", Desc: "Band", StartPos: 7269740, EndPos: 7285983, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F9 = genome.Band{Band: "47F9", Desc: "Band", StartPos: 7285983, EndPos: 7291831, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F10 = genome.Band{Band: "47F10", Desc: "Band", StartPos: 7291831, EndPos: 7297236, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F11 = genome.Band{Band: "47F11", Desc: "Band", StartPos: 7297236, EndPos: 7322545, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F12 = genome.Band{Band: "47F12", Desc: "Band", StartPos: 7322545, EndPos: 7324690, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F13 = genome.Band{Band: "47F13", Desc: "Band", StartPos: 7324690, EndPos: 7349999, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F14 = genome.Band{Band: "47F14", Desc: "Band", StartPos: 7349999, EndPos: 7352144, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F15 = genome.Band{Band: "47F15", Desc: "Band", StartPos: 7352144, EndPos: 7381571, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F16 = genome.Band{Band: "47F16", Desc: "Band", StartPos: 7381571, EndPos: 7383716, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F17 = genome.Band{Band: "47F17", Desc: "Band", StartPos: 7383716, EndPos: 7413143, Giemsa: "n/a", Chr: &Chr2R} Chr2R_47F18 = genome.Band{Band: "47F18", Desc: "Band", StartPos: 7413143, EndPos: 7415287, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48A1 = genome.Band{Band: "48A1", Desc: "Band", StartPos: 7415287, EndPos: 7465391, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48A2 = genome.Band{Band: "48A2", Desc: "Band", StartPos: 7465391, EndPos: 7467536, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48A3 = genome.Band{Band: "48A3", Desc: "Band", StartPos: 7467536, EndPos: 7513521, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48A4 = genome.Band{Band: "48A4", Desc: "Band", StartPos: 7513521, EndPos: 7515665, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48A5 = genome.Band{Band: "48A5", Desc: "Band", StartPos: 7515665, EndPos: 7518545, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48A6 = genome.Band{Band: "48A6", Desc: "Band", StartPos: 7518545, EndPos: 7519380, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48B1 = genome.Band{Band: "48B1", Desc: "Band", StartPos: 7519380, EndPos: 7527927, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48B2 = genome.Band{Band: "48B2", Desc: "Band", StartPos: 7527927, EndPos: 7536468, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48B3 = genome.Band{Band: "48B3", Desc: "Band", StartPos: 7536468, EndPos: 7538570, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48B4 = genome.Band{Band: "48B4", Desc: "Band", StartPos: 7538570, EndPos: 7542306, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48B5 = genome.Band{Band: "48B5", Desc: "Band", StartPos: 7542306, EndPos: 7549246, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48B6 = genome.Band{Band: "48B6", Desc: "Band", StartPos: 7549246, EndPos: 7557787, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48B7 = genome.Band{Band: "48B7", Desc: "Band", StartPos: 7557787, EndPos: 7563125, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48B8 = genome.Band{Band: "48B8", Desc: "Band", StartPos: 7563125, EndPos: 7564960, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48C1 = genome.Band{Band: "48C1", Desc: "Band", StartPos: 7564960, EndPos: 7578338, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48C2 = genome.Band{Band: "48C2", Desc: "Band", StartPos: 7578338, EndPos: 7672510, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48C3 = genome.Band{Band: "48C3", Desc: "Band", StartPos: 7672510, EndPos: 7698812, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48C4 = genome.Band{Band: "48C4", Desc: "Band", StartPos: 7698812, EndPos: 7736387, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48C5 = genome.Band{Band: "48C5", Desc: "Band", StartPos: 7736387, EndPos: 7796507, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48C6 = genome.Band{Band: "48C6", Desc: "Band", StartPos: 7796507, EndPos: 7796517, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48C7 = genome.Band{Band: "48C7", Desc: "Band", StartPos: 7796517, EndPos: 7796527, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48C8 = genome.Band{Band: "48C8", Desc: "Band", StartPos: 7796527, EndPos: 7796537, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48D1 = genome.Band{Band: "48D1", Desc: "Band", StartPos: 7796537, EndPos: 7796547, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48D2 = genome.Band{Band: "48D2", Desc: "Band", StartPos: 7796547, EndPos: 7819888, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48D3 = genome.Band{Band: "48D3", Desc: "Band", StartPos: 7819888, EndPos: 7842554, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48D4 = genome.Band{Band: "48D4", Desc: "Band", StartPos: 7842554, EndPos: 7851479, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48D5 = genome.Band{Band: "48D5", Desc: "Band", StartPos: 7851479, EndPos: 7887746, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48D6 = genome.Band{Band: "48D6", Desc: "Band", StartPos: 7887746, EndPos: 7903613, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48D7 = genome.Band{Band: "48D7", Desc: "Band", StartPos: 7903613, EndPos: 7919480, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48D8 = genome.Band{Band: "48D8", Desc: "Band", StartPos: 7919480, EndPos: 7955746, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48E1 = genome.Band{Band: "48E1", Desc: "Band", StartPos: 7955746, EndPos: 7992013, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48E2 = genome.Band{Band: "48E2", Desc: "Band", StartPos: 7992013, EndPos: 8035493, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48E3 = genome.Band{Band: "48E3", Desc: "Band", StartPos: 8035493, EndPos: 8043067, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48E4 = genome.Band{Band: "48E4", Desc: "Band", StartPos: 8043067, EndPos: 8066872, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48E5 = genome.Band{Band: "48E5", Desc: "Band", StartPos: 8066872, EndPos: 8066882, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48E6 = genome.Band{Band: "48E6", Desc: "Band", StartPos: 8066882, EndPos: 8071776, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48E7 = genome.Band{Band: "48E7", Desc: "Band", StartPos: 8071776, EndPos: 8079445, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48E8 = genome.Band{Band: "48E8", Desc: "Band", StartPos: 8079445, EndPos: 8087114, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48E9 = genome.Band{Band: "48E9", Desc: "Band", StartPos: 8087114, EndPos: 8094782, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48E10 = genome.Band{Band: "48E10", Desc: "Band", StartPos: 8094782, EndPos: 8118269, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48E11 = genome.Band{Band: "48E11", Desc: "Band", StartPos: 8118269, EndPos: 8119980, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48E12 = genome.Band{Band: "48E12", Desc: "Band", StartPos: 8119980, EndPos: 8127649, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48F1 = genome.Band{Band: "48F1", Desc: "Band", StartPos: 8127649, EndPos: 8164351, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48F2 = genome.Band{Band: "48F2", Desc: "Band", StartPos: 8164351, EndPos: 8164361, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48F3 = genome.Band{Band: "48F3", Desc: "Band", StartPos: 8164361, EndPos: 8164371, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48F4 = genome.Band{Band: "48F4", Desc: "Band", StartPos: 8164371, EndPos: 8164381, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48F5 = genome.Band{Band: "48F5", Desc: "Band", StartPos: 8164381, EndPos: 8164391, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48F6 = genome.Band{Band: "48F6", Desc: "Band", StartPos: 8164391, EndPos: 8197297, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48F7 = genome.Band{Band: "48F7", Desc: "Band", StartPos: 8197297, EndPos: 8208906, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48F8 = genome.Band{Band: "48F8", Desc: "Band", StartPos: 8208906, EndPos: 8219056, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48F9 = genome.Band{Band: "48F9", Desc: "Band", StartPos: 8219056, EndPos: 8221094, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48F10 = genome.Band{Band: "48F10", Desc: "Band", StartPos: 8221094, EndPos: 8227499, Giemsa: "n/a", Chr: &Chr2R} Chr2R_48F11 = genome.Band{Band: "48F11", Desc: "Band", StartPos: 8227499, EndPos: 8233108, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A1 = genome.Band{Band: "49A1", Desc: "Band", StartPos: 8233108, EndPos: 8274275, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A2 = genome.Band{Band: "49A2", Desc: "Band", StartPos: 8274275, EndPos: 8293577, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A3 = genome.Band{Band: "49A3", Desc: "Band", StartPos: 8293577, EndPos: 8305641, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A4 = genome.Band{Band: "49A4", Desc: "Band", StartPos: 8305641, EndPos: 8320570, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A5 = genome.Band{Band: "49A5", Desc: "Band", StartPos: 8320570, EndPos: 8322455, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A6 = genome.Band{Band: "49A6", Desc: "Band", StartPos: 8322455, EndPos: 8344697, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A7 = genome.Band{Band: "49A7", Desc: "Band", StartPos: 8344697, EndPos: 8367694, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A8 = genome.Band{Band: "49A8", Desc: "Band", StartPos: 8367694, EndPos: 8369579, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A9 = genome.Band{Band: "49A9", Desc: "Band", StartPos: 8369579, EndPos: 8388881, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A10 = genome.Band{Band: "49A10", Desc: "Band", StartPos: 8388881, EndPos: 8418362, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A11 = genome.Band{Band: "49A11", Desc: "Band", StartPos: 8418362, EndPos: 8418372, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A12 = genome.Band{Band: "49A12", Desc: "Band", StartPos: 8418372, EndPos: 8418382, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49A13 = genome.Band{Band: "49A13", Desc: "Band", StartPos: 8418382, EndPos: 8418392, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49B1 = genome.Band{Band: "49B1", Desc: "Band", StartPos: 8418392, EndPos: 8418402, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49B2 = genome.Band{Band: "49B2", Desc: "Band", StartPos: 8418402, EndPos: 8427393, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49B3 = genome.Band{Band: "49B3", Desc: "Band", StartPos: 8427393, EndPos: 8453341, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49B4 = genome.Band{Band: "49B4", Desc: "Band", StartPos: 8453341, EndPos: 8455000, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49B5 = genome.Band{Band: "49B5", Desc: "Band", StartPos: 8455000, EndPos: 8465617, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49B6 = genome.Band{Band: "49B6", Desc: "Band", StartPos: 8465617, EndPos: 8469798, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49B7 = genome.Band{Band: "49B7", Desc: "Band", StartPos: 8469798, EndPos: 8486787, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49B8 = genome.Band{Band: "49B8", Desc: "Band", StartPos: 8486787, EndPos: 8507027, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49B9 = genome.Band{Band: "49B9", Desc: "Band", StartPos: 8507027, EndPos: 8514460, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49B10 = genome.Band{Band: "49B10", Desc: "Band", StartPos: 8514460, EndPos: 8530785, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49B11 = genome.Band{Band: "49B11", Desc: "Band", StartPos: 8530785, EndPos: 8554815, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49B12 = genome.Band{Band: "49B12", Desc: "Band", StartPos: 8554815, EndPos: 8578477, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49C1 = genome.Band{Band: "49C1", Desc: "Band", StartPos: 8578477, EndPos: 8624094, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49C2 = genome.Band{Band: "49C2", Desc: "Band", StartPos: 8624094, EndPos: 8647755, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49C3 = genome.Band{Band: "49C3", Desc: "Band", StartPos: 8647755, EndPos: 8687912, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49C4 = genome.Band{Band: "49C4", Desc: "Band", StartPos: 8687912, EndPos: 8687922, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49D1 = genome.Band{Band: "49D1", Desc: "Band", StartPos: 8687922, EndPos: 8687932, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49D2 = genome.Band{Band: "49D2", Desc: "Band", StartPos: 8687932, EndPos: 8687942, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49D3 = genome.Band{Band: "49D3", Desc: "Band", StartPos: 8687942, EndPos: 8713417, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49D4 = genome.Band{Band: "49D4", Desc: "Band", StartPos: 8713417, EndPos: 8746966, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49D5 = genome.Band{Band: "49D5", Desc: "Band", StartPos: 8746966, EndPos: 8751202, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49D6 = genome.Band{Band: "49D6", Desc: "Band", StartPos: 8751202, EndPos: 8767531, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49D7 = genome.Band{Band: "49D7", Desc: "Band", StartPos: 8767531, EndPos: 8771391, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49E1 = genome.Band{Band: "49E1", Desc: "Band", StartPos: 8771391, EndPos: 8831770, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49E2 = genome.Band{Band: "49E2", Desc: "Band", StartPos: 8831770, EndPos: 8831780, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49E3 = genome.Band{Band: "49E3", Desc: "Band", StartPos: 8831780, EndPos: 8833654, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49E4 = genome.Band{Band: "49E4", Desc: "Band", StartPos: 8833654, EndPos: 8846760, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49E5 = genome.Band{Band: "49E5", Desc: "Band", StartPos: 8846760, EndPos: 8851921, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49E6 = genome.Band{Band: "49E6", Desc: "Band", StartPos: 8851921, EndPos: 8872890, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49E7 = genome.Band{Band: "49E7", Desc: "Band", StartPos: 8872890, EndPos: 8912331, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F1 = genome.Band{Band: "49F1", Desc: "Band", StartPos: 8912331, EndPos: 8974112, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F2 = genome.Band{Band: "49F2", Desc: "Band", StartPos: 8974112, EndPos: 9021103, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F3 = genome.Band{Band: "49F3", Desc: "Band", StartPos: 9021103, EndPos: 9038358, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F4 = genome.Band{Band: "49F4", Desc: "Band", StartPos: 9038358, EndPos: 9068864, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F5 = genome.Band{Band: "49F5", Desc: "Band", StartPos: 9068864, EndPos: 9068874, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F6 = genome.Band{Band: "49F6", Desc: "Band", StartPos: 9068874, EndPos: 9070330, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F7 = genome.Band{Band: "49F7", Desc: "Band", StartPos: 9070330, EndPos: 9091634, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F8 = genome.Band{Band: "49F8", Desc: "Band", StartPos: 9091634, EndPos: 9094639, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F9 = genome.Band{Band: "49F9", Desc: "Band", StartPos: 9094639, EndPos: 9101626, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F10 = genome.Band{Band: "49F10", Desc: "Band", StartPos: 9101626, EndPos: 9111608, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F11 = genome.Band{Band: "49F11", Desc: "Band", StartPos: 9111608, EndPos: 9126975, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F12 = genome.Band{Band: "49F12", Desc: "Band", StartPos: 9126975, EndPos: 9129504, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F13 = genome.Band{Band: "49F13", Desc: "Band", StartPos: 9129504, EndPos: 9149533, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F14 = genome.Band{Band: "49F14", Desc: "Band", StartPos: 9149533, EndPos: 9152062, Giemsa: "n/a", Chr: &Chr2R} Chr2R_49F15 = genome.Band{Band: "49F15", Desc: "Band", StartPos: 9152062, EndPos: 9163391, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A1 = genome.Band{Band: "50A1", Desc: "Band", StartPos: 9163391, EndPos: 9217610, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A2 = genome.Band{Band: "50A2", Desc: "Band", StartPos: 9217610, EndPos: 9220139, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A3 = genome.Band{Band: "50A3", Desc: "Band", StartPos: 9220139, EndPos: 9289026, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A4 = genome.Band{Band: "50A4", Desc: "Band", StartPos: 9289026, EndPos: 9291554, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A5 = genome.Band{Band: "50A5", Desc: "Band", StartPos: 9291554, EndPos: 9302884, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A6 = genome.Band{Band: "50A6", Desc: "Band", StartPos: 9302884, EndPos: 9309257, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A7 = genome.Band{Band: "50A7", Desc: "Band", StartPos: 9309257, EndPos: 9320586, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A8 = genome.Band{Band: "50A8", Desc: "Band", StartPos: 9320586, EndPos: 9331915, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A9 = genome.Band{Band: "50A9", Desc: "Band", StartPos: 9331915, EndPos: 9361756, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A10 = genome.Band{Band: "50A10", Desc: "Band", StartPos: 9361756, EndPos: 9364285, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A11 = genome.Band{Band: "50A11", Desc: "Band", StartPos: 9364285, EndPos: 9379458, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A12 = genome.Band{Band: "50A12", Desc: "Band", StartPos: 9379458, EndPos: 9381987, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A13 = genome.Band{Band: "50A13", Desc: "Band", StartPos: 9381987, EndPos: 9393316, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A14 = genome.Band{Band: "50A14", Desc: "Band", StartPos: 9393316, EndPos: 9404614, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50A15 = genome.Band{Band: "50A15", Desc: "Band", StartPos: 9404614, EndPos: 9410971, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50B1 = genome.Band{Band: "50B1", Desc: "Band", StartPos: 9410971, EndPos: 9446590, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50B2 = genome.Band{Band: "50B2", Desc: "Band", StartPos: 9446590, EndPos: 9462735, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50B3 = genome.Band{Band: "50B3", Desc: "Band", StartPos: 9462735, EndPos: 9474036, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50B4 = genome.Band{Band: "50B4", Desc: "Band", StartPos: 9474036, EndPos: 9485337, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50B5 = genome.Band{Band: "50B5", Desc: "Band", StartPos: 9485337, EndPos: 9496638, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50B6 = genome.Band{Band: "50B6", Desc: "Band", StartPos: 9496638, EndPos: 9521460, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50B7 = genome.Band{Band: "50B7", Desc: "Band", StartPos: 9521460, EndPos: 9523983, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50B8 = genome.Band{Band: "50B8", Desc: "Band", StartPos: 9523983, EndPos: 9540127, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50B9 = genome.Band{Band: "50B9", Desc: "Band", StartPos: 9540127, EndPos: 9551428, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C1 = genome.Band{Band: "50C1", Desc: "Band", StartPos: 9551428, EndPos: 9577260, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C2 = genome.Band{Band: "50C2", Desc: "Band", StartPos: 9577260, EndPos: 9603091, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C3 = genome.Band{Band: "50C3", Desc: "Band", StartPos: 9603091, EndPos: 9662018, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C4 = genome.Band{Band: "50C4", Desc: "Band", StartPos: 9662018, EndPos: 9664541, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C5 = genome.Band{Band: "50C5", Desc: "Band", StartPos: 9664541, EndPos: 9698634, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C6 = genome.Band{Band: "50C6", Desc: "Band", StartPos: 9698634, EndPos: 9756406, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C7 = genome.Band{Band: "50C7", Desc: "Band", StartPos: 9756406, EndPos: 9760100, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C8 = genome.Band{Band: "50C8", Desc: "Band", StartPos: 9760100, EndPos: 9769409, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C9 = genome.Band{Band: "50C9", Desc: "Band", StartPos: 9769409, EndPos: 9841513, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C10 = genome.Band{Band: "50C10", Desc: "Band", StartPos: 9841513, EndPos: 9841523, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C11 = genome.Band{Band: "50C11", Desc: "Band", StartPos: 9841523, EndPos: 9841533, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C12 = genome.Band{Band: "50C12", Desc: "Band", StartPos: 9841533, EndPos: 9841543, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C13 = genome.Band{Band: "50C13", Desc: "Band", StartPos: 9841543, EndPos: 9841553, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C14 = genome.Band{Band: "50C14", Desc: "Band", StartPos: 9841553, EndPos: 9841563, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C15 = genome.Band{Band: "50C15", Desc: "Band", StartPos: 9841563, EndPos: 9841573, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C16 = genome.Band{Band: "50C16", Desc: "Band", StartPos: 9841573, EndPos: 9844461, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C17 = genome.Band{Band: "50C17", Desc: "Band", StartPos: 9844461, EndPos: 9847515, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C18 = genome.Band{Band: "50C18", Desc: "Band", StartPos: 9847515, EndPos: 9850569, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C19 = genome.Band{Band: "50C19", Desc: "Band", StartPos: 9850569, EndPos: 9852534, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C20 = genome.Band{Band: "50C20", Desc: "Band", StartPos: 9852534, EndPos: 9858807, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C21 = genome.Band{Band: "50C21", Desc: "Band", StartPos: 9858807, EndPos: 9859264, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C22 = genome.Band{Band: "50C22", Desc: "Band", StartPos: 9859264, EndPos: 9861312, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50C23 = genome.Band{Band: "50C23", Desc: "Band", StartPos: 9861312, EndPos: 9882236, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50D1 = genome.Band{Band: "50D1", Desc: "Band", StartPos: 9882236, EndPos: 9910241, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50D2 = genome.Band{Band: "50D2", Desc: "Band", StartPos: 9910241, EndPos: 9934445, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50D3 = genome.Band{Band: "50D3", Desc: "Band", StartPos: 9934445, EndPos: 9950814, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50D4 = genome.Band{Band: "50D4", Desc: "Band", StartPos: 9950814, EndPos: 9967183, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50D5 = genome.Band{Band: "50D5", Desc: "Band", StartPos: 9967183, EndPos: 9983552, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50D6 = genome.Band{Band: "50D6", Desc: "Band", StartPos: 9983552, EndPos: 9999922, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50D7 = genome.Band{Band: "50D7", Desc: "Band", StartPos: 9999922, EndPos: 10023306, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50E1 = genome.Band{Band: "50E1", Desc: "Band", StartPos: 10023306, EndPos: 10073437, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50E2 = genome.Band{Band: "50E2", Desc: "Band", StartPos: 10073437, EndPos: 10077091, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50E3 = genome.Band{Band: "50E3", Desc: "Band", StartPos: 10077091, EndPos: 10086299, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50E4 = genome.Band{Band: "50E4", Desc: "Band", StartPos: 10086299, EndPos: 10129414, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50E5 = genome.Band{Band: "50E5", Desc: "Band", StartPos: 10129414, EndPos: 10133068, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50E6 = genome.Band{Band: "50E6", Desc: "Band", StartPos: 10133068, EndPos: 10176183, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50E7 = genome.Band{Band: "50E7", Desc: "Band", StartPos: 10176183, EndPos: 10176193, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50E8 = genome.Band{Band: "50E8", Desc: "Band", StartPos: 10176193, EndPos: 10176203, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50E9 = genome.Band{Band: "50E9", Desc: "Band", StartPos: 10176203, EndPos: 10177396, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50F1 = genome.Band{Band: "50F1", Desc: "Band", StartPos: 10177396, EndPos: 10204478, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50F2 = genome.Band{Band: "50F2", Desc: "Band", StartPos: 10204478, EndPos: 10206209, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50F3 = genome.Band{Band: "50F3", Desc: "Band", StartPos: 10206209, EndPos: 10210573, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50F4 = genome.Band{Band: "50F4", Desc: "Band", StartPos: 10210573, EndPos: 10234330, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50F5 = genome.Band{Band: "50F5", Desc: "Band", StartPos: 10234330, EndPos: 10236062, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50F6 = genome.Band{Band: "50F6", Desc: "Band", StartPos: 10236062, EndPos: 10263143, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50F7 = genome.Band{Band: "50F7", Desc: "Band", StartPos: 10263143, EndPos: 10264875, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50F8 = genome.Band{Band: "50F8", Desc: "Band", StartPos: 10264875, EndPos: 10272632, Giemsa: "n/a", Chr: &Chr2R} Chr2R_50F9 = genome.Band{Band: "50F9", Desc: "Band", StartPos: 10272632, EndPos: 10276996, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51A1 = genome.Band{Band: "51A1", Desc: "Band", StartPos: 10276996, EndPos: 10298121, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51A2 = genome.Band{Band: "51A2", Desc: "Band", StartPos: 10298121, EndPos: 10332776, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51A3 = genome.Band{Band: "51A3", Desc: "Band", StartPos: 10332776, EndPos: 10345502, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51A4 = genome.Band{Band: "51A4", Desc: "Band", StartPos: 10345502, EndPos: 10391066, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51A5 = genome.Band{Band: "51A5", Desc: "Band", StartPos: 10391066, EndPos: 10397180, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51A6 = genome.Band{Band: "51A6", Desc: "Band", StartPos: 10397180, EndPos: 10411538, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51A7 = genome.Band{Band: "51A7", Desc: "Band", StartPos: 10411538, EndPos: 10420512, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51A8 = genome.Band{Band: "51A8", Desc: "Band", StartPos: 10420512, EndPos: 10434871, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51B1 = genome.Band{Band: "51B1", Desc: "Band", StartPos: 10434871, EndPos: 10464934, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51B2 = genome.Band{Band: "51B2", Desc: "Band", StartPos: 10464934, EndPos: 10466336, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51B3 = genome.Band{Band: "51B3", Desc: "Band", StartPos: 10466336, EndPos: 10469869, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51B4 = genome.Band{Band: "51B4", Desc: "Band", StartPos: 10469869, EndPos: 10486415, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51B5 = genome.Band{Band: "51B5", Desc: "Band", StartPos: 10486415, EndPos: 10487817, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51B6 = genome.Band{Band: "51B6", Desc: "Band", StartPos: 10487817, EndPos: 10522899, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51B7 = genome.Band{Band: "51B7", Desc: "Band", StartPos: 10522899, EndPos: 10544804, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51B8 = genome.Band{Band: "51B8", Desc: "Band", StartPos: 10544804, EndPos: 10547570, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51B9 = genome.Band{Band: "51B9", Desc: "Band", StartPos: 10547570, EndPos: 10559960, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51B10 = genome.Band{Band: "51B10", Desc: "Band", StartPos: 10559960, EndPos: 10572351, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51B11 = genome.Band{Band: "51B11", Desc: "Band", StartPos: 10572351, EndPos: 10595363, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51C1 = genome.Band{Band: "51C1", Desc: "Band", StartPos: 10595363, EndPos: 10639726, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51C2 = genome.Band{Band: "51C2", Desc: "Band", StartPos: 10639726, EndPos: 10683767, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51C3 = genome.Band{Band: "51C3", Desc: "Band", StartPos: 10683767, EndPos: 10696067, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51C4 = genome.Band{Band: "51C4", Desc: "Band", StartPos: 10696067, EndPos: 10723085, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51C5 = genome.Band{Band: "51C5", Desc: "Band", StartPos: 10723085, EndPos: 10749992, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51C6 = genome.Band{Band: "51C6", Desc: "Band", StartPos: 10749992, EndPos: 10752738, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51C7 = genome.Band{Band: "51C7", Desc: "Band", StartPos: 10752738, EndPos: 10759657, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51D1 = genome.Band{Band: "51D1", Desc: "Band", StartPos: 10759657, EndPos: 10782501, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51D2 = genome.Band{Band: "51D2", Desc: "Band", StartPos: 10782501, EndPos: 10815998, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51D3 = genome.Band{Band: "51D3", Desc: "Band", StartPos: 10815998, EndPos: 10822917, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51D4 = genome.Band{Band: "51D4", Desc: "Band", StartPos: 10822917, EndPos: 10829836, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51D5 = genome.Band{Band: "51D5", Desc: "Band", StartPos: 10829836, EndPos: 10842137, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51D6 = genome.Band{Band: "51D6", Desc: "Band", StartPos: 10842137, EndPos: 10870253, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51D7 = genome.Band{Band: "51D7", Desc: "Band", StartPos: 10870253, EndPos: 10898368, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51D8 = genome.Band{Band: "51D8", Desc: "Band", StartPos: 10898368, EndPos: 10931865, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51D9 = genome.Band{Band: "51D9", Desc: "Band", StartPos: 10931865, EndPos: 10949438, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51D10 = genome.Band{Band: "51D10", Desc: "Band", StartPos: 10949438, EndPos: 10956357, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51D11 = genome.Band{Band: "51D11", Desc: "Band", StartPos: 10956357, EndPos: 10968657, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51D12 = genome.Band{Band: "51D12", Desc: "Band", StartPos: 10968657, EndPos: 10980958, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51E1 = genome.Band{Band: "51E1", Desc: "Band", StartPos: 10980958, EndPos: 11014455, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51E2 = genome.Band{Band: "51E2", Desc: "Band", StartPos: 11014455, EndPos: 11042651, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51E3 = genome.Band{Band: "51E3", Desc: "Band", StartPos: 11042651, EndPos: 11055081, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51E4 = genome.Band{Band: "51E4", Desc: "Band", StartPos: 11055081, EndPos: 11063783, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51E5 = genome.Band{Band: "51E5", Desc: "Band", StartPos: 11063783, EndPos: 11094160, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51E6 = genome.Band{Band: "51E6", Desc: "Band", StartPos: 11094160, EndPos: 11096102, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51E7 = genome.Band{Band: "51E7", Desc: "Band", StartPos: 11096102, EndPos: 11112261, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51E8 = genome.Band{Band: "51E8", Desc: "Band", StartPos: 11112261, EndPos: 11117156, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51E9 = genome.Band{Band: "51E9", Desc: "Band", StartPos: 11117156, EndPos: 11125857, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51E10 = genome.Band{Band: "51E10", Desc: "Band", StartPos: 11125857, EndPos: 11145746, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51E11 = genome.Band{Band: "51E11", Desc: "Band", StartPos: 11145746, EndPos: 11152747, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F1 = genome.Band{Band: "51F1", Desc: "Band", StartPos: 11152747, EndPos: 11179513, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F2 = genome.Band{Band: "51F2", Desc: "Band", StartPos: 11179513, EndPos: 11181224, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F3 = genome.Band{Band: "51F3", Desc: "Band", StartPos: 11181224, EndPos: 11185536, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F4 = genome.Band{Band: "51F4", Desc: "Band", StartPos: 11185536, EndPos: 11203060, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F5 = genome.Band{Band: "51F5", Desc: "Band", StartPos: 11203060, EndPos: 11207373, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F6 = genome.Band{Band: "51F6", Desc: "Band", StartPos: 11207373, EndPos: 11215040, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F7 = genome.Band{Band: "51F7", Desc: "Band", StartPos: 11215040, EndPos: 11228593, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F8 = genome.Band{Band: "51F8", Desc: "Band", StartPos: 11228593, EndPos: 11230305, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F9 = genome.Band{Band: "51F9", Desc: "Band", StartPos: 11230305, EndPos: 11250498, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F10 = genome.Band{Band: "51F10", Desc: "Band", StartPos: 11250498, EndPos: 11252210, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F11 = genome.Band{Band: "51F11", Desc: "Band", StartPos: 11252210, EndPos: 11273088, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F12 = genome.Band{Band: "51F12", Desc: "Band", StartPos: 11273088, EndPos: 11285418, Giemsa: "n/a", Chr: &Chr2R} Chr2R_51F13 = genome.Band{Band: "51F13", Desc: "Band", StartPos: 11285418, EndPos: 11290104, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A1 = genome.Band{Band: "52A1", Desc: "Band", StartPos: 11290104, EndPos: 11319930, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A2 = genome.Band{Band: "52A2", Desc: "Band", StartPos: 11319930, EndPos: 11346185, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A3 = genome.Band{Band: "52A3", Desc: "Band", StartPos: 11346185, EndPos: 11350871, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A4 = genome.Band{Band: "52A4", Desc: "Band", StartPos: 11350871, EndPos: 11373557, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A5 = genome.Band{Band: "52A5", Desc: "Band", StartPos: 11373557, EndPos: 11381887, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A6 = genome.Band{Band: "52A6", Desc: "Band", StartPos: 11381887, EndPos: 11404573, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A7 = genome.Band{Band: "52A7", Desc: "Band", StartPos: 11404573, EndPos: 11406432, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A8 = genome.Band{Band: "52A8", Desc: "Band", StartPos: 11406432, EndPos: 11414762, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A9 = genome.Band{Band: "52A9", Desc: "Band", StartPos: 11414762, EndPos: 11419448, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A10 = genome.Band{Band: "52A10", Desc: "Band", StartPos: 11419448, EndPos: 11441390, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A11 = genome.Band{Band: "52A11", Desc: "Band", StartPos: 11441390, EndPos: 11449903, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A12 = genome.Band{Band: "52A12", Desc: "Band", StartPos: 11449903, EndPos: 11452631, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A13 = genome.Band{Band: "52A13", Desc: "Band", StartPos: 11452631, EndPos: 11463762, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52A14 = genome.Band{Band: "52A14", Desc: "Band", StartPos: 11463762, EndPos: 11466490, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52B1 = genome.Band{Band: "52B1", Desc: "Band", StartPos: 11466490, EndPos: 11499772, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52B2 = genome.Band{Band: "52B2", Desc: "Band", StartPos: 11499772, EndPos: 11533055, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52B3 = genome.Band{Band: "52B3", Desc: "Band", StartPos: 11533055, EndPos: 11550515, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52B4 = genome.Band{Band: "52B4", Desc: "Band", StartPos: 11550515, EndPos: 11562736, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52B5 = genome.Band{Band: "52B5", Desc: "Band", StartPos: 11562736, EndPos: 11574958, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52C1 = genome.Band{Band: "52C1", Desc: "Band", StartPos: 11574958, EndPos: 11597656, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52C2 = genome.Band{Band: "52C2", Desc: "Band", StartPos: 11597656, EndPos: 11636176, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52C3 = genome.Band{Band: "52C3", Desc: "Band", StartPos: 11636176, EndPos: 11648398, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52C4 = genome.Band{Band: "52C4", Desc: "Band", StartPos: 11648398, EndPos: 11665858, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52C5 = genome.Band{Band: "52C5", Desc: "Band", StartPos: 11665858, EndPos: 11688555, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52C6 = genome.Band{Band: "52C6", Desc: "Band", StartPos: 11688555, EndPos: 11700777, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52C7 = genome.Band{Band: "52C7", Desc: "Band", StartPos: 11700777, EndPos: 11723475, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52C8 = genome.Band{Band: "52C8", Desc: "Band", StartPos: 11723475, EndPos: 11756757, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52C9 = genome.Band{Band: "52C9", Desc: "Band", StartPos: 11756757, EndPos: 11777758, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D1 = genome.Band{Band: "52D1", Desc: "Band", StartPos: 11777758, EndPos: 11809592, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D2 = genome.Band{Band: "52D2", Desc: "Band", StartPos: 11809592, EndPos: 11825076, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D3 = genome.Band{Band: "52D3", Desc: "Band", StartPos: 11825076, EndPos: 11831851, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D4 = genome.Band{Band: "52D4", Desc: "Band", StartPos: 11831851, EndPos: 11835661, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D5 = genome.Band{Band: "52D5", Desc: "Band", StartPos: 11835661, EndPos: 11842436, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D6 = genome.Band{Band: "52D6", Desc: "Band", StartPos: 11842436, EndPos: 11846246, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D7 = genome.Band{Band: "52D7", Desc: "Band", StartPos: 11846246, EndPos: 11858827, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D8 = genome.Band{Band: "52D8", Desc: "Band", StartPos: 11858827, EndPos: 11862638, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D9 = genome.Band{Band: "52D9", Desc: "Band", StartPos: 11862638, EndPos: 11880481, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D10 = genome.Band{Band: "52D10", Desc: "Band", StartPos: 11880481, EndPos: 11881994, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D11 = genome.Band{Band: "52D11", Desc: "Band", StartPos: 11881994, EndPos: 11888768, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D12 = genome.Band{Band: "52D12", Desc: "Band", StartPos: 11888768, EndPos: 11897329, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D13 = genome.Band{Band: "52D13", Desc: "Band", StartPos: 11897329, EndPos: 11902144, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D14 = genome.Band{Band: "52D14", Desc: "Band", StartPos: 11902144, EndPos: 11914374, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52D15 = genome.Band{Band: "52D15", Desc: "Band", StartPos: 11914374, EndPos: 11930272, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52E1 = genome.Band{Band: "52E1", Desc: "Band", StartPos: 11930272, EndPos: 11960159, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52E2 = genome.Band{Band: "52E2", Desc: "Band", StartPos: 11960159, EndPos: 11969860, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52E3 = genome.Band{Band: "52E3", Desc: "Band", StartPos: 11969860, EndPos: 11982615, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52E4 = genome.Band{Band: "52E4", Desc: "Band", StartPos: 11982615, EndPos: 11989790, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52E5 = genome.Band{Band: "52E5", Desc: "Band", StartPos: 11989790, EndPos: 12012340, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52E6 = genome.Band{Band: "52E6", Desc: "Band", StartPos: 12012340, EndPos: 12015187, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52E7 = genome.Band{Band: "52E7", Desc: "Band", StartPos: 12015187, EndPos: 12027942, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52E8 = genome.Band{Band: "52E8", Desc: "Band", StartPos: 12027942, EndPos: 12027952, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52E9 = genome.Band{Band: "52E9", Desc: "Band", StartPos: 12027952, EndPos: 12027962, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52E10 = genome.Band{Band: "52E10", Desc: "Band", StartPos: 12027962, EndPos: 12029933, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52E11 = genome.Band{Band: "52E11", Desc: "Band", StartPos: 12029933, EndPos: 12037600, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52F1 = genome.Band{Band: "52F1", Desc: "Band", StartPos: 12037600, EndPos: 12048843, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52F2 = genome.Band{Band: "52F2", Desc: "Band", StartPos: 12048843, EndPos: 12056510, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52F3 = genome.Band{Band: "52F3", Desc: "Band", StartPos: 12056510, EndPos: 12064177, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52F4 = genome.Band{Band: "52F4", Desc: "Band", StartPos: 12064177, EndPos: 12068305, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52F5 = genome.Band{Band: "52F5", Desc: "Band", StartPos: 12068305, EndPos: 12074203, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52F6 = genome.Band{Band: "52F6", Desc: "Band", StartPos: 12074203, EndPos: 12076525, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52F7 = genome.Band{Band: "52F7", Desc: "Band", StartPos: 12076525, EndPos: 12086785, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52F8 = genome.Band{Band: "52F8", Desc: "Band", StartPos: 12086785, EndPos: 12091686, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52F9 = genome.Band{Band: "52F9", Desc: "Band", StartPos: 12091686, EndPos: 12098689, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52F10 = genome.Band{Band: "52F10", Desc: "Band", StartPos: 12098689, EndPos: 12105691, Giemsa: "n/a", Chr: &Chr2R} Chr2R_52F11 = genome.Band{Band: "52F11", Desc: "Band", StartPos: 12105691, EndPos: 12119039, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53A1 = genome.Band{Band: "53A1", Desc: "Band", StartPos: 12119039, EndPos: 12134488, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53A2 = genome.Band{Band: "53A2", Desc: "Band", StartPos: 12134488, EndPos: 12149937, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53A3 = genome.Band{Band: "53A3", Desc: "Band", StartPos: 12149937, EndPos: 12154839, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53A4 = genome.Band{Band: "53A4", Desc: "Band", StartPos: 12154839, EndPos: 12168187, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53A5 = genome.Band{Band: "53A5", Desc: "Band", StartPos: 12168187, EndPos: 12173088, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53B1 = genome.Band{Band: "53B1", Desc: "Band", StartPos: 12173088, EndPos: 12184292, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53B2 = genome.Band{Band: "53B2", Desc: "Band", StartPos: 12184292, EndPos: 12195496, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53B3 = genome.Band{Band: "53B3", Desc: "Band", StartPos: 12195496, EndPos: 12202498, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53B4 = genome.Band{Band: "53B4", Desc: "Band", StartPos: 12202498, EndPos: 12209501, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53B5 = genome.Band{Band: "53B5", Desc: "Band", StartPos: 12209501, EndPos: 12216503, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53B6 = genome.Band{Band: "53B6", Desc: "Band", StartPos: 12216503, EndPos: 12221404, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C1 = genome.Band{Band: "53C1", Desc: "Band", StartPos: 12221404, EndPos: 12236853, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C2 = genome.Band{Band: "53C2", Desc: "Band", StartPos: 12236853, EndPos: 12252302, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C3 = genome.Band{Band: "53C3", Desc: "Band", StartPos: 12252302, EndPos: 12269852, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C4 = genome.Band{Band: "53C4", Desc: "Band", StartPos: 12269852, EndPos: 12334758, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C5 = genome.Band{Band: "53C5", Desc: "Band", StartPos: 12334758, EndPos: 12356925, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C6 = genome.Band{Band: "53C6", Desc: "Band", StartPos: 12356925, EndPos: 12409997, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C7 = genome.Band{Band: "53C7", Desc: "Band", StartPos: 12409997, EndPos: 12452733, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C8 = genome.Band{Band: "53C8", Desc: "Band", StartPos: 12452733, EndPos: 12464669, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C9 = genome.Band{Band: "53C9", Desc: "Band", StartPos: 12464669, EndPos: 12491951, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C10 = genome.Band{Band: "53C10", Desc: "Band", StartPos: 12491951, EndPos: 12494964, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C11 = genome.Band{Band: "53C11", Desc: "Band", StartPos: 12494964, EndPos: 12510502, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C12 = genome.Band{Band: "53C12", Desc: "Band", StartPos: 12510502, EndPos: 12522454, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C13 = genome.Band{Band: "53C13", Desc: "Band", StartPos: 12522454, EndPos: 12530821, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C14 = genome.Band{Band: "53C14", Desc: "Band", StartPos: 12530821, EndPos: 12542773, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53C15 = genome.Band{Band: "53C15", Desc: "Band", StartPos: 12542773, EndPos: 12554725, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D1 = genome.Band{Band: "53D1", Desc: "Band", StartPos: 12554725, EndPos: 12577509, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D2 = genome.Band{Band: "53D2", Desc: "Band", StartPos: 12577509, EndPos: 12600293, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D3 = genome.Band{Band: "53D3", Desc: "Band", StartPos: 12600293, EndPos: 12615831, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D4 = genome.Band{Band: "53D4", Desc: "Band", StartPos: 12615831, EndPos: 12624198, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D5 = genome.Band{Band: "53D5", Desc: "Band", StartPos: 12624198, EndPos: 12636150, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D6 = genome.Band{Band: "53D6", Desc: "Band", StartPos: 12636150, EndPos: 12648102, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D7 = genome.Band{Band: "53D7", Desc: "Band", StartPos: 12648102, EndPos: 12660054, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D8 = genome.Band{Band: "53D8", Desc: "Band", StartPos: 12660054, EndPos: 12675592, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D9 = genome.Band{Band: "53D9", Desc: "Band", StartPos: 12675592, EndPos: 12698376, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D10 = genome.Band{Band: "53D10", Desc: "Band", StartPos: 12698376, EndPos: 12706743, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D11 = genome.Band{Band: "53D11", Desc: "Band", StartPos: 12706743, EndPos: 12722280, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D12 = genome.Band{Band: "53D12", Desc: "Band", StartPos: 12722280, EndPos: 12734233, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D13 = genome.Band{Band: "53D13", Desc: "Band", StartPos: 12734233, EndPos: 12742599, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D14 = genome.Band{Band: "53D14", Desc: "Band", StartPos: 12742599, EndPos: 12759743, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53D15 = genome.Band{Band: "53D15", Desc: "Band", StartPos: 12759743, EndPos: 12769926, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53E1 = genome.Band{Band: "53E1", Desc: "Band", StartPos: 12769926, EndPos: 12802022, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53E2 = genome.Band{Band: "53E2", Desc: "Band", StartPos: 12802022, EndPos: 12845390, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53E3 = genome.Band{Band: "53E3", Desc: "Band", StartPos: 12845390, EndPos: 12860896, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53E4 = genome.Band{Band: "53E4", Desc: "Band", StartPos: 12860896, EndPos: 12915029, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53E5 = genome.Band{Band: "53E5", Desc: "Band", StartPos: 12915029, EndPos: 12915039, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53E6 = genome.Band{Band: "53E6", Desc: "Band", StartPos: 12915039, EndPos: 12915049, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53E7 = genome.Band{Band: "53E7", Desc: "Band", StartPos: 12915049, EndPos: 12915059, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53E8 = genome.Band{Band: "53E8", Desc: "Band", StartPos: 12915059, EndPos: 12915069, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53E9 = genome.Band{Band: "53E9", Desc: "Band", StartPos: 12915069, EndPos: 12915118, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53E10 = genome.Band{Band: "53E10", Desc: "Band", StartPos: 12915118, EndPos: 12920892, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53E11 = genome.Band{Band: "53E11", Desc: "Band", StartPos: 12920892, EndPos: 12926667, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F1 = genome.Band{Band: "53F1", Desc: "Band", StartPos: 12926667, EndPos: 12935906, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F2 = genome.Band{Band: "53F2", Desc: "Band", StartPos: 12935906, EndPos: 12945145, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F3 = genome.Band{Band: "53F3", Desc: "Band", StartPos: 12945145, EndPos: 12949187, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F4 = genome.Band{Band: "53F4", Desc: "Band", StartPos: 12949187, EndPos: 12954962, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F5 = genome.Band{Band: "53F5", Desc: "Band", StartPos: 12954962, EndPos: 12971465, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F6 = genome.Band{Band: "53F6", Desc: "Band", StartPos: 12971465, EndPos: 12976638, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F7 = genome.Band{Band: "53F7", Desc: "Band", StartPos: 12976638, EndPos: 12984028, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F8 = genome.Band{Band: "53F8", Desc: "Band", StartPos: 12984028, EndPos: 12991417, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F9 = genome.Band{Band: "53F9", Desc: "Band", StartPos: 12991417, EndPos: 12995243, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F10 = genome.Band{Band: "53F10", Desc: "Band", StartPos: 12995243, EndPos: 12999067, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F11 = genome.Band{Band: "53F11", Desc: "Band", StartPos: 12999067, EndPos: 13006169, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F12 = genome.Band{Band: "53F12", Desc: "Band", StartPos: 13006169, EndPos: 13014911, Giemsa: "n/a", Chr: &Chr2R} Chr2R_53F13 = genome.Band{Band: "53F13", Desc: "Band", StartPos: 13014911, EndPos: 13020374, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54A1 = genome.Band{Band: "54A1", Desc: "Band", StartPos: 13020374, EndPos: 13030788, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54A2 = genome.Band{Band: "54A2", Desc: "Band", StartPos: 13030788, EndPos: 13092566, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54A3 = genome.Band{Band: "54A3", Desc: "Band", StartPos: 13092566, EndPos: 13115252, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B1 = genome.Band{Band: "54B1", Desc: "Band", StartPos: 13115252, EndPos: 13177031, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B2 = genome.Band{Band: "54B2", Desc: "Band", StartPos: 13177031, EndPos: 13218324, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B3 = genome.Band{Band: "54B3", Desc: "Band", StartPos: 13218324, EndPos: 13228713, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B4 = genome.Band{Band: "54B4", Desc: "Band", StartPos: 13228713, EndPos: 13255097, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B5 = genome.Band{Band: "54B5", Desc: "Band", StartPos: 13255097, EndPos: 13281482, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B6 = genome.Band{Band: "54B6", Desc: "Band", StartPos: 13281482, EndPos: 13291871, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B7 = genome.Band{Band: "54B7", Desc: "Band", StartPos: 13291871, EndPos: 13326171, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B8 = genome.Band{Band: "54B8", Desc: "Band", StartPos: 13326171, EndPos: 13326181, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B9 = genome.Band{Band: "54B9", Desc: "Band", StartPos: 13326181, EndPos: 13326191, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B10 = genome.Band{Band: "54B10", Desc: "Band", StartPos: 13326191, EndPos: 13326201, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B11 = genome.Band{Band: "54B11", Desc: "Band", StartPos: 13326201, EndPos: 13326211, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B12 = genome.Band{Band: "54B12", Desc: "Band", StartPos: 13326211, EndPos: 13326221, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B13 = genome.Band{Band: "54B13", Desc: "Band", StartPos: 13326221, EndPos: 13326231, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B14 = genome.Band{Band: "54B14", Desc: "Band", StartPos: 13326231, EndPos: 13328227, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B15 = genome.Band{Band: "54B15", Desc: "Band", StartPos: 13328227, EndPos: 13335515, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B16 = genome.Band{Band: "54B16", Desc: "Band", StartPos: 13335515, EndPos: 13369175, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B17 = genome.Band{Band: "54B17", Desc: "Band", StartPos: 13369175, EndPos: 13384971, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54B18 = genome.Band{Band: "54B18", Desc: "Band", StartPos: 13384971, EndPos: 13394844, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54C1 = genome.Band{Band: "54C1", Desc: "Band", StartPos: 13394844, EndPos: 13421932, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54C2 = genome.Band{Band: "54C2", Desc: "Band", StartPos: 13421932, EndPos: 13421942, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54C3 = genome.Band{Band: "54C3", Desc: "Band", StartPos: 13421942, EndPos: 13436758, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54C4 = genome.Band{Band: "54C4", Desc: "Band", StartPos: 13436758, EndPos: 13437865, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54C5 = genome.Band{Band: "54C5", Desc: "Band", StartPos: 13437865, EndPos: 13447080, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54C6 = genome.Band{Band: "54C6", Desc: "Band", StartPos: 13447080, EndPos: 13447090, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54C7 = genome.Band{Band: "54C7", Desc: "Band", StartPos: 13447090, EndPos: 13448649, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54C8 = genome.Band{Band: "54C8", Desc: "Band", StartPos: 13448649, EndPos: 13454184, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54C9 = genome.Band{Band: "54C9", Desc: "Band", StartPos: 13454184, EndPos: 13462349, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54C10 = genome.Band{Band: "54C10", Desc: "Band", StartPos: 13462349, EndPos: 13472963, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54C11 = genome.Band{Band: "54C11", Desc: "Band", StartPos: 13472963, EndPos: 13476177, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54C12 = genome.Band{Band: "54C12", Desc: "Band", StartPos: 13476177, EndPos: 13489244, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54D1 = genome.Band{Band: "54D1", Desc: "Band", StartPos: 13489244, EndPos: 13510328, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54D2 = genome.Band{Band: "54D2", Desc: "Band", StartPos: 13510328, EndPos: 13531412, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54D3 = genome.Band{Band: "54D3", Desc: "Band", StartPos: 13531412, EndPos: 13542472, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54D4 = genome.Band{Band: "54D4", Desc: "Band", StartPos: 13542472, EndPos: 13563556, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54D5 = genome.Band{Band: "54D5", Desc: "Band", StartPos: 13563556, EndPos: 13581252, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54D6 = genome.Band{Band: "54D6", Desc: "Band", StartPos: 13581252, EndPos: 13588995, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54E1 = genome.Band{Band: "54E1", Desc: "Band", StartPos: 13588995, EndPos: 13610079, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54E2 = genome.Band{Band: "54E2", Desc: "Band", StartPos: 13610079, EndPos: 13615296, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54E3 = genome.Band{Band: "54E3", Desc: "Band", StartPos: 13615296, EndPos: 13620421, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54E4 = genome.Band{Band: "54E4", Desc: "Band", StartPos: 13620421, EndPos: 13625546, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54E5 = genome.Band{Band: "54E5", Desc: "Band", StartPos: 13625546, EndPos: 13628306, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54E6 = genome.Band{Band: "54E6", Desc: "Band", StartPos: 13628306, EndPos: 13629858, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54E7 = genome.Band{Band: "54E7", Desc: "Band", StartPos: 13629858, EndPos: 13637373, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54E8 = genome.Band{Band: "54E8", Desc: "Band", StartPos: 13637373, EndPos: 13660299, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54E9 = genome.Band{Band: "54E9", Desc: "Band", StartPos: 13660299, EndPos: 13687509, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54E10 = genome.Band{Band: "54E10", Desc: "Band", StartPos: 13687509, EndPos: 13699413, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54F1 = genome.Band{Band: "54F1", Desc: "Band", StartPos: 13699413, EndPos: 13746074, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54F2 = genome.Band{Band: "54F2", Desc: "Band", StartPos: 13746074, EndPos: 13746084, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54F3 = genome.Band{Band: "54F3", Desc: "Band", StartPos: 13746084, EndPos: 13749714, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54F4 = genome.Band{Band: "54F4", Desc: "Band", StartPos: 13749714, EndPos: 13761641, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54F5 = genome.Band{Band: "54F5", Desc: "Band", StartPos: 13761641, EndPos: 13773568, Giemsa: "n/a", Chr: &Chr2R} Chr2R_54F6 = genome.Band{Band: "54F6", Desc: "Band", StartPos: 13773568, EndPos: 13778264, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55A1 = genome.Band{Band: "55A1", Desc: "Band", StartPos: 13778264, EndPos: 13811733, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55A2 = genome.Band{Band: "55A2", Desc: "Band", StartPos: 13811733, EndPos: 13845202, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55A3 = genome.Band{Band: "55A3", Desc: "Band", StartPos: 13845202, EndPos: 13899543, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55A4 = genome.Band{Band: "55A4", Desc: "Band", StartPos: 13899543, EndPos: 13901407, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55B1 = genome.Band{Band: "55B1", Desc: "Band", StartPos: 13901407, EndPos: 13934876, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55B2 = genome.Band{Band: "55B2", Desc: "Band", StartPos: 13934876, EndPos: 13967600, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55B3 = genome.Band{Band: "55B3", Desc: "Band", StartPos: 13967600, EndPos: 13969464, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55B4 = genome.Band{Band: "55B4", Desc: "Band", StartPos: 13969464, EndPos: 13984968, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55B5 = genome.Band{Band: "55B5", Desc: "Band", StartPos: 13984968, EndPos: 14006958, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55B6 = genome.Band{Band: "55B6", Desc: "Band", StartPos: 14006958, EndPos: 14008822, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55B7 = genome.Band{Band: "55B7", Desc: "Band", StartPos: 14008822, EndPos: 14020748, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55B8 = genome.Band{Band: "55B8", Desc: "Band", StartPos: 14020748, EndPos: 14029097, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55B9 = genome.Band{Band: "55B9", Desc: "Band", StartPos: 14029097, EndPos: 14051087, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55B10 = genome.Band{Band: "55B10", Desc: "Band", StartPos: 14051087, EndPos: 14052950, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55B11 = genome.Band{Band: "55B11", Desc: "Band", StartPos: 14052950, EndPos: 14061299, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55B12 = genome.Band{Band: "55B12", Desc: "Band", StartPos: 14061299, EndPos: 14104203, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C1 = genome.Band{Band: "55C1", Desc: "Band", StartPos: 14104203, EndPos: 14151992, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C2 = genome.Band{Band: "55C2", Desc: "Band", StartPos: 14151992, EndPos: 14199780, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C3 = genome.Band{Band: "55C3", Desc: "Band", StartPos: 14199780, EndPos: 14227939, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C4 = genome.Band{Band: "55C4", Desc: "Band", StartPos: 14227939, EndPos: 14282226, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C5 = genome.Band{Band: "55C5", Desc: "Band", StartPos: 14282226, EndPos: 14282236, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C6 = genome.Band{Band: "55C6", Desc: "Band", StartPos: 14282236, EndPos: 14287208, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C7 = genome.Band{Band: "55C7", Desc: "Band", StartPos: 14287208, EndPos: 14295851, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C8 = genome.Band{Band: "55C8", Desc: "Band", StartPos: 14295851, EndPos: 14311901, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C9 = genome.Band{Band: "55C9", Desc: "Band", StartPos: 14311901, EndPos: 14342073, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C10 = genome.Band{Band: "55C10", Desc: "Band", StartPos: 14342073, EndPos: 14344620, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C11 = genome.Band{Band: "55C11", Desc: "Band", StartPos: 14344620, EndPos: 14364334, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C12 = genome.Band{Band: "55C12", Desc: "Band", StartPos: 14364334, EndPos: 14366337, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55C13 = genome.Band{Band: "55C13", Desc: "Band", StartPos: 14366337, EndPos: 14383006, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55D1 = genome.Band{Band: "55D1", Desc: "Band", StartPos: 14383006, EndPos: 14422112, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55D2 = genome.Band{Band: "55D2", Desc: "Band", StartPos: 14422112, EndPos: 14424116, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55D3 = genome.Band{Band: "55D3", Desc: "Band", StartPos: 14424116, EndPos: 14444631, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55D4 = genome.Band{Band: "55D4", Desc: "Band", StartPos: 14444631, EndPos: 14469073, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55E1 = genome.Band{Band: "55E1", Desc: "Band", StartPos: 14469073, EndPos: 14501207, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55E2 = genome.Band{Band: "55E2", Desc: "Band", StartPos: 14501207, EndPos: 14519075, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55E3 = genome.Band{Band: "55E3", Desc: "Band", StartPos: 14519075, EndPos: 14529994, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55E4 = genome.Band{Band: "55E4", Desc: "Band", StartPos: 14529994, EndPos: 14538393, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55E5 = genome.Band{Band: "55E5", Desc: "Band", StartPos: 14538393, EndPos: 14551832, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55E6 = genome.Band{Band: "55E6", Desc: "Band", StartPos: 14551832, EndPos: 14577450, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55E7 = genome.Band{Band: "55E7", Desc: "Band", StartPos: 14577450, EndPos: 14578762, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55E8 = genome.Band{Band: "55E8", Desc: "Band", StartPos: 14578762, EndPos: 14592201, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55E9 = genome.Band{Band: "55E9", Desc: "Band", StartPos: 14592201, EndPos: 14610732, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55E10 = genome.Band{Band: "55E10", Desc: "Band", StartPos: 14610732, EndPos: 14621651, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55E11 = genome.Band{Band: "55E11", Desc: "Band", StartPos: 14621651, EndPos: 14632570, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55E12 = genome.Band{Band: "55E12", Desc: "Band", StartPos: 14632570, EndPos: 14638450, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F1 = genome.Band{Band: "55F1", Desc: "Band", StartPos: 14638450, EndPos: 14656981, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F2 = genome.Band{Band: "55F2", Desc: "Band", StartPos: 14656981, EndPos: 14670420, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F3 = genome.Band{Band: "55F3", Desc: "Band", StartPos: 14670420, EndPos: 14686431, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F4 = genome.Band{Band: "55F4", Desc: "Band", StartPos: 14686431, EndPos: 14694830, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F5 = genome.Band{Band: "55F5", Desc: "Band", StartPos: 14694830, EndPos: 14708269, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F6 = genome.Band{Band: "55F6", Desc: "Band", StartPos: 14708269, EndPos: 14730648, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F7 = genome.Band{Band: "55F7", Desc: "Band", StartPos: 14730648, EndPos: 14742060, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F8 = genome.Band{Band: "55F8", Desc: "Band", StartPos: 14742060, EndPos: 14772119, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F9 = genome.Band{Band: "55F9", Desc: "Band", StartPos: 14772119, EndPos: 14774666, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F10 = genome.Band{Band: "55F10", Desc: "Band", StartPos: 14774666, EndPos: 14786079, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F11 = genome.Band{Band: "55F11", Desc: "Band", StartPos: 14786079, EndPos: 14806254, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F12 = genome.Band{Band: "55F12", Desc: "Band", StartPos: 14806254, EndPos: 14808801, Giemsa: "n/a", Chr: &Chr2R} Chr2R_55F13 = genome.Band{Band: "55F13", Desc: "Band", StartPos: 14808801, EndPos: 14815220, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56A1 = genome.Band{Band: "56A1", Desc: "Band", StartPos: 14815220, EndPos: 14856080, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56A2 = genome.Band{Band: "56A2", Desc: "Band", StartPos: 14856080, EndPos: 14891675, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56A3 = genome.Band{Band: "56A3", Desc: "Band", StartPos: 14891675, EndPos: 14900411, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56B1 = genome.Band{Band: "56B1", Desc: "Band", StartPos: 14900411, EndPos: 14939255, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56B2 = genome.Band{Band: "56B2", Desc: "Band", StartPos: 14939255, EndPos: 14978099, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56B3 = genome.Band{Band: "56B3", Desc: "Band", StartPos: 14978099, EndPos: 14990579, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56B4 = genome.Band{Band: "56B4", Desc: "Band", StartPos: 14990579, EndPos: 14995493, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56B5 = genome.Band{Band: "56B5", Desc: "Band", StartPos: 14995493, EndPos: 15029735, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56B6 = genome.Band{Band: "56B6", Desc: "Band", StartPos: 15029735, EndPos: 15031685, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56B7 = genome.Band{Band: "56B7", Desc: "Band", StartPos: 15031685, EndPos: 15044165, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56C1 = genome.Band{Band: "56C1", Desc: "Band", StartPos: 15044165, EndPos: 15075443, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56C2 = genome.Band{Band: "56C2", Desc: "Band", StartPos: 15075443, EndPos: 15100495, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56C3 = genome.Band{Band: "56C3", Desc: "Band", StartPos: 15100495, EndPos: 15108494, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56C4 = genome.Band{Band: "56C4", Desc: "Band", StartPos: 15108494, EndPos: 15139846, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56C5 = genome.Band{Band: "56C5", Desc: "Band", StartPos: 15139846, EndPos: 15141632, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56C6 = genome.Band{Band: "56C6", Desc: "Band", StartPos: 15141632, EndPos: 15172984, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56C7 = genome.Band{Band: "56C7", Desc: "Band", StartPos: 15172984, EndPos: 15174770, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56C8 = genome.Band{Band: "56C8", Desc: "Band", StartPos: 15174770, EndPos: 15182768, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56C9 = genome.Band{Band: "56C9", Desc: "Band", StartPos: 15182768, EndPos: 15194195, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56C10 = genome.Band{Band: "56C10", Desc: "Band", StartPos: 15194195, EndPos: 15205622, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56C11 = genome.Band{Band: "56C11", Desc: "Band", StartPos: 15205622, EndPos: 15217049, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D1 = genome.Band{Band: "56D1", Desc: "Band", StartPos: 15217049, EndPos: 15245687, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D2 = genome.Band{Band: "56D2", Desc: "Band", StartPos: 15245687, EndPos: 15274326, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D3 = genome.Band{Band: "56D3", Desc: "Band", StartPos: 15274326, EndPos: 15302964, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D4 = genome.Band{Band: "56D4", Desc: "Band", StartPos: 15302964, EndPos: 15310963, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D5 = genome.Band{Band: "56D5", Desc: "Band", StartPos: 15310963, EndPos: 15329246, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D6 = genome.Band{Band: "56D6", Desc: "Band", StartPos: 15329246, EndPos: 15329256, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D7 = genome.Band{Band: "56D7", Desc: "Band", StartPos: 15329256, EndPos: 15337987, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D8 = genome.Band{Band: "56D8", Desc: "Band", StartPos: 15337987, EndPos: 15341931, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D9 = genome.Band{Band: "56D9", Desc: "Band", StartPos: 15341931, EndPos: 15347565, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D10 = genome.Band{Band: "56D10", Desc: "Band", StartPos: 15347565, EndPos: 15357320, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D11 = genome.Band{Band: "56D11", Desc: "Band", StartPos: 15357320, EndPos: 15373979, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D12 = genome.Band{Band: "56D12", Desc: "Band", StartPos: 15373979, EndPos: 15379265, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D13 = genome.Band{Band: "56D13", Desc: "Band", StartPos: 15379265, EndPos: 15386816, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D14 = genome.Band{Band: "56D14", Desc: "Band", StartPos: 15386816, EndPos: 15394366, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56D15 = genome.Band{Band: "56D15", Desc: "Band", StartPos: 15394366, EndPos: 15457963, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56E1 = genome.Band{Band: "56E1", Desc: "Band", StartPos: 15457963, EndPos: 15570531, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56E2 = genome.Band{Band: "56E2", Desc: "Band", StartPos: 15570531, EndPos: 15669625, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56E3 = genome.Band{Band: "56E3", Desc: "Band", StartPos: 15669625, EndPos: 15701065, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56E4 = genome.Band{Band: "56E4", Desc: "Band", StartPos: 15701065, EndPos: 15786684, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56E5 = genome.Band{Band: "56E5", Desc: "Band", StartPos: 15786684, EndPos: 15858548, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56E6 = genome.Band{Band: "56E6", Desc: "Band", StartPos: 15858548, EndPos: 15858558, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F1 = genome.Band{Band: "56F1", Desc: "Band", StartPos: 15858558, EndPos: 15858568, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F2 = genome.Band{Band: "56F2", Desc: "Band", StartPos: 15858568, EndPos: 15858578, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F3 = genome.Band{Band: "56F3", Desc: "Band", StartPos: 15858578, EndPos: 15861809, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F4 = genome.Band{Band: "56F4", Desc: "Band", StartPos: 15861809, EndPos: 15902582, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F5 = genome.Band{Band: "56F5", Desc: "Band", StartPos: 15902582, EndPos: 15917111, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F6 = genome.Band{Band: "56F6", Desc: "Band", StartPos: 15917111, EndPos: 15957883, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F7 = genome.Band{Band: "56F7", Desc: "Band", StartPos: 15957883, EndPos: 15998655, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F8 = genome.Band{Band: "56F8", Desc: "Band", StartPos: 15998655, EndPos: 16039427, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F9 = genome.Band{Band: "56F9", Desc: "Band", StartPos: 16039427, EndPos: 16107081, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F10 = genome.Band{Band: "56F10", Desc: "Band", StartPos: 16107081, EndPos: 16126400, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F11 = genome.Band{Band: "56F11", Desc: "Band", StartPos: 16126400, EndPos: 16163226, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F12 = genome.Band{Band: "56F12", Desc: "Band", StartPos: 16163226, EndPos: 16163236, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F13 = genome.Band{Band: "56F13", Desc: "Band", StartPos: 16163236, EndPos: 16163246, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F14 = genome.Band{Band: "56F14", Desc: "Band", StartPos: 16163246, EndPos: 16164000, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F15 = genome.Band{Band: "56F15", Desc: "Band", StartPos: 16164000, EndPos: 16168331, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F16 = genome.Band{Band: "56F16", Desc: "Band", StartPos: 16168331, EndPos: 16224068, Giemsa: "n/a", Chr: &Chr2R} Chr2R_56F17 = genome.Band{Band: "56F17", Desc: "Band", StartPos: 16224068, EndPos: 16249262, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57A1 = genome.Band{Band: "57A1", Desc: "Band", StartPos: 16249262, EndPos: 16292019, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57A2 = genome.Band{Band: "57A2", Desc: "Band", StartPos: 16292019, EndPos: 16334776, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57A3 = genome.Band{Band: "57A3", Desc: "Band", StartPos: 16334776, EndPos: 16377533, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57A4 = genome.Band{Band: "57A4", Desc: "Band", StartPos: 16377533, EndPos: 16420290, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57A5 = genome.Band{Band: "57A5", Desc: "Band", StartPos: 16420290, EndPos: 16457233, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57A6 = genome.Band{Band: "57A6", Desc: "Band", StartPos: 16457233, EndPos: 16481051, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57A7 = genome.Band{Band: "57A7", Desc: "Band", StartPos: 16481051, EndPos: 16508735, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57A8 = genome.Band{Band: "57A8", Desc: "Band", StartPos: 16508735, EndPos: 16531229, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57A9 = genome.Band{Band: "57A9", Desc: "Band", StartPos: 16531229, EndPos: 16557310, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57A10 = genome.Band{Band: "57A10", Desc: "Band", StartPos: 16557310, EndPos: 16571354, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B1 = genome.Band{Band: "57B1", Desc: "Band", StartPos: 16571354, EndPos: 16621636, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B2 = genome.Band{Band: "57B2", Desc: "Band", StartPos: 16621636, EndPos: 16684080, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B3 = genome.Band{Band: "57B3", Desc: "Band", StartPos: 16684080, EndPos: 16762048, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B4 = genome.Band{Band: "57B4", Desc: "Band", StartPos: 16762048, EndPos: 16829409, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B5 = genome.Band{Band: "57B5", Desc: "Band", StartPos: 16829409, EndPos: 16896771, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B6 = genome.Band{Band: "57B6", Desc: "Band", StartPos: 16896771, EndPos: 16896781, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B7 = genome.Band{Band: "57B7", Desc: "Band", StartPos: 16896781, EndPos: 16896791, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B8 = genome.Band{Band: "57B8", Desc: "Band", StartPos: 16896791, EndPos: 16896801, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B9 = genome.Band{Band: "57B9", Desc: "Band", StartPos: 16896801, EndPos: 16907298, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B10 = genome.Band{Band: "57B10", Desc: "Band", StartPos: 16907298, EndPos: 16908056, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B11 = genome.Band{Band: "57B11", Desc: "Band", StartPos: 16908056, EndPos: 16911453, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B12 = genome.Band{Band: "57B12", Desc: "Band", StartPos: 16911453, EndPos: 16914850, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B13 = genome.Band{Band: "57B13", Desc: "Band", StartPos: 16914850, EndPos: 16921159, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B14 = genome.Band{Band: "57B14", Desc: "Band", StartPos: 16921159, EndPos: 16936097, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B15 = genome.Band{Band: "57B15", Desc: "Band", StartPos: 16936097, EndPos: 16942957, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B16 = genome.Band{Band: "57B16", Desc: "Band", StartPos: 16942957, EndPos: 16966905, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B17 = genome.Band{Band: "57B17", Desc: "Band", StartPos: 16966905, EndPos: 16968437, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B18 = genome.Band{Band: "57B18", Desc: "Band", StartPos: 16968437, EndPos: 16972295, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B19 = genome.Band{Band: "57B19", Desc: "Band", StartPos: 16972295, EndPos: 16979155, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57B20 = genome.Band{Band: "57B20", Desc: "Band", StartPos: 16979155, EndPos: 16994835, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57C1 = genome.Band{Band: "57C1", Desc: "Band", StartPos: 16994835, EndPos: 17010515, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57C2 = genome.Band{Band: "57C2", Desc: "Band", StartPos: 17010515, EndPos: 17022580, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57C3 = genome.Band{Band: "57C3", Desc: "Band", StartPos: 17022580, EndPos: 17032383, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57C4 = genome.Band{Band: "57C4", Desc: "Band", StartPos: 17032383, EndPos: 17039924, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57C5 = genome.Band{Band: "57C5", Desc: "Band", StartPos: 17039924, EndPos: 17047465, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57C6 = genome.Band{Band: "57C6", Desc: "Band", StartPos: 17047465, EndPos: 17055006, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57C7 = genome.Band{Band: "57C7", Desc: "Band", StartPos: 17055006, EndPos: 17067333, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57C8 = genome.Band{Band: "57C8", Desc: "Band", StartPos: 17067333, EndPos: 17074148, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57C9 = genome.Band{Band: "57C9", Desc: "Band", StartPos: 17074148, EndPos: 17086804, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D1 = genome.Band{Band: "57D1", Desc: "Band", StartPos: 17086804, EndPos: 17102381, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D2 = genome.Band{Band: "57D2", Desc: "Band", StartPos: 17102381, EndPos: 17117959, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D3 = genome.Band{Band: "57D3", Desc: "Band", StartPos: 17117959, EndPos: 17136517, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D4 = genome.Band{Band: "57D4", Desc: "Band", StartPos: 17136517, EndPos: 17155076, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D5 = genome.Band{Band: "57D5", Desc: "Band", StartPos: 17155076, EndPos: 17164811, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D6 = genome.Band{Band: "57D6", Desc: "Band", StartPos: 17164811, EndPos: 17168645, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D7 = genome.Band{Band: "57D7", Desc: "Band", StartPos: 17168645, EndPos: 17175460, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D8 = genome.Band{Band: "57D8", Desc: "Band", StartPos: 17175460, EndPos: 17187508, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D9 = genome.Band{Band: "57D9", Desc: "Band", StartPos: 17187508, EndPos: 17189029, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D10 = genome.Band{Band: "57D10", Desc: "Band", StartPos: 17189029, EndPos: 17195844, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D11 = genome.Band{Band: "57D11", Desc: "Band", StartPos: 17195844, EndPos: 17214402, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D12 = genome.Band{Band: "57D12", Desc: "Band", StartPos: 17214402, EndPos: 17253164, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57D13 = genome.Band{Band: "57D13", Desc: "Band", StartPos: 17253164, EndPos: 17266246, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57E1 = genome.Band{Band: "57E1", Desc: "Band", StartPos: 17266246, EndPos: 17290543, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57E2 = genome.Band{Band: "57E2", Desc: "Band", StartPos: 17290543, EndPos: 17320446, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57E3 = genome.Band{Band: "57E3", Desc: "Band", StartPos: 17320446, EndPos: 17349182, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57E4 = genome.Band{Band: "57E4", Desc: "Band", StartPos: 17349182, EndPos: 17352102, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57E5 = genome.Band{Band: "57E5", Desc: "Band", StartPos: 17352102, EndPos: 17365185, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57E6 = genome.Band{Band: "57E6", Desc: "Band", StartPos: 17365185, EndPos: 17388313, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57E7 = genome.Band{Band: "57E7", Desc: "Band", StartPos: 17388313, EndPos: 17388323, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57E8 = genome.Band{Band: "57E8", Desc: "Band", StartPos: 17388323, EndPos: 17393814, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57E9 = genome.Band{Band: "57E9", Desc: "Band", StartPos: 17393814, EndPos: 17423484, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57E10 = genome.Band{Band: "57E10", Desc: "Band", StartPos: 17423484, EndPos: 17424848, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57E11 = genome.Band{Band: "57E11", Desc: "Band", StartPos: 17424848, EndPos: 17436522, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57F1 = genome.Band{Band: "57F1", Desc: "Band", StartPos: 17436522, EndPos: 17460429, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57F2 = genome.Band{Band: "57F2", Desc: "Band", StartPos: 17460429, EndPos: 17484337, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57F3 = genome.Band{Band: "57F3", Desc: "Band", StartPos: 17484337, EndPos: 17499279, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57F4 = genome.Band{Band: "57F4", Desc: "Band", StartPos: 17499279, EndPos: 17514221, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57F5 = genome.Band{Band: "57F5", Desc: "Band", StartPos: 17514221, EndPos: 17533646, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57F6 = genome.Band{Band: "57F6", Desc: "Band", StartPos: 17533646, EndPos: 17550256, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57F7 = genome.Band{Band: "57F7", Desc: "Band", StartPos: 17550256, EndPos: 17559201, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57F8 = genome.Band{Band: "57F8", Desc: "Band", StartPos: 17559201, EndPos: 17579644, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57F9 = genome.Band{Band: "57F9", Desc: "Band", StartPos: 17579644, EndPos: 17592422, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57F10 = genome.Band{Band: "57F10", Desc: "Band", StartPos: 17592422, EndPos: 17609032, Giemsa: "n/a", Chr: &Chr2R} Chr2R_57F11 = genome.Band{Band: "57F11", Desc: "Band", StartPos: 17609032, EndPos: 17646020, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58A1 = genome.Band{Band: "58A1", Desc: "Band", StartPos: 17646020, EndPos: 17689214, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58A2 = genome.Band{Band: "58A2", Desc: "Band", StartPos: 17689214, EndPos: 17732408, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58A3 = genome.Band{Band: "58A3", Desc: "Band", StartPos: 17732408, EndPos: 17815114, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58A4 = genome.Band{Band: "58A4", Desc: "Band", StartPos: 17815114, EndPos: 17865563, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58B1 = genome.Band{Band: "58B1", Desc: "Band", StartPos: 17865563, EndPos: 17955743, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58B2 = genome.Band{Band: "58B2", Desc: "Band", StartPos: 17955743, EndPos: 17960618, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58B3 = genome.Band{Band: "58B3", Desc: "Band", StartPos: 17960618, EndPos: 17967531, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58B4 = genome.Band{Band: "58B4", Desc: "Band", StartPos: 17967531, EndPos: 17974444, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58B5 = genome.Band{Band: "58B5", Desc: "Band", StartPos: 17974444, EndPos: 17979284, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58B6 = genome.Band{Band: "58B6", Desc: "Band", StartPos: 17979284, EndPos: 17986197, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58B7 = genome.Band{Band: "58B7", Desc: "Band", StartPos: 17986197, EndPos: 17993110, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58B8 = genome.Band{Band: "58B8", Desc: "Band", StartPos: 17993110, EndPos: 18002097, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58B9 = genome.Band{Band: "58B9", Desc: "Band", StartPos: 18002097, EndPos: 18011083, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58B10 = genome.Band{Band: "58B10", Desc: "Band", StartPos: 18011083, EndPos: 18015923, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58C1 = genome.Band{Band: "58C1", Desc: "Band", StartPos: 18015923, EndPos: 18029100, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58C2 = genome.Band{Band: "58C2", Desc: "Band", StartPos: 18029100, EndPos: 18042278, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58C3 = genome.Band{Band: "58C3", Desc: "Band", StartPos: 18042278, EndPos: 18049191, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58C4 = genome.Band{Band: "58C4", Desc: "Band", StartPos: 18049191, EndPos: 18056104, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58C5 = genome.Band{Band: "58C5", Desc: "Band", StartPos: 18056104, EndPos: 18070924, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58C6 = genome.Band{Band: "58C6", Desc: "Band", StartPos: 18070924, EndPos: 18072004, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58C7 = genome.Band{Band: "58C7", Desc: "Band", StartPos: 18072004, EndPos: 18080991, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58D1 = genome.Band{Band: "58D1", Desc: "Band", StartPos: 18080991, EndPos: 18100391, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58D2 = genome.Band{Band: "58D2", Desc: "Band", StartPos: 18100391, EndPos: 18180169, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58D3 = genome.Band{Band: "58D3", Desc: "Band", StartPos: 18180169, EndPos: 18225656, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58D4 = genome.Band{Band: "58D4", Desc: "Band", StartPos: 18225656, EndPos: 18295128, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58D5 = genome.Band{Band: "58D5", Desc: "Band", StartPos: 18295128, EndPos: 18295138, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58D6 = genome.Band{Band: "58D6", Desc: "Band", StartPos: 18295138, EndPos: 18295148, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58D7 = genome.Band{Band: "58D7", Desc: "Band", StartPos: 18295148, EndPos: 18297441, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58D8 = genome.Band{Band: "58D8", Desc: "Band", StartPos: 18297441, EndPos: 18305025, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58E1 = genome.Band{Band: "58E1", Desc: "Band", StartPos: 18305025, EndPos: 18332181, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58E2 = genome.Band{Band: "58E2", Desc: "Band", StartPos: 18332181, EndPos: 18359336, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58E3 = genome.Band{Band: "58E3", Desc: "Band", StartPos: 18359336, EndPos: 18379990, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58E4 = genome.Band{Band: "58E4", Desc: "Band", StartPos: 18379990, EndPos: 18400645, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58E5 = genome.Band{Band: "58E5", Desc: "Band", StartPos: 18400645, EndPos: 18408229, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58E6 = genome.Band{Band: "58E6", Desc: "Band", StartPos: 18408229, EndPos: 18422315, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58E7 = genome.Band{Band: "58E7", Desc: "Band", StartPos: 18422315, EndPos: 18436400, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58E8 = genome.Band{Band: "58E8", Desc: "Band", StartPos: 18436400, EndPos: 18450486, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58E9 = genome.Band{Band: "58E9", Desc: "Band", StartPos: 18450486, EndPos: 18464572, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58E10 = genome.Band{Band: "58E10", Desc: "Band", StartPos: 18464572, EndPos: 18472156, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58F1 = genome.Band{Band: "58F1", Desc: "Band", StartPos: 18472156, EndPos: 18496061, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58F2 = genome.Band{Band: "58F2", Desc: "Band", StartPos: 18496061, EndPos: 18523609, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58F3 = genome.Band{Band: "58F3", Desc: "Band", StartPos: 18523609, EndPos: 18536096, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58F4 = genome.Band{Band: "58F4", Desc: "Band", StartPos: 18536096, EndPos: 18556074, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58F5 = genome.Band{Band: "58F5", Desc: "Band", StartPos: 18556074, EndPos: 18556084, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58F6 = genome.Band{Band: "58F6", Desc: "Band", StartPos: 18556084, EndPos: 18556616, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58F7 = genome.Band{Band: "58F7", Desc: "Band", StartPos: 18556616, EndPos: 18562640, Giemsa: "n/a", Chr: &Chr2R} Chr2R_58F8 = genome.Band{Band: "58F8", Desc: "Band", StartPos: 18562640, EndPos: 18563151, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59A1 = genome.Band{Band: "59A1", Desc: "Band", StartPos: 18563151, EndPos: 18573320, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59A2 = genome.Band{Band: "59A2", Desc: "Band", StartPos: 18573320, EndPos: 18580529, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59A3 = genome.Band{Band: "59A3", Desc: "Band", StartPos: 18580529, EndPos: 18630701, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59A4 = genome.Band{Band: "59A4", Desc: "Band", StartPos: 18630701, EndPos: 18654199, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59B1 = genome.Band{Band: "59B1", Desc: "Band", StartPos: 18654199, EndPos: 18686600, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59B2 = genome.Band{Band: "59B2", Desc: "Band", StartPos: 18686600, EndPos: 18737515, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59B3 = genome.Band{Band: "59B3", Desc: "Band", StartPos: 18737515, EndPos: 18753670, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59B4 = genome.Band{Band: "59B4", Desc: "Band", StartPos: 18753670, EndPos: 18810066, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59B5 = genome.Band{Band: "59B5", Desc: "Band", StartPos: 18810066, EndPos: 18810076, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59B6 = genome.Band{Band: "59B6", Desc: "Band", StartPos: 18810076, EndPos: 18827536, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59B7 = genome.Band{Band: "59B7", Desc: "Band", StartPos: 18827536, EndPos: 18843828, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59B8 = genome.Band{Band: "59B8", Desc: "Band", StartPos: 18843828, EndPos: 18865531, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59C1 = genome.Band{Band: "59C1", Desc: "Band", StartPos: 18865531, EndPos: 18907371, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59C2 = genome.Band{Band: "59C2", Desc: "Band", StartPos: 18907371, EndPos: 18949212, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59C3 = genome.Band{Band: "59C3", Desc: "Band", StartPos: 18949212, EndPos: 18986044, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59C4 = genome.Band{Band: "59C4", Desc: "Band", StartPos: 18986044, EndPos: 19017868, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59C5 = genome.Band{Band: "59C5", Desc: "Band", StartPos: 19017868, EndPos: 19026587, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59D1 = genome.Band{Band: "59D1", Desc: "Band", StartPos: 19026587, EndPos: 19066445, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59D2 = genome.Band{Band: "59D2", Desc: "Band", StartPos: 19066445, EndPos: 19102043, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59D3 = genome.Band{Band: "59D3", Desc: "Band", StartPos: 19102043, EndPos: 19137641, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59D4 = genome.Band{Band: "59D4", Desc: "Band", StartPos: 19137641, EndPos: 19172912, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59D5 = genome.Band{Band: "59D5", Desc: "Band", StartPos: 19172912, EndPos: 19193548, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59D6 = genome.Band{Band: "59D6", Desc: "Band", StartPos: 19193548, EndPos: 19218945, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59D7 = genome.Band{Band: "59D7", Desc: "Band", StartPos: 19218945, EndPos: 19239581, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59D8 = genome.Band{Band: "59D8", Desc: "Band", StartPos: 19239581, EndPos: 19250693, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59D9 = genome.Band{Band: "59D9", Desc: "Band", StartPos: 19250693, EndPos: 19276090, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59D10 = genome.Band{Band: "59D10", Desc: "Band", StartPos: 19276090, EndPos: 19296726, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59D11 = genome.Band{Band: "59D11", Desc: "Band", StartPos: 19296726, EndPos: 19322124, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59E1 = genome.Band{Band: "59E1", Desc: "Band", StartPos: 19322124, EndPos: 19371530, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59E2 = genome.Band{Band: "59E2", Desc: "Band", StartPos: 19371530, EndPos: 19419254, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59E3 = genome.Band{Band: "59E3", Desc: "Band", StartPos: 19419254, EndPos: 19443787, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59E4 = genome.Band{Band: "59E4", Desc: "Band", StartPos: 19443787, EndPos: 19450008, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59F1 = genome.Band{Band: "59F1", Desc: "Band", StartPos: 19450008, EndPos: 19468372, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59F2 = genome.Band{Band: "59F2", Desc: "Band", StartPos: 19468372, EndPos: 19468506, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59F3 = genome.Band{Band: "59F3", Desc: "Band", StartPos: 19468506, EndPos: 19468604, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59F4 = genome.Band{Band: "59F4", Desc: "Band", StartPos: 19468604, EndPos: 19520070, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59F5 = genome.Band{Band: "59F5", Desc: "Band", StartPos: 19520070, EndPos: 19561887, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59F6 = genome.Band{Band: "59F6", Desc: "Band", StartPos: 19561887, EndPos: 19613353, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59F7 = genome.Band{Band: "59F7", Desc: "Band", StartPos: 19613353, EndPos: 19674671, Giemsa: "n/a", Chr: &Chr2R} Chr2R_59F8 = genome.Band{Band: "59F8", Desc: "Band", StartPos: 19674671, EndPos: 19674681, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A1 = genome.Band{Band: "60A1", Desc: "Band", StartPos: 19674681, EndPos: 19692815, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A2 = genome.Band{Band: "60A2", Desc: "Band", StartPos: 19692815, EndPos: 19723596, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A3 = genome.Band{Band: "60A3", Desc: "Band", StartPos: 19723596, EndPos: 19739562, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A4 = genome.Band{Band: "60A4", Desc: "Band", StartPos: 19739562, EndPos: 19747595, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A5 = genome.Band{Band: "60A5", Desc: "Band", StartPos: 19747595, EndPos: 19756182, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A6 = genome.Band{Band: "60A6", Desc: "Band", StartPos: 19756182, EndPos: 19764769, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A7 = genome.Band{Band: "60A7", Desc: "Band", StartPos: 19764769, EndPos: 19770779, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A8 = genome.Band{Band: "60A8", Desc: "Band", StartPos: 19770779, EndPos: 19781942, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A9 = genome.Band{Band: "60A9", Desc: "Band", StartPos: 19781942, EndPos: 19796233, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A10 = genome.Band{Band: "60A10", Desc: "Band", StartPos: 19796233, EndPos: 19808930, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A11 = genome.Band{Band: "60A11", Desc: "Band", StartPos: 19808930, EndPos: 19821627, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A12 = genome.Band{Band: "60A12", Desc: "Band", StartPos: 19821627, EndPos: 19831395, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A13 = genome.Band{Band: "60A13", Desc: "Band", StartPos: 19831395, EndPos: 19844092, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A14 = genome.Band{Band: "60A14", Desc: "Band", StartPos: 19844092, EndPos: 19859293, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A15 = genome.Band{Band: "60A15", Desc: "Band", StartPos: 19859293, EndPos: 19864158, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60A16 = genome.Band{Band: "60A16", Desc: "Band", StartPos: 19864158, EndPos: 19877406, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B1 = genome.Band{Band: "60B1", Desc: "Band", StartPos: 19877406, EndPos: 19890655, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B2 = genome.Band{Band: "60B2", Desc: "Band", StartPos: 19890655, EndPos: 19903903, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B3 = genome.Band{Band: "60B3", Desc: "Band", StartPos: 19903903, EndPos: 19908768, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B4 = genome.Band{Band: "60B4", Desc: "Band", StartPos: 19908768, EndPos: 19917803, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B5 = genome.Band{Band: "60B5", Desc: "Band", StartPos: 19917803, EndPos: 19938771, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B6 = genome.Band{Band: "60B6", Desc: "Band", StartPos: 19938771, EndPos: 19945036, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B7 = genome.Band{Band: "60B7", Desc: "Band", StartPos: 19945036, EndPos: 19953986, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B8 = genome.Band{Band: "60B8", Desc: "Band", StartPos: 19953986, EndPos: 19971047, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B9 = genome.Band{Band: "60B9", Desc: "Band", StartPos: 19971047, EndPos: 19985368, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B10 = genome.Band{Band: "60B10", Desc: "Band", StartPos: 19985368, EndPos: 20002429, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B11 = genome.Band{Band: "60B11", Desc: "Band", StartPos: 20002429, EndPos: 20021982, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B12 = genome.Band{Band: "60B12", Desc: "Band", StartPos: 20021982, EndPos: 20031613, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60B13 = genome.Band{Band: "60B13", Desc: "Band", StartPos: 20031613, EndPos: 20044134, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60C1 = genome.Band{Band: "60C1", Desc: "Band", StartPos: 20044134, EndPos: 20062493, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60C2 = genome.Band{Band: "60C2", Desc: "Band", StartPos: 20062493, EndPos: 20110429, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60C3 = genome.Band{Band: "60C3", Desc: "Band", StartPos: 20110429, EndPos: 20135576, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60C4 = genome.Band{Band: "60C4", Desc: "Band", StartPos: 20135576, EndPos: 20160722, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60C5 = genome.Band{Band: "60C5", Desc: "Band", StartPos: 20160722, EndPos: 20178325, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60C6 = genome.Band{Band: "60C6", Desc: "Band", StartPos: 20178325, EndPos: 20233805, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60C7 = genome.Band{Band: "60C7", Desc: "Band", StartPos: 20233805, EndPos: 20281741, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60C8 = genome.Band{Band: "60C8", Desc: "Band", StartPos: 20281741, EndPos: 20337221, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D1 = genome.Band{Band: "60D1", Desc: "Band", StartPos: 20337221, EndPos: 20392701, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D2 = genome.Band{Band: "60D2", Desc: "Band", StartPos: 20392701, EndPos: 20392711, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D3 = genome.Band{Band: "60D3", Desc: "Band", StartPos: 20392711, EndPos: 20411573, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D4 = genome.Band{Band: "60D4", Desc: "Band", StartPos: 20411573, EndPos: 20428134, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D5 = genome.Band{Band: "60D5", Desc: "Band", StartPos: 20428134, EndPos: 20466988, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D6 = genome.Band{Band: "60D6", Desc: "Band", StartPos: 20466988, EndPos: 20466998, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D7 = genome.Band{Band: "60D7", Desc: "Band", StartPos: 20466998, EndPos: 20472861, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D8 = genome.Band{Band: "60D8", Desc: "Band", StartPos: 20472861, EndPos: 20486580, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D9 = genome.Band{Band: "60D9", Desc: "Band", StartPos: 20486580, EndPos: 20503465, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D10 = genome.Band{Band: "60D10", Desc: "Band", StartPos: 20503465, EndPos: 20535651, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D11 = genome.Band{Band: "60D11", Desc: "Band", StartPos: 20535651, EndPos: 20537300, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D12 = genome.Band{Band: "60D12", Desc: "Band", StartPos: 20537300, EndPos: 20544687, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D13 = genome.Band{Band: "60D13", Desc: "Band", StartPos: 20544687, EndPos: 20564804, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D14 = genome.Band{Band: "60D14", Desc: "Band", StartPos: 20564804, EndPos: 20601915, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D15 = genome.Band{Band: "60D15", Desc: "Band", StartPos: 20601915, EndPos: 20621383, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60D16 = genome.Band{Band: "60D16", Desc: "Band", StartPos: 20621383, EndPos: 20635011, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60E1 = genome.Band{Band: "60E1", Desc: "Band", StartPos: 20635011, EndPos: 20683803, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60E2 = genome.Band{Band: "60E2", Desc: "Band", StartPos: 20683803, EndPos: 20725995, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60E3 = genome.Band{Band: "60E3", Desc: "Band", StartPos: 20725995, EndPos: 20739396, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60E4 = genome.Band{Band: "60E4", Desc: "Band", StartPos: 20739396, EndPos: 20764286, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60E5 = genome.Band{Band: "60E5", Desc: "Band", StartPos: 20764286, EndPos: 20828423, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60E6 = genome.Band{Band: "60E6", Desc: "Band", StartPos: 20828423, EndPos: 20828433, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60E7 = genome.Band{Band: "60E7", Desc: "Band", StartPos: 20828433, EndPos: 20828443, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60E8 = genome.Band{Band: "60E8", Desc: "Band", StartPos: 20828443, EndPos: 20841746, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60E9 = genome.Band{Band: "60E9", Desc: "Band", StartPos: 20841746, EndPos: 20842993, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60E10 = genome.Band{Band: "60E10", Desc: "Band", StartPos: 20842993, EndPos: 20850969, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60E11 = genome.Band{Band: "60E11", Desc: "Band", StartPos: 20850969, EndPos: 20878249, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60E12 = genome.Band{Band: "60E12", Desc: "Band", StartPos: 20878249, EndPos: 20905163, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60F1 = genome.Band{Band: "60F1", Desc: "Band", StartPos: 20905163, EndPos: 20932076, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60F2 = genome.Band{Band: "60F2", Desc: "Band", StartPos: 20932076, EndPos: 20953748, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60F3 = genome.Band{Band: "60F3", Desc: "Band", StartPos: 20953748, EndPos: 20980661, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60F4 = genome.Band{Band: "60F4", Desc: "Band", StartPos: 20980661, EndPos: 20989308, Giemsa: "n/a", Chr: &Chr2R} Chr2R_60F5 = genome.Band{Band: "60F5", Desc: "Band", StartPos: 20989308, EndPos: 21146708, Giemsa: "n/a", Chr: &Chr2R} Chr3L_61A5 = genome.Band{Band: "61A5", Desc: "Band", StartPos: 0, EndPos: 52709, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61A6 = genome.Band{Band: "61A6", Desc: "Band", StartPos: 52709, EndPos: 114102, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61B1 = genome.Band{Band: "61B1", Desc: "Band", StartPos: 114102, EndPos: 163984, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61B2 = genome.Band{Band: "61B2", Desc: "Band", StartPos: 163984, EndPos: 237127, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61B3 = genome.Band{Band: "61B3", Desc: "Band", StartPos: 237127, EndPos: 298520, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61C1 = genome.Band{Band: "61C1", Desc: "Band", StartPos: 298520, EndPos: 450083, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61C2 = genome.Band{Band: "61C2", Desc: "Band", StartPos: 450083, EndPos: 456078, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61C3 = genome.Band{Band: "61C3", Desc: "Band", StartPos: 456078, EndPos: 563755, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61C4 = genome.Band{Band: "61C4", Desc: "Band", StartPos: 563755, EndPos: 568411, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61C5 = genome.Band{Band: "61C5", Desc: "Band", StartPos: 568411, EndPos: 584813, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61C6 = genome.Band{Band: "61C6", Desc: "Band", StartPos: 584813, EndPos: 605001, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61C7 = genome.Band{Band: "61C7", Desc: "Band", StartPos: 605001, EndPos: 644273, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61C8 = genome.Band{Band: "61C8", Desc: "Band", StartPos: 644273, EndPos: 714263, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61C9 = genome.Band{Band: "61C9", Desc: "Band", StartPos: 714263, EndPos: 756302, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61D1 = genome.Band{Band: "61D1", Desc: "Band", StartPos: 756302, EndPos: 814270, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61D2 = genome.Band{Band: "61D2", Desc: "Band", StartPos: 814270, EndPos: 880120, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61D3 = genome.Band{Band: "61D3", Desc: "Band", StartPos: 880120, EndPos: 890466, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61D4 = genome.Band{Band: "61D4", Desc: "Band", StartPos: 890466, EndPos: 924623, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61E1 = genome.Band{Band: "61E1", Desc: "Band", StartPos: 924623, EndPos: 1006402, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61E2 = genome.Band{Band: "61E2", Desc: "Band", StartPos: 1006402, EndPos: 1056487, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61E3 = genome.Band{Band: "61E3", Desc: "Band", StartPos: 1056487, EndPos: 1082762, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61F1 = genome.Band{Band: "61F1", Desc: "Band", StartPos: 1082762, EndPos: 1132848, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61F2 = genome.Band{Band: "61F2", Desc: "Band", StartPos: 1132848, EndPos: 1174887, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61F3 = genome.Band{Band: "61F3", Desc: "Band", StartPos: 1174887, EndPos: 1216926, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61F4 = genome.Band{Band: "61F4", Desc: "Band", StartPos: 1216926, EndPos: 1282776, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61F5 = genome.Band{Band: "61F5", Desc: "Band", StartPos: 1282776, EndPos: 1309051, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61F6 = genome.Band{Band: "61F6", Desc: "Band", StartPos: 1309051, EndPos: 1335325, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61F7 = genome.Band{Band: "61F7", Desc: "Band", StartPos: 1335325, EndPos: 1360723, Giemsa: "n/a", Chr: &Chr3L} Chr3L_61F8 = genome.Band{Band: "61F8", Desc: "Band", StartPos: 1360723, EndPos: 1393741, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62A1 = genome.Band{Band: "62A1", Desc: "Band", StartPos: 1393741, EndPos: 1449776, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62A2 = genome.Band{Band: "62A2", Desc: "Band", StartPos: 1449776, EndPos: 1498192, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62A3 = genome.Band{Band: "62A3", Desc: "Band", StartPos: 1498192, EndPos: 1546607, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62A4 = genome.Band{Band: "62A4", Desc: "Band", StartPos: 1546607, EndPos: 1548286, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62A5 = genome.Band{Band: "62A5", Desc: "Band", StartPos: 1548286, EndPos: 1568009, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62A6 = genome.Band{Band: "62A6", Desc: "Band", StartPos: 1568009, EndPos: 1587732, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62A7 = genome.Band{Band: "62A7", Desc: "Band", StartPos: 1587732, EndPos: 1607455, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62A8 = genome.Band{Band: "62A8", Desc: "Band", StartPos: 1607455, EndPos: 1622626, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62A9 = genome.Band{Band: "62A9", Desc: "Band", StartPos: 1622626, EndPos: 1651547, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62A10 = genome.Band{Band: "62A10", Desc: "Band", StartPos: 1651547, EndPos: 1680467, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62A11 = genome.Band{Band: "62A11", Desc: "Band", StartPos: 1680467, EndPos: 1695638, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62A12 = genome.Band{Band: "62A12", Desc: "Band", StartPos: 1695638, EndPos: 1710810, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62B1 = genome.Band{Band: "62B1", Desc: "Band", StartPos: 1710810, EndPos: 1761634, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62B2 = genome.Band{Band: "62B2", Desc: "Band", StartPos: 1761634, EndPos: 1764004, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62B3 = genome.Band{Band: "62B3", Desc: "Band", StartPos: 1764004, EndPos: 1774624, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62B4 = genome.Band{Band: "62B4", Desc: "Band", StartPos: 1774624, EndPos: 1811699, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62B5 = genome.Band{Band: "62B5", Desc: "Band", StartPos: 1811699, EndPos: 1815644, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62B6 = genome.Band{Band: "62B6", Desc: "Band", StartPos: 1815644, EndPos: 1836941, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62B7 = genome.Band{Band: "62B7", Desc: "Band", StartPos: 1836941, EndPos: 1876975, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62B8 = genome.Band{Band: "62B8", Desc: "Band", StartPos: 1876975, EndPos: 1879535, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62B9 = genome.Band{Band: "62B9", Desc: "Band", StartPos: 1879535, EndPos: 1900832, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62B10 = genome.Band{Band: "62B10", Desc: "Band", StartPos: 1900832, EndPos: 1932061, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62B11 = genome.Band{Band: "62B11", Desc: "Band", StartPos: 1932061, EndPos: 1963290, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62B12 = genome.Band{Band: "62B12", Desc: "Band", StartPos: 1963290, EndPos: 1979672, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62C1 = genome.Band{Band: "62C1", Desc: "Band", StartPos: 1979672, EndPos: 2020731, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62C2 = genome.Band{Band: "62C2", Desc: "Band", StartPos: 2020731, EndPos: 2081550, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62C3 = genome.Band{Band: "62C3", Desc: "Band", StartPos: 2081550, EndPos: 2112779, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62C4 = genome.Band{Band: "62C4", Desc: "Band", StartPos: 2112779, EndPos: 2142693, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62D1 = genome.Band{Band: "62D1", Desc: "Band", StartPos: 2142693, EndPos: 2177504, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62D2 = genome.Band{Band: "62D2", Desc: "Band", StartPos: 2177504, EndPos: 2218979, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62D3 = genome.Band{Band: "62D3", Desc: "Band", StartPos: 2218979, EndPos: 2247263, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62D4 = genome.Band{Band: "62D4", Desc: "Band", StartPos: 2247263, EndPos: 2269020, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62D5 = genome.Band{Band: "62D5", Desc: "Band", StartPos: 2269020, EndPos: 2310495, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62D6 = genome.Band{Band: "62D6", Desc: "Band", StartPos: 2310495, EndPos: 2365024, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62D7 = genome.Band{Band: "62D7", Desc: "Band", StartPos: 2365024, EndPos: 2386781, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62E1 = genome.Band{Band: "62E1", Desc: "Band", StartPos: 2386781, EndPos: 2421593, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62E2 = genome.Band{Band: "62E2", Desc: "Band", StartPos: 2421593, EndPos: 2469595, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62E3 = genome.Band{Band: "62E3", Desc: "Band", StartPos: 2469595, EndPos: 2491352, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62E4 = genome.Band{Band: "62E4", Desc: "Band", StartPos: 2491352, EndPos: 2513109, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62E5 = genome.Band{Band: "62E5", Desc: "Band", StartPos: 2513109, EndPos: 2554656, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62E6 = genome.Band{Band: "62E6", Desc: "Band", StartPos: 2554656, EndPos: 2583004, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62E7 = genome.Band{Band: "62E7", Desc: "Band", StartPos: 2583004, EndPos: 2631115, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62E8 = genome.Band{Band: "62E8", Desc: "Band", StartPos: 2631115, EndPos: 2666006, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62E9 = genome.Band{Band: "62E9", Desc: "Band", StartPos: 2666006, EndPos: 2674592, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62F1 = genome.Band{Band: "62F1", Desc: "Band", StartPos: 2674592, EndPos: 2716161, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62F2 = genome.Band{Band: "62F2", Desc: "Band", StartPos: 2716161, EndPos: 2757730, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62F3 = genome.Band{Band: "62F3", Desc: "Band", StartPos: 2757730, EndPos: 2779536, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62F4 = genome.Band{Band: "62F4", Desc: "Band", StartPos: 2779536, EndPos: 2807885, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62F5 = genome.Band{Band: "62F5", Desc: "Band", StartPos: 2807885, EndPos: 2836234, Giemsa: "n/a", Chr: &Chr3L} Chr3L_62F6 = genome.Band{Band: "62F6", Desc: "Band", StartPos: 2836234, EndPos: 2864582, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63A1 = genome.Band{Band: "63A1", Desc: "Band", StartPos: 2864582, EndPos: 2932455, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63A2 = genome.Band{Band: "63A2", Desc: "Band", StartPos: 2932455, EndPos: 3000328, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63A3 = genome.Band{Band: "63A3", Desc: "Band", StartPos: 3000328, EndPos: 3048439, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63A4 = genome.Band{Band: "63A4", Desc: "Band", StartPos: 3048439, EndPos: 3050263, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63A5 = genome.Band{Band: "63A5", Desc: "Band", StartPos: 3050263, EndPos: 3062407, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63A6 = genome.Band{Band: "63A6", Desc: "Band", StartPos: 3062407, EndPos: 3074551, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63A7 = genome.Band{Band: "63A7", Desc: "Band", StartPos: 3074551, EndPos: 3083893, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B1 = genome.Band{Band: "63B1", Desc: "Band", StartPos: 3083893, EndPos: 3115187, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B2 = genome.Band{Band: "63B2", Desc: "Band", StartPos: 3115187, EndPos: 3116647, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B3 = genome.Band{Band: "63B3", Desc: "Band", StartPos: 3116647, EndPos: 3128791, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B4 = genome.Band{Band: "63B4", Desc: "Band", StartPos: 3128791, EndPos: 3132469, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B5 = genome.Band{Band: "63B5", Desc: "Band", StartPos: 3132469, EndPos: 3144613, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B6 = genome.Band{Band: "63B6", Desc: "Band", StartPos: 3144613, EndPos: 3148292, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B7 = genome.Band{Band: "63B7", Desc: "Band", StartPos: 3148292, EndPos: 3160436, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B8 = genome.Band{Band: "63B8", Desc: "Band", StartPos: 3160436, EndPos: 3172580, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B9 = genome.Band{Band: "63B9", Desc: "Band", StartPos: 3172580, EndPos: 3179119, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B10 = genome.Band{Band: "63B10", Desc: "Band", StartPos: 3179119, EndPos: 3191263, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B11 = genome.Band{Band: "63B11", Desc: "Band", StartPos: 3191263, EndPos: 3203407, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B12 = genome.Band{Band: "63B12", Desc: "Band", StartPos: 3203407, EndPos: 3207085, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B13 = genome.Band{Band: "63B13", Desc: "Band", StartPos: 3207085, EndPos: 3216427, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63B14 = genome.Band{Band: "63B14", Desc: "Band", StartPos: 3216427, EndPos: 3222966, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63C1 = genome.Band{Band: "63C1", Desc: "Band", StartPos: 3222966, EndPos: 3252042, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63C2 = genome.Band{Band: "63C2", Desc: "Band", StartPos: 3252042, EndPos: 3261384, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63C3 = genome.Band{Band: "63C3", Desc: "Band", StartPos: 3261384, EndPos: 3270725, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63C4 = genome.Band{Band: "63C4", Desc: "Band", StartPos: 3270725, EndPos: 3280067, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63C5 = genome.Band{Band: "63C5", Desc: "Band", StartPos: 3280067, EndPos: 3303479, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63C6 = genome.Band{Band: "63C6", Desc: "Band", StartPos: 3303479, EndPos: 3310019, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63D1 = genome.Band{Band: "63D1", Desc: "Band", StartPos: 3310019, EndPos: 3336234, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63D2 = genome.Band{Band: "63D2", Desc: "Band", StartPos: 3336234, EndPos: 3404939, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63D3 = genome.Band{Band: "63D3", Desc: "Band", StartPos: 3404939, EndPos: 3427672, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63E1 = genome.Band{Band: "63E1", Desc: "Band", StartPos: 3427672, EndPos: 3471006, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63E2 = genome.Band{Band: "63E2", Desc: "Band", StartPos: 3471006, EndPos: 3514340, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63E3 = genome.Band{Band: "63E3", Desc: "Band", StartPos: 3514340, EndPos: 3564494, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63E4 = genome.Band{Band: "63E4", Desc: "Band", StartPos: 3564494, EndPos: 3607829, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63E5 = genome.Band{Band: "63E5", Desc: "Band", StartPos: 3607829, EndPos: 3651163, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63E6 = genome.Band{Band: "63E6", Desc: "Band", StartPos: 3651163, EndPos: 3673896, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63E7 = genome.Band{Band: "63E7", Desc: "Band", StartPos: 3673896, EndPos: 3703449, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63E8 = genome.Band{Band: "63E8", Desc: "Band", StartPos: 3703449, EndPos: 3726181, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63E9 = genome.Band{Band: "63E9", Desc: "Band", StartPos: 3726181, EndPos: 3755734, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63F1 = genome.Band{Band: "63F1", Desc: "Band", StartPos: 3755734, EndPos: 3825069, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63F2 = genome.Band{Band: "63F2", Desc: "Band", StartPos: 3825069, EndPos: 3828621, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63F3 = genome.Band{Band: "63F3", Desc: "Band", StartPos: 3828621, EndPos: 3844534, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63F4 = genome.Band{Band: "63F4", Desc: "Band", StartPos: 3844534, EndPos: 3874086, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63F5 = genome.Band{Band: "63F5", Desc: "Band", StartPos: 3874086, EndPos: 3903639, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63F6 = genome.Band{Band: "63F6", Desc: "Band", StartPos: 3903639, EndPos: 3919619, Giemsa: "n/a", Chr: &Chr3L} Chr3L_63F7 = genome.Band{Band: "63F7", Desc: "Band", StartPos: 3919619, EndPos: 3935599, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64A1 = genome.Band{Band: "64A1", Desc: "Band", StartPos: 3935599, EndPos: 3970095, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64A2 = genome.Band{Band: "64A2", Desc: "Band", StartPos: 3970095, EndPos: 3993527, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64A3 = genome.Band{Band: "64A3", Desc: "Band", StartPos: 3993527, EndPos: 4016960, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64A4 = genome.Band{Band: "64A4", Desc: "Band", StartPos: 4016960, EndPos: 4044080, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64A5 = genome.Band{Band: "64A5", Desc: "Band", StartPos: 4044080, EndPos: 4097252, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64A6 = genome.Band{Band: "64A6", Desc: "Band", StartPos: 4097252, EndPos: 4115981, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64A7 = genome.Band{Band: "64A7", Desc: "Band", StartPos: 4115981, EndPos: 4142736, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64A8 = genome.Band{Band: "64A8", Desc: "Band", StartPos: 4142736, EndPos: 4169491, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64A9 = genome.Band{Band: "64A9", Desc: "Band", StartPos: 4169491, EndPos: 4180026, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64A10 = genome.Band{Band: "64A10", Desc: "Band", StartPos: 4180026, EndPos: 4245410, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64A11 = genome.Band{Band: "64A11", Desc: "Band", StartPos: 4245410, EndPos: 4249591, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64A12 = genome.Band{Band: "64A12", Desc: "Band", StartPos: 4249591, EndPos: 4292399, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B1 = genome.Band{Band: "64B1", Desc: "Band", StartPos: 4292399, EndPos: 4335208, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B2 = genome.Band{Band: "64B2", Desc: "Band", StartPos: 4335208, EndPos: 4378017, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B3 = genome.Band{Band: "64B3", Desc: "Band", StartPos: 4378017, EndPos: 4388551, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B4 = genome.Band{Band: "64B4", Desc: "Band", StartPos: 4388551, EndPos: 4407280, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B5 = genome.Band{Band: "64B5", Desc: "Band", StartPos: 4407280, EndPos: 4426009, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B6 = genome.Band{Band: "64B6", Desc: "Band", StartPos: 4426009, EndPos: 4468818, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B7 = genome.Band{Band: "64B7", Desc: "Band", StartPos: 4468818, EndPos: 4479353, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B8 = genome.Band{Band: "64B8", Desc: "Band", StartPos: 4479353, EndPos: 4489888, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B9 = genome.Band{Band: "64B9", Desc: "Band", StartPos: 4489888, EndPos: 4555271, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B10 = genome.Band{Band: "64B10", Desc: "Band", StartPos: 4555271, EndPos: 4559452, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B11 = genome.Band{Band: "64B11", Desc: "Band", StartPos: 4559452, EndPos: 4610454, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B12 = genome.Band{Band: "64B12", Desc: "Band", StartPos: 4610454, EndPos: 4653263, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B13 = genome.Band{Band: "64B13", Desc: "Band", StartPos: 4653263, EndPos: 4696072, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B14 = genome.Band{Band: "64B14", Desc: "Band", StartPos: 4696072, EndPos: 4722827, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B15 = genome.Band{Band: "64B15", Desc: "Band", StartPos: 4722827, EndPos: 4749582, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B16 = genome.Band{Band: "64B16", Desc: "Band", StartPos: 4749582, EndPos: 4784365, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64B17 = genome.Band{Band: "64B17", Desc: "Band", StartPos: 4784365, EndPos: 4811120, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C1 = genome.Band{Band: "64C1", Desc: "Band", StartPos: 4811120, EndPos: 4878176, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C2 = genome.Band{Band: "64C2", Desc: "Band", StartPos: 4878176, EndPos: 4945231, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C3 = genome.Band{Band: "64C3", Desc: "Band", StartPos: 4945231, EndPos: 4971987, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C4 = genome.Band{Band: "64C4", Desc: "Band", StartPos: 4971987, EndPos: 5039043, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C5 = genome.Band{Band: "64C5", Desc: "Band", StartPos: 5039043, EndPos: 5106098, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C6 = genome.Band{Band: "64C6", Desc: "Band", StartPos: 5106098, EndPos: 5124827, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C7 = genome.Band{Band: "64C7", Desc: "Band", StartPos: 5124827, EndPos: 5151583, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C8 = genome.Band{Band: "64C8", Desc: "Band", StartPos: 5151583, EndPos: 5186365, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C9 = genome.Band{Band: "64C9", Desc: "Band", StartPos: 5186365, EndPos: 5251748, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C10 = genome.Band{Band: "64C10", Desc: "Band", StartPos: 5251748, EndPos: 5255929, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C11 = genome.Band{Band: "64C11", Desc: "Band", StartPos: 5255929, EndPos: 5290711, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C12 = genome.Band{Band: "64C12", Desc: "Band", StartPos: 5290711, EndPos: 5341713, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C13 = genome.Band{Band: "64C13", Desc: "Band", StartPos: 5341713, EndPos: 5360442, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C14 = genome.Band{Band: "64C14", Desc: "Band", StartPos: 5360442, EndPos: 5370977, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64C15 = genome.Band{Band: "64C15", Desc: "Band", StartPos: 5370977, EndPos: 5381512, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64D1 = genome.Band{Band: "64D1", Desc: "Band", StartPos: 5381512, EndPos: 5456594, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64D2 = genome.Band{Band: "64D2", Desc: "Band", StartPos: 5456594, EndPos: 5523650, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64D3 = genome.Band{Band: "64D3", Desc: "Band", StartPos: 5523650, EndPos: 5574653, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64D4 = genome.Band{Band: "64D4", Desc: "Band", StartPos: 5574653, EndPos: 5577019, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64D5 = genome.Band{Band: "64D5", Desc: "Band", StartPos: 5577019, EndPos: 5596672, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64D6 = genome.Band{Band: "64D6", Desc: "Band", StartPos: 5596672, EndPos: 5616324, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64D7 = genome.Band{Band: "64D7", Desc: "Band", StartPos: 5616324, EndPos: 5624062, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E1 = genome.Band{Band: "64E1", Desc: "Band", StartPos: 5624062, EndPos: 5667420, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E2 = genome.Band{Band: "64E2", Desc: "Band", StartPos: 5667420, EndPos: 5716674, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E3 = genome.Band{Band: "64E3", Desc: "Band", StartPos: 5716674, EndPos: 5724412, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E4 = genome.Band{Band: "64E4", Desc: "Band", StartPos: 5724412, EndPos: 5732150, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E5 = genome.Band{Band: "64E5", Desc: "Band", StartPos: 5732150, EndPos: 5751802, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E6 = genome.Band{Band: "64E6", Desc: "Band", StartPos: 5751802, EndPos: 5759540, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E7 = genome.Band{Band: "64E7", Desc: "Band", StartPos: 5759540, EndPos: 5773297, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E8 = genome.Band{Band: "64E8", Desc: "Band", StartPos: 5773297, EndPos: 5797617, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E9 = genome.Band{Band: "64E9", Desc: "Band", StartPos: 5797617, EndPos: 5797627, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E10 = genome.Band{Band: "64E10", Desc: "Band", StartPos: 5797627, EndPos: 5797637, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E11 = genome.Band{Band: "64E11", Desc: "Band", StartPos: 5797637, EndPos: 5805968, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E12 = genome.Band{Band: "64E12", Desc: "Band", StartPos: 5805968, EndPos: 5807387, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64E13 = genome.Band{Band: "64E13", Desc: "Band", StartPos: 5807387, EndPos: 5810053, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64F1 = genome.Band{Band: "64F1", Desc: "Band", StartPos: 5810053, EndPos: 5827356, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64F2 = genome.Band{Band: "64F2", Desc: "Band", StartPos: 5827356, EndPos: 5844659, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64F3 = genome.Band{Band: "64F3", Desc: "Band", StartPos: 5844659, EndPos: 5883990, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64F4 = genome.Band{Band: "64F4", Desc: "Band", StartPos: 5883990, EndPos: 5894835, Giemsa: "n/a", Chr: &Chr3L} Chr3L_64F5 = genome.Band{Band: "64F5", Desc: "Band", StartPos: 5894835, EndPos: 5919622, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A1 = genome.Band{Band: "65A1", Desc: "Band", StartPos: 5919622, EndPos: 5967841, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A2 = genome.Band{Band: "65A2", Desc: "Band", StartPos: 5967841, EndPos: 6016059, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A3 = genome.Band{Band: "65A3", Desc: "Band", StartPos: 6016059, EndPos: 6045591, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A4 = genome.Band{Band: "65A4", Desc: "Band", StartPos: 6045591, EndPos: 6051691, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A5 = genome.Band{Band: "65A5", Desc: "Band", StartPos: 6051691, EndPos: 6085870, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A6 = genome.Band{Band: "65A6", Desc: "Band", StartPos: 6085870, EndPos: 6156021, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A7 = genome.Band{Band: "65A7", Desc: "Band", StartPos: 6156021, EndPos: 6184807, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A8 = genome.Band{Band: "65A8", Desc: "Band", StartPos: 6184807, EndPos: 6204957, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A9 = genome.Band{Band: "65A9", Desc: "Band", StartPos: 6204957, EndPos: 6211945, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A10 = genome.Band{Band: "65A10", Desc: "Band", StartPos: 6211945, EndPos: 6251360, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A11 = genome.Band{Band: "65A11", Desc: "Band", StartPos: 6251360, EndPos: 6290775, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A12 = genome.Band{Band: "65A12", Desc: "Band", StartPos: 6290775, EndPos: 6306479, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A13 = genome.Band{Band: "65A13", Desc: "Band", StartPos: 6306479, EndPos: 6310328, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A14 = genome.Band{Band: "65A14", Desc: "Band", StartPos: 6310328, EndPos: 6340813, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65A15 = genome.Band{Band: "65A15", Desc: "Band", StartPos: 6340813, EndPos: 6344662, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65B1 = genome.Band{Band: "65B1", Desc: "Band", StartPos: 6344662, EndPos: 6406402, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65B2 = genome.Band{Band: "65B2", Desc: "Band", StartPos: 6406402, EndPos: 6475532, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65B3 = genome.Band{Band: "65B3", Desc: "Band", StartPos: 6475532, EndPos: 6500167, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65B4 = genome.Band{Band: "65B4", Desc: "Band", StartPos: 6500167, EndPos: 6554516, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65B5 = genome.Band{Band: "65B5", Desc: "Band", StartPos: 6554516, EndPos: 6601475, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65C1 = genome.Band{Band: "65C1", Desc: "Band", StartPos: 6601475, EndPos: 6684000, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65C2 = genome.Band{Band: "65C2", Desc: "Band", StartPos: 6684000, EndPos: 6687849, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65C3 = genome.Band{Band: "65C3", Desc: "Band", StartPos: 6687849, EndPos: 6749589, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65C4 = genome.Band{Band: "65C4", Desc: "Band", StartPos: 6749589, EndPos: 6766833, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65C5 = genome.Band{Band: "65C5", Desc: "Band", StartPos: 6766833, EndPos: 6791467, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65D1 = genome.Band{Band: "65D1", Desc: "Band", StartPos: 6791467, EndPos: 6853207, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65D2 = genome.Band{Band: "65D2", Desc: "Band", StartPos: 6853207, EndPos: 6907557, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65D3 = genome.Band{Band: "65D3", Desc: "Band", StartPos: 6907557, EndPos: 6946971, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65D4 = genome.Band{Band: "65D4", Desc: "Band", StartPos: 6946971, EndPos: 6954028, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65D5 = genome.Band{Band: "65D5", Desc: "Band", StartPos: 6954028, EndPos: 6979269, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65D6 = genome.Band{Band: "65D6", Desc: "Band", StartPos: 6979269, EndPos: 6999777, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65E1 = genome.Band{Band: "65E1", Desc: "Band", StartPos: 6999777, EndPos: 7029849, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65E2 = genome.Band{Band: "65E2", Desc: "Band", StartPos: 7029849, EndPos: 7055090, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65E3 = genome.Band{Band: "65E3", Desc: "Band", StartPos: 7055090, EndPos: 7094628, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65E4 = genome.Band{Band: "65E4", Desc: "Band", StartPos: 7094628, EndPos: 7129433, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65E5 = genome.Band{Band: "65E5", Desc: "Band", StartPos: 7129433, EndPos: 7149941, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65E6 = genome.Band{Band: "65E6", Desc: "Band", StartPos: 7149941, EndPos: 7170449, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65E7 = genome.Band{Band: "65E7", Desc: "Band", StartPos: 7170449, EndPos: 7195690, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65E8 = genome.Band{Band: "65E8", Desc: "Band", StartPos: 7195690, EndPos: 7225763, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65E9 = genome.Band{Band: "65E9", Desc: "Band", StartPos: 7225763, EndPos: 7255835, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65E10 = genome.Band{Band: "65E10", Desc: "Band", StartPos: 7255835, EndPos: 7266878, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65E11 = genome.Band{Band: "65E11", Desc: "Band", StartPos: 7266878, EndPos: 7287386, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65E12 = genome.Band{Band: "65E12", Desc: "Band", StartPos: 7287386, EndPos: 7287396, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65F1 = genome.Band{Band: "65F1", Desc: "Band", StartPos: 7287396, EndPos: 7287406, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65F2 = genome.Band{Band: "65F2", Desc: "Band", StartPos: 7287406, EndPos: 7287416, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65F3 = genome.Band{Band: "65F3", Desc: "Band", StartPos: 7287416, EndPos: 7297139, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65F4 = genome.Band{Band: "65F4", Desc: "Band", StartPos: 7297139, EndPos: 7326193, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65F5 = genome.Band{Band: "65F5", Desc: "Band", StartPos: 7326193, EndPos: 7341837, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65F6 = genome.Band{Band: "65F6", Desc: "Band", StartPos: 7341837, EndPos: 7350637, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65F7 = genome.Band{Band: "65F7", Desc: "Band", StartPos: 7350637, EndPos: 7372986, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65F8 = genome.Band{Band: "65F8", Desc: "Band", StartPos: 7372986, EndPos: 7372996, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65F9 = genome.Band{Band: "65F9", Desc: "Band", StartPos: 7372996, EndPos: 7374965, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65F10 = genome.Band{Band: "65F10", Desc: "Band", StartPos: 7374965, EndPos: 7384165, Giemsa: "n/a", Chr: &Chr3L} Chr3L_65F11 = genome.Band{Band: "65F11", Desc: "Band", StartPos: 7384165, EndPos: 7424404, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A1 = genome.Band{Band: "66A1", Desc: "Band", StartPos: 7424404, EndPos: 7458136, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A2 = genome.Band{Band: "66A2", Desc: "Band", StartPos: 7458136, EndPos: 7497176, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A3 = genome.Band{Band: "66A3", Desc: "Band", StartPos: 7497176, EndPos: 7520180, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A4 = genome.Band{Band: "66A4", Desc: "Band", StartPos: 7520180, EndPos: 7527148, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A5 = genome.Band{Band: "66A5", Desc: "Band", StartPos: 7527148, EndPos: 7566188, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A6 = genome.Band{Band: "66A6", Desc: "Band", StartPos: 7566188, EndPos: 7605228, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A7 = genome.Band{Band: "66A7", Desc: "Band", StartPos: 7605228, EndPos: 7628232, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A8 = genome.Band{Band: "66A8", Desc: "Band", StartPos: 7628232, EndPos: 7661964, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A9 = genome.Band{Band: "66A9", Desc: "Band", StartPos: 7661964, EndPos: 7690277, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A10 = genome.Band{Band: "66A10", Desc: "Band", StartPos: 7690277, EndPos: 7718589, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A11 = genome.Band{Band: "66A11", Desc: "Band", StartPos: 7718589, EndPos: 7746902, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A12 = genome.Band{Band: "66A12", Desc: "Band", StartPos: 7746902, EndPos: 7769906, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A13 = genome.Band{Band: "66A13", Desc: "Band", StartPos: 7769906, EndPos: 7782293, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A14 = genome.Band{Band: "66A14", Desc: "Band", StartPos: 7782293, EndPos: 7810605, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A15 = genome.Band{Band: "66A15", Desc: "Band", StartPos: 7810605, EndPos: 7838918, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A16 = genome.Band{Band: "66A16", Desc: "Band", StartPos: 7838918, EndPos: 7845885, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A17 = genome.Band{Band: "66A17", Desc: "Band", StartPos: 7845885, EndPos: 7879617, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A18 = genome.Band{Band: "66A18", Desc: "Band", StartPos: 7879617, EndPos: 7902621, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A19 = genome.Band{Band: "66A19", Desc: "Band", StartPos: 7902621, EndPos: 7909589, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A20 = genome.Band{Band: "66A20", Desc: "Band", StartPos: 7909589, EndPos: 7932593, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A21 = genome.Band{Band: "66A21", Desc: "Band", StartPos: 7932593, EndPos: 7971633, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66A22 = genome.Band{Band: "66A22", Desc: "Band", StartPos: 7971633, EndPos: 7978601, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B1 = genome.Band{Band: "66B1", Desc: "Band", StartPos: 7978601, EndPos: 8001605, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B2 = genome.Band{Band: "66B2", Desc: "Band", StartPos: 8001605, EndPos: 8029917, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B3 = genome.Band{Band: "66B3", Desc: "Band", StartPos: 8029917, EndPos: 8052921, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B4 = genome.Band{Band: "66B4", Desc: "Band", StartPos: 8052921, EndPos: 8065308, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B5 = genome.Band{Band: "66B5", Desc: "Band", StartPos: 8065308, EndPos: 8093621, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B6 = genome.Band{Band: "66B6", Desc: "Band", StartPos: 8093621, EndPos: 8116625, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B7 = genome.Band{Band: "66B7", Desc: "Band", StartPos: 8116625, EndPos: 8129011, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B8 = genome.Band{Band: "66B8", Desc: "Band", StartPos: 8129011, EndPos: 8135979, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B9 = genome.Band{Band: "66B9", Desc: "Band", StartPos: 8135979, EndPos: 8142946, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B10 = genome.Band{Band: "66B10", Desc: "Band", StartPos: 8142946, EndPos: 8171259, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B11 = genome.Band{Band: "66B11", Desc: "Band", StartPos: 8171259, EndPos: 8188453, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B12 = genome.Band{Band: "66B12", Desc: "Band", StartPos: 8188453, EndPos: 8195975, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66B13 = genome.Band{Band: "66B13", Desc: "Band", StartPos: 8195975, EndPos: 8203498, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C1 = genome.Band{Band: "66C1", Desc: "Band", StartPos: 8203498, EndPos: 8239497, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C2 = genome.Band{Band: "66C2", Desc: "Band", StartPos: 8239497, EndPos: 8251345, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C3 = genome.Band{Band: "66C3", Desc: "Band", StartPos: 8251345, EndPos: 8267891, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C4 = genome.Band{Band: "66C4", Desc: "Band", StartPos: 8267891, EndPos: 8279473, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C5 = genome.Band{Band: "66C5", Desc: "Band", StartPos: 8279473, EndPos: 8305947, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C6 = genome.Band{Band: "66C6", Desc: "Band", StartPos: 8305947, EndPos: 8312462, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C7 = genome.Band{Band: "66C7", Desc: "Band", StartPos: 8312462, EndPos: 8333972, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C8 = genome.Band{Band: "66C8", Desc: "Band", StartPos: 8333972, EndPos: 8374407, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C9 = genome.Band{Band: "66C9", Desc: "Band", StartPos: 8374407, EndPos: 8376993, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C10 = genome.Band{Band: "66C10", Desc: "Band", StartPos: 8376993, EndPos: 8388575, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C11 = genome.Band{Band: "66C11", Desc: "Band", StartPos: 8388575, EndPos: 8410085, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C12 = genome.Band{Band: "66C12", Desc: "Band", StartPos: 8410085, EndPos: 8431595, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66C13 = genome.Band{Band: "66C13", Desc: "Band", StartPos: 8431595, EndPos: 8448141, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D1 = genome.Band{Band: "66D1", Desc: "Band", StartPos: 8448141, EndPos: 8498607, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D2 = genome.Band{Band: "66D2", Desc: "Band", StartPos: 8498607, EndPos: 8498617, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D3 = genome.Band{Band: "66D3", Desc: "Band", StartPos: 8498617, EndPos: 8498627, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D4 = genome.Band{Band: "66D4", Desc: "Band", StartPos: 8498627, EndPos: 8502436, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D5 = genome.Band{Band: "66D5", Desc: "Band", StartPos: 8502436, EndPos: 8518461, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D6 = genome.Band{Band: "66D6", Desc: "Band", StartPos: 8518461, EndPos: 8566724, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D7 = genome.Band{Band: "66D7", Desc: "Band", StartPos: 8566724, EndPos: 8576693, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D8 = genome.Band{Band: "66D8", Desc: "Band", StartPos: 8576693, EndPos: 8617203, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D9 = genome.Band{Band: "66D9", Desc: "Band", StartPos: 8617203, EndPos: 8642521, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D10 = genome.Band{Band: "66D10", Desc: "Band", StartPos: 8642521, EndPos: 8690784, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D11 = genome.Band{Band: "66D11", Desc: "Band", StartPos: 8690784, EndPos: 8716102, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D12 = genome.Band{Band: "66D12", Desc: "Band", StartPos: 8716102, EndPos: 8764365, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D13 = genome.Band{Band: "66D13", Desc: "Band", StartPos: 8764365, EndPos: 8774335, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D14 = genome.Band{Band: "66D14", Desc: "Band", StartPos: 8774335, EndPos: 8784755, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66D15 = genome.Band{Band: "66D15", Desc: "Band", StartPos: 8784755, EndPos: 8805649, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66E1 = genome.Band{Band: "66E1", Desc: "Band", StartPos: 8805649, EndPos: 8834459, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66E2 = genome.Band{Band: "66E2", Desc: "Band", StartPos: 8834459, EndPos: 8867187, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66E3 = genome.Band{Band: "66E3", Desc: "Band", StartPos: 8867187, EndPos: 8921531, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66E4 = genome.Band{Band: "66E4", Desc: "Band", StartPos: 8921531, EndPos: 8944628, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66E5 = genome.Band{Band: "66E5", Desc: "Band", StartPos: 8944628, EndPos: 8962394, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66E6 = genome.Band{Band: "66E6", Desc: "Band", StartPos: 8962394, EndPos: 8974830, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66F1 = genome.Band{Band: "66F1", Desc: "Band", StartPos: 8974830, EndPos: 9014027, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66F2 = genome.Band{Band: "66F2", Desc: "Band", StartPos: 9014027, EndPos: 9037124, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66F3 = genome.Band{Band: "66F3", Desc: "Band", StartPos: 9037124, EndPos: 9049560, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66F4 = genome.Band{Band: "66F4", Desc: "Band", StartPos: 9049560, EndPos: 9077986, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66F5 = genome.Band{Band: "66F5", Desc: "Band", StartPos: 9077986, EndPos: 9106413, Giemsa: "n/a", Chr: &Chr3L} Chr3L_66F6 = genome.Band{Band: "66F6", Desc: "Band", StartPos: 9106413, EndPos: 9118849, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67A1 = genome.Band{Band: "67A1", Desc: "Band", StartPos: 9118849, EndPos: 9183696, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67A2 = genome.Band{Band: "67A2", Desc: "Band", StartPos: 9183696, EndPos: 9186472, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67A3 = genome.Band{Band: "67A3", Desc: "Band", StartPos: 9186472, EndPos: 9220339, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67A4 = genome.Band{Band: "67A4", Desc: "Band", StartPos: 9220339, EndPos: 9259536, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67A5 = genome.Band{Band: "67A5", Desc: "Band", StartPos: 9259536, EndPos: 9266532, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67A6 = genome.Band{Band: "67A6", Desc: "Band", StartPos: 9266532, EndPos: 9284298, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67A7 = genome.Band{Band: "67A7", Desc: "Band", StartPos: 9284298, EndPos: 9302065, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67A8 = genome.Band{Band: "67A8", Desc: "Band", StartPos: 9302065, EndPos: 9314501, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67A9 = genome.Band{Band: "67A9", Desc: "Band", StartPos: 9314501, EndPos: 9326937, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B1 = genome.Band{Band: "67B1", Desc: "Band", StartPos: 9326937, EndPos: 9350034, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B2 = genome.Band{Band: "67B2", Desc: "Band", StartPos: 9350034, EndPos: 9373130, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B3 = genome.Band{Band: "67B3", Desc: "Band", StartPos: 9373130, EndPos: 9390896, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B4 = genome.Band{Band: "67B4", Desc: "Band", StartPos: 9390896, EndPos: 9403371, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B5 = genome.Band{Band: "67B5", Desc: "Band", StartPos: 9403371, EndPos: 9424861, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B6 = genome.Band{Band: "67B6", Desc: "Band", StartPos: 9424861, EndPos: 9438292, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B7 = genome.Band{Band: "67B7", Desc: "Band", StartPos: 9438292, EndPos: 9447694, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B8 = genome.Band{Band: "67B8", Desc: "Band", StartPos: 9447694, EndPos: 9461125, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B9 = genome.Band{Band: "67B9", Desc: "Band", StartPos: 9461125, EndPos: 9478586, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B10 = genome.Band{Band: "67B10", Desc: "Band", StartPos: 9478586, EndPos: 9500075, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B11 = genome.Band{Band: "67B11", Desc: "Band", StartPos: 9500075, EndPos: 9525679, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B12 = genome.Band{Band: "67B12", Desc: "Band", StartPos: 9525679, EndPos: 9535080, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67B13 = genome.Band{Band: "67B13", Desc: "Band", StartPos: 9535080, EndPos: 9540369, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67C1 = genome.Band{Band: "67C1", Desc: "Band", StartPos: 9540369, EndPos: 9590232, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67C2 = genome.Band{Band: "67C2", Desc: "Band", StartPos: 9590232, EndPos: 9623894, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67C3 = genome.Band{Band: "67C3", Desc: "Band", StartPos: 9623894, EndPos: 9641354, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67C4 = genome.Band{Band: "67C4", Desc: "Band", StartPos: 9641354, EndPos: 9679045, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67C5 = genome.Band{Band: "67C5", Desc: "Band", StartPos: 9679045, EndPos: 9725748, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67C6 = genome.Band{Band: "67C6", Desc: "Band", StartPos: 9725748, EndPos: 9745120, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67C7 = genome.Band{Band: "67C7", Desc: "Band", StartPos: 9745120, EndPos: 9772794, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67C8 = genome.Band{Band: "67C8", Desc: "Band", StartPos: 9772794, EndPos: 9800468, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67C9 = genome.Band{Band: "67C9", Desc: "Band", StartPos: 9800468, EndPos: 9819839, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67C10 = genome.Band{Band: "67C10", Desc: "Band", StartPos: 9819839, EndPos: 9847513, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67C11 = genome.Band{Band: "67C11", Desc: "Band", StartPos: 9847513, EndPos: 9858410, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D1 = genome.Band{Band: "67D1", Desc: "Band", StartPos: 9858410, EndPos: 9911163, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D2 = genome.Band{Band: "67D2", Desc: "Band", StartPos: 9911163, EndPos: 9972219, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D3 = genome.Band{Band: "67D3", Desc: "Band", StartPos: 9972219, EndPos: 10008195, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D4 = genome.Band{Band: "67D4", Desc: "Band", StartPos: 10008195, EndPos: 10019092, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D5 = genome.Band{Band: "67D5", Desc: "Band", StartPos: 10019092, EndPos: 10061641, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D6 = genome.Band{Band: "67D6", Desc: "Band", StartPos: 10061641, EndPos: 10065965, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D7 = genome.Band{Band: "67D7", Desc: "Band", StartPos: 10065965, EndPos: 10076861, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D8 = genome.Band{Band: "67D8", Desc: "Band", StartPos: 10076861, EndPos: 10137917, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D9 = genome.Band{Band: "67D9", Desc: "Band", StartPos: 10137917, EndPos: 10173893, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D10 = genome.Band{Band: "67D10", Desc: "Band", StartPos: 10173893, EndPos: 10209869, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D11 = genome.Band{Band: "67D11", Desc: "Band", StartPos: 10209869, EndPos: 10245845, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D12 = genome.Band{Band: "67D12", Desc: "Band", StartPos: 10245845, EndPos: 10281821, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67D13 = genome.Band{Band: "67D13", Desc: "Band", StartPos: 10281821, EndPos: 10309495, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67E1 = genome.Band{Band: "67E1", Desc: "Band", StartPos: 10309495, EndPos: 10353774, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67E2 = genome.Band{Band: "67E2", Desc: "Band", StartPos: 10353774, EndPos: 10406527, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67E3 = genome.Band{Band: "67E3", Desc: "Band", StartPos: 10406527, EndPos: 10459280, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67E4 = genome.Band{Band: "67E4", Desc: "Band", StartPos: 10459280, EndPos: 10583987, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67E5 = genome.Band{Band: "67E5", Desc: "Band", StartPos: 10583987, EndPos: 10649784, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67E6 = genome.Band{Band: "67E6", Desc: "Band", StartPos: 10649784, EndPos: 10685212, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67E7 = genome.Band{Band: "67E7", Desc: "Band", StartPos: 10685212, EndPos: 10763050, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67F1 = genome.Band{Band: "67F1", Desc: "Band", StartPos: 10763050, EndPos: 10939677, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67F2 = genome.Band{Band: "67F2", Desc: "Band", StartPos: 10939677, EndPos: 10939687, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67F3 = genome.Band{Band: "67F3", Desc: "Band", StartPos: 10939687, EndPos: 10939697, Giemsa: "n/a", Chr: &Chr3L} Chr3L_67F4 = genome.Band{Band: "67F4", Desc: "Band", StartPos: 10939697, EndPos: 10942969, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68A1 = genome.Band{Band: "68A1", Desc: "Band", StartPos: 10942969, EndPos: 11021166, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68A2 = genome.Band{Band: "68A2", Desc: "Band", StartPos: 11021166, EndPos: 11038422, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68A3 = genome.Band{Band: "68A3", Desc: "Band", StartPos: 11038422, EndPos: 11056265, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68A4 = genome.Band{Band: "68A4", Desc: "Band", StartPos: 11056265, EndPos: 11070761, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68A5 = genome.Band{Band: "68A5", Desc: "Band", StartPos: 11070761, EndPos: 11086229, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68A6 = genome.Band{Band: "68A6", Desc: "Band", StartPos: 11086229, EndPos: 11099398, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68A7 = genome.Band{Band: "68A7", Desc: "Band", StartPos: 11099398, EndPos: 11123855, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68A8 = genome.Band{Band: "68A8", Desc: "Band", StartPos: 11123855, EndPos: 11142668, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68A9 = genome.Band{Band: "68A9", Desc: "Band", StartPos: 11142668, EndPos: 11167125, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68B1 = genome.Band{Band: "68B1", Desc: "Band", StartPos: 11167125, EndPos: 11207455, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68B2 = genome.Band{Band: "68B2", Desc: "Band", StartPos: 11207455, EndPos: 11210394, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68B3 = genome.Band{Band: "68B3", Desc: "Band", StartPos: 11210394, EndPos: 11234851, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68B4 = genome.Band{Band: "68B4", Desc: "Band", StartPos: 11234851, EndPos: 11248020, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C1 = genome.Band{Band: "68C1", Desc: "Band", StartPos: 11248020, EndPos: 11283883, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C2 = genome.Band{Band: "68C2", Desc: "Band", StartPos: 11283883, EndPos: 11319745, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C3 = genome.Band{Band: "68C3", Desc: "Band", StartPos: 11319745, EndPos: 11349846, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C4 = genome.Band{Band: "68C4", Desc: "Band", StartPos: 11349846, EndPos: 11379946, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C5 = genome.Band{Band: "68C5", Desc: "Band", StartPos: 11379946, EndPos: 11387354, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C6 = genome.Band{Band: "68C6", Desc: "Band", StartPos: 11387354, EndPos: 11400523, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C7 = genome.Band{Band: "68C7", Desc: "Band", StartPos: 11400523, EndPos: 11424980, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C8 = genome.Band{Band: "68C8", Desc: "Band", StartPos: 11424980, EndPos: 11438149, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C9 = genome.Band{Band: "68C9", Desc: "Band", StartPos: 11438149, EndPos: 11479655, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C10 = genome.Band{Band: "68C10", Desc: "Band", StartPos: 11479655, EndPos: 11498468, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C11 = genome.Band{Band: "68C11", Desc: "Band", StartPos: 11498468, EndPos: 11511637, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C12 = genome.Band{Band: "68C12", Desc: "Band", StartPos: 11511637, EndPos: 11541738, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C13 = genome.Band{Band: "68C13", Desc: "Band", StartPos: 11541738, EndPos: 11583244, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C14 = genome.Band{Band: "68C14", Desc: "Band", StartPos: 11583244, EndPos: 11596413, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68C15 = genome.Band{Band: "68C15", Desc: "Band", StartPos: 11596413, EndPos: 11620870, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68D1 = genome.Band{Band: "68D1", Desc: "Band", StartPos: 11620870, EndPos: 11656732, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68D2 = genome.Band{Band: "68D2", Desc: "Band", StartPos: 11656732, EndPos: 11703882, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68D3 = genome.Band{Band: "68D3", Desc: "Band", StartPos: 11703882, EndPos: 11728339, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68D4 = genome.Band{Band: "68D4", Desc: "Band", StartPos: 11728339, EndPos: 11774313, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68D5 = genome.Band{Band: "68D5", Desc: "Band", StartPos: 11774313, EndPos: 11777253, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68D6 = genome.Band{Band: "68D6", Desc: "Band", StartPos: 11777253, EndPos: 11790422, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68E1 = genome.Band{Band: "68E1", Desc: "Band", StartPos: 11790422, EndPos: 11837572, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68E2 = genome.Band{Band: "68E2", Desc: "Band", StartPos: 11837572, EndPos: 11871803, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68E3 = genome.Band{Band: "68E3", Desc: "Band", StartPos: 11871803, EndPos: 11953528, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68E4 = genome.Band{Band: "68E4", Desc: "Band", StartPos: 11953528, EndPos: 11977477, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68F1 = genome.Band{Band: "68F1", Desc: "Band", StartPos: 11977477, EndPos: 12059203, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68F2 = genome.Band{Band: "68F2", Desc: "Band", StartPos: 12059203, EndPos: 12097521, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68F3 = genome.Band{Band: "68F3", Desc: "Band", StartPos: 12097521, EndPos: 12111305, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68F4 = genome.Band{Band: "68F4", Desc: "Band", StartPos: 12111305, EndPos: 12121156, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68F5 = genome.Band{Band: "68F5", Desc: "Band", StartPos: 12121156, EndPos: 12133963, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68F6 = genome.Band{Band: "68F6", Desc: "Band", StartPos: 12133963, EndPos: 12143814, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68F7 = genome.Band{Band: "68F7", Desc: "Band", StartPos: 12143814, EndPos: 12156621, Giemsa: "n/a", Chr: &Chr3L} Chr3L_68F8 = genome.Band{Band: "68F8", Desc: "Band", StartPos: 12156621, EndPos: 12163517, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69A1 = genome.Band{Band: "69A1", Desc: "Band", StartPos: 12163517, EndPos: 12188207, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69A2 = genome.Band{Band: "69A2", Desc: "Band", StartPos: 12188207, EndPos: 12206986, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69A3 = genome.Band{Band: "69A3", Desc: "Band", StartPos: 12206986, EndPos: 12258740, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69A4 = genome.Band{Band: "69A4", Desc: "Band", StartPos: 12258740, EndPos: 12270311, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69A5 = genome.Band{Band: "69A5", Desc: "Band", StartPos: 12270311, EndPos: 12286842, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69B1 = genome.Band{Band: "69B1", Desc: "Band", StartPos: 12286842, EndPos: 12328272, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69B2 = genome.Band{Band: "69B2", Desc: "Band", StartPos: 12328272, EndPos: 12359784, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69B3 = genome.Band{Band: "69B3", Desc: "Band", StartPos: 12359784, EndPos: 12386233, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69B4 = genome.Band{Band: "69B4", Desc: "Band", StartPos: 12386233, EndPos: 12402764, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69B5 = genome.Band{Band: "69B5", Desc: "Band", StartPos: 12402764, EndPos: 12414335, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69C1 = genome.Band{Band: "69C1", Desc: "Band", StartPos: 12414335, EndPos: 12445847, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69C2 = genome.Band{Band: "69C2", Desc: "Band", StartPos: 12445847, EndPos: 12482318, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69C3 = genome.Band{Band: "69C3", Desc: "Band", StartPos: 12482318, EndPos: 12493890, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69C4 = genome.Band{Band: "69C4", Desc: "Band", StartPos: 12493890, EndPos: 12524368, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69C5 = genome.Band{Band: "69C5", Desc: "Band", StartPos: 12524368, EndPos: 12526951, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69C6 = genome.Band{Band: "69C6", Desc: "Band", StartPos: 12526951, EndPos: 12548441, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69C7 = genome.Band{Band: "69C7", Desc: "Band", StartPos: 12548441, EndPos: 12554950, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69C8 = genome.Band{Band: "69C8", Desc: "Band", StartPos: 12554950, EndPos: 12576440, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69C9 = genome.Band{Band: "69C9", Desc: "Band", StartPos: 12576440, EndPos: 12588011, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69C10 = genome.Band{Band: "69C10", Desc: "Band", StartPos: 12588011, EndPos: 12594520, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69C11 = genome.Band{Band: "69C11", Desc: "Band", StartPos: 12594520, EndPos: 12601029, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69D1 = genome.Band{Band: "69D1", Desc: "Band", StartPos: 12601029, EndPos: 12647419, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69D2 = genome.Band{Band: "69D2", Desc: "Band", StartPos: 12647419, EndPos: 12673868, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69D3 = genome.Band{Band: "69D3", Desc: "Band", StartPos: 12673868, EndPos: 12700317, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69D4 = genome.Band{Band: "69D4", Desc: "Band", StartPos: 12700317, EndPos: 12706826, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69D5 = genome.Band{Band: "69D5", Desc: "Band", StartPos: 12706826, EndPos: 12718398, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69D6 = genome.Band{Band: "69D6", Desc: "Band", StartPos: 12718398, EndPos: 12729969, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69E1 = genome.Band{Band: "69E1", Desc: "Band", StartPos: 12729969, EndPos: 12756418, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69E2 = genome.Band{Band: "69E2", Desc: "Band", StartPos: 12756418, EndPos: 12787930, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69E3 = genome.Band{Band: "69E3", Desc: "Band", StartPos: 12787930, EndPos: 12794439, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69E4 = genome.Band{Band: "69E4", Desc: "Band", StartPos: 12794439, EndPos: 12810815, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69E5 = genome.Band{Band: "69E5", Desc: "Band", StartPos: 12810815, EndPos: 12827124, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69E6 = genome.Band{Band: "69E6", Desc: "Band", StartPos: 12827124, EndPos: 12862086, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69E7 = genome.Band{Band: "69E7", Desc: "Band", StartPos: 12862086, EndPos: 12864634, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69E8 = genome.Band{Band: "69E8", Desc: "Band", StartPos: 12864634, EndPos: 12885835, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69F1 = genome.Band{Band: "69F1", Desc: "Band", StartPos: 12885835, EndPos: 12911929, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69F2 = genome.Band{Band: "69F2", Desc: "Band", StartPos: 12911929, EndPos: 12967583, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69F3 = genome.Band{Band: "69F3", Desc: "Band", StartPos: 12967583, EndPos: 12983892, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69F4 = genome.Band{Band: "69F4", Desc: "Band", StartPos: 12983892, EndPos: 12995308, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69F5 = genome.Band{Band: "69F5", Desc: "Band", StartPos: 12995308, EndPos: 13021402, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69F6 = genome.Band{Band: "69F6", Desc: "Band", StartPos: 13021402, EndPos: 13062314, Giemsa: "n/a", Chr: &Chr3L} Chr3L_69F7 = genome.Band{Band: "69F7", Desc: "Band", StartPos: 13062314, EndPos: 13076187, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70A1 = genome.Band{Band: "70A1", Desc: "Band", StartPos: 13076187, EndPos: 13153924, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70A2 = genome.Band{Band: "70A2", Desc: "Band", StartPos: 13153924, EndPos: 13220721, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70A3 = genome.Band{Band: "70A3", Desc: "Band", StartPos: 13220721, EndPos: 13249887, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70A4 = genome.Band{Band: "70A4", Desc: "Band", StartPos: 13249887, EndPos: 13299384, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70A5 = genome.Band{Band: "70A5", Desc: "Band", StartPos: 13299384, EndPos: 13348881, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70A6 = genome.Band{Band: "70A6", Desc: "Band", StartPos: 13348881, EndPos: 13357714, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70A7 = genome.Band{Band: "70A7", Desc: "Band", StartPos: 13357714, EndPos: 13380149, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70A8 = genome.Band{Band: "70A8", Desc: "Band", StartPos: 13380149, EndPos: 13409314, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70B1 = genome.Band{Band: "70B1", Desc: "Band", StartPos: 13409314, EndPos: 13458811, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70B2 = genome.Band{Band: "70B2", Desc: "Band", StartPos: 13458811, EndPos: 13487977, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70B3 = genome.Band{Band: "70B3", Desc: "Band", StartPos: 13487977, EndPos: 13504515, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70B4 = genome.Band{Band: "70B4", Desc: "Band", StartPos: 13504515, EndPos: 13518679, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70B5 = genome.Band{Band: "70B5", Desc: "Band", StartPos: 13518679, EndPos: 13536112, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70B6 = genome.Band{Band: "70B6", Desc: "Band", StartPos: 13536112, EndPos: 13550276, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70B7 = genome.Band{Band: "70B7", Desc: "Band", StartPos: 13550276, EndPos: 13557903, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C1 = genome.Band{Band: "70C1", Desc: "Band", StartPos: 13557903, EndPos: 13585210, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C2 = genome.Band{Band: "70C2", Desc: "Band", StartPos: 13585210, EndPos: 13720103, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C3 = genome.Band{Band: "70C3", Desc: "Band", StartPos: 13720103, EndPos: 13793056, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C4 = genome.Band{Band: "70C4", Desc: "Band", StartPos: 13793056, EndPos: 13852331, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C5 = genome.Band{Band: "70C5", Desc: "Band", StartPos: 13852331, EndPos: 13925284, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C6 = genome.Band{Band: "70C6", Desc: "Band", StartPos: 13925284, EndPos: 13951026, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C7 = genome.Band{Band: "70C7", Desc: "Band", StartPos: 13951026, EndPos: 13958517, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C8 = genome.Band{Band: "70C8", Desc: "Band", StartPos: 13958517, EndPos: 13962730, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C9 = genome.Band{Band: "70C9", Desc: "Band", StartPos: 13962730, EndPos: 13983129, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C10 = genome.Band{Band: "70C10", Desc: "Band", StartPos: 13983129, EndPos: 13990620, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C11 = genome.Band{Band: "70C11", Desc: "Band", StartPos: 13990620, EndPos: 14001321, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C12 = genome.Band{Band: "70C12", Desc: "Band", StartPos: 14001321, EndPos: 14017774, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C13 = genome.Band{Band: "70C13", Desc: "Band", StartPos: 14017774, EndPos: 14019446, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C14 = genome.Band{Band: "70C14", Desc: "Band", StartPos: 14019446, EndPos: 14023659, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70C15 = genome.Band{Band: "70C15", Desc: "Band", StartPos: 14023659, EndPos: 14040781, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70D1 = genome.Band{Band: "70D1", Desc: "Band", StartPos: 14040781, EndPos: 14067600, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70D2 = genome.Band{Band: "70D2", Desc: "Band", StartPos: 14067600, EndPos: 14154713, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70D3 = genome.Band{Band: "70D3", Desc: "Band", StartPos: 14154713, EndPos: 14199899, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70D4 = genome.Band{Band: "70D4", Desc: "Band", StartPos: 14199899, EndPos: 14287012, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70D5 = genome.Band{Band: "70D5", Desc: "Band", StartPos: 14287012, EndPos: 14374125, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70D6 = genome.Band{Band: "70D6", Desc: "Band", StartPos: 14374125, EndPos: 14398455, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70D7 = genome.Band{Band: "70D7", Desc: "Band", StartPos: 14398455, EndPos: 14443641, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70E1 = genome.Band{Band: "70E1", Desc: "Band", StartPos: 14443641, EndPos: 14541181, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70E2 = genome.Band{Band: "70E2", Desc: "Band", StartPos: 14541181, EndPos: 14575081, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70E3 = genome.Band{Band: "70E3", Desc: "Band", StartPos: 14575081, EndPos: 14598074, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70E4 = genome.Band{Band: "70E4", Desc: "Band", StartPos: 14598074, EndPos: 14621066, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70E5 = genome.Band{Band: "70E5", Desc: "Band", StartPos: 14621066, EndPos: 14644059, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70E6 = genome.Band{Band: "70E6", Desc: "Band", StartPos: 14644059, EndPos: 14656439, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70E7 = genome.Band{Band: "70E7", Desc: "Band", StartPos: 14656439, EndPos: 14673020, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70E8 = genome.Band{Band: "70E8", Desc: "Band", StartPos: 14673020, EndPos: 14675784, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70F1 = genome.Band{Band: "70F1", Desc: "Band", StartPos: 14675784, EndPos: 14719005, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70F2 = genome.Band{Band: "70F2", Desc: "Band", StartPos: 14719005, EndPos: 14721769, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70F3 = genome.Band{Band: "70F3", Desc: "Band", StartPos: 14721769, EndPos: 14728733, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70F4 = genome.Band{Band: "70F4", Desc: "Band", StartPos: 14728733, EndPos: 14762448, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70F5 = genome.Band{Band: "70F5", Desc: "Band", StartPos: 14762448, EndPos: 14780135, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70F6 = genome.Band{Band: "70F6", Desc: "Band", StartPos: 14780135, EndPos: 14797821, Giemsa: "n/a", Chr: &Chr3L} Chr3L_70F7 = genome.Band{Band: "70F7", Desc: "Band", StartPos: 14797821, EndPos: 14820814, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71A1 = genome.Band{Band: "71A1", Desc: "Band", StartPos: 14820814, EndPos: 14881169, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71A2 = genome.Band{Band: "71A2", Desc: "Band", StartPos: 14881169, EndPos: 14941525, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71A3 = genome.Band{Band: "71A3", Desc: "Band", StartPos: 14941525, EndPos: 14964517, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71A4 = genome.Band{Band: "71A4", Desc: "Band", StartPos: 14964517, EndPos: 14982204, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71B1 = genome.Band{Band: "71B1", Desc: "Band", StartPos: 14982204, EndPos: 15021225, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71B2 = genome.Band{Band: "71B2", Desc: "Band", StartPos: 15021225, EndPos: 15066303, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71B3 = genome.Band{Band: "71B3", Desc: "Band", StartPos: 15066303, EndPos: 15076952, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71B4 = genome.Band{Band: "71B4", Desc: "Band", StartPos: 15076952, EndPos: 15101293, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71B5 = genome.Band{Band: "71B5", Desc: "Band", StartPos: 15101293, EndPos: 15142607, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71B6 = genome.Band{Band: "71B6", Desc: "Band", StartPos: 15142607, EndPos: 15158174, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71B7 = genome.Band{Band: "71B7", Desc: "Band", StartPos: 15158174, EndPos: 15180411, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71B8 = genome.Band{Band: "71B8", Desc: "Band", StartPos: 15180411, EndPos: 15209320, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71C1 = genome.Band{Band: "71C1", Desc: "Band", StartPos: 15209320, EndPos: 15291877, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71C2 = genome.Band{Band: "71C2", Desc: "Band", StartPos: 15291877, EndPos: 15361092, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71C3 = genome.Band{Band: "71C3", Desc: "Band", StartPos: 15361092, EndPos: 15383329, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71C4 = genome.Band{Band: "71C4", Desc: "Band", StartPos: 15383329, EndPos: 15412238, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71D1 = genome.Band{Band: "71D1", Desc: "Band", StartPos: 15412238, EndPos: 15441147, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71D2 = genome.Band{Band: "71D2", Desc: "Band", StartPos: 15441147, EndPos: 15470056, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71D3 = genome.Band{Band: "71D3", Desc: "Band", StartPos: 15470056, EndPos: 15505636, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71D4 = genome.Band{Band: "71D4", Desc: "Band", StartPos: 15505636, EndPos: 15521203, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71E1 = genome.Band{Band: "71E1", Desc: "Band", StartPos: 15521203, EndPos: 15590417, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71E2 = genome.Band{Band: "71E2", Desc: "Band", StartPos: 15590417, EndPos: 15605811, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71E3 = genome.Band{Band: "71E3", Desc: "Band", StartPos: 15605811, EndPos: 15615380, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71E4 = genome.Band{Band: "71E4", Desc: "Band", StartPos: 15615380, EndPos: 15633151, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71E5 = genome.Band{Band: "71E5", Desc: "Band", StartPos: 15633151, EndPos: 15667413, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71F1 = genome.Band{Band: "71F1", Desc: "Band", StartPos: 15667413, EndPos: 15693472, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71F2 = genome.Band{Band: "71F2", Desc: "Band", StartPos: 15693472, EndPos: 15736021, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71F3 = genome.Band{Band: "71F3", Desc: "Band", StartPos: 15736021, EndPos: 15749691, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71F4 = genome.Band{Band: "71F4", Desc: "Band", StartPos: 15749691, EndPos: 15767463, Giemsa: "n/a", Chr: &Chr3L} Chr3L_71F5 = genome.Band{Band: "71F5", Desc: "Band", StartPos: 15767463, EndPos: 15777032, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72A1 = genome.Band{Band: "72A1", Desc: "Band", StartPos: 15777032, EndPos: 15819581, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72A2 = genome.Band{Band: "72A2", Desc: "Band", StartPos: 15819581, EndPos: 15853842, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72A3 = genome.Band{Band: "72A3", Desc: "Band", StartPos: 15853842, EndPos: 15871614, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72A4 = genome.Band{Band: "72A4", Desc: "Band", StartPos: 15871614, EndPos: 15893486, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72A5 = genome.Band{Band: "72A5", Desc: "Band", StartPos: 15893486, EndPos: 15903055, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72B1 = genome.Band{Band: "72B1", Desc: "Band", StartPos: 15903055, EndPos: 15937317, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72B2 = genome.Band{Band: "72B2", Desc: "Band", StartPos: 15937317, EndPos: 15950987, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72C1 = genome.Band{Band: "72C1", Desc: "Band", StartPos: 15950987, EndPos: 15997637, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72C2 = genome.Band{Band: "72C2", Desc: "Band", StartPos: 15997637, EndPos: 16011308, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72C3 = genome.Band{Band: "72C3", Desc: "Band", StartPos: 16011308, EndPos: 16020877, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72D1 = genome.Band{Band: "72D1", Desc: "Band", StartPos: 16020877, EndPos: 16079061, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72D2 = genome.Band{Band: "72D2", Desc: "Band", StartPos: 16079061, EndPos: 16079071, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72D3 = genome.Band{Band: "72D3", Desc: "Band", StartPos: 16079071, EndPos: 16079081, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72D4 = genome.Band{Band: "72D4", Desc: "Band", StartPos: 16079081, EndPos: 16080733, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72D5 = genome.Band{Band: "72D5", Desc: "Band", StartPos: 16080733, EndPos: 16092916, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72D6 = genome.Band{Band: "72D6", Desc: "Band", StartPos: 16092916, EndPos: 16100531, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72D7 = genome.Band{Band: "72D7", Desc: "Band", StartPos: 16100531, EndPos: 16108145, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72D8 = genome.Band{Band: "72D8", Desc: "Band", StartPos: 16108145, EndPos: 16122660, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72D9 = genome.Band{Band: "72D9", Desc: "Band", StartPos: 16122660, EndPos: 16172266, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72D10 = genome.Band{Band: "72D10", Desc: "Band", StartPos: 16172266, EndPos: 16267248, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72D11 = genome.Band{Band: "72D11", Desc: "Band", StartPos: 16267248, EndPos: 16267258, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72D12 = genome.Band{Band: "72D12", Desc: "Band", StartPos: 16267258, EndPos: 16282674, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72E1 = genome.Band{Band: "72E1", Desc: "Band", StartPos: 16282674, EndPos: 16341292, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72E2 = genome.Band{Band: "72E2", Desc: "Band", StartPos: 16341292, EndPos: 16362055, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72E3 = genome.Band{Band: "72E3", Desc: "Band", StartPos: 16362055, EndPos: 16370340, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72E4 = genome.Band{Band: "72E4", Desc: "Band", StartPos: 16370340, EndPos: 16388618, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72E5 = genome.Band{Band: "72E5", Desc: "Band", StartPos: 16388618, EndPos: 16399388, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72F1 = genome.Band{Band: "72F1", Desc: "Band", StartPos: 16399388, EndPos: 16424656, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72F2 = genome.Band{Band: "72F2", Desc: "Band", StartPos: 16424656, EndPos: 16425951, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72F3 = genome.Band{Band: "72F3", Desc: "Band", StartPos: 16425951, EndPos: 16431750, Giemsa: "n/a", Chr: &Chr3L} Chr3L_72F4 = genome.Band{Band: "72F4", Desc: "Band", StartPos: 16431750, EndPos: 16440035, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73A1 = genome.Band{Band: "73A1", Desc: "Band", StartPos: 16440035, EndPos: 16460798, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73A2 = genome.Band{Band: "73A2", Desc: "Band", StartPos: 16460798, EndPos: 16482195, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73A3 = genome.Band{Band: "73A3", Desc: "Band", StartPos: 16482195, EndPos: 16495854, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73A4 = genome.Band{Band: "73A4", Desc: "Band", StartPos: 16495854, EndPos: 16532725, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73A5 = genome.Band{Band: "73A5", Desc: "Band", StartPos: 16532725, EndPos: 16546385, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73A6 = genome.Band{Band: "73A6", Desc: "Band", StartPos: 16546385, EndPos: 16549746, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73A7 = genome.Band{Band: "73A7", Desc: "Band", StartPos: 16549746, EndPos: 16558284, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73A8 = genome.Band{Band: "73A8", Desc: "Band", StartPos: 16558284, EndPos: 16564260, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73A9 = genome.Band{Band: "73A9", Desc: "Band", StartPos: 16564260, EndPos: 16575358, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73A10 = genome.Band{Band: "73A10", Desc: "Band", StartPos: 16575358, EndPos: 16586457, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73A11 = genome.Band{Band: "73A11", Desc: "Band", StartPos: 16586457, EndPos: 16592433, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73B1 = genome.Band{Band: "73B1", Desc: "Band", StartPos: 16592433, EndPos: 16615857, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73B2 = genome.Band{Band: "73B2", Desc: "Band", StartPos: 16615857, EndPos: 16617191, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73B3 = genome.Band{Band: "73B3", Desc: "Band", StartPos: 16617191, EndPos: 16625729, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73B4 = genome.Band{Band: "73B4", Desc: "Band", StartPos: 16625729, EndPos: 16642003, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73B5 = genome.Band{Band: "73B5", Desc: "Band", StartPos: 16642003, EndPos: 16665427, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73B6 = genome.Band{Band: "73B6", Desc: "Band", StartPos: 16665427, EndPos: 16679364, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73B7 = genome.Band{Band: "73B7", Desc: "Band", StartPos: 16679364, EndPos: 16696594, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73C1 = genome.Band{Band: "73C1", Desc: "Band", StartPos: 16696594, EndPos: 16724160, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73C2 = genome.Band{Band: "73C2", Desc: "Band", StartPos: 16724160, EndPos: 16751727, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73C3 = genome.Band{Band: "73C3", Desc: "Band", StartPos: 16751727, EndPos: 16763788, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73C4 = genome.Band{Band: "73C4", Desc: "Band", StartPos: 16763788, EndPos: 16786186, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73C5 = genome.Band{Band: "73C5", Desc: "Band", StartPos: 16786186, EndPos: 16798246, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73D1 = genome.Band{Band: "73D1", Desc: "Band", StartPos: 16798246, EndPos: 16845519, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73D2 = genome.Band{Band: "73D2", Desc: "Band", StartPos: 16845519, EndPos: 16848211, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73D3 = genome.Band{Band: "73D3", Desc: "Band", StartPos: 16848211, EndPos: 16860272, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73D4 = genome.Band{Band: "73D4", Desc: "Band", StartPos: 16860272, EndPos: 16877501, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73D5 = genome.Band{Band: "73D5", Desc: "Band", StartPos: 16877501, EndPos: 16899899, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73D6 = genome.Band{Band: "73D6", Desc: "Band", StartPos: 16899899, EndPos: 16922297, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73D7 = genome.Band{Band: "73D7", Desc: "Band", StartPos: 16922297, EndPos: 16934357, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73E1 = genome.Band{Band: "73E1", Desc: "Band", StartPos: 16934357, EndPos: 16986907, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73E2 = genome.Band{Band: "73E2", Desc: "Band", StartPos: 16986907, EndPos: 16989599, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73E3 = genome.Band{Band: "73E3", Desc: "Band", StartPos: 16989599, EndPos: 16996383, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73E4 = genome.Band{Band: "73E4", Desc: "Band", StartPos: 16996383, EndPos: 17029226, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73E5 = genome.Band{Band: "73E5", Desc: "Band", StartPos: 17029226, EndPos: 17062069, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73E6 = genome.Band{Band: "73E6", Desc: "Band", StartPos: 17062069, EndPos: 17094913, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73F1 = genome.Band{Band: "73F1", Desc: "Band", StartPos: 17094913, EndPos: 17132925, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73F2 = genome.Band{Band: "73F2", Desc: "Band", StartPos: 17132925, EndPos: 17150154, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73F3 = genome.Band{Band: "73F3", Desc: "Band", StartPos: 17150154, EndPos: 17177721, Giemsa: "n/a", Chr: &Chr3L} Chr3L_73F4 = genome.Band{Band: "73F4", Desc: "Band", StartPos: 17177721, EndPos: 17194950, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74A1 = genome.Band{Band: "74A1", Desc: "Band", StartPos: 17194950, EndPos: 17232962, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74A2 = genome.Band{Band: "74A2", Desc: "Band", StartPos: 17232962, EndPos: 17265805, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74A3 = genome.Band{Band: "74A3", Desc: "Band", StartPos: 17265805, EndPos: 17288203, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74A4 = genome.Band{Band: "74A4", Desc: "Band", StartPos: 17288203, EndPos: 17326215, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74A5 = genome.Band{Band: "74A5", Desc: "Band", StartPos: 17326215, EndPos: 17364227, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74A6 = genome.Band{Band: "74A6", Desc: "Band", StartPos: 17364227, EndPos: 17381457, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74B1 = genome.Band{Band: "74B1", Desc: "Band", StartPos: 17381457, EndPos: 17414300, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74B2 = genome.Band{Band: "74B2", Desc: "Band", StartPos: 17414300, EndPos: 17417640, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74B3 = genome.Band{Band: "74B3", Desc: "Band", StartPos: 17417640, EndPos: 17419393, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74B4 = genome.Band{Band: "74B4", Desc: "Band", StartPos: 17419393, EndPos: 17421145, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74B5 = genome.Band{Band: "74B5", Desc: "Band", StartPos: 17421145, EndPos: 17422372, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74C1 = genome.Band{Band: "74C1", Desc: "Band", StartPos: 17422372, EndPos: 17429830, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74C2 = genome.Band{Band: "74C2", Desc: "Band", StartPos: 17429830, EndPos: 17450484, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74C3 = genome.Band{Band: "74C3", Desc: "Band", StartPos: 17450484, EndPos: 17471432, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74C4 = genome.Band{Band: "74C4", Desc: "Band", StartPos: 17471432, EndPos: 17475759, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74D1 = genome.Band{Band: "74D1", Desc: "Band", StartPos: 17475759, EndPos: 17503302, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74D2 = genome.Band{Band: "74D2", Desc: "Band", StartPos: 17503302, EndPos: 17534141, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74D3 = genome.Band{Band: "74D3", Desc: "Band", StartPos: 17534141, EndPos: 17541833, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74D4 = genome.Band{Band: "74D4", Desc: "Band", StartPos: 17541833, EndPos: 17559417, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74D5 = genome.Band{Band: "74D5", Desc: "Band", StartPos: 17559417, EndPos: 17569427, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74E1 = genome.Band{Band: "74E1", Desc: "Band", StartPos: 17569427, EndPos: 17593321, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74E2 = genome.Band{Band: "74E2", Desc: "Band", StartPos: 17593321, EndPos: 17620976, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74E3 = genome.Band{Band: "74E3", Desc: "Band", StartPos: 17620976, EndPos: 17629750, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74E4 = genome.Band{Band: "74E4", Desc: "Band", StartPos: 17629750, EndPos: 17657405, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74E5 = genome.Band{Band: "74E5", Desc: "Band", StartPos: 17657405, EndPos: 17666179, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74F1 = genome.Band{Band: "74F1", Desc: "Band", StartPos: 17666179, EndPos: 17693833, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74F2 = genome.Band{Band: "74F2", Desc: "Band", StartPos: 17693833, EndPos: 17702608, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74F3 = genome.Band{Band: "74F3", Desc: "Band", StartPos: 17702608, EndPos: 17726502, Giemsa: "n/a", Chr: &Chr3L} Chr3L_74F4 = genome.Band{Band: "74F4", Desc: "Band", StartPos: 17726502, EndPos: 17735276, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75A1 = genome.Band{Band: "75A1", Desc: "Band", StartPos: 17735276, EndPos: 17778051, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75A2 = genome.Band{Band: "75A2", Desc: "Band", StartPos: 17778051, EndPos: 17817065, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75A3 = genome.Band{Band: "75A3", Desc: "Band", StartPos: 17817065, EndPos: 17825839, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75A4 = genome.Band{Band: "75A4", Desc: "Band", StartPos: 17825839, EndPos: 17856471, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75A5 = genome.Band{Band: "75A5", Desc: "Band", StartPos: 17856471, EndPos: 17858429, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75A6 = genome.Band{Band: "75A6", Desc: "Band", StartPos: 17858429, EndPos: 17867203, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75A7 = genome.Band{Band: "75A7", Desc: "Band", StartPos: 17867203, EndPos: 17875978, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75A8 = genome.Band{Band: "75A8", Desc: "Band", StartPos: 17875978, EndPos: 17911153, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75A9 = genome.Band{Band: "75A9", Desc: "Band", StartPos: 17911153, EndPos: 17935047, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75A10 = genome.Band{Band: "75A10", Desc: "Band", StartPos: 17935047, EndPos: 17951342, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B1 = genome.Band{Band: "75B1", Desc: "Band", StartPos: 17951342, EndPos: 17975236, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B2 = genome.Band{Band: "75B2", Desc: "Band", StartPos: 17975236, EndPos: 18002891, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B3 = genome.Band{Band: "75B3", Desc: "Band", StartPos: 18002891, EndPos: 18007826, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B4 = genome.Band{Band: "75B4", Desc: "Band", StartPos: 18007826, EndPos: 18035481, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B5 = genome.Band{Band: "75B5", Desc: "Band", StartPos: 18035481, EndPos: 18044255, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B6 = genome.Band{Band: "75B6", Desc: "Band", StartPos: 18044255, EndPos: 18068149, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B7 = genome.Band{Band: "75B7", Desc: "Band", StartPos: 18068149, EndPos: 18092044, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B8 = genome.Band{Band: "75B8", Desc: "Band", StartPos: 18092044, EndPos: 18096979, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B9 = genome.Band{Band: "75B9", Desc: "Band", StartPos: 18096979, EndPos: 18105753, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B10 = genome.Band{Band: "75B10", Desc: "Band", StartPos: 18105753, EndPos: 18114528, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B11 = genome.Band{Band: "75B11", Desc: "Band", StartPos: 18114528, EndPos: 18137638, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B12 = genome.Band{Band: "75B12", Desc: "Band", StartPos: 18137638, EndPos: 18139597, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75B13 = genome.Band{Band: "75B13", Desc: "Band", StartPos: 18139597, EndPos: 18148371, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75C1 = genome.Band{Band: "75C1", Desc: "Band", StartPos: 18148371, EndPos: 18179786, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75C2 = genome.Band{Band: "75C2", Desc: "Band", StartPos: 18179786, EndPos: 18255708, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75C3 = genome.Band{Band: "75C3", Desc: "Band", StartPos: 18255708, EndPos: 18288728, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75C4 = genome.Band{Band: "75C4", Desc: "Band", StartPos: 18288728, EndPos: 18371483, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75C5 = genome.Band{Band: "75C5", Desc: "Band", StartPos: 18371483, EndPos: 18384485, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75C6 = genome.Band{Band: "75C6", Desc: "Band", StartPos: 18384485, EndPos: 18437316, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75C7 = genome.Band{Band: "75C7", Desc: "Band", StartPos: 18437316, EndPos: 18470335, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75D1 = genome.Band{Band: "75D1", Desc: "Band", StartPos: 18470335, EndPos: 18523167, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75D2 = genome.Band{Band: "75D2", Desc: "Band", StartPos: 18523167, EndPos: 18586110, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75D3 = genome.Band{Band: "75D3", Desc: "Band", StartPos: 18586110, EndPos: 18599112, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75D4 = genome.Band{Band: "75D4", Desc: "Band", StartPos: 18599112, EndPos: 18632131, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75D5 = genome.Band{Band: "75D5", Desc: "Band", StartPos: 18632131, EndPos: 18665151, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75D6 = genome.Band{Band: "75D6", Desc: "Band", StartPos: 18665151, EndPos: 18708076, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75D7 = genome.Band{Band: "75D7", Desc: "Band", StartPos: 18708076, EndPos: 18731190, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75D8 = genome.Band{Band: "75D8", Desc: "Band", StartPos: 18731190, EndPos: 18754304, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75E1 = genome.Band{Band: "75E1", Desc: "Band", StartPos: 18754304, EndPos: 18827153, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75E2 = genome.Band{Band: "75E2", Desc: "Band", StartPos: 18827153, EndPos: 18865168, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75E3 = genome.Band{Band: "75E3", Desc: "Band", StartPos: 18865168, EndPos: 18871953, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75E4 = genome.Band{Band: "75E4", Desc: "Band", StartPos: 18871953, EndPos: 18899522, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75E5 = genome.Band{Band: "75E5", Desc: "Band", StartPos: 18899522, EndPos: 18912151, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75E6 = genome.Band{Band: "75E6", Desc: "Band", StartPos: 18912151, EndPos: 18924507, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75E7 = genome.Band{Band: "75E7", Desc: "Band", StartPos: 18924507, EndPos: 18942159, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75F1 = genome.Band{Band: "75F1", Desc: "Band", StartPos: 18942159, EndPos: 18970402, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75F2 = genome.Band{Band: "75F2", Desc: "Band", StartPos: 18970402, EndPos: 18998645, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75F3 = genome.Band{Band: "75F3", Desc: "Band", StartPos: 18998645, EndPos: 19011002, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75F4 = genome.Band{Band: "75F4", Desc: "Band", StartPos: 19011002, EndPos: 19039245, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75F5 = genome.Band{Band: "75F5", Desc: "Band", StartPos: 19039245, EndPos: 19051601, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75F6 = genome.Band{Band: "75F6", Desc: "Band", StartPos: 19051601, EndPos: 19079844, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75F7 = genome.Band{Band: "75F7", Desc: "Band", StartPos: 19079844, EndPos: 19108320, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75F8 = genome.Band{Band: "75F8", Desc: "Band", StartPos: 19108320, EndPos: 19115328, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75F9 = genome.Band{Band: "75F9", Desc: "Band", StartPos: 19115328, EndPos: 19138464, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75F10 = genome.Band{Band: "75F10", Desc: "Band", StartPos: 19138464, EndPos: 19150923, Giemsa: "n/a", Chr: &Chr3L} Chr3L_75F11 = genome.Band{Band: "75F11", Desc: "Band", StartPos: 19150923, EndPos: 19157930, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76A1 = genome.Band{Band: "76A1", Desc: "Band", StartPos: 19157930, EndPos: 19191857, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76A2 = genome.Band{Band: "76A2", Desc: "Band", StartPos: 19191857, EndPos: 19220333, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76A3 = genome.Band{Band: "76A3", Desc: "Band", StartPos: 19220333, EndPos: 19279955, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76A4 = genome.Band{Band: "76A4", Desc: "Band", StartPos: 19279955, EndPos: 19282735, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76A5 = genome.Band{Band: "76A5", Desc: "Band", StartPos: 19282735, EndPos: 19295194, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76A6 = genome.Band{Band: "76A6", Desc: "Band", StartPos: 19295194, EndPos: 19339799, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76A7 = genome.Band{Band: "76A7", Desc: "Band", StartPos: 19339799, EndPos: 19346806, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76B1 = genome.Band{Band: "76B1", Desc: "Band", StartPos: 19346806, EndPos: 19380733, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76B2 = genome.Band{Band: "76B2", Desc: "Band", StartPos: 19380733, EndPos: 19414659, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76B3 = genome.Band{Band: "76B3", Desc: "Band", StartPos: 19414659, EndPos: 19479620, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76B4 = genome.Band{Band: "76B4", Desc: "Band", StartPos: 19479620, EndPos: 19482401, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76B5 = genome.Band{Band: "76B5", Desc: "Band", StartPos: 19482401, EndPos: 19505538, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76B6 = genome.Band{Band: "76B6", Desc: "Band", StartPos: 19505538, EndPos: 19544803, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76B7 = genome.Band{Band: "76B7", Desc: "Band", StartPos: 19544803, EndPos: 19573279, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76B8 = genome.Band{Band: "76B8", Desc: "Band", StartPos: 19573279, EndPos: 19591077, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76B9 = genome.Band{Band: "76B9", Desc: "Band", StartPos: 19591077, EndPos: 19629230, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76B10 = genome.Band{Band: "76B10", Desc: "Band", StartPos: 19629230, EndPos: 19630377, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76B11 = genome.Band{Band: "76B11", Desc: "Band", StartPos: 19630377, EndPos: 19646753, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76C1 = genome.Band{Band: "76C1", Desc: "Band", StartPos: 19646753, EndPos: 19692708, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76C2 = genome.Band{Band: "76C2", Desc: "Band", StartPos: 19692708, EndPos: 19713997, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76C3 = genome.Band{Band: "76C3", Desc: "Band", StartPos: 19713997, EndPos: 19755040, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76C4 = genome.Band{Band: "76C4", Desc: "Band", StartPos: 19755040, EndPos: 19771416, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76C5 = genome.Band{Band: "76C5", Desc: "Band", StartPos: 19771416, EndPos: 19787792, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76C6 = genome.Band{Band: "76C6", Desc: "Band", StartPos: 19787792, EndPos: 19809081, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76D1 = genome.Band{Band: "76D1", Desc: "Band", StartPos: 19809081, EndPos: 19850124, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76D2 = genome.Band{Band: "76D2", Desc: "Band", StartPos: 19850124, EndPos: 19861588, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76D3 = genome.Band{Band: "76D3", Desc: "Band", StartPos: 19861588, EndPos: 19897717, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76D4 = genome.Band{Band: "76D4", Desc: "Band", StartPos: 19897717, EndPos: 19917578, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76D5 = genome.Band{Band: "76D5", Desc: "Band", StartPos: 19917578, EndPos: 19931687, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76D6 = genome.Band{Band: "76D6", Desc: "Band", StartPos: 19931687, EndPos: 19955631, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76D7 = genome.Band{Band: "76D7", Desc: "Band", StartPos: 19955631, EndPos: 19972996, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76D8 = genome.Band{Band: "76D8", Desc: "Band", StartPos: 19972996, EndPos: 19993685, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76E1 = genome.Band{Band: "76E1", Desc: "Band", StartPos: 19993685, EndPos: 20027465, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76E2 = genome.Band{Band: "76E2", Desc: "Band", StartPos: 20027465, EndPos: 20057922, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76E3 = genome.Band{Band: "76E3", Desc: "Band", StartPos: 20057922, EndPos: 20065519, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76E4 = genome.Band{Band: "76E4", Desc: "Band", StartPos: 20065519, EndPos: 20082884, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76F1 = genome.Band{Band: "76F1", Desc: "Band", StartPos: 20082884, EndPos: 20113340, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76F2 = genome.Band{Band: "76F2", Desc: "Band", StartPos: 20113340, EndPos: 20143797, Giemsa: "n/a", Chr: &Chr3L} Chr3L_76F3 = genome.Band{Band: "76F3", Desc: "Band", StartPos: 20143797, EndPos: 20161162, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77A1 = genome.Band{Band: "77A1", Desc: "Band", StartPos: 20161162, EndPos: 20191618, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77A2 = genome.Band{Band: "77A2", Desc: "Band", StartPos: 20191618, EndPos: 20218819, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77A3 = genome.Band{Band: "77A3", Desc: "Band", StartPos: 20218819, EndPos: 20236184, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77A4 = genome.Band{Band: "77A4", Desc: "Band", StartPos: 20236184, EndPos: 20250293, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77B1 = genome.Band{Band: "77B1", Desc: "Band", StartPos: 20250293, EndPos: 20290653, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77B2 = genome.Band{Band: "77B2", Desc: "Band", StartPos: 20290653, EndPos: 20304762, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77B3 = genome.Band{Band: "77B3", Desc: "Band", StartPos: 20304762, EndPos: 20312359, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77B4 = genome.Band{Band: "77B4", Desc: "Band", StartPos: 20312359, EndPos: 20345257, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77B5 = genome.Band{Band: "77B5", Desc: "Band", StartPos: 20345257, EndPos: 20352855, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77B6 = genome.Band{Band: "77B6", Desc: "Band", StartPos: 20352855, EndPos: 20369541, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77B7 = genome.Band{Band: "77B7", Desc: "Band", StartPos: 20369541, EndPos: 20369551, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77B8 = genome.Band{Band: "77B8", Desc: "Band", StartPos: 20369551, EndPos: 20369561, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77B9 = genome.Band{Band: "77B9", Desc: "Band", StartPos: 20369561, EndPos: 20379479, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77C1 = genome.Band{Band: "77C1", Desc: "Band", StartPos: 20379479, EndPos: 20401917, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77C2 = genome.Band{Band: "77C2", Desc: "Band", StartPos: 20401917, EndPos: 20423804, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77C3 = genome.Band{Band: "77C3", Desc: "Band", StartPos: 20423804, EndPos: 20448275, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77C4 = genome.Band{Band: "77C4", Desc: "Band", StartPos: 20448275, EndPos: 20477431, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77C5 = genome.Band{Band: "77C5", Desc: "Band", StartPos: 20477431, EndPos: 20483453, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77C6 = genome.Band{Band: "77C6", Desc: "Band", StartPos: 20483453, EndPos: 20517197, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77C7 = genome.Band{Band: "77C7", Desc: "Band", StartPos: 20517197, EndPos: 20527903, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77D1 = genome.Band{Band: "77D1", Desc: "Band", StartPos: 20527903, EndPos: 20560691, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77D2 = genome.Band{Band: "77D2", Desc: "Band", StartPos: 20560691, EndPos: 20563081, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77D3 = genome.Band{Band: "77D3", Desc: "Band", StartPos: 20563081, EndPos: 20573787, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77D4 = genome.Band{Band: "77D4", Desc: "Band", StartPos: 20573787, EndPos: 20598259, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77D5 = genome.Band{Band: "77D5", Desc: "Band", StartPos: 20598259, EndPos: 20604281, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77E1 = genome.Band{Band: "77E1", Desc: "Band", StartPos: 20604281, EndPos: 20638025, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77E2 = genome.Band{Band: "77E2", Desc: "Band", StartPos: 20638025, EndPos: 20671769, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77E3 = genome.Band{Band: "77E3", Desc: "Band", StartPos: 20671769, EndPos: 20719374, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77E4 = genome.Band{Band: "77E4", Desc: "Band", StartPos: 20719374, EndPos: 20753118, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77E5 = genome.Band{Band: "77E5", Desc: "Band", StartPos: 20753118, EndPos: 20759140, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77E6 = genome.Band{Band: "77E6", Desc: "Band", StartPos: 20759140, EndPos: 20796516, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77E7 = genome.Band{Band: "77E7", Desc: "Band", StartPos: 20796516, EndPos: 20798906, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77E8 = genome.Band{Band: "77E8", Desc: "Band", StartPos: 20798906, EndPos: 20814201, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77F1 = genome.Band{Band: "77F1", Desc: "Band", StartPos: 20814201, EndPos: 20838672, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77F2 = genome.Band{Band: "77F2", Desc: "Band", StartPos: 20838672, EndPos: 20863144, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77F3 = genome.Band{Band: "77F3", Desc: "Band", StartPos: 20863144, EndPos: 20878439, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77F4 = genome.Band{Band: "77F4", Desc: "Band", StartPos: 20878439, EndPos: 20907594, Giemsa: "n/a", Chr: &Chr3L} Chr3L_77F5 = genome.Band{Band: "77F5", Desc: "Band", StartPos: 20907594, EndPos: 20913617, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78A1 = genome.Band{Band: "78A1", Desc: "Band", StartPos: 20913617, EndPos: 20965714, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78A2 = genome.Band{Band: "78A2", Desc: "Band", StartPos: 20965714, EndPos: 21023547, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78A3 = genome.Band{Band: "78A3", Desc: "Band", StartPos: 21023547, EndPos: 21023557, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78A4 = genome.Band{Band: "78A4", Desc: "Band", StartPos: 21023557, EndPos: 21023567, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78A5 = genome.Band{Band: "78A5", Desc: "Band", StartPos: 21023567, EndPos: 21028825, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78A6 = genome.Band{Band: "78A6", Desc: "Band", StartPos: 21028825, EndPos: 21049730, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78A7 = genome.Band{Band: "78A7", Desc: "Band", StartPos: 21049730, EndPos: 21058547, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78B1 = genome.Band{Band: "78B1", Desc: "Band", StartPos: 21058547, EndPos: 21093893, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78B2 = genome.Band{Band: "78B2", Desc: "Band", StartPos: 21093893, EndPos: 21129239, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78B3 = genome.Band{Band: "78B3", Desc: "Band", StartPos: 21129239, EndPos: 21138055, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78B4 = genome.Band{Band: "78B4", Desc: "Band", StartPos: 21138055, EndPos: 21143015, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78C1 = genome.Band{Band: "78C1", Desc: "Band", StartPos: 21143015, EndPos: 21167025, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78C2 = genome.Band{Band: "78C2", Desc: "Band", StartPos: 21167025, EndPos: 21222969, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78C3 = genome.Band{Band: "78C3", Desc: "Band", StartPos: 21222969, EndPos: 21273081, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78C4 = genome.Band{Band: "78C4", Desc: "Band", StartPos: 21273081, EndPos: 21276587, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78C5 = genome.Band{Band: "78C5", Desc: "Band", StartPos: 21276587, EndPos: 21279529, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78C6 = genome.Band{Band: "78C6", Desc: "Band", StartPos: 21279529, EndPos: 21303935, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78C7 = genome.Band{Band: "78C7", Desc: "Band", StartPos: 21303935, EndPos: 21331171, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78C8 = genome.Band{Band: "78C8", Desc: "Band", StartPos: 21331171, EndPos: 21363620, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78C9 = genome.Band{Band: "78C9", Desc: "Band", StartPos: 21363620, EndPos: 21380643, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78D1 = genome.Band{Band: "78D1", Desc: "Band", StartPos: 21380643, EndPos: 21418198, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78D2 = genome.Band{Band: "78D2", Desc: "Band", StartPos: 21418198, EndPos: 21460861, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78D3 = genome.Band{Band: "78D3", Desc: "Band", StartPos: 21460861, EndPos: 21482990, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78D4 = genome.Band{Band: "78D4", Desc: "Band", StartPos: 21482990, EndPos: 21510225, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78D5 = genome.Band{Band: "78D5", Desc: "Band", StartPos: 21510225, EndPos: 21537461, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78D6 = genome.Band{Band: "78D6", Desc: "Band", StartPos: 21537461, EndPos: 21564697, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78D7 = genome.Band{Band: "78D7", Desc: "Band", StartPos: 21564697, EndPos: 21591933, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78D8 = genome.Band{Band: "78D8", Desc: "Band", StartPos: 21591933, EndPos: 21598635, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78E1 = genome.Band{Band: "78E1", Desc: "Band", StartPos: 21598635, EndPos: 21631084, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78E2 = genome.Band{Band: "78E2", Desc: "Band", StartPos: 21631084, EndPos: 21663533, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78E3 = genome.Band{Band: "78E3", Desc: "Band", StartPos: 21663533, EndPos: 21675449, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78E4 = genome.Band{Band: "78E4", Desc: "Band", StartPos: 21675449, EndPos: 21702685, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78E5 = genome.Band{Band: "78E5", Desc: "Band", StartPos: 21702685, EndPos: 21729921, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78E6 = genome.Band{Band: "78E6", Desc: "Band", StartPos: 21729921, EndPos: 21741836, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78F1 = genome.Band{Band: "78F1", Desc: "Band", StartPos: 21741836, EndPos: 21779392, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78F2 = genome.Band{Band: "78F2", Desc: "Band", StartPos: 21779392, EndPos: 21806628, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78F3 = genome.Band{Band: "78F3", Desc: "Band", StartPos: 21806628, EndPos: 21818543, Giemsa: "n/a", Chr: &Chr3L} Chr3L_78F4 = genome.Band{Band: "78F4", Desc: "Band", StartPos: 21818543, EndPos: 21840672, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79A1 = genome.Band{Band: "79A1", Desc: "Band", StartPos: 21840672, EndPos: 21867908, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79A2 = genome.Band{Band: "79A2", Desc: "Band", StartPos: 21867908, EndPos: 21895144, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79A3 = genome.Band{Band: "79A3", Desc: "Band", StartPos: 21895144, EndPos: 21922380, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79A4 = genome.Band{Band: "79A4", Desc: "Band", StartPos: 21922380, EndPos: 21954829, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79A5 = genome.Band{Band: "79A5", Desc: "Band", StartPos: 21954829, EndPos: 21966744, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79A6 = genome.Band{Band: "79A6", Desc: "Band", StartPos: 21966744, EndPos: 21983767, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79A7 = genome.Band{Band: "79A7", Desc: "Band", StartPos: 21983767, EndPos: 22000789, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79B1 = genome.Band{Band: "79B1", Desc: "Band", StartPos: 22000789, EndPos: 22043451, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79B2 = genome.Band{Band: "79B2", Desc: "Band", StartPos: 22043451, EndPos: 22075900, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79B3 = genome.Band{Band: "79B3", Desc: "Band", StartPos: 22075900, EndPos: 22092923, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79C1 = genome.Band{Band: "79C1", Desc: "Band", StartPos: 22092923, EndPos: 22125372, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79C2 = genome.Band{Band: "79C2", Desc: "Band", StartPos: 22125372, EndPos: 22162927, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79C3 = genome.Band{Band: "79C3", Desc: "Band", StartPos: 22162927, EndPos: 22174843, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79D1 = genome.Band{Band: "79D1", Desc: "Band", StartPos: 22174843, EndPos: 22202079, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79D2 = genome.Band{Band: "79D2", Desc: "Band", StartPos: 22202079, EndPos: 22255061, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79D3 = genome.Band{Band: "79D3", Desc: "Band", StartPos: 22255061, EndPos: 22266977, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79D4 = genome.Band{Band: "79D4", Desc: "Band", StartPos: 22266977, EndPos: 22289106, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79E1 = genome.Band{Band: "79E1", Desc: "Band", StartPos: 22289106, EndPos: 22342088, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79E2 = genome.Band{Band: "79E2", Desc: "Band", StartPos: 22342088, EndPos: 22389857, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79E3 = genome.Band{Band: "79E3", Desc: "Band", StartPos: 22389857, EndPos: 22437626, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79E4 = genome.Band{Band: "79E4", Desc: "Band", StartPos: 22437626, EndPos: 22485395, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79E5 = genome.Band{Band: "79E5", Desc: "Band", StartPos: 22485395, EndPos: 22497311, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79E6 = genome.Band{Band: "79E6", Desc: "Band", StartPos: 22497311, EndPos: 22514333, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79E7 = genome.Band{Band: "79E7", Desc: "Band", StartPos: 22514333, EndPos: 22531355, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79E8 = genome.Band{Band: "79E8", Desc: "Band", StartPos: 22531355, EndPos: 22553485, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79F1 = genome.Band{Band: "79F1", Desc: "Band", StartPos: 22553485, EndPos: 22591040, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79F2 = genome.Band{Band: "79F2", Desc: "Band", StartPos: 22591040, EndPos: 22623489, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79F3 = genome.Band{Band: "79F3", Desc: "Band", StartPos: 22623489, EndPos: 22645618, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79F4 = genome.Band{Band: "79F4", Desc: "Band", StartPos: 22645618, EndPos: 22662641, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79F5 = genome.Band{Band: "79F5", Desc: "Band", StartPos: 22662641, EndPos: 22689876, Giemsa: "n/a", Chr: &Chr3L} Chr3L_79F6 = genome.Band{Band: "79F6", Desc: "Band", StartPos: 22689876, EndPos: 22712005, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80A1 = genome.Band{Band: "80A1", Desc: "Band", StartPos: 22712005, EndPos: 22754668, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80A2 = genome.Band{Band: "80A2", Desc: "Band", StartPos: 22754668, EndPos: 22792223, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80A3 = genome.Band{Band: "80A3", Desc: "Band", StartPos: 22792223, EndPos: 22804139, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80A4 = genome.Band{Band: "80A4", Desc: "Band", StartPos: 22804139, EndPos: 22836588, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80B1 = genome.Band{Band: "80B1", Desc: "Band", StartPos: 22836588, EndPos: 22869037, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80B2 = genome.Band{Band: "80B2", Desc: "Band", StartPos: 22869037, EndPos: 22911699, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80B3 = genome.Band{Band: "80B3", Desc: "Band", StartPos: 22911699, EndPos: 22923615, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80C1 = genome.Band{Band: "80C1", Desc: "Band", StartPos: 22923615, EndPos: 22961171, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80C2 = genome.Band{Band: "80C2", Desc: "Band", StartPos: 22961171, EndPos: 22998726, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80C3 = genome.Band{Band: "80C3", Desc: "Band", StartPos: 22998726, EndPos: 23025962, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80C4 = genome.Band{Band: "80C4", Desc: "Band", StartPos: 23025962, EndPos: 23048091, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80C5 = genome.Band{Band: "80C5", Desc: "Band", StartPos: 23048091, EndPos: 23070220, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80D1 = genome.Band{Band: "80D1", Desc: "Band", StartPos: 23070220, EndPos: 23098413, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80D2 = genome.Band{Band: "80D2", Desc: "Band", StartPos: 23098413, EndPos: 23126607, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80D3 = genome.Band{Band: "80D3", Desc: "Band", StartPos: 23126607, EndPos: 23154800, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80D4 = genome.Band{Band: "80D4", Desc: "Band", StartPos: 23154800, EndPos: 23182993, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80D5 = genome.Band{Band: "80D5", Desc: "Band", StartPos: 23182993, EndPos: 23211187, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80E1 = genome.Band{Band: "80E1", Desc: "Band", StartPos: 23211187, EndPos: 23239380, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80E2 = genome.Band{Band: "80E2", Desc: "Band", StartPos: 23239380, EndPos: 23267573, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80E3 = genome.Band{Band: "80E3", Desc: "Band", StartPos: 23267573, EndPos: 23295767, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80F1 = genome.Band{Band: "80F1", Desc: "Band", StartPos: 23295767, EndPos: 23323960, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80F2 = genome.Band{Band: "80F2", Desc: "Band", StartPos: 23323960, EndPos: 23352153, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80F3 = genome.Band{Band: "80F3", Desc: "Band", StartPos: 23352153, EndPos: 23380347, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80F4 = genome.Band{Band: "80F4", Desc: "Band", StartPos: 23380347, EndPos: 23408540, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80F5 = genome.Band{Band: "80F5", Desc: "Band", StartPos: 23408540, EndPos: 23436733, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80F6 = genome.Band{Band: "80F6", Desc: "Band", StartPos: 23436733, EndPos: 23464927, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80F7 = genome.Band{Band: "80F7", Desc: "Band", StartPos: 23464927, EndPos: 23493120, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80F8 = genome.Band{Band: "80F8", Desc: "Band", StartPos: 23493120, EndPos: 23521313, Giemsa: "n/a", Chr: &Chr3L} Chr3L_80F9 = genome.Band{Band: "80F9", Desc: "Band", StartPos: 23521313, EndPos: 23849507, Giemsa: "n/a", Chr: &Chr3L} Chr3R_81F5 = genome.Band{Band: "81F5", Desc: "Band", StartPos: 0, EndPos: 541, Giemsa: "n/a", Chr: &Chr3R} Chr3R_81F6 = genome.Band{Band: "81F6", Desc: "Band", StartPos: 541, EndPos: 34191, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82A1 = genome.Band{Band: "82A1", Desc: "Band", StartPos: 34191, EndPos: 123707, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82A2 = genome.Band{Band: "82A2", Desc: "Band", StartPos: 123707, EndPos: 126993, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82A3 = genome.Band{Band: "82A3", Desc: "Band", StartPos: 126993, EndPos: 154334, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82A4 = genome.Band{Band: "82A4", Desc: "Band", StartPos: 154334, EndPos: 200735, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82A5 = genome.Band{Band: "82A5", Desc: "Band", StartPos: 200735, EndPos: 228076, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82A6 = genome.Band{Band: "82A6", Desc: "Band", StartPos: 228076, EndPos: 236357, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82B1 = genome.Band{Band: "82B1", Desc: "Band", StartPos: 236357, EndPos: 276449, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82B2 = genome.Band{Band: "82B2", Desc: "Band", StartPos: 276449, EndPos: 291171, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82B3 = genome.Band{Band: "82B3", Desc: "Band", StartPos: 291171, EndPos: 312202, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82B4 = genome.Band{Band: "82B4", Desc: "Band", StartPos: 312202, EndPos: 326924, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82C1 = genome.Band{Band: "82C1", Desc: "Band", StartPos: 326924, EndPos: 367016, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82C2 = genome.Band{Band: "82C2", Desc: "Band", StartPos: 367016, EndPos: 407107, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82C3 = genome.Band{Band: "82C3", Desc: "Band", StartPos: 407107, EndPos: 440758, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82C4 = genome.Band{Band: "82C4", Desc: "Band", StartPos: 440758, EndPos: 461789, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82C5 = genome.Band{Band: "82C5", Desc: "Band", StartPos: 461789, EndPos: 482821, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82D1 = genome.Band{Band: "82D1", Desc: "Band", StartPos: 482821, EndPos: 529222, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82D2 = genome.Band{Band: "82D2", Desc: "Band", StartPos: 529222, EndPos: 575623, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82D3 = genome.Band{Band: "82D3", Desc: "Band", StartPos: 575623, EndPos: 583904, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82D4 = genome.Band{Band: "82D4", Desc: "Band", StartPos: 583904, EndPos: 598626, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82D5 = genome.Band{Band: "82D5", Desc: "Band", StartPos: 598626, EndPos: 632277, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82D6 = genome.Band{Band: "82D6", Desc: "Band", StartPos: 632277, EndPos: 653308, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82D7 = genome.Band{Band: "82D7", Desc: "Band", StartPos: 653308, EndPos: 674340, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82D8 = genome.Band{Band: "82D8", Desc: "Band", StartPos: 674340, EndPos: 689062, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82E1 = genome.Band{Band: "82E1", Desc: "Band", StartPos: 689062, EndPos: 729153, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82E2 = genome.Band{Band: "82E2", Desc: "Band", StartPos: 729153, EndPos: 769245, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82E3 = genome.Band{Band: "82E3", Desc: "Band", StartPos: 769245, EndPos: 777526, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82E4 = genome.Band{Band: "82E4", Desc: "Band", StartPos: 777526, EndPos: 823927, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82E5 = genome.Band{Band: "82E5", Desc: "Band", StartPos: 823927, EndPos: 851268, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82E6 = genome.Band{Band: "82E6", Desc: "Band", StartPos: 851268, EndPos: 884919, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82E7 = genome.Band{Band: "82E7", Desc: "Band", StartPos: 884919, EndPos: 918569, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82E8 = genome.Band{Band: "82E8", Desc: "Band", StartPos: 918569, EndPos: 926850, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82F1 = genome.Band{Band: "82F1", Desc: "Band", StartPos: 926850, EndPos: 990997, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82F2 = genome.Band{Band: "82F2", Desc: "Band", StartPos: 990997, EndPos: 994283, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82F3 = genome.Band{Band: "82F3", Desc: "Band", StartPos: 994283, EndPos: 1002564, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82F4 = genome.Band{Band: "82F4", Desc: "Band", StartPos: 1002564, EndPos: 1023596, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82F5 = genome.Band{Band: "82F5", Desc: "Band", StartPos: 1023596, EndPos: 1038318, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82F6 = genome.Band{Band: "82F6", Desc: "Band", StartPos: 1038318, EndPos: 1065659, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82F7 = genome.Band{Band: "82F7", Desc: "Band", StartPos: 1065659, EndPos: 1086690, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82F8 = genome.Band{Band: "82F8", Desc: "Band", StartPos: 1086690, EndPos: 1126782, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82F9 = genome.Band{Band: "82F9", Desc: "Band", StartPos: 1126782, EndPos: 1166873, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82F10 = genome.Band{Band: "82F10", Desc: "Band", StartPos: 1166873, EndPos: 1181595, Giemsa: "n/a", Chr: &Chr3R} Chr3R_82F11 = genome.Band{Band: "82F11", Desc: "Band", StartPos: 1181595, EndPos: 1189877, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83A1 = genome.Band{Band: "83A1", Desc: "Band", StartPos: 1189877, EndPos: 1229968, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83A2 = genome.Band{Band: "83A2", Desc: "Band", StartPos: 1229968, EndPos: 1256277, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83A3 = genome.Band{Band: "83A3", Desc: "Band", StartPos: 1256277, EndPos: 1278359, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83A4 = genome.Band{Band: "83A4", Desc: "Band", StartPos: 1278359, EndPos: 1300441, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83A5 = genome.Band{Band: "83A5", Desc: "Band", StartPos: 1300441, EndPos: 1318383, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83A6 = genome.Band{Band: "83A6", Desc: "Band", StartPos: 1318383, EndPos: 1335540, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83A7 = genome.Band{Band: "83A7", Desc: "Band", StartPos: 1335540, EndPos: 1349066, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83A8 = genome.Band{Band: "83A8", Desc: "Band", StartPos: 1349066, EndPos: 1355698, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83A9 = genome.Band{Band: "83A9", Desc: "Band", StartPos: 1355698, EndPos: 1357324, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83B1 = genome.Band{Band: "83B1", Desc: "Band", StartPos: 1357324, EndPos: 1383401, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83B2 = genome.Band{Band: "83B2", Desc: "Band", StartPos: 1383401, EndPos: 1406356, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83B3 = genome.Band{Band: "83B3", Desc: "Band", StartPos: 1406356, EndPos: 1413639, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83B4 = genome.Band{Band: "83B4", Desc: "Band", StartPos: 1413639, EndPos: 1430286, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83B5 = genome.Band{Band: "83B5", Desc: "Band", StartPos: 1430286, EndPos: 1437569, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83B6 = genome.Band{Band: "83B6", Desc: "Band", StartPos: 1437569, EndPos: 1451095, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83B7 = genome.Band{Band: "83B7", Desc: "Band", StartPos: 1451095, EndPos: 1478102, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83B8 = genome.Band{Band: "83B8", Desc: "Band", StartPos: 1478102, EndPos: 1498781, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83B9 = genome.Band{Band: "83B9", Desc: "Band", StartPos: 1498781, EndPos: 1514688, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83C1 = genome.Band{Band: "83C1", Desc: "Band", StartPos: 1514688, EndPos: 1567976, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83C2 = genome.Band{Band: "83C2", Desc: "Band", StartPos: 1567976, EndPos: 1584730, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83C3 = genome.Band{Band: "83C3", Desc: "Band", StartPos: 1584730, EndPos: 1608776, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83C4 = genome.Band{Band: "83C4", Desc: "Band", StartPos: 1608776, EndPos: 1661827, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83C5 = genome.Band{Band: "83C5", Desc: "Band", StartPos: 1661827, EndPos: 1685873, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83C6 = genome.Band{Band: "83C6", Desc: "Band", StartPos: 1685873, EndPos: 1717132, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83C7 = genome.Band{Band: "83C7", Desc: "Band", StartPos: 1717132, EndPos: 1733964, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83C8 = genome.Band{Band: "83C8", Desc: "Band", StartPos: 1733964, EndPos: 1770935, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83C9 = genome.Band{Band: "83C9", Desc: "Band", StartPos: 1770935, EndPos: 1774692, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83D1 = genome.Band{Band: "83D1", Desc: "Band", StartPos: 1774692, EndPos: 1827743, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83D2 = genome.Band{Band: "83D2", Desc: "Band", StartPos: 1827743, EndPos: 1888008, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83D3 = genome.Band{Band: "83D3", Desc: "Band", StartPos: 1888008, EndPos: 1897476, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83D4 = genome.Band{Band: "83D4", Desc: "Band", StartPos: 1897476, EndPos: 1957740, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83D5 = genome.Band{Band: "83D5", Desc: "Band", StartPos: 1957740, EndPos: 2018005, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83E1 = genome.Band{Band: "83E1", Desc: "Band", StartPos: 2018005, EndPos: 2078270, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83E2 = genome.Band{Band: "83E2", Desc: "Band", StartPos: 2078270, EndPos: 2145748, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83E3 = genome.Band{Band: "83E3", Desc: "Band", StartPos: 2145748, EndPos: 2155216, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83E4 = genome.Band{Band: "83E4", Desc: "Band", StartPos: 2155216, EndPos: 2201054, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83E5 = genome.Band{Band: "83E5", Desc: "Band", StartPos: 2201054, EndPos: 2217886, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83E6 = genome.Band{Band: "83E6", Desc: "Band", StartPos: 2217886, EndPos: 2241931, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83E7 = genome.Band{Band: "83E7", Desc: "Band", StartPos: 2241931, EndPos: 2280405, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83E8 = genome.Band{Band: "83E8", Desc: "Band", StartPos: 2280405, EndPos: 2318878, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83F1 = genome.Band{Band: "83F1", Desc: "Band", StartPos: 2318878, EndPos: 2392218, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83F2 = genome.Band{Band: "83F2", Desc: "Band", StartPos: 2392218, EndPos: 2395975, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83F3 = genome.Band{Band: "83F3", Desc: "Band", StartPos: 2395975, EndPos: 2412807, Giemsa: "n/a", Chr: &Chr3R} Chr3R_83F4 = genome.Band{Band: "83F4", Desc: "Band", StartPos: 2412807, EndPos: 2451280, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84A1 = genome.Band{Band: "84A1", Desc: "Band", StartPos: 2451280, EndPos: 2511545, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84A2 = genome.Band{Band: "84A2", Desc: "Band", StartPos: 2511545, EndPos: 2514967, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84A3 = genome.Band{Band: "84A3", Desc: "Band", StartPos: 2514967, EndPos: 2521234, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84A4 = genome.Band{Band: "84A4", Desc: "Band", StartPos: 2521234, EndPos: 2530424, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84A5 = genome.Band{Band: "84A5", Desc: "Band", StartPos: 2530424, EndPos: 2675949, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84A6 = genome.Band{Band: "84A6", Desc: "Band", StartPos: 2675949, EndPos: 2722699, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84B1 = genome.Band{Band: "84B1", Desc: "Band", StartPos: 2722699, EndPos: 2811817, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84B2 = genome.Band{Band: "84B2", Desc: "Band", StartPos: 2811817, EndPos: 2914961, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84B3 = genome.Band{Band: "84B3", Desc: "Band", StartPos: 2914961, EndPos: 2914971, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84B4 = genome.Band{Band: "84B4", Desc: "Band", StartPos: 2914971, EndPos: 2916650, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84B5 = genome.Band{Band: "84B5", Desc: "Band", StartPos: 2916650, EndPos: 2917845, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84B6 = genome.Band{Band: "84B6", Desc: "Band", StartPos: 2917845, EndPos: 2923198, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84C1 = genome.Band{Band: "84C1", Desc: "Band", StartPos: 2923198, EndPos: 2944183, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84C2 = genome.Band{Band: "84C2", Desc: "Band", StartPos: 2944183, EndPos: 2945378, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84C3 = genome.Band{Band: "84C3", Desc: "Band", StartPos: 2945378, EndPos: 2950731, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84C4 = genome.Band{Band: "84C4", Desc: "Band", StartPos: 2950731, EndPos: 2960674, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84C5 = genome.Band{Band: "84C5", Desc: "Band", StartPos: 2960674, EndPos: 2966028, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84C6 = genome.Band{Band: "84C6", Desc: "Band", StartPos: 2966028, EndPos: 2978265, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84C7 = genome.Band{Band: "84C7", Desc: "Band", StartPos: 2978265, EndPos: 2988207, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84C8 = genome.Band{Band: "84C8", Desc: "Band", StartPos: 2988207, EndPos: 3000444, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D1 = genome.Band{Band: "84D1", Desc: "Band", StartPos: 3000444, EndPos: 3015023, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D2 = genome.Band{Band: "84D2", Desc: "Band", StartPos: 3015023, EndPos: 3059484, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D3 = genome.Band{Band: "84D3", Desc: "Band", StartPos: 3059484, EndPos: 3157238, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D4 = genome.Band{Band: "84D4", Desc: "Band", StartPos: 3157238, EndPos: 3161797, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D5 = genome.Band{Band: "84D5", Desc: "Band", StartPos: 3161797, EndPos: 3224352, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D6 = genome.Band{Band: "84D6", Desc: "Band", StartPos: 3224352, EndPos: 3289095, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D7 = genome.Band{Band: "84D7", Desc: "Band", StartPos: 3289095, EndPos: 3293655, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D8 = genome.Band{Band: "84D8", Desc: "Band", StartPos: 3293655, EndPos: 3314081, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D9 = genome.Band{Band: "84D9", Desc: "Band", StartPos: 3314081, EndPos: 3378459, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D10 = genome.Band{Band: "84D10", Desc: "Band", StartPos: 3378459, EndPos: 3442838, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D11 = genome.Band{Band: "84D11", Desc: "Band", StartPos: 3442838, EndPos: 3489526, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D12 = genome.Band{Band: "84D12", Desc: "Band", StartPos: 3489526, EndPos: 3536214, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D13 = genome.Band{Band: "84D13", Desc: "Band", StartPos: 3536214, EndPos: 3565394, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84D14 = genome.Band{Band: "84D14", Desc: "Band", StartPos: 3565394, EndPos: 3585820, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E1 = genome.Band{Band: "84E1", Desc: "Band", StartPos: 3585820, EndPos: 3674820, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E2 = genome.Band{Band: "84E2", Desc: "Band", StartPos: 3674820, EndPos: 3679379, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E3 = genome.Band{Band: "84E3", Desc: "Band", StartPos: 3679379, EndPos: 3708559, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E4 = genome.Band{Band: "84E4", Desc: "Band", StartPos: 3708559, EndPos: 3728985, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E5 = genome.Band{Band: "84E5", Desc: "Band", StartPos: 3728985, EndPos: 3775673, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E6 = genome.Band{Band: "84E6", Desc: "Band", StartPos: 3775673, EndPos: 3813607, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E7 = genome.Band{Band: "84E7", Desc: "Band", StartPos: 3813607, EndPos: 3825097, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E8 = genome.Band{Band: "84E8", Desc: "Band", StartPos: 3825097, EndPos: 3854277, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E9 = genome.Band{Band: "84E9", Desc: "Band", StartPos: 3854277, EndPos: 3865767, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E10 = genome.Band{Band: "84E10", Desc: "Band", StartPos: 3865767, EndPos: 3919568, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E11 = genome.Band{Band: "84E11", Desc: "Band", StartPos: 3919568, EndPos: 3924127, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E12 = genome.Band{Band: "84E12", Desc: "Band", StartPos: 3924127, EndPos: 3944553, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84E13 = genome.Band{Band: "84E13", Desc: "Band", StartPos: 3944553, EndPos: 3956043, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F1 = genome.Band{Band: "84F1", Desc: "Band", StartPos: 3956043, EndPos: 4011667, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F2 = genome.Band{Band: "84F2", Desc: "Band", StartPos: 4011667, EndPos: 4029730, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F3 = genome.Band{Band: "84F3", Desc: "Band", StartPos: 4029730, EndPos: 4038726, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F4 = genome.Band{Band: "84F4", Desc: "Band", StartPos: 4038726, EndPos: 4059288, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F5 = genome.Band{Band: "84F5", Desc: "Band", StartPos: 4059288, EndPos: 4072140, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F6 = genome.Band{Band: "84F6", Desc: "Band", StartPos: 4072140, EndPos: 4107402, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F7 = genome.Band{Band: "84F7", Desc: "Band", StartPos: 4107402, EndPos: 4109862, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F8 = genome.Band{Band: "84F8", Desc: "Band", StartPos: 4109862, EndPos: 4115045, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F9 = genome.Band{Band: "84F9", Desc: "Band", StartPos: 4115045, EndPos: 4128208, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F10 = genome.Band{Band: "84F10", Desc: "Band", StartPos: 4128208, EndPos: 4133391, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F11 = genome.Band{Band: "84F11", Desc: "Band", StartPos: 4133391, EndPos: 4149680, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F12 = genome.Band{Band: "84F12", Desc: "Band", StartPos: 4149680, EndPos: 4160470, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F13 = genome.Band{Band: "84F13", Desc: "Band", StartPos: 4160470, EndPos: 4176850, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F14 = genome.Band{Band: "84F14", Desc: "Band", StartPos: 4176850, EndPos: 4180865, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F15 = genome.Band{Band: "84F15", Desc: "Band", StartPos: 4180865, EndPos: 4198852, Giemsa: "n/a", Chr: &Chr3R} Chr3R_84F16 = genome.Band{Band: "84F16", Desc: "Band", StartPos: 4198852, EndPos: 4208969, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85A1 = genome.Band{Band: "85A1", Desc: "Band", StartPos: 4208969, EndPos: 4296652, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85A2 = genome.Band{Band: "85A2", Desc: "Band", StartPos: 4296652, EndPos: 4353341, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85A3 = genome.Band{Band: "85A3", Desc: "Band", StartPos: 4353341, EndPos: 4410030, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85A4 = genome.Band{Band: "85A4", Desc: "Band", StartPos: 4410030, EndPos: 4435725, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85A5 = genome.Band{Band: "85A5", Desc: "Band", StartPos: 4435725, EndPos: 4529510, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85A6 = genome.Band{Band: "85A6", Desc: "Band", StartPos: 4529510, EndPos: 4529520, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85A7 = genome.Band{Band: "85A7", Desc: "Band", StartPos: 4529520, EndPos: 4532847, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85A8 = genome.Band{Band: "85A8", Desc: "Band", StartPos: 4532847, EndPos: 4543386, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85A9 = genome.Band{Band: "85A9", Desc: "Band", StartPos: 4543386, EndPos: 4562957, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85A10 = genome.Band{Band: "85A10", Desc: "Band", StartPos: 4562957, EndPos: 4582528, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85A11 = genome.Band{Band: "85A11", Desc: "Band", StartPos: 4582528, EndPos: 4593066, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85B1 = genome.Band{Band: "85B1", Desc: "Band", StartPos: 4593066, EndPos: 4630797, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85B2 = genome.Band{Band: "85B2", Desc: "Band", StartPos: 4630797, EndPos: 4659495, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85B3 = genome.Band{Band: "85B3", Desc: "Band", StartPos: 4659495, EndPos: 4692710, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85B4 = genome.Band{Band: "85B4", Desc: "Band", StartPos: 4692710, EndPos: 4747659, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85B5 = genome.Band{Band: "85B5", Desc: "Band", StartPos: 4747659, EndPos: 4750012, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85B6 = genome.Band{Band: "85B6", Desc: "Band", StartPos: 4750012, EndPos: 4755940, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85B7 = genome.Band{Band: "85B7", Desc: "Band", StartPos: 4755940, EndPos: 4775511, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85B8 = genome.Band{Band: "85B8", Desc: "Band", StartPos: 4775511, EndPos: 4781439, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85B9 = genome.Band{Band: "85B9", Desc: "Band", StartPos: 4781439, EndPos: 4805526, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C1 = genome.Band{Band: "85C1", Desc: "Band", StartPos: 4805526, EndPos: 4829614, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C2 = genome.Band{Band: "85C2", Desc: "Band", StartPos: 4829614, EndPos: 4853701, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C3 = genome.Band{Band: "85C3", Desc: "Band", StartPos: 4853701, EndPos: 4886916, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C4 = genome.Band{Band: "85C4", Desc: "Band", StartPos: 4886916, EndPos: 4906487, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C5 = genome.Band{Band: "85C5", Desc: "Band", StartPos: 4906487, EndPos: 4926058, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C6 = genome.Band{Band: "85C6", Desc: "Band", StartPos: 4926058, EndPos: 4931986, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C7 = genome.Band{Band: "85C7", Desc: "Band", StartPos: 4931986, EndPos: 4947041, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C8 = genome.Band{Band: "85C8", Desc: "Band", StartPos: 4947041, EndPos: 4952968, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C9 = genome.Band{Band: "85C9", Desc: "Band", StartPos: 4952968, EndPos: 4968023, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C10 = genome.Band{Band: "85C10", Desc: "Band", StartPos: 4968023, EndPos: 4983078, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C11 = genome.Band{Band: "85C11", Desc: "Band", StartPos: 4983078, EndPos: 5002649, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C12 = genome.Band{Band: "85C12", Desc: "Band", StartPos: 5002649, EndPos: 5013187, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85C13 = genome.Band{Band: "85C13", Desc: "Band", StartPos: 5013187, EndPos: 5028242, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D1 = genome.Band{Band: "85D1", Desc: "Band", StartPos: 5028242, EndPos: 5070489, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D2 = genome.Band{Band: "85D2", Desc: "Band", StartPos: 5070489, EndPos: 5075248, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D3 = genome.Band{Band: "85D3", Desc: "Band", StartPos: 5075248, EndPos: 5076705, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D4 = genome.Band{Band: "85D4", Desc: "Band", StartPos: 5076705, EndPos: 5083528, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D5 = genome.Band{Band: "85D5", Desc: "Band", StartPos: 5083528, EndPos: 5084106, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D6 = genome.Band{Band: "85D6", Desc: "Band", StartPos: 5084106, EndPos: 5087806, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D7 = genome.Band{Band: "85D7", Desc: "Band", StartPos: 5087806, EndPos: 5096850, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D8 = genome.Band{Band: "85D8", Desc: "Band", StartPos: 5096850, EndPos: 5122706, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D9 = genome.Band{Band: "85D9", Desc: "Band", StartPos: 5122706, EndPos: 5131820, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D10 = genome.Band{Band: "85D10", Desc: "Band", StartPos: 5131820, EndPos: 5140934, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D11 = genome.Band{Band: "85D11", Desc: "Band", StartPos: 5140934, EndPos: 5190552, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D12 = genome.Band{Band: "85D12", Desc: "Band", StartPos: 5190552, EndPos: 5193282, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D13 = genome.Band{Band: "85D13", Desc: "Band", StartPos: 5193282, EndPos: 5202092, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D14 = genome.Band{Band: "85D14", Desc: "Band", StartPos: 5202092, EndPos: 5217755, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D15 = genome.Band{Band: "85D15", Desc: "Band", StartPos: 5217755, EndPos: 5240130, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D16 = genome.Band{Band: "85D16", Desc: "Band", StartPos: 5240130, EndPos: 5262505, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D17 = genome.Band{Band: "85D17", Desc: "Band", StartPos: 5262505, EndPos: 5318582, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D18 = genome.Band{Band: "85D18", Desc: "Band", StartPos: 5318582, EndPos: 5334244, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D19 = genome.Band{Band: "85D19", Desc: "Band", StartPos: 5334244, EndPos: 5356619, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D20 = genome.Band{Band: "85D20", Desc: "Band", StartPos: 5356619, EndPos: 5356629, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D21 = genome.Band{Band: "85D21", Desc: "Band", StartPos: 5356629, EndPos: 5356639, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D22 = genome.Band{Band: "85D22", Desc: "Band", StartPos: 5356639, EndPos: 5366908, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D23 = genome.Band{Band: "85D23", Desc: "Band", StartPos: 5366908, EndPos: 5375411, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D24 = genome.Band{Band: "85D24", Desc: "Band", StartPos: 5375411, EndPos: 5387559, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D25 = genome.Band{Band: "85D25", Desc: "Band", StartPos: 5387559, EndPos: 5404228, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D26 = genome.Band{Band: "85D26", Desc: "Band", StartPos: 5404228, EndPos: 5409311, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85D27 = genome.Band{Band: "85D27", Desc: "Band", StartPos: 5409311, EndPos: 5426095, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E1 = genome.Band{Band: "85E1", Desc: "Band", StartPos: 5426095, EndPos: 5458452, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E2 = genome.Band{Band: "85E2", Desc: "Band", StartPos: 5458452, EndPos: 5490958, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E3 = genome.Band{Band: "85E3", Desc: "Band", StartPos: 5490958, EndPos: 5505575, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E4 = genome.Band{Band: "85E4", Desc: "Band", StartPos: 5505575, EndPos: 5528963, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E5 = genome.Band{Band: "85E5", Desc: "Band", StartPos: 5528963, EndPos: 5556828, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E6 = genome.Band{Band: "85E6", Desc: "Band", StartPos: 5556828, EndPos: 5588164, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E7 = genome.Band{Band: "85E7", Desc: "Band", StartPos: 5588164, EndPos: 5590448, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E8 = genome.Band{Band: "85E8", Desc: "Band", StartPos: 5590448, EndPos: 5609451, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E9 = genome.Band{Band: "85E9", Desc: "Band", StartPos: 5609451, EndPos: 5632839, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E10 = genome.Band{Band: "85E10", Desc: "Band", StartPos: 5632839, EndPos: 5656227, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E11 = genome.Band{Band: "85E11", Desc: "Band", StartPos: 5656227, EndPos: 5670845, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E12 = genome.Band{Band: "85E12", Desc: "Band", StartPos: 5670845, EndPos: 5681077, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E13 = genome.Band{Band: "85E13", Desc: "Band", StartPos: 5681077, EndPos: 5700080, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E14 = genome.Band{Band: "85E14", Desc: "Band", StartPos: 5700080, EndPos: 5719083, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85E15 = genome.Band{Band: "85E15", Desc: "Band", StartPos: 5719083, EndPos: 5733700, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F1 = genome.Band{Band: "85F1", Desc: "Band", StartPos: 5733700, EndPos: 5761565, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F2 = genome.Band{Band: "85F2", Desc: "Band", StartPos: 5761565, EndPos: 5789430, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F3 = genome.Band{Band: "85F3", Desc: "Band", StartPos: 5789430, EndPos: 5799662, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F4 = genome.Band{Band: "85F4", Desc: "Band", StartPos: 5799662, EndPos: 5818665, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F5 = genome.Band{Band: "85F5", Desc: "Band", StartPos: 5818665, EndPos: 5837668, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F6 = genome.Band{Band: "85F6", Desc: "Band", StartPos: 5837668, EndPos: 5843423, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F7 = genome.Band{Band: "85F7", Desc: "Band", StartPos: 5843423, EndPos: 5871288, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F8 = genome.Band{Band: "85F8", Desc: "Band", StartPos: 5871288, EndPos: 5891229, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F9 = genome.Band{Band: "85F9", Desc: "Band", StartPos: 5891229, EndPos: 5911171, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F10 = genome.Band{Band: "85F10", Desc: "Band", StartPos: 5911171, EndPos: 5927908, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F11 = genome.Band{Band: "85F11", Desc: "Band", StartPos: 5927908, EndPos: 5935231, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F12 = genome.Band{Band: "85F12", Desc: "Band", StartPos: 5935231, EndPos: 5945692, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F13 = genome.Band{Band: "85F13", Desc: "Band", StartPos: 5945692, EndPos: 5963571, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F14 = genome.Band{Band: "85F14", Desc: "Band", StartPos: 5963571, EndPos: 5973500, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F15 = genome.Band{Band: "85F15", Desc: "Band", StartPos: 5973500, EndPos: 5996192, Giemsa: "n/a", Chr: &Chr3R} Chr3R_85F16 = genome.Band{Band: "85F16", Desc: "Band", StartPos: 5996192, EndPos: 6027484, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86A1 = genome.Band{Band: "86A1", Desc: "Band", StartPos: 6027484, EndPos: 6054520, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86A2 = genome.Band{Band: "86A2", Desc: "Band", StartPos: 6054520, EndPos: 6085812, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86A3 = genome.Band{Band: "86A3", Desc: "Band", StartPos: 6085812, EndPos: 6095740, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86A4 = genome.Band{Band: "86A4", Desc: "Band", StartPos: 6095740, EndPos: 6099906, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86A5 = genome.Band{Band: "86A5", Desc: "Band", StartPos: 6099906, EndPos: 6118344, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86A6 = genome.Band{Band: "86A6", Desc: "Band", StartPos: 6118344, EndPos: 6128272, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86A7 = genome.Band{Band: "86A7", Desc: "Band", StartPos: 6128272, EndPos: 6150965, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86A8 = genome.Band{Band: "86A8", Desc: "Band", StartPos: 6150965, EndPos: 6160893, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86B1 = genome.Band{Band: "86B1", Desc: "Band", StartPos: 6160893, EndPos: 6195553, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86B2 = genome.Band{Band: "86B2", Desc: "Band", StartPos: 6195553, EndPos: 6210600, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86B3 = genome.Band{Band: "86B3", Desc: "Band", StartPos: 6210600, EndPos: 6227437, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86B4 = genome.Band{Band: "86B4", Desc: "Band", StartPos: 6227437, EndPos: 6265923, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86B5 = genome.Band{Band: "86B5", Desc: "Band", StartPos: 6265923, EndPos: 6275393, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86B6 = genome.Band{Band: "86B6", Desc: "Band", StartPos: 6275393, EndPos: 6299447, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C1 = genome.Band{Band: "86C1", Desc: "Band", StartPos: 6299447, EndPos: 6352514, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C2 = genome.Band{Band: "86C2", Desc: "Band", StartPos: 6352514, EndPos: 6444560, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C3 = genome.Band{Band: "86C3", Desc: "Band", StartPos: 6444560, EndPos: 6482093, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C4 = genome.Band{Band: "86C4", Desc: "Band", StartPos: 6482093, EndPos: 6553641, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C5 = genome.Band{Band: "86C5", Desc: "Band", StartPos: 6553641, EndPos: 6591174, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C6 = genome.Band{Band: "86C6", Desc: "Band", StartPos: 6591174, EndPos: 6639968, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C7 = genome.Band{Band: "86C7", Desc: "Band", StartPos: 6639968, EndPos: 6742950, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C8 = genome.Band{Band: "86C8", Desc: "Band", StartPos: 6742950, EndPos: 6742960, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C9 = genome.Band{Band: "86C9", Desc: "Band", StartPos: 6742960, EndPos: 6742970, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C10 = genome.Band{Band: "86C10", Desc: "Band", StartPos: 6742970, EndPos: 6753695, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C11 = genome.Band{Band: "86C11", Desc: "Band", StartPos: 6753695, EndPos: 6761906, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C12 = genome.Band{Band: "86C12", Desc: "Band", StartPos: 6761906, EndPos: 6776504, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C13 = genome.Band{Band: "86C13", Desc: "Band", StartPos: 6776504, EndPos: 6797358, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C14 = genome.Band{Band: "86C14", Desc: "Band", StartPos: 6797358, EndPos: 6805569, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86C15 = genome.Band{Band: "86C15", Desc: "Band", StartPos: 6805569, EndPos: 6838935, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86D1 = genome.Band{Band: "86D1", Desc: "Band", StartPos: 6838935, EndPos: 6884944, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86D2 = genome.Band{Band: "86D2", Desc: "Band", StartPos: 6884944, EndPos: 6930953, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86D3 = genome.Band{Band: "86D3", Desc: "Band", StartPos: 6930953, EndPos: 6939165, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86D4 = genome.Band{Band: "86D4", Desc: "Band", StartPos: 6939165, EndPos: 6972531, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86D5 = genome.Band{Band: "86D5", Desc: "Band", StartPos: 6972531, EndPos: 6999641, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86D6 = genome.Band{Band: "86D6", Desc: "Band", StartPos: 6999641, EndPos: 7014239, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86D7 = genome.Band{Band: "86D7", Desc: "Band", StartPos: 7014239, EndPos: 7035093, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86D8 = genome.Band{Band: "86D8", Desc: "Band", StartPos: 7035093, EndPos: 7068459, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86D9 = genome.Band{Band: "86D9", Desc: "Band", StartPos: 7068459, EndPos: 7095569, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86D10 = genome.Band{Band: "86D10", Desc: "Band", StartPos: 7095569, EndPos: 7110167, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E1 = genome.Band{Band: "86E1", Desc: "Band", StartPos: 7110167, EndPos: 7156176, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E2 = genome.Band{Band: "86E2", Desc: "Band", StartPos: 7156176, EndPos: 7202185, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E3 = genome.Band{Band: "86E3", Desc: "Band", StartPos: 7202185, EndPos: 7216783, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E4 = genome.Band{Band: "86E4", Desc: "Band", StartPos: 7216783, EndPos: 7243893, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E5 = genome.Band{Band: "86E5", Desc: "Band", StartPos: 7243893, EndPos: 7271004, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E6 = genome.Band{Band: "86E6", Desc: "Band", StartPos: 7271004, EndPos: 7291858, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E7 = genome.Band{Band: "86E7", Desc: "Band", StartPos: 7291858, EndPos: 7331610, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E8 = genome.Band{Band: "86E8", Desc: "Band", StartPos: 7331610, EndPos: 7371363, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E9 = genome.Band{Band: "86E9", Desc: "Band", StartPos: 7371363, EndPos: 7379575, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E10 = genome.Band{Band: "86E10", Desc: "Band", StartPos: 7379575, EndPos: 7394172, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E11 = genome.Band{Band: "86E11", Desc: "Band", StartPos: 7394172, EndPos: 7421283, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E12 = genome.Band{Band: "86E12", Desc: "Band", StartPos: 7421283, EndPos: 7442137, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E13 = genome.Band{Band: "86E13", Desc: "Band", StartPos: 7442137, EndPos: 7481889, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E14 = genome.Band{Band: "86E14", Desc: "Band", StartPos: 7481889, EndPos: 7496487, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E15 = genome.Band{Band: "86E15", Desc: "Band", StartPos: 7496487, EndPos: 7511085, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E16 = genome.Band{Band: "86E16", Desc: "Band", StartPos: 7511085, EndPos: 7557094, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E17 = genome.Band{Band: "86E17", Desc: "Band", StartPos: 7557094, EndPos: 7577948, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E18 = genome.Band{Band: "86E18", Desc: "Band", StartPos: 7577948, EndPos: 7611314, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E19 = genome.Band{Band: "86E19", Desc: "Band", StartPos: 7611314, EndPos: 7611324, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86E20 = genome.Band{Band: "86E20", Desc: "Band", StartPos: 7611324, EndPos: 7611334, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86F1 = genome.Band{Band: "86F1", Desc: "Band", StartPos: 7611334, EndPos: 7611344, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86F2 = genome.Band{Band: "86F2", Desc: "Band", StartPos: 7611344, EndPos: 7611354, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86F3 = genome.Band{Band: "86F3", Desc: "Band", StartPos: 7611354, EndPos: 7611364, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86F4 = genome.Band{Band: "86F4", Desc: "Band", StartPos: 7611364, EndPos: 7611374, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86F5 = genome.Band{Band: "86F5", Desc: "Band", StartPos: 7611374, EndPos: 7611384, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86F6 = genome.Band{Band: "86F6", Desc: "Band", StartPos: 7611384, EndPos: 7611394, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86F7 = genome.Band{Band: "86F7", Desc: "Band", StartPos: 7611394, EndPos: 7613842, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86F8 = genome.Band{Band: "86F8", Desc: "Band", StartPos: 7613842, EndPos: 7642957, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86F9 = genome.Band{Band: "86F9", Desc: "Band", StartPos: 7642957, EndPos: 7672072, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86F10 = genome.Band{Band: "86F10", Desc: "Band", StartPos: 7672072, EndPos: 7690269, Giemsa: "n/a", Chr: &Chr3R} Chr3R_86F11 = genome.Band{Band: "86F11", Desc: "Band", StartPos: 7690269, EndPos: 7697434, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87A1 = genome.Band{Band: "87A1", Desc: "Band", StartPos: 7697434, EndPos: 7743040, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87A2 = genome.Band{Band: "87A2", Desc: "Band", StartPos: 7743040, EndPos: 7783187, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87A3 = genome.Band{Band: "87A3", Desc: "Band", StartPos: 7783187, EndPos: 7795925, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87A4 = genome.Band{Band: "87A4", Desc: "Band", StartPos: 7795925, EndPos: 7836072, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87A5 = genome.Band{Band: "87A5", Desc: "Band", StartPos: 7836072, EndPos: 7876219, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87A6 = genome.Band{Band: "87A6", Desc: "Band", StartPos: 7876219, EndPos: 7888957, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87A7 = genome.Band{Band: "87A7", Desc: "Band", StartPos: 7888957, EndPos: 7907154, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87A8 = genome.Band{Band: "87A8", Desc: "Band", StartPos: 7907154, EndPos: 7925351, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87A9 = genome.Band{Band: "87A9", Desc: "Band", StartPos: 7925351, EndPos: 7960038, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87A10 = genome.Band{Band: "87A10", Desc: "Band", StartPos: 7960038, EndPos: 7972776, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B1 = genome.Band{Band: "87B1", Desc: "Band", StartPos: 7972776, EndPos: 8012923, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B2 = genome.Band{Band: "87B2", Desc: "Band", StartPos: 8012923, EndPos: 8053070, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B3 = genome.Band{Band: "87B3", Desc: "Band", StartPos: 8053070, EndPos: 8065808, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B4 = genome.Band{Band: "87B4", Desc: "Band", StartPos: 8065808, EndPos: 8100496, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B5 = genome.Band{Band: "87B5", Desc: "Band", StartPos: 8100496, EndPos: 8129611, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B6 = genome.Band{Band: "87B6", Desc: "Band", StartPos: 8129611, EndPos: 8150681, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B7 = genome.Band{Band: "87B7", Desc: "Band", StartPos: 8150681, EndPos: 8181836, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B8 = genome.Band{Band: "87B8", Desc: "Band", StartPos: 8181836, EndPos: 8207149, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B9 = genome.Band{Band: "87B9", Desc: "Band", StartPos: 8207149, EndPos: 8250109, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B10 = genome.Band{Band: "87B10", Desc: "Band", StartPos: 8250109, EndPos: 8269581, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B11 = genome.Band{Band: "87B11", Desc: "Band", StartPos: 8269581, EndPos: 8289053, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B12 = genome.Band{Band: "87B12", Desc: "Band", StartPos: 8289053, EndPos: 8296720, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B13 = genome.Band{Band: "87B13", Desc: "Band", StartPos: 8296720, EndPos: 8316191, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B14 = genome.Band{Band: "87B14", Desc: "Band", StartPos: 8316191, EndPos: 8335663, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87B15 = genome.Band{Band: "87B15", Desc: "Band", StartPos: 8335663, EndPos: 8360977, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87C1 = genome.Band{Band: "87C1", Desc: "Band", StartPos: 8360977, EndPos: 8415620, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87C2 = genome.Band{Band: "87C2", Desc: "Band", StartPos: 8415620, EndPos: 8452738, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87C3 = genome.Band{Band: "87C3", Desc: "Band", StartPos: 8452738, EndPos: 8486775, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87C4 = genome.Band{Band: "87C4", Desc: "Band", StartPos: 8486775, EndPos: 8499273, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87C5 = genome.Band{Band: "87C5", Desc: "Band", StartPos: 8499273, EndPos: 8522485, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87C6 = genome.Band{Band: "87C6", Desc: "Band", StartPos: 8522485, EndPos: 8540340, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87C7 = genome.Band{Band: "87C7", Desc: "Band", StartPos: 8540340, EndPos: 8563552, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87C8 = genome.Band{Band: "87C8", Desc: "Band", StartPos: 8563552, EndPos: 8576051, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87C9 = genome.Band{Band: "87C9", Desc: "Band", StartPos: 8576051, EndPos: 8599263, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D1 = genome.Band{Band: "87D1", Desc: "Band", StartPos: 8599263, EndPos: 8649369, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D2 = genome.Band{Band: "87D2", Desc: "Band", StartPos: 8649369, EndPos: 8694119, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D3 = genome.Band{Band: "87D3", Desc: "Band", StartPos: 8694119, EndPos: 8733512, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D4 = genome.Band{Band: "87D4", Desc: "Band", StartPos: 8733512, EndPos: 8772905, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D5 = genome.Band{Band: "87D5", Desc: "Band", StartPos: 8772905, EndPos: 8801473, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D6 = genome.Band{Band: "87D6", Desc: "Band", StartPos: 8801473, EndPos: 8808504, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D7 = genome.Band{Band: "87D7", Desc: "Band", StartPos: 8808504, EndPos: 8831716, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D8 = genome.Band{Band: "87D8", Desc: "Band", StartPos: 8831716, EndPos: 8844214, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D9 = genome.Band{Band: "87D9", Desc: "Band", StartPos: 8844214, EndPos: 8869949, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D10 = genome.Band{Band: "87D10", Desc: "Band", StartPos: 8869949, EndPos: 8877582, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D11 = genome.Band{Band: "87D11", Desc: "Band", StartPos: 8877582, EndPos: 8908597, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D12 = genome.Band{Band: "87D12", Desc: "Band", StartPos: 8908597, EndPos: 8933796, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D13 = genome.Band{Band: "87D13", Desc: "Band", StartPos: 8933796, EndPos: 8958996, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87D14 = genome.Band{Band: "87D14", Desc: "Band", StartPos: 8958996, EndPos: 8990011, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87E1 = genome.Band{Band: "87E1", Desc: "Band", StartPos: 8990011, EndPos: 9026962, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87E2 = genome.Band{Band: "87E2", Desc: "Band", StartPos: 9026962, EndPos: 9063913, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87E3 = genome.Band{Band: "87E3", Desc: "Band", StartPos: 9063913, EndPos: 9106680, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87E4 = genome.Band{Band: "87E4", Desc: "Band", StartPos: 9106680, EndPos: 9126064, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87E5 = genome.Band{Band: "87E5", Desc: "Band", StartPos: 9126064, EndPos: 9151264, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87E6 = genome.Band{Band: "87E6", Desc: "Band", StartPos: 9151264, EndPos: 9176463, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87E7 = genome.Band{Band: "87E7", Desc: "Band", StartPos: 9176463, EndPos: 9190032, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87E8 = genome.Band{Band: "87E8", Desc: "Band", StartPos: 9190032, EndPos: 9221047, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87E9 = genome.Band{Band: "87E9", Desc: "Band", StartPos: 9221047, EndPos: 9228680, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87E10 = genome.Band{Band: "87E10", Desc: "Band", StartPos: 9228680, EndPos: 9248064, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87E11 = genome.Band{Band: "87E11", Desc: "Band", StartPos: 9248064, EndPos: 9273264, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87E12 = genome.Band{Band: "87E12", Desc: "Band", StartPos: 9273264, EndPos: 9310215, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F1 = genome.Band{Band: "87F1", Desc: "Band", StartPos: 9310215, EndPos: 9352982, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F2 = genome.Band{Band: "87F2", Desc: "Band", StartPos: 9352982, EndPos: 9389933, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F3 = genome.Band{Band: "87F3", Desc: "Band", StartPos: 9389933, EndPos: 9432700, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F4 = genome.Band{Band: "87F4", Desc: "Band", StartPos: 9432700, EndPos: 9440332, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F5 = genome.Band{Band: "87F5", Desc: "Band", StartPos: 9440332, EndPos: 9465532, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F6 = genome.Band{Band: "87F6", Desc: "Band", StartPos: 9465532, EndPos: 9473164, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F7 = genome.Band{Band: "87F7", Desc: "Band", StartPos: 9473164, EndPos: 9504179, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F8 = genome.Band{Band: "87F8", Desc: "Band", StartPos: 9504179, EndPos: 9504390, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F9 = genome.Band{Band: "87F9", Desc: "Band", StartPos: 9504390, EndPos: 9506216, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F10 = genome.Band{Band: "87F10", Desc: "Band", StartPos: 9506216, EndPos: 9510851, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F11 = genome.Band{Band: "87F11", Desc: "Band", StartPos: 9510851, EndPos: 9531422, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F12 = genome.Band{Band: "87F12", Desc: "Band", StartPos: 9531422, EndPos: 9571451, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F13 = genome.Band{Band: "87F13", Desc: "Band", StartPos: 9571451, EndPos: 9619143, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F14 = genome.Band{Band: "87F14", Desc: "Band", StartPos: 9619143, EndPos: 9659172, Giemsa: "n/a", Chr: &Chr3R} Chr3R_87F15 = genome.Band{Band: "87F15", Desc: "Band", StartPos: 9659172, EndPos: 9669024, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88A1 = genome.Band{Band: "88A1", Desc: "Band", StartPos: 9669024, EndPos: 9724221, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88A2 = genome.Band{Band: "88A2", Desc: "Band", StartPos: 9724221, EndPos: 9771912, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88A3 = genome.Band{Band: "88A3", Desc: "Band", StartPos: 9771912, EndPos: 9804436, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88A4 = genome.Band{Band: "88A4", Desc: "Band", StartPos: 9804436, EndPos: 9880743, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88A5 = genome.Band{Band: "88A5", Desc: "Band", StartPos: 9880743, EndPos: 9884652, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88A6 = genome.Band{Band: "88A6", Desc: "Band", StartPos: 9884652, EndPos: 9894503, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88A7 = genome.Band{Band: "88A7", Desc: "Band", StartPos: 9894503, EndPos: 9912016, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88A8 = genome.Band{Band: "88A8", Desc: "Band", StartPos: 9912016, EndPos: 9937034, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88A9 = genome.Band{Band: "88A9", Desc: "Band", StartPos: 9937034, EndPos: 9977064, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88A10 = genome.Band{Band: "88A10", Desc: "Band", StartPos: 9977064, EndPos: 10024755, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88A11 = genome.Band{Band: "88A11", Desc: "Band", StartPos: 10024755, EndPos: 10034606, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88A12 = genome.Band{Band: "88A12", Desc: "Band", StartPos: 10034606, EndPos: 10052119, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88B1 = genome.Band{Band: "88B1", Desc: "Band", StartPos: 10052119, EndPos: 10120764, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88B2 = genome.Band{Band: "88B2", Desc: "Band", StartPos: 10120764, EndPos: 10124673, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88B3 = genome.Band{Band: "88B3", Desc: "Band", StartPos: 10124673, EndPos: 10147377, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88B4 = genome.Band{Band: "88B4", Desc: "Band", StartPos: 10147377, EndPos: 10159500, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88B5 = genome.Band{Band: "88B5", Desc: "Band", StartPos: 10159500, EndPos: 10182014, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88B6 = genome.Band{Band: "88B6", Desc: "Band", StartPos: 10182014, EndPos: 10199333, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88B7 = genome.Band{Band: "88B7", Desc: "Band", StartPos: 10199333, EndPos: 10216651, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88B8 = genome.Band{Band: "88B8", Desc: "Band", StartPos: 10216651, EndPos: 10233970, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88B9 = genome.Band{Band: "88B9", Desc: "Band", StartPos: 10233970, EndPos: 10240789, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88C1 = genome.Band{Band: "88C1", Desc: "Band", StartPos: 10240789, EndPos: 10278997, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88C2 = genome.Band{Band: "88C2", Desc: "Band", StartPos: 10278997, EndPos: 10312011, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88C3 = genome.Band{Band: "88C3", Desc: "Band", StartPos: 10312011, EndPos: 10339720, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88C4 = genome.Band{Band: "88C4", Desc: "Band", StartPos: 10339720, EndPos: 10364363, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88C5 = genome.Band{Band: "88C5", Desc: "Band", StartPos: 10364363, EndPos: 10370317, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88C6 = genome.Band{Band: "88C6", Desc: "Band", StartPos: 10370317, EndPos: 10403678, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88C7 = genome.Band{Band: "88C7", Desc: "Band", StartPos: 10403678, EndPos: 10414263, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88C8 = genome.Band{Band: "88C8", Desc: "Band", StartPos: 10414263, EndPos: 10424848, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88C9 = genome.Band{Band: "88C9", Desc: "Band", StartPos: 10424848, EndPos: 10453672, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88C10 = genome.Band{Band: "88C10", Desc: "Band", StartPos: 10453672, EndPos: 10492307, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88C11 = genome.Band{Band: "88C11", Desc: "Band", StartPos: 10492307, EndPos: 10501504, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88D1 = genome.Band{Band: "88D1", Desc: "Band", StartPos: 10501504, EndPos: 10553038, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88D2 = genome.Band{Band: "88D2", Desc: "Band", StartPos: 10553038, EndPos: 10605463, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88D3 = genome.Band{Band: "88D3", Desc: "Band", StartPos: 10605463, EndPos: 10624502, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88D4 = genome.Band{Band: "88D4", Desc: "Band", StartPos: 10624502, EndPos: 10643542, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88D5 = genome.Band{Band: "88D5", Desc: "Band", StartPos: 10643542, EndPos: 10687061, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88D6 = genome.Band{Band: "88D6", Desc: "Band", StartPos: 10687061, EndPos: 10730580, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88D7 = genome.Band{Band: "88D7", Desc: "Band", StartPos: 10730580, EndPos: 10749620, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88D8 = genome.Band{Band: "88D8", Desc: "Band", StartPos: 10749620, EndPos: 10817788, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88D9 = genome.Band{Band: "88D9", Desc: "Band", StartPos: 10817788, EndPos: 10844988, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88D10 = genome.Band{Band: "88D10", Desc: "Band", StartPos: 10844988, EndPos: 10880347, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E1 = genome.Band{Band: "88E1", Desc: "Band", StartPos: 10880347, EndPos: 10956675, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E2 = genome.Band{Band: "88E2", Desc: "Band", StartPos: 10956675, EndPos: 11024844, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E3 = genome.Band{Band: "88E3", Desc: "Band", StartPos: 11024844, EndPos: 11060203, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E4 = genome.Band{Band: "88E4", Desc: "Band", StartPos: 11060203, EndPos: 11074462, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E5 = genome.Band{Band: "88E5", Desc: "Band", StartPos: 11074462, EndPos: 11079338, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E6 = genome.Band{Band: "88E6", Desc: "Band", StartPos: 11079338, EndPos: 11084215, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E7 = genome.Band{Band: "88E7", Desc: "Band", StartPos: 11084215, EndPos: 11086841, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E8 = genome.Band{Band: "88E8", Desc: "Band", StartPos: 11086841, EndPos: 11091717, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E9 = genome.Band{Band: "88E9", Desc: "Band", StartPos: 11091717, EndPos: 11098868, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E10 = genome.Band{Band: "88E10", Desc: "Band", StartPos: 11098868, EndPos: 11100345, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E11 = genome.Band{Band: "88E11", Desc: "Band", StartPos: 11100345, EndPos: 11105222, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E12 = genome.Band{Band: "88E12", Desc: "Band", StartPos: 11105222, EndPos: 11124617, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88E13 = genome.Band{Band: "88E13", Desc: "Band", StartPos: 11124617, EndPos: 11142053, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88F1 = genome.Band{Band: "88F1", Desc: "Band", StartPos: 11142053, EndPos: 11195451, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88F2 = genome.Band{Band: "88F2", Desc: "Band", StartPos: 11195451, EndPos: 11199343, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88F3 = genome.Band{Band: "88F3", Desc: "Band", StartPos: 11199343, EndPos: 11224251, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88F4 = genome.Band{Band: "88F4", Desc: "Band", StartPos: 11224251, EndPos: 11264105, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88F5 = genome.Band{Band: "88F5", Desc: "Band", StartPos: 11264105, EndPos: 11296487, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88F6 = genome.Band{Band: "88F6", Desc: "Band", StartPos: 11296487, EndPos: 11328868, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88F7 = genome.Band{Band: "88F7", Desc: "Band", StartPos: 11328868, EndPos: 11376350, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88F8 = genome.Band{Band: "88F8", Desc: "Band", StartPos: 11376350, EndPos: 11423832, Giemsa: "n/a", Chr: &Chr3R} Chr3R_88F9 = genome.Band{Band: "88F9", Desc: "Band", StartPos: 11423832, EndPos: 11448741, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A1 = genome.Band{Band: "89A1", Desc: "Band", StartPos: 11448741, EndPos: 11503696, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A2 = genome.Band{Band: "89A2", Desc: "Band", StartPos: 11503696, EndPos: 11566123, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A3 = genome.Band{Band: "89A3", Desc: "Band", StartPos: 11566123, EndPos: 11583560, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A4 = genome.Band{Band: "89A4", Desc: "Band", StartPos: 11583560, EndPos: 11608468, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A5 = genome.Band{Band: "89A5", Desc: "Band", StartPos: 11608468, EndPos: 11674737, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A6 = genome.Band{Band: "89A6", Desc: "Band", StartPos: 11674737, EndPos: 11701224, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A7 = genome.Band{Band: "89A7", Desc: "Band", StartPos: 11701224, EndPos: 11716122, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A8 = genome.Band{Band: "89A8", Desc: "Band", StartPos: 11716122, EndPos: 11797236, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A9 = genome.Band{Band: "89A9", Desc: "Band", StartPos: 11797236, EndPos: 11797246, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A10 = genome.Band{Band: "89A10", Desc: "Band", StartPos: 11797246, EndPos: 11797256, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A11 = genome.Band{Band: "89A11", Desc: "Band", StartPos: 11797256, EndPos: 11824426, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A12 = genome.Band{Band: "89A12", Desc: "Band", StartPos: 11824426, EndPos: 11845036, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89A13 = genome.Band{Band: "89A13", Desc: "Band", StartPos: 11845036, EndPos: 11853151, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B1 = genome.Band{Band: "89B1", Desc: "Band", StartPos: 11853151, EndPos: 11886126, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B2 = genome.Band{Band: "89B2", Desc: "Band", StartPos: 11886126, EndPos: 11912918, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B3 = genome.Band{Band: "89B3", Desc: "Band", StartPos: 11912918, EndPos: 11939711, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B4 = genome.Band{Band: "89B4", Desc: "Band", StartPos: 11939711, EndPos: 11960320, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B5 = genome.Band{Band: "89B5", Desc: "Band", StartPos: 11960320, EndPos: 11968435, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B6 = genome.Band{Band: "89B6", Desc: "Band", StartPos: 11968435, EndPos: 12007722, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B7 = genome.Band{Band: "89B7", Desc: "Band", StartPos: 12007722, EndPos: 12047009, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B8 = genome.Band{Band: "89B8", Desc: "Band", StartPos: 12047009, EndPos: 12055124, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B9 = genome.Band{Band: "89B9", Desc: "Band", StartPos: 12055124, EndPos: 12099306, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B10 = genome.Band{Band: "89B10", Desc: "Band", StartPos: 12099306, EndPos: 12102526, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B11 = genome.Band{Band: "89B11", Desc: "Band", StartPos: 12102526, EndPos: 12116953, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B12 = genome.Band{Band: "89B12", Desc: "Band", StartPos: 12116953, EndPos: 12156240, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B13 = genome.Band{Band: "89B13", Desc: "Band", StartPos: 12156240, EndPos: 12195527, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B14 = genome.Band{Band: "89B14", Desc: "Band", StartPos: 12195527, EndPos: 12222319, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B15 = genome.Band{Band: "89B15", Desc: "Band", StartPos: 12222319, EndPos: 12249111, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B16 = genome.Band{Band: "89B16", Desc: "Band", StartPos: 12249111, EndPos: 12275904, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B17 = genome.Band{Band: "89B17", Desc: "Band", StartPos: 12275904, EndPos: 12302696, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B18 = genome.Band{Band: "89B18", Desc: "Band", StartPos: 12302696, EndPos: 12341983, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B19 = genome.Band{Band: "89B19", Desc: "Band", StartPos: 12341983, EndPos: 12387453, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B20 = genome.Band{Band: "89B20", Desc: "Band", StartPos: 12387453, EndPos: 12401880, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B21 = genome.Band{Band: "89B21", Desc: "Band", StartPos: 12401880, EndPos: 12401890, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89B22 = genome.Band{Band: "89B22", Desc: "Band", StartPos: 12401890, EndPos: 12401900, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89C1 = genome.Band{Band: "89C1", Desc: "Band", StartPos: 12401900, EndPos: 12401910, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89C2 = genome.Band{Band: "89C2", Desc: "Band", StartPos: 12401910, EndPos: 12401920, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89C3 = genome.Band{Band: "89C3", Desc: "Band", StartPos: 12401920, EndPos: 12401930, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89C4 = genome.Band{Band: "89C4", Desc: "Band", StartPos: 12401930, EndPos: 12401940, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89C5 = genome.Band{Band: "89C5", Desc: "Band", StartPos: 12401940, EndPos: 12401950, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89C6 = genome.Band{Band: "89C6", Desc: "Band", StartPos: 12401950, EndPos: 12401960, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89C7 = genome.Band{Band: "89C7", Desc: "Band", StartPos: 12401960, EndPos: 12401970, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89D1 = genome.Band{Band: "89D1", Desc: "Band", StartPos: 12401970, EndPos: 12401980, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89D2 = genome.Band{Band: "89D2", Desc: "Band", StartPos: 12401980, EndPos: 12401990, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89D3 = genome.Band{Band: "89D3", Desc: "Band", StartPos: 12401990, EndPos: 12402000, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89D4 = genome.Band{Band: "89D4", Desc: "Band", StartPos: 12402000, EndPos: 12420737, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89D5 = genome.Band{Band: "89D5", Desc: "Band", StartPos: 12420737, EndPos: 12461063, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89D6 = genome.Band{Band: "89D6", Desc: "Band", StartPos: 12461063, EndPos: 12522654, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89D7 = genome.Band{Band: "89D7", Desc: "Band", StartPos: 12522654, EndPos: 12526592, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89D8 = genome.Band{Band: "89D8", Desc: "Band", StartPos: 12526592, EndPos: 12544234, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89D9 = genome.Band{Band: "89D9", Desc: "Band", StartPos: 12544234, EndPos: 12561877, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E1 = genome.Band{Band: "89E1", Desc: "Band", StartPos: 12561877, EndPos: 12617482, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E2 = genome.Band{Band: "89E2", Desc: "Band", StartPos: 12617482, EndPos: 12673087, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E3 = genome.Band{Band: "89E3", Desc: "Band", StartPos: 12673087, EndPos: 12728692, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E4 = genome.Band{Band: "89E4", Desc: "Band", StartPos: 12728692, EndPos: 12776736, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E5 = genome.Band{Band: "89E5", Desc: "Band", StartPos: 12776736, EndPos: 12809500, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E6 = genome.Band{Band: "89E6", Desc: "Band", StartPos: 12809500, EndPos: 12827143, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E7 = genome.Band{Band: "89E7", Desc: "Band", StartPos: 12827143, EndPos: 12832003, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E8 = genome.Band{Band: "89E8", Desc: "Band", StartPos: 12832003, EndPos: 12850629, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E9 = genome.Band{Band: "89E9", Desc: "Band", StartPos: 12850629, EndPos: 12858777, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E10 = genome.Band{Band: "89E10", Desc: "Band", StartPos: 12858777, EndPos: 12873911, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E11 = genome.Band{Band: "89E11", Desc: "Band", StartPos: 12873911, EndPos: 12903627, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E12 = genome.Band{Band: "89E12", Desc: "Band", StartPos: 12903627, EndPos: 12919628, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89E13 = genome.Band{Band: "89E13", Desc: "Band", StartPos: 12919628, EndPos: 12949344, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89F1 = genome.Band{Band: "89F1", Desc: "Band", StartPos: 12949344, EndPos: 12992917, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89F2 = genome.Band{Band: "89F2", Desc: "Band", StartPos: 12992917, EndPos: 13022633, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89F3 = genome.Band{Band: "89F3", Desc: "Band", StartPos: 13022633, EndPos: 13073065, Giemsa: "n/a", Chr: &Chr3R} Chr3R_89F4 = genome.Band{Band: "89F4", Desc: "Band", StartPos: 13073065, EndPos: 13082065, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90A1 = genome.Band{Band: "90A1", Desc: "Band", StartPos: 13082065, EndPos: 13139354, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90A2 = genome.Band{Band: "90A2", Desc: "Band", StartPos: 13139354, EndPos: 13182928, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90A3 = genome.Band{Band: "90A3", Desc: "Band", StartPos: 13182928, EndPos: 13211215, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90A4 = genome.Band{Band: "90A4", Desc: "Band", StartPos: 13211215, EndPos: 13214787, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90A5 = genome.Band{Band: "90A5", Desc: "Band", StartPos: 13214787, EndPos: 13230788, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90A6 = genome.Band{Band: "90A6", Desc: "Band", StartPos: 13230788, EndPos: 13253646, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90A7 = genome.Band{Band: "90A7", Desc: "Band", StartPos: 13253646, EndPos: 13262646, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90B1 = genome.Band{Band: "90B1", Desc: "Band", StartPos: 13262646, EndPos: 13339222, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90B2 = genome.Band{Band: "90B2", Desc: "Band", StartPos: 13339222, EndPos: 13342794, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90B3 = genome.Band{Band: "90B3", Desc: "Band", StartPos: 13342794, EndPos: 13365652, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90B4 = genome.Band{Band: "90B4", Desc: "Band", StartPos: 13365652, EndPos: 13386579, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90B5 = genome.Band{Band: "90B5", Desc: "Band", StartPos: 13386579, EndPos: 13426470, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90B6 = genome.Band{Band: "90B6", Desc: "Band", StartPos: 13426470, EndPos: 13453675, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90B7 = genome.Band{Band: "90B7", Desc: "Band", StartPos: 13453675, EndPos: 13480880, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90B8 = genome.Band{Band: "90B8", Desc: "Band", StartPos: 13480880, EndPos: 13489120, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90C1 = genome.Band{Band: "90C1", Desc: "Band", StartPos: 13489120, EndPos: 13535290, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90C2 = genome.Band{Band: "90C2", Desc: "Band", StartPos: 13535290, EndPos: 13581459, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90C3 = genome.Band{Band: "90C3", Desc: "Band", StartPos: 13581459, EndPos: 13596108, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90C4 = genome.Band{Band: "90C4", Desc: "Band", StartPos: 13596108, EndPos: 13610757, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90C5 = genome.Band{Band: "90C5", Desc: "Band", StartPos: 13610757, EndPos: 13631683, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90C6 = genome.Band{Band: "90C6", Desc: "Band", StartPos: 13631683, EndPos: 13652610, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90C7 = genome.Band{Band: "90C7", Desc: "Band", StartPos: 13652610, EndPos: 13697472, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90C8 = genome.Band{Band: "90C8", Desc: "Band", StartPos: 13697472, EndPos: 13700742, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90C9 = genome.Band{Band: "90C9", Desc: "Band", StartPos: 13700742, EndPos: 13721668, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90C10 = genome.Band{Band: "90C10", Desc: "Band", StartPos: 13721668, EndPos: 13742595, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90D1 = genome.Band{Band: "90D1", Desc: "Band", StartPos: 13742595, EndPos: 13793735, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90D2 = genome.Band{Band: "90D2", Desc: "Band", StartPos: 13793735, EndPos: 13793745, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90D3 = genome.Band{Band: "90D3", Desc: "Band", StartPos: 13793745, EndPos: 13795043, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90D4 = genome.Band{Band: "90D4", Desc: "Band", StartPos: 13795043, EndPos: 13822522, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90D5 = genome.Band{Band: "90D5", Desc: "Band", StartPos: 13822522, EndPos: 13824851, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90D6 = genome.Band{Band: "90D6", Desc: "Band", StartPos: 13824851, EndPos: 13830720, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90E1 = genome.Band{Band: "90E1", Desc: "Band", StartPos: 13830720, EndPos: 13859130, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90E2 = genome.Band{Band: "90E2", Desc: "Band", StartPos: 13859130, EndPos: 13887541, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90E3 = genome.Band{Band: "90E3", Desc: "Band", StartPos: 13887541, EndPos: 13897973, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90E4 = genome.Band{Band: "90E4", Desc: "Band", StartPos: 13897973, EndPos: 13917348, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90E5 = genome.Band{Band: "90E5", Desc: "Band", StartPos: 13917348, EndPos: 13923217, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90E6 = genome.Band{Band: "90E6", Desc: "Band", StartPos: 13923217, EndPos: 13938121, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90E7 = genome.Band{Band: "90E7", Desc: "Band", StartPos: 13938121, EndPos: 13943989, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90F1 = genome.Band{Band: "90F1", Desc: "Band", StartPos: 13943989, EndPos: 13971468, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90F2 = genome.Band{Band: "90F2", Desc: "Band", StartPos: 13971468, EndPos: 13973797, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90F3 = genome.Band{Band: "90F3", Desc: "Band", StartPos: 13973797, EndPos: 13984230, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90F4 = genome.Band{Band: "90F4", Desc: "Band", StartPos: 13984230, EndPos: 14003605, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90F5 = genome.Band{Band: "90F5", Desc: "Band", StartPos: 14003605, EndPos: 14009473, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90F6 = genome.Band{Band: "90F6", Desc: "Band", StartPos: 14009473, EndPos: 14024377, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90F7 = genome.Band{Band: "90F7", Desc: "Band", StartPos: 14024377, EndPos: 14048223, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90F8 = genome.Band{Band: "90F8", Desc: "Band", StartPos: 14048223, EndPos: 14054091, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90F9 = genome.Band{Band: "90F9", Desc: "Band", StartPos: 14054091, EndPos: 14064524, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90F10 = genome.Band{Band: "90F10", Desc: "Band", StartPos: 14064524, EndPos: 14079428, Giemsa: "n/a", Chr: &Chr3R} Chr3R_90F11 = genome.Band{Band: "90F11", Desc: "Band", StartPos: 14079428, EndPos: 14094332, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91A1 = genome.Band{Band: "91A1", Desc: "Band", StartPos: 14094332, EndPos: 14122742, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91A2 = genome.Band{Band: "91A2", Desc: "Band", StartPos: 14122742, EndPos: 14166606, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91A3 = genome.Band{Band: "91A3", Desc: "Band", StartPos: 14166606, EndPos: 14198998, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91A4 = genome.Band{Band: "91A4", Desc: "Band", StartPos: 14198998, EndPos: 14206969, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91A5 = genome.Band{Band: "91A5", Desc: "Band", StartPos: 14206969, EndPos: 14227214, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91A6 = genome.Band{Band: "91A6", Desc: "Band", StartPos: 14227214, EndPos: 14241681, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91A7 = genome.Band{Band: "91A7", Desc: "Band", StartPos: 14241681, EndPos: 14252473, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91A8 = genome.Band{Band: "91A8", Desc: "Band", StartPos: 14252473, EndPos: 14272516, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91B1 = genome.Band{Band: "91B1", Desc: "Band", StartPos: 14272516, EndPos: 14301905, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91B2 = genome.Band{Band: "91B2", Desc: "Band", StartPos: 14301905, EndPos: 14335920, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91B3 = genome.Band{Band: "91B3", Desc: "Band", StartPos: 14335920, EndPos: 14379185, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91B4 = genome.Band{Band: "91B4", Desc: "Band", StartPos: 14379185, EndPos: 14399227, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91B5 = genome.Band{Band: "91B5", Desc: "Band", StartPos: 14399227, EndPos: 14428617, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91B6 = genome.Band{Band: "91B6", Desc: "Band", StartPos: 14428617, EndPos: 14453285, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91B7 = genome.Band{Band: "91B7", Desc: "Band", StartPos: 14453285, EndPos: 14473327, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91B8 = genome.Band{Band: "91B8", Desc: "Band", StartPos: 14473327, EndPos: 14497995, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91C1 = genome.Band{Band: "91C1", Desc: "Band", StartPos: 14497995, EndPos: 14535672, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91C2 = genome.Band{Band: "91C2", Desc: "Band", StartPos: 14535672, EndPos: 14538081, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91C3 = genome.Band{Band: "91C3", Desc: "Band", StartPos: 14538081, EndPos: 14548873, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91C4 = genome.Band{Band: "91C4", Desc: "Band", StartPos: 14548873, EndPos: 14554943, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91C5 = genome.Band{Band: "91C5", Desc: "Band", StartPos: 14554943, EndPos: 14574986, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91C6 = genome.Band{Band: "91C6", Desc: "Band", StartPos: 14574986, EndPos: 14595029, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91C7 = genome.Band{Band: "91C7", Desc: "Band", StartPos: 14595029, EndPos: 14619697, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91D1 = genome.Band{Band: "91D1", Desc: "Band", StartPos: 14619697, EndPos: 14658336, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91D2 = genome.Band{Band: "91D2", Desc: "Band", StartPos: 14658336, EndPos: 14696976, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91D3 = genome.Band{Band: "91D3", Desc: "Band", StartPos: 14696976, EndPos: 14721644, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91D4 = genome.Band{Band: "91D4", Desc: "Band", StartPos: 14721644, EndPos: 14746312, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91D5 = genome.Band{Band: "91D5", Desc: "Band", StartPos: 14746312, EndPos: 14770980, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91E1 = genome.Band{Band: "91E1", Desc: "Band", StartPos: 14770980, EndPos: 14804995, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91E2 = genome.Band{Band: "91E2", Desc: "Band", StartPos: 14804995, EndPos: 14839009, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91E3 = genome.Band{Band: "91E3", Desc: "Band", StartPos: 14839009, EndPos: 14849802, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91E4 = genome.Band{Band: "91E4", Desc: "Band", StartPos: 14849802, EndPos: 14874469, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91E5 = genome.Band{Band: "91E5", Desc: "Band", StartPos: 14874469, EndPos: 14885262, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91E6 = genome.Band{Band: "91E6", Desc: "Band", StartPos: 14885262, EndPos: 14896054, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F1 = genome.Band{Band: "91F1", Desc: "Band", StartPos: 14896054, EndPos: 14925443, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F2 = genome.Band{Band: "91F2", Desc: "Band", StartPos: 14925443, EndPos: 14959458, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F3 = genome.Band{Band: "91F3", Desc: "Band", StartPos: 14959458, EndPos: 14970250, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F4 = genome.Band{Band: "91F4", Desc: "Band", StartPos: 14970250, EndPos: 15003301, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F5 = genome.Band{Band: "91F5", Desc: "Band", StartPos: 15003301, EndPos: 15003311, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F6 = genome.Band{Band: "91F6", Desc: "Band", StartPos: 15003311, EndPos: 15003321, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F7 = genome.Band{Band: "91F7", Desc: "Band", StartPos: 15003321, EndPos: 15003331, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F8 = genome.Band{Band: "91F8", Desc: "Band", StartPos: 15003331, EndPos: 15003341, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F9 = genome.Band{Band: "91F9", Desc: "Band", StartPos: 15003341, EndPos: 15003351, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F10 = genome.Band{Band: "91F10", Desc: "Band", StartPos: 15003351, EndPos: 15003834, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F11 = genome.Band{Band: "91F11", Desc: "Band", StartPos: 15003834, EndPos: 15051137, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F12 = genome.Band{Band: "91F12", Desc: "Band", StartPos: 15051137, EndPos: 15076682, Giemsa: "n/a", Chr: &Chr3R} Chr3R_91F13 = genome.Band{Band: "91F13", Desc: "Band", StartPos: 15076682, EndPos: 15086741, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A1 = genome.Band{Band: "92A1", Desc: "Band", StartPos: 15086741, EndPos: 15143099, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A2 = genome.Band{Band: "92A2", Desc: "Band", StartPos: 15143099, EndPos: 15199457, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A3 = genome.Band{Band: "92A3", Desc: "Band", StartPos: 15199457, EndPos: 15240329, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A4 = genome.Band{Band: "92A4", Desc: "Band", StartPos: 15240329, EndPos: 15265874, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A5 = genome.Band{Band: "92A5", Desc: "Band", StartPos: 15265874, EndPos: 15291419, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A6 = genome.Band{Band: "92A6", Desc: "Band", StartPos: 15291419, EndPos: 15332291, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A7 = genome.Band{Band: "92A7", Desc: "Band", StartPos: 15332291, EndPos: 15373163, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A8 = genome.Band{Band: "92A8", Desc: "Band", StartPos: 15373163, EndPos: 15391044, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A9 = genome.Band{Band: "92A9", Desc: "Band", StartPos: 15391044, EndPos: 15408926, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A10 = genome.Band{Band: "92A10", Desc: "Band", StartPos: 15408926, EndPos: 15442134, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A11 = genome.Band{Band: "92A11", Desc: "Band", StartPos: 15442134, EndPos: 15473746, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A12 = genome.Band{Band: "92A12", Desc: "Band", StartPos: 15473746, EndPos: 15477737, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A13 = genome.Band{Band: "92A13", Desc: "Band", StartPos: 15477737, EndPos: 15510946, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92A14 = genome.Band{Band: "92A14", Desc: "Band", StartPos: 15510946, EndPos: 15521004, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92B1 = genome.Band{Band: "92B1", Desc: "Band", StartPos: 15521004, EndPos: 15592689, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92B2 = genome.Band{Band: "92B2", Desc: "Band", StartPos: 15592689, EndPos: 15641384, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92B3 = genome.Band{Band: "92B3", Desc: "Band", StartPos: 15641384, EndPos: 15690079, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92B4 = genome.Band{Band: "92B4", Desc: "Band", StartPos: 15690079, EndPos: 15723288, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92B5 = genome.Band{Band: "92B5", Desc: "Band", StartPos: 15723288, EndPos: 15723298, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92B6 = genome.Band{Band: "92B6", Desc: "Band", StartPos: 15723298, EndPos: 15745652, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92B7 = genome.Band{Band: "92B7", Desc: "Band", StartPos: 15745652, EndPos: 15748381, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92B8 = genome.Band{Band: "92B8", Desc: "Band", StartPos: 15748381, EndPos: 15755258, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92B9 = genome.Band{Band: "92B9", Desc: "Band", StartPos: 15755258, EndPos: 15783201, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92B10 = genome.Band{Band: "92B10", Desc: "Band", StartPos: 15783201, EndPos: 15790078, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92B11 = genome.Band{Band: "92B11", Desc: "Band", StartPos: 15790078, EndPos: 15796954, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92C1 = genome.Band{Band: "92C1", Desc: "Band", StartPos: 15796954, EndPos: 15860699, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92C2 = genome.Band{Band: "92C2", Desc: "Band", StartPos: 15860699, EndPos: 15863428, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92C3 = genome.Band{Band: "92C3", Desc: "Band", StartPos: 15863428, EndPos: 15870305, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92C4 = genome.Band{Band: "92C4", Desc: "Band", StartPos: 15870305, EndPos: 15898248, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92C5 = genome.Band{Band: "92C5", Desc: "Band", StartPos: 15898248, EndPos: 15915712, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92C6 = genome.Band{Band: "92C6", Desc: "Band", StartPos: 15915712, EndPos: 15922589, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92D1 = genome.Band{Band: "92D1", Desc: "Band", StartPos: 15922589, EndPos: 15961120, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92D2 = genome.Band{Band: "92D2", Desc: "Band", StartPos: 15961120, EndPos: 15999651, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92D3 = genome.Band{Band: "92D3", Desc: "Band", StartPos: 15999651, EndPos: 16006527, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92D4 = genome.Band{Band: "92D4", Desc: "Band", StartPos: 16006527, EndPos: 16029231, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92D5 = genome.Band{Band: "92D5", Desc: "Band", StartPos: 16029231, EndPos: 16036108, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92D6 = genome.Band{Band: "92D6", Desc: "Band", StartPos: 16036108, EndPos: 16052480, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92D7 = genome.Band{Band: "92D7", Desc: "Band", StartPos: 16052480, EndPos: 16055209, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92D8 = genome.Band{Band: "92D8", Desc: "Band", StartPos: 16055209, EndPos: 16072674, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92D9 = genome.Band{Band: "92D9", Desc: "Band", StartPos: 16072674, EndPos: 16084899, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E1 = genome.Band{Band: "92E1", Desc: "Band", StartPos: 16084899, EndPos: 16118190, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E2 = genome.Band{Band: "92E2", Desc: "Band", StartPos: 16118190, EndPos: 16151482, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E3 = genome.Band{Band: "92E3", Desc: "Band", StartPos: 16151482, EndPos: 16163707, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E4 = genome.Band{Band: "92E4", Desc: "Band", StartPos: 16163707, EndPos: 16196998, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E5 = genome.Band{Band: "92E5", Desc: "Band", StartPos: 16196998, EndPos: 16209224, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E6 = genome.Band{Band: "92E6", Desc: "Band", StartPos: 16209224, EndPos: 16221449, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E7 = genome.Band{Band: "92E7", Desc: "Band", StartPos: 16221449, EndPos: 16233674, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E8 = genome.Band{Band: "92E8", Desc: "Band", StartPos: 16233674, EndPos: 16271113, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E9 = genome.Band{Band: "92E9", Desc: "Band", StartPos: 16271113, EndPos: 16273842, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E10 = genome.Band{Band: "92E10", Desc: "Band", StartPos: 16273842, EndPos: 16280718, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E11 = genome.Band{Band: "92E11", Desc: "Band", StartPos: 16280718, EndPos: 16292944, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E12 = genome.Band{Band: "92E12", Desc: "Band", StartPos: 16292944, EndPos: 16329291, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E13 = genome.Band{Band: "92E13", Desc: "Band", StartPos: 16329291, EndPos: 16332020, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E14 = genome.Band{Band: "92E14", Desc: "Band", StartPos: 16332020, EndPos: 16348393, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92E15 = genome.Band{Band: "92E15", Desc: "Band", StartPos: 16348393, EndPos: 16351122, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F1 = genome.Band{Band: "92F1", Desc: "Band", StartPos: 16351122, EndPos: 16389653, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F2 = genome.Band{Band: "92F2", Desc: "Band", StartPos: 16389653, EndPos: 16428184, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F3 = genome.Band{Band: "92F3", Desc: "Band", StartPos: 16428184, EndPos: 16461475, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F4 = genome.Band{Band: "92F4", Desc: "Band", StartPos: 16461475, EndPos: 16484179, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F5 = genome.Band{Band: "92F5", Desc: "Band", StartPos: 16484179, EndPos: 16496404, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F6 = genome.Band{Band: "92F6", Desc: "Band", StartPos: 16496404, EndPos: 16533843, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F7 = genome.Band{Band: "92F7", Desc: "Band", StartPos: 16533843, EndPos: 16536572, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F8 = genome.Band{Band: "92F8", Desc: "Band", StartPos: 16536572, EndPos: 16547706, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F9 = genome.Band{Band: "92F9", Desc: "Band", StartPos: 16547706, EndPos: 16550434, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F10 = genome.Band{Band: "92F10", Desc: "Band", StartPos: 16550434, EndPos: 16572047, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F11 = genome.Band{Band: "92F11", Desc: "Band", StartPos: 16572047, EndPos: 16574776, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F12 = genome.Band{Band: "92F12", Desc: "Band", StartPos: 16574776, EndPos: 16587001, Giemsa: "n/a", Chr: &Chr3R} Chr3R_92F13 = genome.Band{Band: "92F13", Desc: "Band", StartPos: 16587001, EndPos: 16620292, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93A1 = genome.Band{Band: "93A1", Desc: "Band", StartPos: 16620292, EndPos: 16658823, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93A2 = genome.Band{Band: "93A2", Desc: "Band", StartPos: 16658823, EndPos: 16728885, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93A3 = genome.Band{Band: "93A3", Desc: "Band", StartPos: 16728885, EndPos: 16751115, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93A4 = genome.Band{Band: "93A4", Desc: "Band", StartPos: 16751115, EndPos: 16809665, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93A5 = genome.Band{Band: "93A5", Desc: "Band", StartPos: 16809665, EndPos: 16809675, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93A6 = genome.Band{Band: "93A6", Desc: "Band", StartPos: 16809675, EndPos: 16809685, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93A7 = genome.Band{Band: "93A7", Desc: "Band", StartPos: 16809685, EndPos: 16809695, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B1 = genome.Band{Band: "93B1", Desc: "Band", StartPos: 16809695, EndPos: 16809705, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B2 = genome.Band{Band: "93B2", Desc: "Band", StartPos: 16809705, EndPos: 16809715, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B3 = genome.Band{Band: "93B3", Desc: "Band", StartPos: 16809715, EndPos: 16841611, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B4 = genome.Band{Band: "93B4", Desc: "Band", StartPos: 16841611, EndPos: 16850546, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B5 = genome.Band{Band: "93B5", Desc: "Band", StartPos: 16850546, EndPos: 16862513, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B6 = genome.Band{Band: "93B6", Desc: "Band", StartPos: 16862513, EndPos: 16864508, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B7 = genome.Band{Band: "93B7", Desc: "Band", StartPos: 16864508, EndPos: 16881102, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B8 = genome.Band{Band: "93B8", Desc: "Band", StartPos: 16881102, EndPos: 16890038, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B9 = genome.Band{Band: "93B9", Desc: "Band", StartPos: 16890038, EndPos: 16895064, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B10 = genome.Band{Band: "93B10", Desc: "Band", StartPos: 16895064, EndPos: 16911659, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B11 = genome.Band{Band: "93B11", Desc: "Band", StartPos: 16911659, EndPos: 16924424, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B12 = genome.Band{Band: "93B12", Desc: "Band", StartPos: 16924424, EndPos: 16937189, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93B13 = genome.Band{Band: "93B13", Desc: "Band", StartPos: 16937189, EndPos: 16949954, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93C1 = genome.Band{Band: "93C1", Desc: "Band", StartPos: 16949954, EndPos: 16974287, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93C2 = genome.Band{Band: "93C2", Desc: "Band", StartPos: 16974287, EndPos: 16998621, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93C3 = genome.Band{Band: "93C3", Desc: "Band", StartPos: 16998621, EndPos: 17007556, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93C4 = genome.Band{Band: "93C4", Desc: "Band", StartPos: 17007556, EndPos: 17024151, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93C5 = genome.Band{Band: "93C5", Desc: "Band", StartPos: 17024151, EndPos: 17040745, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93C6 = genome.Band{Band: "93C6", Desc: "Band", StartPos: 17040745, EndPos: 17045772, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93C7 = genome.Band{Band: "93C7", Desc: "Band", StartPos: 17045772, EndPos: 17058537, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93D1 = genome.Band{Band: "93D1", Desc: "Band", StartPos: 17058537, EndPos: 17086699, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93D2 = genome.Band{Band: "93D2", Desc: "Band", StartPos: 17086699, EndPos: 17107124, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93D3 = genome.Band{Band: "93D3", Desc: "Band", StartPos: 17107124, EndPos: 17116059, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93D4 = genome.Band{Band: "93D4", Desc: "Band", StartPos: 17116059, EndPos: 17140392, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93D5 = genome.Band{Band: "93D5", Desc: "Band", StartPos: 17140392, EndPos: 17149328, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93D6 = genome.Band{Band: "93D6", Desc: "Band", StartPos: 17149328, EndPos: 17176693, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93D7 = genome.Band{Band: "93D7", Desc: "Band", StartPos: 17176693, EndPos: 17178688, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93D8 = genome.Band{Band: "93D8", Desc: "Band", StartPos: 17178688, EndPos: 17191453, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93D9 = genome.Band{Band: "93D9", Desc: "Band", StartPos: 17191453, EndPos: 17208047, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93D10 = genome.Band{Band: "93D10", Desc: "Band", StartPos: 17208047, EndPos: 17226531, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93E1 = genome.Band{Band: "93E1", Desc: "Band", StartPos: 17226531, EndPos: 17281157, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93E2 = genome.Band{Band: "93E2", Desc: "Band", StartPos: 17281157, EndPos: 17318410, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93E3 = genome.Band{Band: "93E3", Desc: "Band", StartPos: 17318410, EndPos: 17338470, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93E4 = genome.Band{Band: "93E4", Desc: "Band", StartPos: 17338470, EndPos: 17410289, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93E5 = genome.Band{Band: "93E5", Desc: "Band", StartPos: 17410289, EndPos: 17425969, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93E6 = genome.Band{Band: "93E6", Desc: "Band", StartPos: 17425969, EndPos: 17431904, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93E7 = genome.Band{Band: "93E7", Desc: "Band", StartPos: 17431904, EndPos: 17437839, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93E8 = genome.Band{Band: "93E8", Desc: "Band", StartPos: 17437839, EndPos: 17443774, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93E9 = genome.Band{Band: "93E9", Desc: "Band", StartPos: 17443774, EndPos: 17457340, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93E10 = genome.Band{Band: "93E10", Desc: "Band", StartPos: 17457340, EndPos: 17460679, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93E11 = genome.Band{Band: "93E11", Desc: "Band", StartPos: 17460679, EndPos: 17471701, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F1 = genome.Band{Band: "93F1", Desc: "Band", StartPos: 17471701, EndPos: 17487864, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F2 = genome.Band{Band: "93F2", Desc: "Band", StartPos: 17487864, EndPos: 17506570, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F3 = genome.Band{Band: "93F3", Desc: "Band", StartPos: 17506570, EndPos: 17517592, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F4 = genome.Band{Band: "93F4", Desc: "Band", StartPos: 17517592, EndPos: 17538312, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F5 = genome.Band{Band: "93F5", Desc: "Band", StartPos: 17538312, EndPos: 17539637, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F6 = genome.Band{Band: "93F6", Desc: "Band", StartPos: 17539637, EndPos: 17555800, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F7 = genome.Band{Band: "93F7", Desc: "Band", StartPos: 17555800, EndPos: 17569366, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F8 = genome.Band{Band: "93F8", Desc: "Band", StartPos: 17569366, EndPos: 17580388, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F9 = genome.Band{Band: "93F9", Desc: "Band", StartPos: 17580388, EndPos: 17604182, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F10 = genome.Band{Band: "93F10", Desc: "Band", StartPos: 17604182, EndPos: 17630572, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F11 = genome.Band{Band: "93F11", Desc: "Band", StartPos: 17630572, EndPos: 17639050, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F12 = genome.Band{Band: "93F12", Desc: "Band", StartPos: 17639050, EndPos: 17652616, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F13 = genome.Band{Band: "93F13", Desc: "Band", StartPos: 17652616, EndPos: 17663639, Giemsa: "n/a", Chr: &Chr3R} Chr3R_93F14 = genome.Band{Band: "93F14", Desc: "Band", StartPos: 17663639, EndPos: 17845017, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A1 = genome.Band{Band: "94A1", Desc: "Band", StartPos: 17845017, EndPos: 17909360, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A2 = genome.Band{Band: "94A2", Desc: "Band", StartPos: 17909360, EndPos: 17992752, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A3 = genome.Band{Band: "94A3", Desc: "Band", StartPos: 17992752, EndPos: 18066739, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A4 = genome.Band{Band: "94A4", Desc: "Band", StartPos: 18066739, EndPos: 18140726, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A5 = genome.Band{Band: "94A5", Desc: "Band", StartPos: 18140726, EndPos: 18184322, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A6 = genome.Band{Band: "94A6", Desc: "Band", StartPos: 18184322, EndPos: 18207797, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A7 = genome.Band{Band: "94A7", Desc: "Band", StartPos: 18207797, EndPos: 18207807, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A8 = genome.Band{Band: "94A8", Desc: "Band", StartPos: 18207807, EndPos: 18207817, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A9 = genome.Band{Band: "94A9", Desc: "Band", StartPos: 18207817, EndPos: 18207827, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A10 = genome.Band{Band: "94A10", Desc: "Band", StartPos: 18207827, EndPos: 18211376, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A11 = genome.Band{Band: "94A11", Desc: "Band", StartPos: 18211376, EndPos: 18222930, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A12 = genome.Band{Band: "94A12", Desc: "Band", StartPos: 18222930, EndPos: 18249340, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A13 = genome.Band{Band: "94A13", Desc: "Band", StartPos: 18249340, EndPos: 18255840, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A14 = genome.Band{Band: "94A14", Desc: "Band", StartPos: 18255840, EndPos: 18277298, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A15 = genome.Band{Band: "94A15", Desc: "Band", StartPos: 18277298, EndPos: 18288852, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94A16 = genome.Band{Band: "94A16", Desc: "Band", StartPos: 18288852, EndPos: 18300406, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94B1 = genome.Band{Band: "94B1", Desc: "Band", StartPos: 18300406, EndPos: 18331871, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94B2 = genome.Band{Band: "94B2", Desc: "Band", StartPos: 18331871, EndPos: 18363336, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94B3 = genome.Band{Band: "94B3", Desc: "Band", StartPos: 18363336, EndPos: 18374890, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94B4 = genome.Band{Band: "94B4", Desc: "Band", StartPos: 18374890, EndPos: 18406355, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94B5 = genome.Band{Band: "94B5", Desc: "Band", StartPos: 18406355, EndPos: 18433970, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94B6 = genome.Band{Band: "94B6", Desc: "Band", StartPos: 18433970, EndPos: 18446195, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94B7 = genome.Band{Band: "94B7", Desc: "Band", StartPos: 18446195, EndPos: 18454753, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94B8 = genome.Band{Band: "94B8", Desc: "Band", StartPos: 18454753, EndPos: 18466979, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94B9 = genome.Band{Band: "94B9", Desc: "Band", StartPos: 18466979, EndPos: 18479204, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94B10 = genome.Band{Band: "94B10", Desc: "Band", StartPos: 18479204, EndPos: 18487762, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94B11 = genome.Band{Band: "94B11", Desc: "Band", StartPos: 18487762, EndPos: 18492576, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94C1 = genome.Band{Band: "94C1", Desc: "Band", StartPos: 18492576, EndPos: 18529864, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94C2 = genome.Band{Band: "94C2", Desc: "Band", StartPos: 18529864, EndPos: 18539409, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94C3 = genome.Band{Band: "94C3", Desc: "Band", StartPos: 18539409, EndPos: 18551301, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94C4 = genome.Band{Band: "94C4", Desc: "Band", StartPos: 18551301, EndPos: 18597912, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94C5 = genome.Band{Band: "94C5", Desc: "Band", StartPos: 18597912, EndPos: 18600566, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94C6 = genome.Band{Band: "94C6", Desc: "Band", StartPos: 18600566, EndPos: 18612458, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94C7 = genome.Band{Band: "94C7", Desc: "Band", StartPos: 18612458, EndPos: 18619147, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94C8 = genome.Band{Band: "94C8", Desc: "Band", StartPos: 18619147, EndPos: 18646328, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94C9 = genome.Band{Band: "94C9", Desc: "Band", StartPos: 18646328, EndPos: 18653017, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D1 = genome.Band{Band: "94D1", Desc: "Band", StartPos: 18653017, EndPos: 18685400, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D2 = genome.Band{Band: "94D2", Desc: "Band", StartPos: 18685400, EndPos: 18717784, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D3 = genome.Band{Band: "94D3", Desc: "Band", StartPos: 18717784, EndPos: 18750167, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D4 = genome.Band{Band: "94D4", Desc: "Band", StartPos: 18750167, EndPos: 18787647, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D5 = genome.Band{Band: "94D5", Desc: "Band", StartPos: 18787647, EndPos: 18799539, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D6 = genome.Band{Band: "94D6", Desc: "Band", StartPos: 18799539, EndPos: 18811431, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D7 = genome.Band{Band: "94D7", Desc: "Band", StartPos: 18811431, EndPos: 18832453, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D8 = genome.Band{Band: "94D8", Desc: "Band", StartPos: 18832453, EndPos: 18835108, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D9 = genome.Band{Band: "94D9", Desc: "Band", StartPos: 18835108, EndPos: 18847000, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D10 = genome.Band{Band: "94D10", Desc: "Band", StartPos: 18847000, EndPos: 18888514, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D11 = genome.Band{Band: "94D11", Desc: "Band", StartPos: 18888514, EndPos: 18891169, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D12 = genome.Band{Band: "94D12", Desc: "Band", StartPos: 18891169, EndPos: 18913253, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94D13 = genome.Band{Band: "94D13", Desc: "Band", StartPos: 18913253, EndPos: 18940434, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E1 = genome.Band{Band: "94E1", Desc: "Band", StartPos: 18940434, EndPos: 18983010, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E2 = genome.Band{Band: "94E2", Desc: "Band", StartPos: 18983010, EndPos: 18985663, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E3 = genome.Band{Band: "94E3", Desc: "Band", StartPos: 18985663, EndPos: 19000255, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E4 = genome.Band{Band: "94E4", Desc: "Band", StartPos: 19000255, EndPos: 19014847, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E5 = genome.Band{Band: "94E5", Desc: "Band", StartPos: 19014847, EndPos: 19019267, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E6 = genome.Band{Band: "94E6", Desc: "Band", StartPos: 19019267, EndPos: 19046697, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E7 = genome.Band{Band: "94E7", Desc: "Band", StartPos: 19046697, EndPos: 19063912, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E8 = genome.Band{Band: "94E8", Desc: "Band", StartPos: 19063912, EndPos: 19075638, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E9 = genome.Band{Band: "94E9", Desc: "Band", StartPos: 19075638, EndPos: 19116577, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E10 = genome.Band{Band: "94E10", Desc: "Band", StartPos: 19116577, EndPos: 19119195, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E11 = genome.Band{Band: "94E11", Desc: "Band", StartPos: 19119195, EndPos: 19135947, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E12 = genome.Band{Band: "94E12", Desc: "Band", StartPos: 19135947, EndPos: 19167882, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94E13 = genome.Band{Band: "94E13", Desc: "Band", StartPos: 19167882, EndPos: 19189660, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94F1 = genome.Band{Band: "94F1", Desc: "Band", StartPos: 19189660, EndPos: 19245781, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94F2 = genome.Band{Band: "94F2", Desc: "Band", StartPos: 19245781, EndPos: 19248398, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94F3 = genome.Band{Band: "94F3", Desc: "Band", StartPos: 19248398, EndPos: 19280333, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94F4 = genome.Band{Band: "94F4", Desc: "Band", StartPos: 19280333, EndPos: 19302111, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94F5 = genome.Band{Band: "94F5", Desc: "Band", StartPos: 19302111, EndPos: 19308707, Giemsa: "n/a", Chr: &Chr3R} Chr3R_94F6 = genome.Band{Band: "94F6", Desc: "Band", StartPos: 19308707, EndPos: 19335511, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95A1 = genome.Band{Band: "95A1", Desc: "Band", StartPos: 19335511, EndPos: 19372472, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95A2 = genome.Band{Band: "95A2", Desc: "Band", StartPos: 19372472, EndPos: 19414458, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95A3 = genome.Band{Band: "95A3", Desc: "Band", StartPos: 19414458, EndPos: 19426184, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95A4 = genome.Band{Band: "95A4", Desc: "Band", StartPos: 19426184, EndPos: 19472149, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95A5 = genome.Band{Band: "95A5", Desc: "Band", StartPos: 19472149, EndPos: 19474766, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95A6 = genome.Band{Band: "95A6", Desc: "Band", StartPos: 19474766, EndPos: 19481363, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95A7 = genome.Band{Band: "95A7", Desc: "Band", StartPos: 19481363, EndPos: 19522302, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95A8 = genome.Band{Band: "95A8", Desc: "Band", StartPos: 19522302, EndPos: 19529514, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95A9 = genome.Band{Band: "95A9", Desc: "Band", StartPos: 19529514, EndPos: 19532684, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95A10 = genome.Band{Band: "95A10", Desc: "Band", StartPos: 19532684, EndPos: 19540672, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95B1 = genome.Band{Band: "95B1", Desc: "Band", StartPos: 19540672, EndPos: 19602548, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95B2 = genome.Band{Band: "95B2", Desc: "Band", StartPos: 19602548, EndPos: 19605718, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95B3 = genome.Band{Band: "95B3", Desc: "Band", StartPos: 19605718, EndPos: 19605728, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95B4 = genome.Band{Band: "95B4", Desc: "Band", StartPos: 19605728, EndPos: 19605738, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95B5 = genome.Band{Band: "95B5", Desc: "Band", StartPos: 19605738, EndPos: 19618970, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95B6 = genome.Band{Band: "95B6", Desc: "Band", StartPos: 19618970, EndPos: 19620168, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95B7 = genome.Band{Band: "95B7", Desc: "Band", StartPos: 19620168, EndPos: 19627836, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95B8 = genome.Band{Band: "95B8", Desc: "Band", StartPos: 19627836, EndPos: 19630856, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95B9 = genome.Band{Band: "95B9", Desc: "Band", StartPos: 19630856, EndPos: 19638523, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C1 = genome.Band{Band: "95C1", Desc: "Band", StartPos: 19638523, EndPos: 19657262, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C2 = genome.Band{Band: "95C2", Desc: "Band", StartPos: 19657262, EndPos: 19658460, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C3 = genome.Band{Band: "95C3", Desc: "Band", StartPos: 19658460, EndPos: 19663827, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C4 = genome.Band{Band: "95C4", Desc: "Band", StartPos: 19663827, EndPos: 19676096, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C5 = genome.Band{Band: "95C5", Desc: "Band", StartPos: 19676096, EndPos: 19688364, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C6 = genome.Band{Band: "95C6", Desc: "Band", StartPos: 19688364, EndPos: 19693732, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C7 = genome.Band{Band: "95C7", Desc: "Band", StartPos: 19693732, EndPos: 19706000, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C8 = genome.Band{Band: "95C8", Desc: "Band", StartPos: 19706000, EndPos: 19718269, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C9 = genome.Band{Band: "95C9", Desc: "Band", StartPos: 19718269, EndPos: 19723636, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C10 = genome.Band{Band: "95C10", Desc: "Band", StartPos: 19723636, EndPos: 19733604, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C11 = genome.Band{Band: "95C11", Desc: "Band", StartPos: 19733604, EndPos: 19741272, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C12 = genome.Band{Band: "95C12", Desc: "Band", StartPos: 19741272, EndPos: 19751240, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C13 = genome.Band{Band: "95C13", Desc: "Band", StartPos: 19751240, EndPos: 19763509, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95C14 = genome.Band{Band: "95C14", Desc: "Band", StartPos: 19763509, EndPos: 19766528, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95D1 = genome.Band{Band: "95D1", Desc: "Band", StartPos: 19766528, EndPos: 19794515, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95D2 = genome.Band{Band: "95D2", Desc: "Band", StartPos: 19794515, EndPos: 19795714, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95D3 = genome.Band{Band: "95D3", Desc: "Band", StartPos: 19795714, EndPos: 19805682, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95D4 = genome.Band{Band: "95D4", Desc: "Band", StartPos: 19805682, EndPos: 19813350, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95D5 = genome.Band{Band: "95D5", Desc: "Band", StartPos: 19813350, EndPos: 19841337, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95D6 = genome.Band{Band: "95D6", Desc: "Band", StartPos: 19841337, EndPos: 19842535, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95D7 = genome.Band{Band: "95D7", Desc: "Band", StartPos: 19842535, EndPos: 19847903, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95D8 = genome.Band{Band: "95D8", Desc: "Band", StartPos: 19847903, EndPos: 19860171, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95D9 = genome.Band{Band: "95D9", Desc: "Band", StartPos: 19860171, EndPos: 19872440, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95D10 = genome.Band{Band: "95D10", Desc: "Band", StartPos: 19872440, EndPos: 19879628, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95D11 = genome.Band{Band: "95D11", Desc: "Band", StartPos: 19879628, EndPos: 19888822, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95E1 = genome.Band{Band: "95E1", Desc: "Band", StartPos: 19888822, EndPos: 19970172, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95E2 = genome.Band{Band: "95E2", Desc: "Band", StartPos: 19970172, EndPos: 19970182, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95E3 = genome.Band{Band: "95E3", Desc: "Band", StartPos: 19970182, EndPos: 19970192, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95E4 = genome.Band{Band: "95E4", Desc: "Band", StartPos: 19970192, EndPos: 19970202, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95E5 = genome.Band{Band: "95E5", Desc: "Band", StartPos: 19970202, EndPos: 19979291, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95E6 = genome.Band{Band: "95E6", Desc: "Band", StartPos: 19979291, EndPos: 19996875, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95E7 = genome.Band{Band: "95E7", Desc: "Band", StartPos: 19996875, EndPos: 20003333, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95E8 = genome.Band{Band: "95E8", Desc: "Band", StartPos: 20003333, EndPos: 20015324, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F1 = genome.Band{Band: "95F1", Desc: "Band", StartPos: 20015324, EndPos: 20032908, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F2 = genome.Band{Band: "95F2", Desc: "Band", StartPos: 20032908, EndPos: 20050492, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F3 = genome.Band{Band: "95F3", Desc: "Band", StartPos: 20050492, EndPos: 20059717, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F4 = genome.Band{Band: "95F4", Desc: "Band", StartPos: 20059717, EndPos: 20066174, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F5 = genome.Band{Band: "95F5", Desc: "Band", StartPos: 20066174, EndPos: 20078166, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F6 = genome.Band{Band: "95F6", Desc: "Band", StartPos: 20078166, EndPos: 20090157, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F7 = genome.Band{Band: "95F7", Desc: "Band", StartPos: 20090157, EndPos: 20096614, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F8 = genome.Band{Band: "95F8", Desc: "Band", StartPos: 20096614, EndPos: 20105839, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F9 = genome.Band{Band: "95F9", Desc: "Band", StartPos: 20105839, EndPos: 20115063, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F10 = genome.Band{Band: "95F10", Desc: "Band", StartPos: 20115063, EndPos: 20121520, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F11 = genome.Band{Band: "95F11", Desc: "Band", StartPos: 20121520, EndPos: 20144062, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F12 = genome.Band{Band: "95F12", Desc: "Band", StartPos: 20144062, EndPos: 20154197, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F13 = genome.Band{Band: "95F13", Desc: "Band", StartPos: 20154197, EndPos: 20160462, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F14 = genome.Band{Band: "95F14", Desc: "Band", StartPos: 20160462, EndPos: 20181146, Giemsa: "n/a", Chr: &Chr3R} Chr3R_95F15 = genome.Band{Band: "95F15", Desc: "Band", StartPos: 20181146, EndPos: 20206604, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A1 = genome.Band{Band: "96A1", Desc: "Band", StartPos: 20206604, EndPos: 20246482, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A2 = genome.Band{Band: "96A2", Desc: "Band", StartPos: 20246482, EndPos: 20300779, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A3 = genome.Band{Band: "96A3", Desc: "Band", StartPos: 20300779, EndPos: 20321464, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A4 = genome.Band{Band: "96A4", Desc: "Band", StartPos: 20321464, EndPos: 20327729, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A5 = genome.Band{Band: "96A5", Desc: "Band", StartPos: 20327729, EndPos: 20353187, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A6 = genome.Band{Band: "96A6", Desc: "Band", StartPos: 20353187, EndPos: 20364324, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A7 = genome.Band{Band: "96A7", Desc: "Band", StartPos: 20364324, EndPos: 20389782, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A8 = genome.Band{Band: "96A8", Desc: "Band", StartPos: 20389782, EndPos: 20400920, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A9 = genome.Band{Band: "96A9", Desc: "Band", StartPos: 20400920, EndPos: 20435030, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A10 = genome.Band{Band: "96A10", Desc: "Band", StartPos: 20435030, EndPos: 20437516, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A11 = genome.Band{Band: "96A11", Desc: "Band", StartPos: 20437516, EndPos: 20443781, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A12 = genome.Band{Band: "96A12", Desc: "Band", StartPos: 20443781, EndPos: 20450046, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A13 = genome.Band{Band: "96A13", Desc: "Band", StartPos: 20450046, EndPos: 20480377, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A14 = genome.Band{Band: "96A14", Desc: "Band", StartPos: 20480377, EndPos: 20501062, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A15 = genome.Band{Band: "96A15", Desc: "Band", StartPos: 20501062, EndPos: 20512200, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A16 = genome.Band{Band: "96A16", Desc: "Band", StartPos: 20512200, EndPos: 20518465, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A17 = genome.Band{Band: "96A17", Desc: "Band", StartPos: 20518465, EndPos: 20539149, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A18 = genome.Band{Band: "96A18", Desc: "Band", StartPos: 20539149, EndPos: 20559834, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A19 = genome.Band{Band: "96A19", Desc: "Band", StartPos: 20559834, EndPos: 20580518, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A20 = genome.Band{Band: "96A20", Desc: "Band", StartPos: 20580518, EndPos: 20601203, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A21 = genome.Band{Band: "96A21", Desc: "Band", StartPos: 20601203, EndPos: 20607468, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A22 = genome.Band{Band: "96A22", Desc: "Band", StartPos: 20607468, EndPos: 20628153, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A23 = genome.Band{Band: "96A23", Desc: "Band", StartPos: 20628153, EndPos: 20648837, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A24 = genome.Band{Band: "96A24", Desc: "Band", StartPos: 20648837, EndPos: 20659975, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96A25 = genome.Band{Band: "96A25", Desc: "Band", StartPos: 20659975, EndPos: 20666240, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B1 = genome.Band{Band: "96B1", Desc: "Band", StartPos: 20666240, EndPos: 20696571, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B2 = genome.Band{Band: "96B2", Desc: "Band", StartPos: 20696571, EndPos: 20712777, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B3 = genome.Band{Band: "96B3", Desc: "Band", StartPos: 20712777, EndPos: 20716125, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B4 = genome.Band{Band: "96B4", Desc: "Band", StartPos: 20716125, EndPos: 20727177, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B5 = genome.Band{Band: "96B5", Desc: "Band", StartPos: 20727177, EndPos: 20733128, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B6 = genome.Band{Band: "96B6", Desc: "Band", StartPos: 20733128, EndPos: 20746199, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B7 = genome.Band{Band: "96B7", Desc: "Band", StartPos: 20746199, EndPos: 20747528, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B8 = genome.Band{Band: "96B8", Desc: "Band", StartPos: 20747528, EndPos: 20750875, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B9 = genome.Band{Band: "96B9", Desc: "Band", StartPos: 20750875, EndPos: 20756826, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B10 = genome.Band{Band: "96B10", Desc: "Band", StartPos: 20756826, EndPos: 20770429, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B11 = genome.Band{Band: "96B11", Desc: "Band", StartPos: 20770429, EndPos: 20790655, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B12 = genome.Band{Band: "96B12", Desc: "Band", StartPos: 20790655, EndPos: 20795632, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B13 = genome.Band{Band: "96B13", Desc: "Band", StartPos: 20795632, EndPos: 20812065, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B14 = genome.Band{Band: "96B14", Desc: "Band", StartPos: 20812065, EndPos: 20828499, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B15 = genome.Band{Band: "96B15", Desc: "Band", StartPos: 20828499, EndPos: 20848724, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B16 = genome.Band{Band: "96B16", Desc: "Band", StartPos: 20848724, EndPos: 20853702, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B17 = genome.Band{Band: "96B17", Desc: "Band", StartPos: 20853702, EndPos: 20870135, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B18 = genome.Band{Band: "96B18", Desc: "Band", StartPos: 20870135, EndPos: 20875112, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B19 = genome.Band{Band: "96B19", Desc: "Band", StartPos: 20875112, EndPos: 20895338, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B20 = genome.Band{Band: "96B20", Desc: "Band", StartPos: 20895338, EndPos: 20921256, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96B21 = genome.Band{Band: "96B21", Desc: "Band", StartPos: 20921256, EndPos: 20927635, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96C1 = genome.Band{Band: "96C1", Desc: "Band", StartPos: 20927635, EndPos: 20963373, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96C2 = genome.Band{Band: "96C2", Desc: "Band", StartPos: 20963373, EndPos: 20999112, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96C3 = genome.Band{Band: "96C3", Desc: "Band", StartPos: 20999112, EndPos: 21015311, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96C4 = genome.Band{Band: "96C4", Desc: "Band", StartPos: 21015311, EndPos: 21026650, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96C5 = genome.Band{Band: "96C5", Desc: "Band", StartPos: 21026650, EndPos: 21042849, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96C6 = genome.Band{Band: "96C6", Desc: "Band", StartPos: 21042849, EndPos: 21049227, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96C7 = genome.Band{Band: "96C7", Desc: "Band", StartPos: 21049227, EndPos: 21070286, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96C8 = genome.Band{Band: "96C8", Desc: "Band", StartPos: 21070286, EndPos: 21101165, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96C9 = genome.Band{Band: "96C9", Desc: "Band", StartPos: 21101165, EndPos: 21118073, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96D1 = genome.Band{Band: "96D1", Desc: "Band", StartPos: 21118073, EndPos: 21163240, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96D2 = genome.Band{Band: "96D2", Desc: "Band", StartPos: 21163240, EndPos: 21208406, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96D3 = genome.Band{Band: "96D3", Desc: "Band", StartPos: 21208406, EndPos: 21216467, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96D4 = genome.Band{Band: "96D4", Desc: "Band", StartPos: 21216467, EndPos: 21236939, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96D5 = genome.Band{Band: "96D5", Desc: "Band", StartPos: 21236939, EndPos: 21257412, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96D6 = genome.Band{Band: "96D6", Desc: "Band", StartPos: 21257412, EndPos: 21265473, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96E1 = genome.Band{Band: "96E1", Desc: "Band", StartPos: 21265473, EndPos: 21304498, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96E2 = genome.Band{Band: "96E2", Desc: "Band", StartPos: 21304498, EndPos: 21349664, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96E3 = genome.Band{Band: "96E3", Desc: "Band", StartPos: 21349664, EndPos: 21400973, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96E4 = genome.Band{Band: "96E4", Desc: "Band", StartPos: 21400973, EndPos: 21439998, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96E5 = genome.Band{Band: "96E5", Desc: "Band", StartPos: 21439998, EndPos: 21448059, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96E6 = genome.Band{Band: "96E6", Desc: "Band", StartPos: 21448059, EndPos: 21478693, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96E7 = genome.Band{Band: "96E7", Desc: "Band", StartPos: 21478693, EndPos: 21483881, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96E8 = genome.Band{Band: "96E8", Desc: "Band", StartPos: 21483881, EndPos: 21501010, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96E9 = genome.Band{Band: "96E9", Desc: "Band", StartPos: 21501010, EndPos: 21510233, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96E10 = genome.Band{Band: "96E10", Desc: "Band", StartPos: 21510233, EndPos: 21527362, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96E11 = genome.Band{Band: "96E11", Desc: "Band", StartPos: 21527362, EndPos: 21532550, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96E12 = genome.Band{Band: "96E12", Desc: "Band", StartPos: 21532550, EndPos: 21537738, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F1 = genome.Band{Band: "96F1", Desc: "Band", StartPos: 21537738, EndPos: 21570760, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F2 = genome.Band{Band: "96F2", Desc: "Band", StartPos: 21570760, EndPos: 21604876, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F3 = genome.Band{Band: "96F3", Desc: "Band", StartPos: 21604876, EndPos: 21679396, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F4 = genome.Band{Band: "96F4", Desc: "Band", StartPos: 21679396, EndPos: 21682092, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F5 = genome.Band{Band: "96F5", Desc: "Band", StartPos: 21682092, EndPos: 21709700, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F6 = genome.Band{Band: "96F6", Desc: "Band", StartPos: 21709700, EndPos: 21721779, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F7 = genome.Band{Band: "96F7", Desc: "Band", StartPos: 21721779, EndPos: 21733857, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F8 = genome.Band{Band: "96F8", Desc: "Band", StartPos: 21733857, EndPos: 21792740, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F9 = genome.Band{Band: "96F9", Desc: "Band", StartPos: 21792740, EndPos: 21835985, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F10 = genome.Band{Band: "96F10", Desc: "Band", StartPos: 21835985, EndPos: 21893789, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F11 = genome.Band{Band: "96F11", Desc: "Band", StartPos: 21893789, EndPos: 21896485, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F12 = genome.Band{Band: "96F12", Desc: "Band", StartPos: 21896485, EndPos: 21913740, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F13 = genome.Band{Band: "96F13", Desc: "Band", StartPos: 21913740, EndPos: 21920535, Giemsa: "n/a", Chr: &Chr3R} Chr3R_96F14 = genome.Band{Band: "96F14", Desc: "Band", StartPos: 21920535, EndPos: 21932613, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97A1 = genome.Band{Band: "97A1", Desc: "Band", StartPos: 21932613, EndPos: 21970682, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97A2 = genome.Band{Band: "97A2", Desc: "Band", StartPos: 21970682, EndPos: 22007672, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97A3 = genome.Band{Band: "97A3", Desc: "Band", StartPos: 22007672, EndPos: 22010369, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97A4 = genome.Band{Band: "97A4", Desc: "Band", StartPos: 22010369, EndPos: 22022447, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97A5 = genome.Band{Band: "97A5", Desc: "Band", StartPos: 22022447, EndPos: 22055339, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97A6 = genome.Band{Band: "97A6", Desc: "Band", StartPos: 22055339, EndPos: 22088232, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97A7 = genome.Band{Band: "97A7", Desc: "Band", StartPos: 22088232, EndPos: 22121124, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97A8 = genome.Band{Band: "97A8", Desc: "Band", StartPos: 22121124, EndPos: 22154016, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97A9 = genome.Band{Band: "97A9", Desc: "Band", StartPos: 22154016, EndPos: 22176448, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97A10 = genome.Band{Band: "97A10", Desc: "Band", StartPos: 22176448, EndPos: 22188526, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97B1 = genome.Band{Band: "97B1", Desc: "Band", StartPos: 22188526, EndPos: 22231772, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97B2 = genome.Band{Band: "97B2", Desc: "Band", StartPos: 22231772, EndPos: 22275017, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97B3 = genome.Band{Band: "97B3", Desc: "Band", StartPos: 22275017, EndPos: 22287096, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97B4 = genome.Band{Band: "97B4", Desc: "Band", StartPos: 22287096, EndPos: 22299174, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97B5 = genome.Band{Band: "97B5", Desc: "Band", StartPos: 22299174, EndPos: 22305968, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97B6 = genome.Band{Band: "97B6", Desc: "Band", StartPos: 22305968, EndPos: 22348135, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97B7 = genome.Band{Band: "97B7", Desc: "Band", StartPos: 22348135, EndPos: 22350831, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97B8 = genome.Band{Band: "97B8", Desc: "Band", StartPos: 22350831, EndPos: 22357626, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97B9 = genome.Band{Band: "97B9", Desc: "Band", StartPos: 22357626, EndPos: 22380954, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97B10 = genome.Band{Band: "97B10", Desc: "Band", StartPos: 22380954, EndPos: 22384029, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97C1 = genome.Band{Band: "97C1", Desc: "Band", StartPos: 22384029, EndPos: 22427442, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97C2 = genome.Band{Band: "97C2", Desc: "Band", StartPos: 22427442, EndPos: 22464952, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97C3 = genome.Band{Band: "97C3", Desc: "Band", StartPos: 22464952, EndPos: 22502462, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97C4 = genome.Band{Band: "97C4", Desc: "Band", StartPos: 22502462, EndPos: 22533946, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97C5 = genome.Band{Band: "97C5", Desc: "Band", StartPos: 22533946, EndPos: 22559526, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D1 = genome.Band{Band: "97D1", Desc: "Band", StartPos: 22559526, EndPos: 22608843, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D2 = genome.Band{Band: "97D2", Desc: "Band", StartPos: 22608843, EndPos: 22675992, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D3 = genome.Band{Band: "97D3", Desc: "Band", StartPos: 22675992, EndPos: 22701572, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D4 = genome.Band{Band: "97D4", Desc: "Band", StartPos: 22701572, EndPos: 22704347, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D5 = genome.Band{Band: "97D5", Desc: "Band", StartPos: 22704347, EndPos: 22714010, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D6 = genome.Band{Band: "97D6", Desc: "Band", StartPos: 22714010, EndPos: 22736097, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D7 = genome.Band{Band: "97D7", Desc: "Band", StartPos: 22736097, EndPos: 22741533, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D8 = genome.Band{Band: "97D8", Desc: "Band", StartPos: 22741533, EndPos: 22766985, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D9 = genome.Band{Band: "97D9", Desc: "Band", StartPos: 22766985, EndPos: 22775114, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D10 = genome.Band{Band: "97D10", Desc: "Band", StartPos: 22775114, EndPos: 22781727, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D11 = genome.Band{Band: "97D11", Desc: "Band", StartPos: 22781727, EndPos: 22803561, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D12 = genome.Band{Band: "97D12", Desc: "Band", StartPos: 22803561, EndPos: 22830433, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D13 = genome.Band{Band: "97D13", Desc: "Band", StartPos: 22830433, EndPos: 22837046, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D14 = genome.Band{Band: "97D14", Desc: "Band", StartPos: 22837046, EndPos: 22878089, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97D15 = genome.Band{Band: "97D15", Desc: "Band", StartPos: 22878089, EndPos: 22880713, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97E1 = genome.Band{Band: "97E1", Desc: "Band", StartPos: 22880713, EndPos: 22912729, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97E2 = genome.Band{Band: "97E2", Desc: "Band", StartPos: 22912729, EndPos: 22944745, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97E3 = genome.Band{Band: "97E3", Desc: "Band", StartPos: 22944745, EndPos: 22961540, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97E4 = genome.Band{Band: "97E4", Desc: "Band", StartPos: 22961540, EndPos: 22968153, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97E5 = genome.Band{Band: "97E5", Desc: "Band", StartPos: 22968153, EndPos: 22989987, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97E6 = genome.Band{Band: "97E6", Desc: "Band", StartPos: 22989987, EndPos: 23011821, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97E7 = genome.Band{Band: "97E7", Desc: "Band", StartPos: 23011821, EndPos: 23018434, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97E8 = genome.Band{Band: "97E8", Desc: "Band", StartPos: 23018434, EndPos: 23044256, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97E9 = genome.Band{Band: "97E9", Desc: "Band", StartPos: 23044256, EndPos: 23046881, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97E10 = genome.Band{Band: "97E10", Desc: "Band", StartPos: 23046881, EndPos: 23073753, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97E11 = genome.Band{Band: "97E11", Desc: "Band", StartPos: 23073753, EndPos: 23090548, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97F1 = genome.Band{Band: "97F1", Desc: "Band", StartPos: 23090548, EndPos: 23132641, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97F2 = genome.Band{Band: "97F2", Desc: "Band", StartPos: 23132641, EndPos: 23154475, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97F3 = genome.Band{Band: "97F3", Desc: "Band", StartPos: 23154475, EndPos: 23166231, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97F4 = genome.Band{Band: "97F4", Desc: "Band", StartPos: 23166231, EndPos: 23181977, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97F5 = genome.Band{Band: "97F5", Desc: "Band", StartPos: 23181977, EndPos: 23184601, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97F6 = genome.Band{Band: "97F6", Desc: "Band", StartPos: 23184601, EndPos: 23205385, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97F7 = genome.Band{Band: "97F7", Desc: "Band", StartPos: 23205385, EndPos: 23208009, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97F8 = genome.Band{Band: "97F8", Desc: "Band", StartPos: 23208009, EndPos: 23228793, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97F9 = genome.Band{Band: "97F9", Desc: "Band", StartPos: 23228793, EndPos: 23231417, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97F10 = genome.Band{Band: "97F10", Desc: "Band", StartPos: 23231417, EndPos: 23248213, Giemsa: "n/a", Chr: &Chr3R} Chr3R_97F11 = genome.Band{Band: "97F11", Desc: "Band", StartPos: 23248213, EndPos: 23259969, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A1 = genome.Band{Band: "98A1", Desc: "Band", StartPos: 23259969, EndPos: 23291985, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A2 = genome.Band{Band: "98A2", Desc: "Band", StartPos: 23291985, EndPos: 23324001, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A3 = genome.Band{Band: "98A3", Desc: "Band", StartPos: 23324001, EndPos: 23356017, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A4 = genome.Band{Band: "98A4", Desc: "Band", StartPos: 23356017, EndPos: 23381839, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A5 = genome.Band{Band: "98A5", Desc: "Band", StartPos: 23381839, EndPos: 23384463, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A6 = genome.Band{Band: "98A6", Desc: "Band", StartPos: 23384463, EndPos: 23405247, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A7 = genome.Band{Band: "98A7", Desc: "Band", StartPos: 23405247, EndPos: 23407872, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A8 = genome.Band{Band: "98A8", Desc: "Band", StartPos: 23407872, EndPos: 23418578, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A9 = genome.Band{Band: "98A9", Desc: "Band", StartPos: 23418578, EndPos: 23421203, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A10 = genome.Band{Band: "98A10", Desc: "Band", StartPos: 23421203, EndPos: 23437998, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A11 = genome.Band{Band: "98A11", Desc: "Band", StartPos: 23437998, EndPos: 23449754, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A12 = genome.Band{Band: "98A12", Desc: "Band", StartPos: 23449754, EndPos: 23461511, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A13 = genome.Band{Band: "98A13", Desc: "Band", StartPos: 23461511, EndPos: 23468124, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A14 = genome.Band{Band: "98A14", Desc: "Band", StartPos: 23468124, EndPos: 23484919, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98A15 = genome.Band{Band: "98A15", Desc: "Band", StartPos: 23484919, EndPos: 23496676, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98B1 = genome.Band{Band: "98B1", Desc: "Band", StartPos: 23496676, EndPos: 23528692, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98B2 = genome.Band{Band: "98B2", Desc: "Band", StartPos: 23528692, EndPos: 23600997, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98B3 = genome.Band{Band: "98B3", Desc: "Band", StartPos: 23600997, EndPos: 23666665, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98B4 = genome.Band{Band: "98B4", Desc: "Band", StartPos: 23666665, EndPos: 23673339, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98B5 = genome.Band{Band: "98B5", Desc: "Band", StartPos: 23673339, EndPos: 23741676, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98B6 = genome.Band{Band: "98B6", Desc: "Band", StartPos: 23741676, EndPos: 23810014, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98B7 = genome.Band{Band: "98B7", Desc: "Band", StartPos: 23810014, EndPos: 23865538, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98B8 = genome.Band{Band: "98B8", Desc: "Band", StartPos: 23865538, EndPos: 23908248, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98C1 = genome.Band{Band: "98C1", Desc: "Band", StartPos: 23908248, EndPos: 23989666, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98C2 = genome.Band{Band: "98C2", Desc: "Band", StartPos: 23989666, EndPos: 24083897, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98C3 = genome.Band{Band: "98C3", Desc: "Band", StartPos: 24083897, EndPos: 24152234, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98C4 = genome.Band{Band: "98C4", Desc: "Band", StartPos: 24152234, EndPos: 24187490, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98C5 = genome.Band{Band: "98C5", Desc: "Band", StartPos: 24187490, EndPos: 24209524, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98D1 = genome.Band{Band: "98D1", Desc: "Band", StartPos: 24209524, EndPos: 24258139, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98D2 = genome.Band{Band: "98D2", Desc: "Band", StartPos: 24258139, EndPos: 24319974, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98D3 = genome.Band{Band: "98D3", Desc: "Band", StartPos: 24319974, EndPos: 24348619, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98D4 = genome.Band{Band: "98D4", Desc: "Band", StartPos: 24348619, EndPos: 24383875, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98D5 = genome.Band{Band: "98D5", Desc: "Band", StartPos: 24383875, EndPos: 24419130, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98D6 = genome.Band{Band: "98D6", Desc: "Band", StartPos: 24419130, EndPos: 24441165, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98D7 = genome.Band{Band: "98D7", Desc: "Band", StartPos: 24441165, EndPos: 24469810, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98E1 = genome.Band{Band: "98E1", Desc: "Band", StartPos: 24469810, EndPos: 24511814, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98E2 = genome.Band{Band: "98E2", Desc: "Band", StartPos: 24511814, EndPos: 24567039, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98E3 = genome.Band{Band: "98E3", Desc: "Band", StartPos: 24567039, EndPos: 24595684, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98E4 = genome.Band{Band: "98E4", Desc: "Band", StartPos: 24595684, EndPos: 24624329, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98E5 = genome.Band{Band: "98E5", Desc: "Band", StartPos: 24624329, EndPos: 24659585, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98E6 = genome.Band{Band: "98E6", Desc: "Band", StartPos: 24659585, EndPos: 24681620, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F1 = genome.Band{Band: "98F1", Desc: "Band", StartPos: 24681620, EndPos: 24716875, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F2 = genome.Band{Band: "98F2", Desc: "Band", StartPos: 24716875, EndPos: 24758879, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F3 = genome.Band{Band: "98F3", Desc: "Band", StartPos: 24758879, EndPos: 24780914, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F4 = genome.Band{Band: "98F4", Desc: "Band", StartPos: 24780914, EndPos: 24816170, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F5 = genome.Band{Band: "98F5", Desc: "Band", StartPos: 24816170, EndPos: 24863407, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F6 = genome.Band{Band: "98F6", Desc: "Band", StartPos: 24863407, EndPos: 24912296, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F7 = genome.Band{Band: "98F7", Desc: "Band", StartPos: 24912296, EndPos: 24914463, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F8 = genome.Band{Band: "98F8", Desc: "Band", StartPos: 24914463, EndPos: 24922715, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F9 = genome.Band{Band: "98F9", Desc: "Band", StartPos: 24922715, EndPos: 24930968, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F10 = genome.Band{Band: "98F10", Desc: "Band", StartPos: 24930968, EndPos: 24950618, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F11 = genome.Band{Band: "98F11", Desc: "Band", StartPos: 24950618, EndPos: 24953893, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F12 = genome.Band{Band: "98F12", Desc: "Band", StartPos: 24953893, EndPos: 24974852, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F13 = genome.Band{Band: "98F13", Desc: "Band", StartPos: 24974852, EndPos: 25002100, Giemsa: "n/a", Chr: &Chr3R} Chr3R_98F14 = genome.Band{Band: "98F14", Desc: "Band", StartPos: 25002100, EndPos: 25010353, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99A1 = genome.Band{Band: "99A1", Desc: "Band", StartPos: 25010353, EndPos: 25067860, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99A2 = genome.Band{Band: "99A2", Desc: "Band", StartPos: 25067860, EndPos: 25067870, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99A3 = genome.Band{Band: "99A3", Desc: "Band", StartPos: 25067870, EndPos: 25067880, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99A4 = genome.Band{Band: "99A4", Desc: "Band", StartPos: 25067880, EndPos: 25071834, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99A5 = genome.Band{Band: "99A5", Desc: "Band", StartPos: 25071834, EndPos: 25130422, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99A6 = genome.Band{Band: "99A6", Desc: "Band", StartPos: 25130422, EndPos: 25133452, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99A7 = genome.Band{Band: "99A7", Desc: "Band", StartPos: 25133452, EndPos: 25221815, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99A8 = genome.Band{Band: "99A8", Desc: "Band", StartPos: 25221815, EndPos: 25224845, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99A9 = genome.Band{Band: "99A9", Desc: "Band", StartPos: 25224845, EndPos: 25250056, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99A10 = genome.Band{Band: "99A10", Desc: "Band", StartPos: 25250056, EndPos: 25269450, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99A11 = genome.Band{Band: "99A11", Desc: "Band", StartPos: 25269450, EndPos: 25294662, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99B1 = genome.Band{Band: "99B1", Desc: "Band", StartPos: 25294662, EndPos: 25331631, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99B2 = genome.Band{Band: "99B2", Desc: "Band", StartPos: 25331631, EndPos: 25368600, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99B3 = genome.Band{Band: "99B3", Desc: "Band", StartPos: 25368600, EndPos: 25399630, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99B4 = genome.Band{Band: "99B4", Desc: "Band", StartPos: 25399630, EndPos: 25436599, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99B5 = genome.Band{Band: "99B5", Desc: "Band", StartPos: 25436599, EndPos: 25473568, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99B6 = genome.Band{Band: "99B6", Desc: "Band", StartPos: 25473568, EndPos: 25492961, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99B7 = genome.Band{Band: "99B7", Desc: "Band", StartPos: 25492961, EndPos: 25518173, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99B8 = genome.Band{Band: "99B8", Desc: "Band", StartPos: 25518173, EndPos: 25543385, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99B9 = genome.Band{Band: "99B9", Desc: "Band", StartPos: 25543385, EndPos: 25568596, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99B10 = genome.Band{Band: "99B10", Desc: "Band", StartPos: 25568596, EndPos: 25593808, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99B11 = genome.Band{Band: "99B11", Desc: "Band", StartPos: 25593808, EndPos: 25601444, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99C1 = genome.Band{Band: "99C1", Desc: "Band", StartPos: 25601444, EndPos: 25632474, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99C2 = genome.Band{Band: "99C2", Desc: "Band", StartPos: 25632474, EndPos: 25663087, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99C3 = genome.Band{Band: "99C3", Desc: "Band", StartPos: 25663087, EndPos: 25670621, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99C4 = genome.Band{Band: "99C4", Desc: "Band", StartPos: 25670621, EndPos: 25689754, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99C5 = genome.Band{Band: "99C5", Desc: "Band", StartPos: 25689754, EndPos: 25720367, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99C6 = genome.Band{Band: "99C6", Desc: "Band", StartPos: 25720367, EndPos: 25745240, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99C7 = genome.Band{Band: "99C7", Desc: "Band", StartPos: 25745240, EndPos: 25775853, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99C8 = genome.Band{Band: "99C8", Desc: "Band", StartPos: 25775853, EndPos: 25783386, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99D1 = genome.Band{Band: "99D1", Desc: "Band", StartPos: 25783386, EndPos: 25847482, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99D2 = genome.Band{Band: "99D2", Desc: "Band", StartPos: 25847482, EndPos: 25850472, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99D3 = genome.Band{Band: "99D3", Desc: "Band", StartPos: 25850472, EndPos: 25886944, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99D4 = genome.Band{Band: "99D4", Desc: "Band", StartPos: 25886944, EndPos: 25900337, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99D5 = genome.Band{Band: "99D5", Desc: "Band", StartPos: 25900337, EndPos: 25935614, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99D6 = genome.Band{Band: "99D6", Desc: "Band", StartPos: 25935614, EndPos: 25938604, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99D7 = genome.Band{Band: "99D7", Desc: "Band", StartPos: 25938604, EndPos: 25951997, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99D8 = genome.Band{Band: "99D8", Desc: "Band", StartPos: 25951997, EndPos: 25971130, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99D9 = genome.Band{Band: "99D9", Desc: "Band", StartPos: 25971130, EndPos: 25978664, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99E1 = genome.Band{Band: "99E1", Desc: "Band", StartPos: 25978664, EndPos: 26015136, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99E2 = genome.Band{Band: "99E2", Desc: "Band", StartPos: 26015136, EndPos: 26051608, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99E3 = genome.Band{Band: "99E3", Desc: "Band", StartPos: 26051608, EndPos: 26088081, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99E4 = genome.Band{Band: "99E4", Desc: "Band", StartPos: 26088081, EndPos: 26118694, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99E5 = genome.Band{Band: "99E5", Desc: "Band", StartPos: 26118694, EndPos: 26149307, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99F1 = genome.Band{Band: "99F1", Desc: "Band", StartPos: 26149307, EndPos: 26191519, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99F2 = genome.Band{Band: "99F2", Desc: "Band", StartPos: 26191519, EndPos: 26233732, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99F3 = genome.Band{Band: "99F3", Desc: "Band", StartPos: 26233732, EndPos: 26247125, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99F4 = genome.Band{Band: "99F4", Desc: "Band", StartPos: 26247125, EndPos: 26277738, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99F5 = genome.Band{Band: "99F5", Desc: "Band", StartPos: 26277738, EndPos: 26291131, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99F6 = genome.Band{Band: "99F6", Desc: "Band", StartPos: 26291131, EndPos: 26339083, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99F7 = genome.Band{Band: "99F7", Desc: "Band", StartPos: 26339083, EndPos: 26369696, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99F8 = genome.Band{Band: "99F8", Desc: "Band", StartPos: 26369696, EndPos: 26404973, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99F9 = genome.Band{Band: "99F9", Desc: "Band", StartPos: 26404973, EndPos: 26407962, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99F10 = genome.Band{Band: "99F10", Desc: "Band", StartPos: 26407962, EndPos: 26420160, Giemsa: "n/a", Chr: &Chr3R} Chr3R_99F11 = genome.Band{Band: "99F11", Desc: "Band", StartPos: 26420160, EndPos: 26423149, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100A1 = genome.Band{Band: "100A1", Desc: "Band", StartPos: 26423149, EndPos: 26482701, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100A2 = genome.Band{Band: "100A2", Desc: "Band", StartPos: 26482701, EndPos: 26542253, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100A3 = genome.Band{Band: "100A3", Desc: "Band", StartPos: 26542253, EndPos: 26578725, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100A4 = genome.Band{Band: "100A4", Desc: "Band", StartPos: 26578725, EndPos: 26592119, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100A5 = genome.Band{Band: "100A5", Desc: "Band", StartPos: 26592119, EndPos: 26634331, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100A6 = genome.Band{Band: "100A6", Desc: "Band", StartPos: 26634331, EndPos: 26709599, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100A7 = genome.Band{Band: "100A7", Desc: "Band", StartPos: 26709599, EndPos: 26753950, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100B1 = genome.Band{Band: "100B1", Desc: "Band", StartPos: 26753950, EndPos: 26880606, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100B2 = genome.Band{Band: "100B2", Desc: "Band", StartPos: 26880606, EndPos: 26934292, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100B3 = genome.Band{Band: "100B3", Desc: "Band", StartPos: 26934292, EndPos: 26957430, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100B4 = genome.Band{Band: "100B4", Desc: "Band", StartPos: 26957430, EndPos: 26993672, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100B5 = genome.Band{Band: "100B5", Desc: "Band", StartPos: 26993672, EndPos: 27029915, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100B6 = genome.Band{Band: "100B6", Desc: "Band", StartPos: 27029915, EndPos: 27040038, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100B7 = genome.Band{Band: "100B7", Desc: "Band", StartPos: 27040038, EndPos: 27045732, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100B8 = genome.Band{Band: "100B8", Desc: "Band", StartPos: 27045732, EndPos: 27081974, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100B9 = genome.Band{Band: "100B9", Desc: "Band", StartPos: 27081974, EndPos: 27100773, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100C1 = genome.Band{Band: "100C1", Desc: "Band", StartPos: 27100773, EndPos: 27170999, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100C2 = genome.Band{Band: "100C2", Desc: "Band", StartPos: 27170999, EndPos: 27213788, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100C3 = genome.Band{Band: "100C3", Desc: "Band", StartPos: 27213788, EndPos: 27281370, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100C4 = genome.Band{Band: "100C4", Desc: "Band", StartPos: 27281370, EndPos: 27374798, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100C5 = genome.Band{Band: "100C5", Desc: "Band", StartPos: 27374798, EndPos: 27379585, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100C6 = genome.Band{Band: "100C6", Desc: "Band", StartPos: 27379585, EndPos: 27410217, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100C7 = genome.Band{Band: "100C7", Desc: "Band", StartPos: 27410217, EndPos: 27439501, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100D1 = genome.Band{Band: "100D1", Desc: "Band", StartPos: 27439501, EndPos: 27563556, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100D2 = genome.Band{Band: "100D2", Desc: "Band", StartPos: 27563556, EndPos: 27663447, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100D3 = genome.Band{Band: "100D3", Desc: "Band", StartPos: 27663447, EndPos: 27703305, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100D4 = genome.Band{Band: "100D4", Desc: "Band", StartPos: 27703305, EndPos: 27743162, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100E1 = genome.Band{Band: "100E1", Desc: "Band", StartPos: 27743162, EndPos: 27831096, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100E2 = genome.Band{Band: "100E2", Desc: "Band", StartPos: 27831096, EndPos: 27858996, Giemsa: "n/a", Chr: &Chr3R} Chr3R_100E3 = genome.Band{Band: "100E3", Desc: "Band", StartPos: 27858996, EndPos: 27905053, Giemsa: "n/a", Chr: &Chr3R} Chr4_101F1 = genome.Band{Band: "101F1", Desc: "Band", StartPos: 69668, EndPos: 90134, Giemsa: "n/a", Chr: &Chr4} Chr4_102A1 = genome.Band{Band: "102A1", Desc: "Band", StartPos: 90134, EndPos: 128922, Giemsa: "n/a", Chr: &Chr4} Chr4_102A2 = genome.Band{Band: "102A2", Desc: "Band", StartPos: 128922, EndPos: 130909, Giemsa: "n/a", Chr: &Chr4} Chr4_102A3 = genome.Band{Band: "102A3", Desc: "Band", StartPos: 130909, EndPos: 155152, Giemsa: "n/a", Chr: &Chr4} Chr4_102A4 = genome.Band{Band: "102A4", Desc: "Band", StartPos: 155152, EndPos: 193939, Giemsa: "n/a", Chr: &Chr4} Chr4_102A5 = genome.Band{Band: "102A5", Desc: "Band", StartPos: 193939, EndPos: 195926, Giemsa: "n/a", Chr: &Chr4} Chr4_102A6 = genome.Band{Band: "102A6", Desc: "Band", StartPos: 195926, EndPos: 216274, Giemsa: "n/a", Chr: &Chr4} Chr4_102A7 = genome.Band{Band: "102A7", Desc: "Band", StartPos: 216274, EndPos: 228991, Giemsa: "n/a", Chr: &Chr4} Chr4_102A8 = genome.Band{Band: "102A8", Desc: "Band", StartPos: 228991, EndPos: 245524, Giemsa: "n/a", Chr: &Chr4} Chr4_102B1 = genome.Band{Band: "102B1", Desc: "Band", StartPos: 245524, EndPos: 295757, Giemsa: "n/a", Chr: &Chr4} Chr4_102B2 = genome.Band{Band: "102B2", Desc: "Band", StartPos: 295757, EndPos: 297744, Giemsa: "n/a", Chr: &Chr4} Chr4_102B3 = genome.Band{Band: "102B3", Desc: "Band", StartPos: 297744, EndPos: 340347, Giemsa: "n/a", Chr: &Chr4} Chr4_102B4 = genome.Band{Band: "102B4", Desc: "Band", StartPos: 340347, EndPos: 342334, Giemsa: "n/a", Chr: &Chr4} Chr4_102B5 = genome.Band{Band: "102B5", Desc: "Band", StartPos: 342334, EndPos: 381917, Giemsa: "n/a", Chr: &Chr4} Chr4_102B6 = genome.Band{Band: "102B6", Desc: "Band", StartPos: 381917, EndPos: 406159, Giemsa: "n/a", Chr: &Chr4} Chr4_102B7 = genome.Band{Band: "102B7", Desc: "Band", StartPos: 406159, EndPos: 434217, Giemsa: "n/a", Chr: &Chr4} Chr4_102B8 = genome.Band{Band: "102B8", Desc: "Band", StartPos: 434217, EndPos: 462274, Giemsa: "n/a", Chr: &Chr4} Chr4_102C1 = genome.Band{Band: "102C1", Desc: "Band", StartPos: 462274, EndPos: 516402, Giemsa: "n/a", Chr: &Chr4} Chr4_102C2 = genome.Band{Band: "102C2", Desc: "Band", StartPos: 516402, EndPos: 518389, Giemsa: "n/a", Chr: &Chr4} Chr4_102C3 = genome.Band{Band: "102C3", Desc: "Band", StartPos: 518389, EndPos: 531107, Giemsa: "n/a", Chr: &Chr4} Chr4_102C4 = genome.Band{Band: "102C4", Desc: "Band", StartPos: 531107, EndPos: 562979, Giemsa: "n/a", Chr: &Chr4} Chr4_102C5 = genome.Band{Band: "102C5", Desc: "Band", StartPos: 562979, EndPos: 594852, Giemsa: "n/a", Chr: &Chr4} Chr4_102C6 = genome.Band{Band: "102C6", Desc: "Band", StartPos: 594852, EndPos: 619094, Giemsa: "n/a", Chr: &Chr4} Chr4_102D1 = genome.Band{Band: "102D1", Desc: "Band", StartPos: 619094, EndPos: 669328, Giemsa: "n/a", Chr: &Chr4} Chr4_102D2 = genome.Band{Band: "102D2", Desc: "Band", StartPos: 669328, EndPos: 671315, Giemsa: "n/a", Chr: &Chr4} Chr4_102D3 = genome.Band{Band: "102D3", Desc: "Band", StartPos: 671315, EndPos: 684032, Giemsa: "n/a", Chr: &Chr4} Chr4_102D4 = genome.Band{Band: "102D4", Desc: "Band", StartPos: 684032, EndPos: 727430, Giemsa: "n/a", Chr: &Chr4} Chr4_102D5 = genome.Band{Band: "102D5", Desc: "Band", StartPos: 727430, EndPos: 755487, Giemsa: "n/a", Chr: &Chr4} Chr4_102D6 = genome.Band{Band: "102D6", Desc: "Band", StartPos: 755487, EndPos: 787360, Giemsa: "n/a", Chr: &Chr4} Chr4_102E1 = genome.Band{Band: "102E1", Desc: "Band", StartPos: 787360, EndPos: 837593, Giemsa: "n/a", Chr: &Chr4} Chr4_102E2 = genome.Band{Band: "102E2", Desc: "Band", StartPos: 837593, EndPos: 839581, Giemsa: "n/a", Chr: &Chr4} Chr4_102E3 = genome.Band{Band: "102E3", Desc: "Band", StartPos: 839581, EndPos: 870658, Giemsa: "n/a", Chr: &Chr4} Chr4_102E4 = genome.Band{Band: "102E4", Desc: "Band", StartPos: 870658, EndPos: 872645, Giemsa: "n/a", Chr: &Chr4} Chr4_102E5 = genome.Band{Band: "102E5", Desc: "Band", StartPos: 872645, EndPos: 907539, Giemsa: "n/a", Chr: &Chr4} Chr4_102E6 = genome.Band{Band: "102E6", Desc: "Band", StartPos: 907539, EndPos: 909526, Giemsa: "n/a", Chr: &Chr4} Chr4_102E7 = genome.Band{Band: "102E7", Desc: "Band", StartPos: 909526, EndPos: 918428, Giemsa: "n/a", Chr: &Chr4} Chr4_102F1 = genome.Band{Band: "102F1", Desc: "Band", StartPos: 918428, EndPos: 961031, Giemsa: "n/a", Chr: &Chr4} Chr4_102F2 = genome.Band{Band: "102F2", Desc: "Band", StartPos: 961031, EndPos: 963018, Giemsa: "n/a", Chr: &Chr4} Chr4_102F3 = genome.Band{Band: "102F3", Desc: "Band", StartPos: 963018, EndPos: 979550, Giemsa: "n/a", Chr: &Chr4} Chr4_102F4 = genome.Band{Band: "102F4", Desc: "Band", StartPos: 979550, EndPos: 1011423, Giemsa: "n/a", Chr: &Chr4} Chr4_102F5 = genome.Band{Band: "102F5", Desc: "Band", StartPos: 1011423, EndPos: 1043296, Giemsa: "n/a", Chr: &Chr4} Chr4_102F6 = genome.Band{Band: "102F6", Desc: "Band", StartPos: 1043296, EndPos: 1063643, Giemsa: "n/a", Chr: &Chr4} Chr4_102F7 = genome.Band{Band: "102F7", Desc: "Band", StartPos: 1063643, EndPos: 1083991, Giemsa: "n/a", Chr: &Chr4} Chr4_102F8 = genome.Band{Band: "102F8", Desc: "Band", StartPos: 1083991, EndPos: 1351857, Giemsa: "n/a", Chr: &Chr4} ChrX_1A1 = genome.Band{Band: "1A1", Desc: "Band", StartPos: 1, EndPos: 204163, Giemsa: "n/a", Chr: &ChrX} ChrX_1A2 = genome.Band{Band: "1A2", Desc: "Band", StartPos: 204163, EndPos: 218212, Giemsa: "n/a", Chr: &ChrX} ChrX_1A3 = genome.Band{Band: "1A3", Desc: "Band", StartPos: 218212, EndPos: 232261, Giemsa: "n/a", Chr: &ChrX} ChrX_1A4 = genome.Band{Band: "1A4", Desc: "Band", StartPos: 232261, EndPos: 243676, Giemsa: "n/a", Chr: &ChrX} ChrX_1A5 = genome.Band{Band: "1A5", Desc: "Band", StartPos: 243676, EndPos: 260413, Giemsa: "n/a", Chr: &ChrX} ChrX_1A6 = genome.Band{Band: "1A6", Desc: "Band", StartPos: 260413, EndPos: 274462, Giemsa: "n/a", Chr: &ChrX} ChrX_1A7 = genome.Band{Band: "1A7", Desc: "Band", StartPos: 274462, EndPos: 285877, Giemsa: "n/a", Chr: &ChrX} ChrX_1A8 = genome.Band{Band: "1A8", Desc: "Band", StartPos: 285877, EndPos: 302615, Giemsa: "n/a", Chr: &ChrX} ChrX_1B1 = genome.Band{Band: "1B1", Desc: "Band", StartPos: 302615, EndPos: 321987, Giemsa: "n/a", Chr: &ChrX} ChrX_1B2 = genome.Band{Band: "1B2", Desc: "Band", StartPos: 321987, EndPos: 341359, Giemsa: "n/a", Chr: &ChrX} ChrX_1B3 = genome.Band{Band: "1B3", Desc: "Band", StartPos: 341359, EndPos: 360731, Giemsa: "n/a", Chr: &ChrX} ChrX_1B4 = genome.Band{Band: "1B4", Desc: "Band", StartPos: 360731, EndPos: 380103, Giemsa: "n/a", Chr: &ChrX} ChrX_1B5 = genome.Band{Band: "1B5", Desc: "Band", StartPos: 380103, EndPos: 391518, Giemsa: "n/a", Chr: &ChrX} ChrX_1B6 = genome.Band{Band: "1B6", Desc: "Band", StartPos: 391518, EndPos: 394975, Giemsa: "n/a", Chr: &ChrX} ChrX_1B7 = genome.Band{Band: "1B7", Desc: "Band", StartPos: 394975, EndPos: 413798, Giemsa: "n/a", Chr: &ChrX} ChrX_1B8 = genome.Band{Band: "1B8", Desc: "Band", StartPos: 413798, EndPos: 423812, Giemsa: "n/a", Chr: &ChrX} ChrX_1B9 = genome.Band{Band: "1B9", Desc: "Band", StartPos: 423812, EndPos: 458299, Giemsa: "n/a", Chr: &ChrX} ChrX_1B10 = genome.Band{Band: "1B10", Desc: "Band", StartPos: 458299, EndPos: 492786, Giemsa: "n/a", Chr: &ChrX} ChrX_1B11 = genome.Band{Band: "1B11", Desc: "Band", StartPos: 492786, EndPos: 508417, Giemsa: "n/a", Chr: &ChrX} ChrX_1B12 = genome.Band{Band: "1B12", Desc: "Band", StartPos: 508417, EndPos: 528738, Giemsa: "n/a", Chr: &ChrX} ChrX_1B13 = genome.Band{Band: "1B13", Desc: "Band", StartPos: 528738, EndPos: 549060, Giemsa: "n/a", Chr: &ChrX} ChrX_1B14 = genome.Band{Band: "1B14", Desc: "Band", StartPos: 549060, EndPos: 554516, Giemsa: "n/a", Chr: &ChrX} ChrX_1C1 = genome.Band{Band: "1C1", Desc: "Band", StartPos: 554516, EndPos: 572185, Giemsa: "n/a", Chr: &ChrX} ChrX_1C2 = genome.Band{Band: "1C2", Desc: "Band", StartPos: 572185, EndPos: 587452, Giemsa: "n/a", Chr: &ChrX} ChrX_1C3 = genome.Band{Band: "1C3", Desc: "Band", StartPos: 587452, EndPos: 647984, Giemsa: "n/a", Chr: &ChrX} ChrX_1C4 = genome.Band{Band: "1C4", Desc: "Band", StartPos: 647984, EndPos: 686556, Giemsa: "n/a", Chr: &ChrX} ChrX_1C5 = genome.Band{Band: "1C5", Desc: "Band", StartPos: 686556, EndPos: 725129, Giemsa: "n/a", Chr: &ChrX} ChrX_1D1 = genome.Band{Band: "1D1", Desc: "Band", StartPos: 725129, EndPos: 763701, Giemsa: "n/a", Chr: &ChrX} ChrX_1D2 = genome.Band{Band: "1D2", Desc: "Band", StartPos: 763701, EndPos: 840827, Giemsa: "n/a", Chr: &ChrX} ChrX_1D3 = genome.Band{Band: "1D3", Desc: "Band", StartPos: 840827, EndPos: 856758, Giemsa: "n/a", Chr: &ChrX} ChrX_1D4 = genome.Band{Band: "1D4", Desc: "Band", StartPos: 856758, EndPos: 885080, Giemsa: "n/a", Chr: &ChrX} ChrX_1E1 = genome.Band{Band: "1E1", Desc: "Band", StartPos: 885080, EndPos: 971816, Giemsa: "n/a", Chr: &ChrX} ChrX_1E2 = genome.Band{Band: "1E2", Desc: "Band", StartPos: 971816, EndPos: 978138, Giemsa: "n/a", Chr: &ChrX} ChrX_1E3 = genome.Band{Band: "1E3", Desc: "Band", StartPos: 978138, EndPos: 1079540, Giemsa: "n/a", Chr: &ChrX} ChrX_1E4 = genome.Band{Band: "1E4", Desc: "Band", StartPos: 1079540, EndPos: 1125172, Giemsa: "n/a", Chr: &ChrX} ChrX_1E5 = genome.Band{Band: "1E5", Desc: "Band", StartPos: 1125172, EndPos: 1148842, Giemsa: "n/a", Chr: &ChrX} ChrX_1F1 = genome.Band{Band: "1F1", Desc: "Band", StartPos: 1148842, EndPos: 1183550, Giemsa: "n/a", Chr: &ChrX} ChrX_1F2 = genome.Band{Band: "1F2", Desc: "Band", StartPos: 1183550, EndPos: 1214897, Giemsa: "n/a", Chr: &ChrX} ChrX_1F3 = genome.Band{Band: "1F3", Desc: "Band", StartPos: 1214897, EndPos: 1236274, Giemsa: "n/a", Chr: &ChrX} ChrX_1F4 = genome.Band{Band: "1F4", Desc: "Band", StartPos: 1236274, EndPos: 1262585, Giemsa: "n/a", Chr: &ChrX} ChrX_2A1 = genome.Band{Band: "2A1", Desc: "Band", StartPos: 1262585, EndPos: 1293932, Giemsa: "n/a", Chr: &ChrX} ChrX_2A2 = genome.Band{Band: "2A2", Desc: "Band", StartPos: 1293932, EndPos: 1325984, Giemsa: "n/a", Chr: &ChrX} ChrX_2A3 = genome.Band{Band: "2A3", Desc: "Band", StartPos: 1325984, EndPos: 1347842, Giemsa: "n/a", Chr: &ChrX} ChrX_2A4 = genome.Band{Band: "2A4", Desc: "Band", StartPos: 1347842, EndPos: 1369701, Giemsa: "n/a", Chr: &ChrX} ChrX_2B1 = genome.Band{Band: "2B1", Desc: "Band", StartPos: 1369701, EndPos: 1416886, Giemsa: "n/a", Chr: &ChrX} ChrX_2B2 = genome.Band{Band: "2B2", Desc: "Band", StartPos: 1416886, EndPos: 1464070, Giemsa: "n/a", Chr: &ChrX} ChrX_2B3 = genome.Band{Band: "2B3", Desc: "Band", StartPos: 1464070, EndPos: 1511255, Giemsa: "n/a", Chr: &ChrX} ChrX_2B4 = genome.Band{Band: "2B4", Desc: "Band", StartPos: 1511255, EndPos: 1555014, Giemsa: "n/a", Chr: &ChrX} ChrX_2B5 = genome.Band{Band: "2B5", Desc: "Band", StartPos: 1555014, EndPos: 1565930, Giemsa: "n/a", Chr: &ChrX} ChrX_2B6 = genome.Band{Band: "2B6", Desc: "Band", StartPos: 1565930, EndPos: 1576845, Giemsa: "n/a", Chr: &ChrX} ChrX_2B7 = genome.Band{Band: "2B7", Desc: "Band", StartPos: 1576845, EndPos: 1615926, Giemsa: "n/a", Chr: &ChrX} ChrX_2B8 = genome.Band{Band: "2B8", Desc: "Band", StartPos: 1615926, EndPos: 1655007, Giemsa: "n/a", Chr: &ChrX} ChrX_2B9 = genome.Band{Band: "2B9", Desc: "Band", StartPos: 1655007, EndPos: 1694089, Giemsa: "n/a", Chr: &ChrX} ChrX_2B10 = genome.Band{Band: "2B10", Desc: "Band", StartPos: 1694089, EndPos: 1728492, Giemsa: "n/a", Chr: &ChrX} ChrX_2B11 = genome.Band{Band: "2B11", Desc: "Band", StartPos: 1728492, EndPos: 1744085, Giemsa: "n/a", Chr: &ChrX} ChrX_2B12 = genome.Band{Band: "2B12", Desc: "Band", StartPos: 1744085, EndPos: 1755001, Giemsa: "n/a", Chr: &ChrX} ChrX_2B13 = genome.Band{Band: "2B13", Desc: "Band", StartPos: 1755001, EndPos: 1770594, Giemsa: "n/a", Chr: &ChrX} ChrX_2B14 = genome.Band{Band: "2B14", Desc: "Band", StartPos: 1770594, EndPos: 1795223, Giemsa: "n/a", Chr: &ChrX} ChrX_2B15 = genome.Band{Band: "2B15", Desc: "Band", StartPos: 1795223, EndPos: 1812463, Giemsa: "n/a", Chr: &ChrX} ChrX_2B16 = genome.Band{Band: "2B16", Desc: "Band", StartPos: 1812463, EndPos: 1837092, Giemsa: "n/a", Chr: &ChrX} ChrX_2B17 = genome.Band{Band: "2B17", Desc: "Band", StartPos: 1837092, EndPos: 1861721, Giemsa: "n/a", Chr: &ChrX} ChrX_2B18 = genome.Band{Band: "2B18", Desc: "Band", StartPos: 1861721, EndPos: 1866139, Giemsa: "n/a", Chr: &ChrX} ChrX_2C1 = genome.Band{Band: "2C1", Desc: "Band", StartPos: 1866139, EndPos: 1904060, Giemsa: "n/a", Chr: &ChrX} ChrX_2C2 = genome.Band{Band: "2C2", Desc: "Band", StartPos: 1904060, EndPos: 1913154, Giemsa: "n/a", Chr: &ChrX} ChrX_2C3 = genome.Band{Band: "2C3", Desc: "Band", StartPos: 1913154, EndPos: 1915695, Giemsa: "n/a", Chr: &ChrX} ChrX_2C4 = genome.Band{Band: "2C4", Desc: "Band", StartPos: 1915695, EndPos: 1922612, Giemsa: "n/a", Chr: &ChrX} ChrX_2C5 = genome.Band{Band: "2C5", Desc: "Band", StartPos: 1922612, EndPos: 1929529, Giemsa: "n/a", Chr: &ChrX} ChrX_2C6 = genome.Band{Band: "2C6", Desc: "Band", StartPos: 1929529, EndPos: 1932069, Giemsa: "n/a", Chr: &ChrX} ChrX_2C7 = genome.Band{Band: "2C7", Desc: "Band", StartPos: 1932069, EndPos: 1940075, Giemsa: "n/a", Chr: &ChrX} ChrX_2C8 = genome.Band{Band: "2C8", Desc: "Band", StartPos: 1940075, EndPos: 1959517, Giemsa: "n/a", Chr: &ChrX} ChrX_2C9 = genome.Band{Band: "2C9", Desc: "Band", StartPos: 1959517, EndPos: 1965685, Giemsa: "n/a", Chr: &ChrX} ChrX_2C10 = genome.Band{Band: "2C10", Desc: "Band", StartPos: 1965685, EndPos: 1977141, Giemsa: "n/a", Chr: &ChrX} ChrX_2D1 = genome.Band{Band: "2D1", Desc: "Band", StartPos: 1977141, EndPos: 1999226, Giemsa: "n/a", Chr: &ChrX} ChrX_2D2 = genome.Band{Band: "2D2", Desc: "Band", StartPos: 1999226, EndPos: 2021312, Giemsa: "n/a", Chr: &ChrX} ChrX_2D3 = genome.Band{Band: "2D3", Desc: "Band", StartPos: 2021312, EndPos: 2032767, Giemsa: "n/a", Chr: &ChrX} ChrX_2D4 = genome.Band{Band: "2D4", Desc: "Band", StartPos: 2032767, EndPos: 2044223, Giemsa: "n/a", Chr: &ChrX} ChrX_2D5 = genome.Band{Band: "2D5", Desc: "Band", StartPos: 2044223, EndPos: 2055679, Giemsa: "n/a", Chr: &ChrX} ChrX_2D6 = genome.Band{Band: "2D6", Desc: "Band", StartPos: 2055679, EndPos: 2067135, Giemsa: "n/a", Chr: &ChrX} ChrX_2E1 = genome.Band{Band: "2E1", Desc: "Band", StartPos: 2067135, EndPos: 2089220, Giemsa: "n/a", Chr: &ChrX} ChrX_2E2 = genome.Band{Band: "2E2", Desc: "Band", StartPos: 2089220, EndPos: 2111305, Giemsa: "n/a", Chr: &ChrX} ChrX_2E3 = genome.Band{Band: "2E3", Desc: "Band", StartPos: 2111305, EndPos: 2117474, Giemsa: "n/a", Chr: &ChrX} ChrX_2F1 = genome.Band{Band: "2F1", Desc: "Band", StartPos: 2117474, EndPos: 2139559, Giemsa: "n/a", Chr: &ChrX} ChrX_2F2 = genome.Band{Band: "2F2", Desc: "Band", StartPos: 2139559, EndPos: 2160094, Giemsa: "n/a", Chr: &ChrX} ChrX_2F3 = genome.Band{Band: "2F3", Desc: "Band", StartPos: 2160094, EndPos: 2165829, Giemsa: "n/a", Chr: &ChrX} ChrX_2F4 = genome.Band{Band: "2F4", Desc: "Band", StartPos: 2165829, EndPos: 2186364, Giemsa: "n/a", Chr: &ChrX} ChrX_2F5 = genome.Band{Band: "2F5", Desc: "Band", StartPos: 2186364, EndPos: 2215133, Giemsa: "n/a", Chr: &ChrX} ChrX_2F6 = genome.Band{Band: "2F6", Desc: "Band", StartPos: 2215133, EndPos: 2222390, Giemsa: "n/a", Chr: &ChrX} ChrX_3A1 = genome.Band{Band: "3A1", Desc: "Band", StartPos: 2222390, EndPos: 2248375, Giemsa: "n/a", Chr: &ChrX} ChrX_3A2 = genome.Band{Band: "3A2", Desc: "Band", StartPos: 2248375, EndPos: 2320675, Giemsa: "n/a", Chr: &ChrX} ChrX_3A3 = genome.Band{Band: "3A3", Desc: "Band", StartPos: 2320675, EndPos: 2384321, Giemsa: "n/a", Chr: &ChrX} ChrX_3A4 = genome.Band{Band: "3A4", Desc: "Band", StartPos: 2384321, EndPos: 2449353, Giemsa: "n/a", Chr: &ChrX} ChrX_3A5 = genome.Band{Band: "3A5", Desc: "Band", StartPos: 2449353, EndPos: 2460959, Giemsa: "n/a", Chr: &ChrX} ChrX_3A6 = genome.Band{Band: "3A6", Desc: "Band", StartPos: 2460959, EndPos: 2500335, Giemsa: "n/a", Chr: &ChrX} ChrX_3A7 = genome.Band{Band: "3A7", Desc: "Band", StartPos: 2500335, EndPos: 2515191, Giemsa: "n/a", Chr: &ChrX} ChrX_3A8 = genome.Band{Band: "3A8", Desc: "Band", StartPos: 2515191, EndPos: 2538961, Giemsa: "n/a", Chr: &ChrX} ChrX_3A9 = genome.Band{Band: "3A9", Desc: "Band", StartPos: 2538961, EndPos: 2552604, Giemsa: "n/a", Chr: &ChrX} ChrX_3A10 = genome.Band{Band: "3A10", Desc: "Band", StartPos: 2552604, EndPos: 2560267, Giemsa: "n/a", Chr: &ChrX} ChrX_3B1 = genome.Band{Band: "3B1", Desc: "Band", StartPos: 2560267, EndPos: 2581132, Giemsa: "n/a", Chr: &ChrX} ChrX_3B2 = genome.Band{Band: "3B2", Desc: "Band", StartPos: 2581132, EndPos: 2604986, Giemsa: "n/a", Chr: &ChrX} ChrX_3B3 = genome.Band{Band: "3B3", Desc: "Band", StartPos: 2604986, EndPos: 2628287, Giemsa: "n/a", Chr: &ChrX} ChrX_3B4 = genome.Band{Band: "3B4", Desc: "Band", StartPos: 2628287, EndPos: 2647218, Giemsa: "n/a", Chr: &ChrX} ChrX_3B5 = genome.Band{Band: "3B5", Desc: "Band", StartPos: 2647218, EndPos: 2671338, Giemsa: "n/a", Chr: &ChrX} ChrX_3B6 = genome.Band{Band: "3B6", Desc: "Band", StartPos: 2671338, EndPos: 2698188, Giemsa: "n/a", Chr: &ChrX} ChrX_3C1 = genome.Band{Band: "3C1", Desc: "Band", StartPos: 2698188, EndPos: 2739055, Giemsa: "n/a", Chr: &ChrX} ChrX_3C2 = genome.Band{Band: "3C2", Desc: "Band", StartPos: 2739055, EndPos: 2801947, Giemsa: "n/a", Chr: &ChrX} ChrX_3C3 = genome.Band{Band: "3C3", Desc: "Band", StartPos: 2801947, EndPos: 2864840, Giemsa: "n/a", Chr: &ChrX} ChrX_3C4 = genome.Band{Band: "3C4", Desc: "Band", StartPos: 2864840, EndPos: 2870574, Giemsa: "n/a", Chr: &ChrX} ChrX_3C5 = genome.Band{Band: "3C5", Desc: "Band", StartPos: 2870574, EndPos: 2933467, Giemsa: "n/a", Chr: &ChrX} ChrX_3C6 = genome.Band{Band: "3C6", Desc: "Band", StartPos: 2933467, EndPos: 2996360, Giemsa: "n/a", Chr: &ChrX} ChrX_3C7 = genome.Band{Band: "3C7", Desc: "Band", StartPos: 2996360, EndPos: 3037227, Giemsa: "n/a", Chr: &ChrX} ChrX_3C8 = genome.Band{Band: "3C8", Desc: "Band", StartPos: 3037227, EndPos: 3047421, Giemsa: "n/a", Chr: &ChrX} ChrX_3C9 = genome.Band{Band: "3C9", Desc: "Band", StartPos: 3047421, EndPos: 3070721, Giemsa: "n/a", Chr: &ChrX} ChrX_3C10 = genome.Band{Band: "3C10", Desc: "Band", StartPos: 3070721, EndPos: 3149107, Giemsa: "n/a", Chr: &ChrX} ChrX_3C11 = genome.Band{Band: "3C11", Desc: "Band", StartPos: 3149107, EndPos: 3183401, Giemsa: "n/a", Chr: &ChrX} ChrX_3C12 = genome.Band{Band: "3C12", Desc: "Band", StartPos: 3183401, EndPos: 3206298, Giemsa: "n/a", Chr: &ChrX} ChrX_3D1 = genome.Band{Band: "3D1", Desc: "Band", StartPos: 3206298, EndPos: 3248820, Giemsa: "n/a", Chr: &ChrX} ChrX_3D2 = genome.Band{Band: "3D2", Desc: "Band", StartPos: 3248820, EndPos: 3301155, Giemsa: "n/a", Chr: &ChrX} ChrX_3D3 = genome.Band{Band: "3D3", Desc: "Band", StartPos: 3301155, EndPos: 3353489, Giemsa: "n/a", Chr: &ChrX} ChrX_3D4 = genome.Band{Band: "3D4", Desc: "Band", StartPos: 3353489, EndPos: 3405824, Giemsa: "n/a", Chr: &ChrX} ChrX_3D5 = genome.Band{Band: "3D5", Desc: "Band", StartPos: 3405824, EndPos: 3448347, Giemsa: "n/a", Chr: &ChrX} ChrX_3D6 = genome.Band{Band: "3D6", Desc: "Band", StartPos: 3448347, EndPos: 3490869, Giemsa: "n/a", Chr: &ChrX} ChrX_3D7 = genome.Band{Band: "3D7", Desc: "Band", StartPos: 3490869, EndPos: 3508245, Giemsa: "n/a", Chr: &ChrX} ChrX_3E1 = genome.Band{Band: "3E1", Desc: "Band", StartPos: 3508245, EndPos: 3560580, Giemsa: "n/a", Chr: &ChrX} ChrX_3E2 = genome.Band{Band: "3E2", Desc: "Band", StartPos: 3560580, EndPos: 3569522, Giemsa: "n/a", Chr: &ChrX} ChrX_3E3 = genome.Band{Band: "3E3", Desc: "Band", StartPos: 3569522, EndPos: 3571093, Giemsa: "n/a", Chr: &ChrX} ChrX_3E4 = genome.Band{Band: "3E4", Desc: "Band", StartPos: 3571093, EndPos: 3585638, Giemsa: "n/a", Chr: &ChrX} ChrX_3E5 = genome.Band{Band: "3E5", Desc: "Band", StartPos: 3585638, EndPos: 3606417, Giemsa: "n/a", Chr: &ChrX} ChrX_3E6 = genome.Band{Band: "3E6", Desc: "Band", StartPos: 3606417, EndPos: 3627196, Giemsa: "n/a", Chr: &ChrX} ChrX_3E7 = genome.Band{Band: "3E7", Desc: "Band", StartPos: 3627196, EndPos: 3645969, Giemsa: "n/a", Chr: &ChrX} ChrX_3E8 = genome.Band{Band: "3E8", Desc: "Band", StartPos: 3645969, EndPos: 3659110, Giemsa: "n/a", Chr: &ChrX} ChrX_3F1 = genome.Band{Band: "3F1", Desc: "Band", StartPos: 3659110, EndPos: 3689147, Giemsa: "n/a", Chr: &ChrX} ChrX_3F2 = genome.Band{Band: "3F2", Desc: "Band", StartPos: 3689147, EndPos: 3728148, Giemsa: "n/a", Chr: &ChrX} ChrX_3F3 = genome.Band{Band: "3F3", Desc: "Band", StartPos: 3728148, EndPos: 3759836, Giemsa: "n/a", Chr: &ChrX} ChrX_3F4 = genome.Band{Band: "3F4", Desc: "Band", StartPos: 3759836, EndPos: 3793525, Giemsa: "n/a", Chr: &ChrX} ChrX_3F5 = genome.Band{Band: "3F5", Desc: "Band", StartPos: 3793525, EndPos: 3796215, Giemsa: "n/a", Chr: &ChrX} ChrX_3F6 = genome.Band{Band: "3F6", Desc: "Band", StartPos: 3796215, EndPos: 3808267, Giemsa: "n/a", Chr: &ChrX} ChrX_3F7 = genome.Band{Band: "3F7", Desc: "Band", StartPos: 3808267, EndPos: 3834738, Giemsa: "n/a", Chr: &ChrX} ChrX_3F8 = genome.Band{Band: "3F8", Desc: "Band", StartPos: 3834738, EndPos: 3837428, Giemsa: "n/a", Chr: &ChrX} ChrX_3F9 = genome.Band{Band: "3F9", Desc: "Band", StartPos: 3837428, EndPos: 3849479, Giemsa: "n/a", Chr: &ChrX} ChrX_4A1 = genome.Band{Band: "4A1", Desc: "Band", StartPos: 3849479, EndPos: 3897793, Giemsa: "n/a", Chr: &ChrX} ChrX_4A2 = genome.Band{Band: "4A2", Desc: "Band", StartPos: 3897793, EndPos: 3946107, Giemsa: "n/a", Chr: &ChrX} ChrX_4A3 = genome.Band{Band: "4A3", Desc: "Band", StartPos: 3946107, EndPos: 3963324, Giemsa: "n/a", Chr: &ChrX} ChrX_4A4 = genome.Band{Band: "4A4", Desc: "Band", StartPos: 3963324, EndPos: 3980540, Giemsa: "n/a", Chr: &ChrX} ChrX_4A5 = genome.Band{Band: "4A5", Desc: "Band", StartPos: 3980540, EndPos: 4007011, Giemsa: "n/a", Chr: &ChrX} ChrX_4A6 = genome.Band{Band: "4A6", Desc: "Band", StartPos: 4007011, EndPos: 4009701, Giemsa: "n/a", Chr: &ChrX} ChrX_4B1 = genome.Band{Band: "4B1", Desc: "Band", StartPos: 4009701, EndPos: 4042520, Giemsa: "n/a", Chr: &ChrX} ChrX_4B2 = genome.Band{Band: "4B2", Desc: "Band", StartPos: 4042520, EndPos: 4080504, Giemsa: "n/a", Chr: &ChrX} ChrX_4B3 = genome.Band{Band: "4B3", Desc: "Band", StartPos: 4080504, EndPos: 4128818, Giemsa: "n/a", Chr: &ChrX} ChrX_4B4 = genome.Band{Band: "4B4", Desc: "Band", StartPos: 4128818, EndPos: 4182405, Giemsa: "n/a", Chr: &ChrX} ChrX_4B5 = genome.Band{Band: "4B5", Desc: "Band", StartPos: 4182405, EndPos: 4194456, Giemsa: "n/a", Chr: &ChrX} ChrX_4B6 = genome.Band{Band: "4B6", Desc: "Band", StartPos: 4194456, EndPos: 4227276, Giemsa: "n/a", Chr: &ChrX} ChrX_4C1 = genome.Band{Band: "4C1", Desc: "Band", StartPos: 4227276, EndPos: 4260095, Giemsa: "n/a", Chr: &ChrX} ChrX_4C2 = genome.Band{Band: "4C2", Desc: "Band", StartPos: 4260095, EndPos: 4292914, Giemsa: "n/a", Chr: &ChrX} ChrX_4C3 = genome.Band{Band: "4C3", Desc: "Band", StartPos: 4292914, EndPos: 4341228, Giemsa: "n/a", Chr: &ChrX} ChrX_4C4 = genome.Band{Band: "4C4", Desc: "Band", StartPos: 4341228, EndPos: 4394814, Giemsa: "n/a", Chr: &ChrX} ChrX_4C5 = genome.Band{Band: "4C5", Desc: "Band", StartPos: 4394814, EndPos: 4412031, Giemsa: "n/a", Chr: &ChrX} ChrX_4C6 = genome.Band{Band: "4C6", Desc: "Band", StartPos: 4412031, EndPos: 4424083, Giemsa: "n/a", Chr: &ChrX} ChrX_4C7 = genome.Band{Band: "4C7", Desc: "Band", StartPos: 4424083, EndPos: 4456902, Giemsa: "n/a", Chr: &ChrX} ChrX_4C8 = genome.Band{Band: "4C8", Desc: "Band", StartPos: 4456902, EndPos: 4489721, Giemsa: "n/a", Chr: &ChrX} ChrX_4C9 = genome.Band{Band: "4C9", Desc: "Band", StartPos: 4489721, EndPos: 4506937, Giemsa: "n/a", Chr: &ChrX} ChrX_4C10 = genome.Band{Band: "4C10", Desc: "Band", StartPos: 4506937, EndPos: 4539757, Giemsa: "n/a", Chr: &ChrX} ChrX_4C11 = genome.Band{Band: "4C11", Desc: "Band", StartPos: 4539757, EndPos: 4562138, Giemsa: "n/a", Chr: &ChrX} ChrX_4C12 = genome.Band{Band: "4C12", Desc: "Band", StartPos: 4562138, EndPos: 4579355, Giemsa: "n/a", Chr: &ChrX} ChrX_4C13 = genome.Band{Band: "4C13", Desc: "Band", StartPos: 4579355, EndPos: 4591406, Giemsa: "n/a", Chr: &ChrX} ChrX_4C14 = genome.Band{Band: "4C14", Desc: "Band", StartPos: 4591406, EndPos: 4603458, Giemsa: "n/a", Chr: &ChrX} ChrX_4C15 = genome.Band{Band: "4C15", Desc: "Band", StartPos: 4603458, EndPos: 4631004, Giemsa: "n/a", Chr: &ChrX} ChrX_4C16 = genome.Band{Band: "4C16", Desc: "Band", StartPos: 4631004, EndPos: 4643056, Giemsa: "n/a", Chr: &ChrX} ChrX_4D1 = genome.Band{Band: "4D1", Desc: "Band", StartPos: 4643056, EndPos: 4696643, Giemsa: "n/a", Chr: &ChrX} ChrX_4D2 = genome.Band{Band: "4D2", Desc: "Band", StartPos: 4696643, EndPos: 4755394, Giemsa: "n/a", Chr: &ChrX} ChrX_4D3 = genome.Band{Band: "4D3", Desc: "Band", StartPos: 4755394, EndPos: 4772611, Giemsa: "n/a", Chr: &ChrX} ChrX_4D4 = genome.Band{Band: "4D4", Desc: "Band", StartPos: 4772611, EndPos: 4789827, Giemsa: "n/a", Chr: &ChrX} ChrX_4D5 = genome.Band{Band: "4D5", Desc: "Band", StartPos: 4789827, EndPos: 4812209, Giemsa: "n/a", Chr: &ChrX} ChrX_4D6 = genome.Band{Band: "4D6", Desc: "Band", StartPos: 4812209, EndPos: 4824261, Giemsa: "n/a", Chr: &ChrX} ChrX_4D7 = genome.Band{Band: "4D7", Desc: "Band", StartPos: 4824261, EndPos: 4858072, Giemsa: "n/a", Chr: &ChrX} ChrX_4E1 = genome.Band{Band: "4E1", Desc: "Band", StartPos: 4858072, EndPos: 4921673, Giemsa: "n/a", Chr: &ChrX} ChrX_4E2 = genome.Band{Band: "4E2", Desc: "Band", StartPos: 4921673, EndPos: 4985274, Giemsa: "n/a", Chr: &ChrX} ChrX_4E3 = genome.Band{Band: "4E3", Desc: "Band", StartPos: 4985274, EndPos: 5001139, Giemsa: "n/a", Chr: &ChrX} ChrX_4F1 = genome.Band{Band: "4F1", Desc: "Band", StartPos: 5001139, EndPos: 5051142, Giemsa: "n/a", Chr: &ChrX} ChrX_4F2 = genome.Band{Band: "4F2", Desc: "Band", StartPos: 5051142, EndPos: 5107944, Giemsa: "n/a", Chr: &ChrX} ChrX_4F3 = genome.Band{Band: "4F3", Desc: "Band", StartPos: 5107944, EndPos: 5164746, Giemsa: "n/a", Chr: &ChrX} ChrX_4F4 = genome.Band{Band: "4F4", Desc: "Band", StartPos: 5164746, EndPos: 5207950, Giemsa: "n/a", Chr: &ChrX} ChrX_4F5 = genome.Band{Band: "4F5", Desc: "Band", StartPos: 5207950, EndPos: 5242796, Giemsa: "n/a", Chr: &ChrX} ChrX_4F6 = genome.Band{Band: "4F6", Desc: "Band", StartPos: 5242796, EndPos: 5246337, Giemsa: "n/a", Chr: &ChrX} ChrX_4F7 = genome.Band{Band: "4F7", Desc: "Band", StartPos: 5246337, EndPos: 5262202, Giemsa: "n/a", Chr: &ChrX} ChrX_4F8 = genome.Band{Band: "4F8", Desc: "Band", StartPos: 5262202, EndPos: 5278067, Giemsa: "n/a", Chr: &ChrX} ChrX_4F9 = genome.Band{Band: "4F9", Desc: "Band", StartPos: 5278067, EndPos: 5314330, Giemsa: "n/a", Chr: &ChrX} ChrX_4F10 = genome.Band{Band: "4F10", Desc: "Band", StartPos: 5314330, EndPos: 5332096, Giemsa: "n/a", Chr: &ChrX} ChrX_4F11 = genome.Band{Band: "4F11", Desc: "Band", StartPos: 5332096, EndPos: 5352569, Giemsa: "n/a", Chr: &ChrX} ChrX_4F12 = genome.Band{Band: "4F12", Desc: "Band", StartPos: 5352569, EndPos: 5354304, Giemsa: "n/a", Chr: &ChrX} ChrX_4F13 = genome.Band{Band: "4F13", Desc: "Band", StartPos: 5354304, EndPos: 5362077, Giemsa: "n/a", Chr: &ChrX} ChrX_4F14 = genome.Band{Band: "4F14", Desc: "Band", StartPos: 5362077, EndPos: 5369849, Giemsa: "n/a", Chr: &ChrX} ChrX_5A1 = genome.Band{Band: "5A1", Desc: "Band", StartPos: 5369849, EndPos: 5394347, Giemsa: "n/a", Chr: &ChrX} ChrX_5A2 = genome.Band{Band: "5A2", Desc: "Band", StartPos: 5394347, EndPos: 5418845, Giemsa: "n/a", Chr: &ChrX} ChrX_5A3 = genome.Band{Band: "5A3", Desc: "Band", StartPos: 5418845, EndPos: 5433280, Giemsa: "n/a", Chr: &ChrX} ChrX_5A4 = genome.Band{Band: "5A4", Desc: "Band", StartPos: 5433280, EndPos: 5451046, Giemsa: "n/a", Chr: &ChrX} ChrX_5A5 = genome.Band{Band: "5A5", Desc: "Band", StartPos: 5451046, EndPos: 5475544, Giemsa: "n/a", Chr: &ChrX} ChrX_5A6 = genome.Band{Band: "5A6", Desc: "Band", StartPos: 5475544, EndPos: 5496711, Giemsa: "n/a", Chr: &ChrX} ChrX_5A7 = genome.Band{Band: "5A7", Desc: "Band", StartPos: 5496711, EndPos: 5507814, Giemsa: "n/a", Chr: &ChrX} ChrX_5A8 = genome.Band{Band: "5A8", Desc: "Band", StartPos: 5507814, EndPos: 5528981, Giemsa: "n/a", Chr: &ChrX} ChrX_5A9 = genome.Band{Band: "5A9", Desc: "Band", StartPos: 5528981, EndPos: 5553479, Giemsa: "n/a", Chr: &ChrX} ChrX_5A10 = genome.Band{Band: "5A10", Desc: "Band", StartPos: 5553479, EndPos: 5564583, Giemsa: "n/a", Chr: &ChrX} ChrX_5A11 = genome.Band{Band: "5A11", Desc: "Band", StartPos: 5564583, EndPos: 5572355, Giemsa: "n/a", Chr: &ChrX} ChrX_5A12 = genome.Band{Band: "5A12", Desc: "Band", StartPos: 5572355, EndPos: 5583459, Giemsa: "n/a", Chr: &ChrX} ChrX_5A13 = genome.Band{Band: "5A13", Desc: "Band", StartPos: 5583459, EndPos: 5588173, Giemsa: "n/a", Chr: &ChrX} ChrX_5A14 = genome.Band{Band: "5A14", Desc: "Band", StartPos: 5588173, EndPos: 5591185, Giemsa: "n/a", Chr: &ChrX} ChrX_5B1 = genome.Band{Band: "5B1", Desc: "Band", StartPos: 5591185, EndPos: 5608062, Giemsa: "n/a", Chr: &ChrX} ChrX_5B2 = genome.Band{Band: "5B2", Desc: "Band", StartPos: 5608062, EndPos: 5621162, Giemsa: "n/a", Chr: &ChrX} ChrX_5B3 = genome.Band{Band: "5B3", Desc: "Band", StartPos: 5621162, EndPos: 5632109, Giemsa: "n/a", Chr: &ChrX} ChrX_5B4 = genome.Band{Band: "5B4", Desc: "Band", StartPos: 5632109, EndPos: 5633037, Giemsa: "n/a", Chr: &ChrX} ChrX_5B5 = genome.Band{Band: "5B5", Desc: "Band", StartPos: 5633037, EndPos: 5637193, Giemsa: "n/a", Chr: &ChrX} ChrX_5B6 = genome.Band{Band: "5B6", Desc: "Band", StartPos: 5637193, EndPos: 5648140, Giemsa: "n/a", Chr: &ChrX} ChrX_5B7 = genome.Band{Band: "5B7", Desc: "Band", StartPos: 5648140, EndPos: 5649068, Giemsa: "n/a", Chr: &ChrX} ChrX_5B8 = genome.Band{Band: "5B8", Desc: "Band", StartPos: 5649068, EndPos: 5660015, Giemsa: "n/a", Chr: &ChrX} ChrX_5B9 = genome.Band{Band: "5B9", Desc: "Band", StartPos: 5660015, EndPos: 5660025, Giemsa: "n/a", Chr: &ChrX} ChrX_5B10 = genome.Band{Band: "5B10", Desc: "Band", StartPos: 5660025, EndPos: 5660035, Giemsa: "n/a", Chr: &ChrX} ChrX_5C1 = genome.Band{Band: "5C1", Desc: "Band", StartPos: 5660035, EndPos: 5660045, Giemsa: "n/a", Chr: &ChrX} ChrX_5C2 = genome.Band{Band: "5C2", Desc: "Band", StartPos: 5660045, EndPos: 5726808, Giemsa: "n/a", Chr: &ChrX} ChrX_5C3 = genome.Band{Band: "5C3", Desc: "Band", StartPos: 5726808, EndPos: 5742114, Giemsa: "n/a", Chr: &ChrX} ChrX_5C4 = genome.Band{Band: "5C4", Desc: "Band", StartPos: 5742114, EndPos: 5750723, Giemsa: "n/a", Chr: &ChrX} ChrX_5C5 = genome.Band{Band: "5C5", Desc: "Band", StartPos: 5750723, EndPos: 5772587, Giemsa: "n/a", Chr: &ChrX} ChrX_5C6 = genome.Band{Band: "5C6", Desc: "Band", StartPos: 5772587, EndPos: 5794451, Giemsa: "n/a", Chr: &ChrX} ChrX_5C7 = genome.Band{Band: "5C7", Desc: "Band", StartPos: 5794451, EndPos: 5816316, Giemsa: "n/a", Chr: &ChrX} ChrX_5C8 = genome.Band{Band: "5C8", Desc: "Band", StartPos: 5816316, EndPos: 5824515, Giemsa: "n/a", Chr: &ChrX} ChrX_5C9 = genome.Band{Band: "5C9", Desc: "Band", StartPos: 5824515, EndPos: 5829420, Giemsa: "n/a", Chr: &ChrX} ChrX_5C10 = genome.Band{Band: "5C10", Desc: "Band", StartPos: 5829420, EndPos: 5849353, Giemsa: "n/a", Chr: &ChrX} ChrX_5D1 = genome.Band{Band: "5D1", Desc: "Band", StartPos: 5849353, EndPos: 5891865, Giemsa: "n/a", Chr: &ChrX} ChrX_5D2 = genome.Band{Band: "5D2", Desc: "Band", StartPos: 5891865, EndPos: 5938114, Giemsa: "n/a", Chr: &ChrX} ChrX_5D3 = genome.Band{Band: "5D3", Desc: "Band", StartPos: 5938114, EndPos: 5972295, Giemsa: "n/a", Chr: &ChrX} ChrX_5D4 = genome.Band{Band: "5D4", Desc: "Band", StartPos: 5972295, EndPos: 5991337, Giemsa: "n/a", Chr: &ChrX} ChrX_5D5 = genome.Band{Band: "5D5", Desc: "Band", StartPos: 5991337, EndPos: 6031107, Giemsa: "n/a", Chr: &ChrX} ChrX_5D6 = genome.Band{Band: "5D6", Desc: "Band", StartPos: 6031107, EndPos: 6075638, Giemsa: "n/a", Chr: &ChrX} ChrX_5D7 = genome.Band{Band: "5D7", Desc: "Band", StartPos: 6075638, EndPos: 6086746, Giemsa: "n/a", Chr: &ChrX} ChrX_5D8 = genome.Band{Band: "5D8", Desc: "Band", StartPos: 6086746, EndPos: 6092994, Giemsa: "n/a", Chr: &ChrX} ChrX_5E1 = genome.Band{Band: "5E1", Desc: "Band", StartPos: 6092994, EndPos: 6141393, Giemsa: "n/a", Chr: &ChrX} ChrX_5E2 = genome.Band{Band: "5E2", Desc: "Band", StartPos: 6141393, EndPos: 6143872, Giemsa: "n/a", Chr: &ChrX} ChrX_5E3 = genome.Band{Band: "5E3", Desc: "Band", StartPos: 6143872, EndPos: 6159741, Giemsa: "n/a", Chr: &ChrX} ChrX_5E4 = genome.Band{Band: "5E4", Desc: "Band", StartPos: 6159741, EndPos: 6175609, Giemsa: "n/a", Chr: &ChrX} ChrX_5E5 = genome.Band{Band: "5E5", Desc: "Band", StartPos: 6175609, EndPos: 6185465, Giemsa: "n/a", Chr: &ChrX} ChrX_5E6 = genome.Band{Band: "5E6", Desc: "Band", StartPos: 6185465, EndPos: 6192365, Giemsa: "n/a", Chr: &ChrX} ChrX_5E7 = genome.Band{Band: "5E7", Desc: "Band", StartPos: 6192365, EndPos: 6199264, Giemsa: "n/a", Chr: &ChrX} ChrX_5E8 = genome.Band{Band: "5E8", Desc: "Band", StartPos: 6199264, EndPos: 6209121, Giemsa: "n/a", Chr: &ChrX} ChrX_5F1 = genome.Band{Band: "5F1", Desc: "Band", StartPos: 6209121, EndPos: 6224891, Giemsa: "n/a", Chr: &ChrX} ChrX_5F2 = genome.Band{Band: "5F2", Desc: "Band", StartPos: 6224891, EndPos: 6245965, Giemsa: "n/a", Chr: &ChrX} ChrX_5F3 = genome.Band{Band: "5F3", Desc: "Band", StartPos: 6245965, EndPos: 6255185, Giemsa: "n/a", Chr: &ChrX} ChrX_5F4 = genome.Band{Band: "5F4", Desc: "Band", StartPos: 6255185, EndPos: 6268356, Giemsa: "n/a", Chr: &ChrX} ChrX_5F5 = genome.Band{Band: "5F5", Desc: "Band", StartPos: 6268356, EndPos: 6285478, Giemsa: "n/a", Chr: &ChrX} ChrX_5F6 = genome.Band{Band: "5F6", Desc: "Band", StartPos: 6285478, EndPos: 6294698, Giemsa: "n/a", Chr: &ChrX} ChrX_6A1 = genome.Band{Band: "6A1", Desc: "Band", StartPos: 6294698, EndPos: 6335693, Giemsa: "n/a", Chr: &ChrX} ChrX_6A2 = genome.Band{Band: "6A2", Desc: "Band", StartPos: 6335693, EndPos: 6376688, Giemsa: "n/a", Chr: &ChrX} ChrX_6A3 = genome.Band{Band: "6A3", Desc: "Band", StartPos: 6376688, EndPos: 6393811, Giemsa: "n/a", Chr: &ChrX} ChrX_6A4 = genome.Band{Band: "6A4", Desc: "Band", StartPos: 6393811, EndPos: 6410933, Giemsa: "n/a", Chr: &ChrX} ChrX_6B1 = genome.Band{Band: "6B1", Desc: "Band", StartPos: 6410933, EndPos: 6432007, Giemsa: "n/a", Chr: &ChrX} ChrX_6B2 = genome.Band{Band: "6B2", Desc: "Band", StartPos: 6432007, EndPos: 6453081, Giemsa: "n/a", Chr: &ChrX} ChrX_6B3 = genome.Band{Band: "6B3", Desc: "Band", StartPos: 6453081, EndPos: 6470203, Giemsa: "n/a", Chr: &ChrX} ChrX_6B4 = genome.Band{Band: "6B4", Desc: "Band", StartPos: 6470203, EndPos: 6479423, Giemsa: "n/a", Chr: &ChrX} ChrX_6C1 = genome.Band{Band: "6C1", Desc: "Band", StartPos: 6479423, EndPos: 6508482, Giemsa: "n/a", Chr: &ChrX} ChrX_6C2 = genome.Band{Band: "6C2", Desc: "Band", StartPos: 6508482, EndPos: 6541492, Giemsa: "n/a", Chr: &ChrX} ChrX_6C3 = genome.Band{Band: "6C3", Desc: "Band", StartPos: 6541492, EndPos: 6554663, Giemsa: "n/a", Chr: &ChrX} ChrX_6C4 = genome.Band{Band: "6C4", Desc: "Band", StartPos: 6554663, EndPos: 6570773, Giemsa: "n/a", Chr: &ChrX} ChrX_6C5 = genome.Band{Band: "6C5", Desc: "Band", StartPos: 6570773, EndPos: 6577752, Giemsa: "n/a", Chr: &ChrX} ChrX_6C6 = genome.Band{Band: "6C6", Desc: "Band", StartPos: 6577752, EndPos: 6586825, Giemsa: "n/a", Chr: &ChrX} ChrX_6C7 = genome.Band{Band: "6C7", Desc: "Band", StartPos: 6586825, EndPos: 6597992, Giemsa: "n/a", Chr: &ChrX} ChrX_6C8 = genome.Band{Band: "6C8", Desc: "Band", StartPos: 6597992, EndPos: 6602878, Giemsa: "n/a", Chr: &ChrX} ChrX_6C9 = genome.Band{Band: "6C9", Desc: "Band", StartPos: 6602878, EndPos: 6620370, Giemsa: "n/a", Chr: &ChrX} ChrX_6C10 = genome.Band{Band: "6C10", Desc: "Band", StartPos: 6620370, EndPos: 6639955, Giemsa: "n/a", Chr: &ChrX} ChrX_6C11 = genome.Band{Band: "6C11", Desc: "Band", StartPos: 6639955, EndPos: 6644841, Giemsa: "n/a", Chr: &ChrX} ChrX_6C12 = genome.Band{Band: "6C12", Desc: "Band", StartPos: 6644841, EndPos: 6660239, Giemsa: "n/a", Chr: &ChrX} ChrX_6C13 = genome.Band{Band: "6C13", Desc: "Band", StartPos: 6660239, EndPos: 6673543, Giemsa: "n/a", Chr: &ChrX} ChrX_6D1 = genome.Band{Band: "6D1", Desc: "Band", StartPos: 6673543, EndPos: 6682616, Giemsa: "n/a", Chr: &ChrX} ChrX_6D2 = genome.Band{Band: "6D2", Desc: "Band", StartPos: 6682616, EndPos: 6698189, Giemsa: "n/a", Chr: &ChrX} ChrX_6D3 = genome.Band{Band: "6D3", Desc: "Band", StartPos: 6698189, EndPos: 6719226, Giemsa: "n/a", Chr: &ChrX} ChrX_6D4 = genome.Band{Band: "6D4", Desc: "Band", StartPos: 6719226, EndPos: 6737221, Giemsa: "n/a", Chr: &ChrX} ChrX_6D5 = genome.Band{Band: "6D5", Desc: "Band", StartPos: 6737221, EndPos: 6738533, Giemsa: "n/a", Chr: &ChrX} ChrX_6D6 = genome.Band{Band: "6D6", Desc: "Band", StartPos: 6738533, EndPos: 6744409, Giemsa: "n/a", Chr: &ChrX} ChrX_6D7 = genome.Band{Band: "6D7", Desc: "Band", StartPos: 6744409, EndPos: 6755321, Giemsa: "n/a", Chr: &ChrX} ChrX_6D8 = genome.Band{Band: "6D8", Desc: "Band", StartPos: 6755321, EndPos: 6757478, Giemsa: "n/a", Chr: &ChrX} ChrX_6E1 = genome.Band{Band: "6E1", Desc: "Band", StartPos: 6757478, EndPos: 6762135, Giemsa: "n/a", Chr: &ChrX} ChrX_6E2 = genome.Band{Band: "6E2", Desc: "Band", StartPos: 6762135, EndPos: 6829370, Giemsa: "n/a", Chr: &ChrX} ChrX_6E3 = genome.Band{Band: "6E3", Desc: "Band", StartPos: 6829370, EndPos: 6853329, Giemsa: "n/a", Chr: &ChrX} ChrX_6E4 = genome.Band{Band: "6E4", Desc: "Band", StartPos: 6853329, EndPos: 6927901, Giemsa: "n/a", Chr: &ChrX} ChrX_6E5 = genome.Band{Band: "6E5", Desc: "Band", StartPos: 6927901, EndPos: 6927911, Giemsa: "n/a", Chr: &ChrX} ChrX_6E6 = genome.Band{Band: "6E6", Desc: "Band", StartPos: 6927911, EndPos: 6927921, Giemsa: "n/a", Chr: &ChrX} ChrX_6E7 = genome.Band{Band: "6E7", Desc: "Band", StartPos: 6927921, EndPos: 6927931, Giemsa: "n/a", Chr: &ChrX} ChrX_6F1 = genome.Band{Band: "6F1", Desc: "Band", StartPos: 6927931, EndPos: 6963921, Giemsa: "n/a", Chr: &ChrX} ChrX_6F2 = genome.Band{Band: "6F2", Desc: "Band", StartPos: 6963921, EndPos: 6965448, Giemsa: "n/a", Chr: &ChrX} ChrX_6F3 = genome.Band{Band: "6F3", Desc: "Band", StartPos: 6965448, EndPos: 6972289, Giemsa: "n/a", Chr: &ChrX} ChrX_6F4 = genome.Band{Band: "6F4", Desc: "Band", StartPos: 6972289, EndPos: 6979130, Giemsa: "n/a", Chr: &ChrX} ChrX_6F5 = genome.Band{Band: "6F5", Desc: "Band", StartPos: 6979130, EndPos: 7008937, Giemsa: "n/a", Chr: &ChrX} ChrX_6F6 = genome.Band{Band: "6F6", Desc: "Band", StartPos: 7008937, EndPos: 7010464, Giemsa: "n/a", Chr: &ChrX} ChrX_6F7 = genome.Band{Band: "6F7", Desc: "Band", StartPos: 7010464, EndPos: 7017305, Giemsa: "n/a", Chr: &ChrX} ChrX_6F8 = genome.Band{Band: "6F8", Desc: "Band", StartPos: 7017305, EndPos: 7024146, Giemsa: "n/a", Chr: &ChrX} ChrX_6F9 = genome.Band{Band: "6F9", Desc: "Band", StartPos: 7024146, EndPos: 7030987, Giemsa: "n/a", Chr: &ChrX} ChrX_6F10 = genome.Band{Band: "6F10", Desc: "Band", StartPos: 7030987, EndPos: 7037828, Giemsa: "n/a", Chr: &ChrX} ChrX_6F11 = genome.Band{Band: "6F11", Desc: "Band", StartPos: 7037828, EndPos: 7044669, Giemsa: "n/a", Chr: &ChrX} ChrX_7A1 = genome.Band{Band: "7A1", Desc: "Band", StartPos: 7044669, EndPos: 7066231, Giemsa: "n/a", Chr: &ChrX} ChrX_7A2 = genome.Band{Band: "7A2", Desc: "Band", StartPos: 7066231, EndPos: 7087792, Giemsa: "n/a", Chr: &ChrX} ChrX_7A3 = genome.Band{Band: "7A3", Desc: "Band", StartPos: 7087792, EndPos: 7097565, Giemsa: "n/a", Chr: &ChrX} ChrX_7A4 = genome.Band{Band: "7A4", Desc: "Band", StartPos: 7097565, EndPos: 7133236, Giemsa: "n/a", Chr: &ChrX} ChrX_7A5 = genome.Band{Band: "7A5", Desc: "Band", StartPos: 7133236, EndPos: 7144436, Giemsa: "n/a", Chr: &ChrX} ChrX_7A6 = genome.Band{Band: "7A6", Desc: "Band", StartPos: 7144436, EndPos: 7152746, Giemsa: "n/a", Chr: &ChrX} ChrX_7A7 = genome.Band{Band: "7A7", Desc: "Band", StartPos: 7152746, EndPos: 7164617, Giemsa: "n/a", Chr: &ChrX} ChrX_7A8 = genome.Band{Band: "7A8", Desc: "Band", StartPos: 7164617, EndPos: 7180050, Giemsa: "n/a", Chr: &ChrX} ChrX_7B1 = genome.Band{Band: "7B1", Desc: "Band", StartPos: 7180050, EndPos: 7231320, Giemsa: "n/a", Chr: &ChrX} ChrX_7B2 = genome.Band{Band: "7B2", Desc: "Band", StartPos: 7231320, EndPos: 7377075, Giemsa: "n/a", Chr: &ChrX} ChrX_7B3 = genome.Band{Band: "7B3", Desc: "Band", StartPos: 7377075, EndPos: 7451535, Giemsa: "n/a", Chr: &ChrX} ChrX_7B4 = genome.Band{Band: "7B4", Desc: "Band", StartPos: 7451535, EndPos: 7525994, Giemsa: "n/a", Chr: &ChrX} ChrX_7B5 = genome.Band{Band: "7B5", Desc: "Band", StartPos: 7525994, EndPos: 7559744, Giemsa: "n/a", Chr: &ChrX} ChrX_7B6 = genome.Band{Band: "7B6", Desc: "Band", StartPos: 7559744, EndPos: 7613743, Giemsa: "n/a", Chr: &ChrX} ChrX_7B7 = genome.Band{Band: "7B7", Desc: "Band", StartPos: 7613743, EndPos: 7657896, Giemsa: "n/a", Chr: &ChrX} ChrX_7B8 = genome.Band{Band: "7B8", Desc: "Band", StartPos: 7657896, EndPos: 7695675, Giemsa: "n/a", Chr: &ChrX} ChrX_7C1 = genome.Band{Band: "7C1", Desc: "Band", StartPos: 7695675, EndPos: 7786127, Giemsa: "n/a", Chr: &ChrX} ChrX_7C2 = genome.Band{Band: "7C2", Desc: "Band", StartPos: 7786127, EndPos: 7808775, Giemsa: "n/a", Chr: &ChrX} ChrX_7C3 = genome.Band{Band: "7C3", Desc: "Band", StartPos: 7808775, EndPos: 7820417, Giemsa: "n/a", Chr: &ChrX} ChrX_7C4 = genome.Band{Band: "7C4", Desc: "Band", StartPos: 7820417, EndPos: 7827693, Giemsa: "n/a", Chr: &ChrX} ChrX_7C5 = genome.Band{Band: "7C5", Desc: "Band", StartPos: 7827693, EndPos: 7827703, Giemsa: "n/a", Chr: &ChrX} ChrX_7C6 = genome.Band{Band: "7C6", Desc: "Band", StartPos: 7827703, EndPos: 7828178, Giemsa: "n/a", Chr: &ChrX} ChrX_7C7 = genome.Band{Band: "7C7", Desc: "Band", StartPos: 7828178, EndPos: 7828891, Giemsa: "n/a", Chr: &ChrX} ChrX_7C8 = genome.Band{Band: "7C8", Desc: "Band", StartPos: 7828891, EndPos: 7831686, Giemsa: "n/a", Chr: &ChrX} ChrX_7C9 = genome.Band{Band: "7C9", Desc: "Band", StartPos: 7831686, EndPos: 7841862, Giemsa: "n/a", Chr: &ChrX} ChrX_7D1 = genome.Band{Band: "7D1", Desc: "Band", StartPos: 7841862, EndPos: 7864108, Giemsa: "n/a", Chr: &ChrX} ChrX_7D2 = genome.Band{Band: "7D2", Desc: "Band", StartPos: 7864108, EndPos: 7923789, Giemsa: "n/a", Chr: &ChrX} ChrX_7D3 = genome.Band{Band: "7D3", Desc: "Band", StartPos: 7923789, EndPos: 7938675, Giemsa: "n/a", Chr: &ChrX} ChrX_7D4 = genome.Band{Band: "7D4", Desc: "Band", StartPos: 7938675, EndPos: 7947049, Giemsa: "n/a", Chr: &ChrX} ChrX_7D5 = genome.Band{Band: "7D5", Desc: "Band", StartPos: 7947049, EndPos: 7981077, Giemsa: "n/a", Chr: &ChrX} ChrX_7D6 = genome.Band{Band: "7D6", Desc: "Band", StartPos: 7981077, EndPos: 8020288, Giemsa: "n/a", Chr: &ChrX} ChrX_7D7 = genome.Band{Band: "7D7", Desc: "Band", StartPos: 8020288, EndPos: 8020298, Giemsa: "n/a", Chr: &ChrX} ChrX_7D8 = genome.Band{Band: "7D8", Desc: "Band", StartPos: 8020298, EndPos: 8020308, Giemsa: "n/a", Chr: &ChrX} ChrX_7D9 = genome.Band{Band: "7D9", Desc: "Band", StartPos: 8020308, EndPos: 8020318, Giemsa: "n/a", Chr: &ChrX} ChrX_7D10 = genome.Band{Band: "7D10", Desc: "Band", StartPos: 8020318, EndPos: 8020328, Giemsa: "n/a", Chr: &ChrX} ChrX_7D11 = genome.Band{Band: "7D11", Desc: "Band", StartPos: 8020328, EndPos: 8020338, Giemsa: "n/a", Chr: &ChrX} ChrX_7D12 = genome.Band{Band: "7D12", Desc: "Band", StartPos: 8020338, EndPos: 8027267, Giemsa: "n/a", Chr: &ChrX} ChrX_7D13 = genome.Band{Band: "7D13", Desc: "Band", StartPos: 8027267, EndPos: 8029501, Giemsa: "n/a", Chr: &ChrX} ChrX_7D14 = genome.Band{Band: "7D14", Desc: "Band", StartPos: 8029501, EndPos: 8033471, Giemsa: "n/a", Chr: &ChrX} ChrX_7D15 = genome.Band{Band: "7D15", Desc: "Band", StartPos: 8033471, EndPos: 8040845, Giemsa: "n/a", Chr: &ChrX} ChrX_7D16 = genome.Band{Band: "7D16", Desc: "Band", StartPos: 8040845, EndPos: 8051657, Giemsa: "n/a", Chr: &ChrX} ChrX_7D17 = genome.Band{Band: "7D17", Desc: "Band", StartPos: 8051657, EndPos: 8072782, Giemsa: "n/a", Chr: &ChrX} ChrX_7D18 = genome.Band{Band: "7D18", Desc: "Band", StartPos: 8072782, EndPos: 8099864, Giemsa: "n/a", Chr: &ChrX} ChrX_7D19 = genome.Band{Band: "7D19", Desc: "Band", StartPos: 8099864, EndPos: 8099874, Giemsa: "n/a", Chr: &ChrX} ChrX_7D20 = genome.Band{Band: "7D20", Desc: "Band", StartPos: 8099874, EndPos: 8109368, Giemsa: "n/a", Chr: &ChrX} ChrX_7D21 = genome.Band{Band: "7D21", Desc: "Band", StartPos: 8109368, EndPos: 8119011, Giemsa: "n/a", Chr: &ChrX} ChrX_7D22 = genome.Band{Band: "7D22", Desc: "Band", StartPos: 8119011, EndPos: 8140287, Giemsa: "n/a", Chr: &ChrX} ChrX_7E1 = genome.Band{Band: "7E1", Desc: "Band", StartPos: 8140287, EndPos: 8188420, Giemsa: "n/a", Chr: &ChrX} ChrX_7E2 = genome.Band{Band: "7E2", Desc: "Band", StartPos: 8188420, EndPos: 8239692, Giemsa: "n/a", Chr: &ChrX} ChrX_7E3 = genome.Band{Band: "7E3", Desc: "Band", StartPos: 8239692, EndPos: 8257645, Giemsa: "n/a", Chr: &ChrX} ChrX_7E4 = genome.Band{Band: "7E4", Desc: "Band", StartPos: 8257645, EndPos: 8263083, Giemsa: "n/a", Chr: &ChrX} ChrX_7E5 = genome.Band{Band: "7E5", Desc: "Band", StartPos: 8263083, EndPos: 8281037, Giemsa: "n/a", Chr: &ChrX} ChrX_7E6 = genome.Band{Band: "7E6", Desc: "Band", StartPos: 8281037, EndPos: 8303134, Giemsa: "n/a", Chr: &ChrX} ChrX_7E7 = genome.Band{Band: "7E7", Desc: "Band", StartPos: 8303134, EndPos: 8320225, Giemsa: "n/a", Chr: &ChrX} ChrX_7E8 = genome.Band{Band: "7E8", Desc: "Band", StartPos: 8320225, EndPos: 8322383, Giemsa: "n/a", Chr: &ChrX} ChrX_7E9 = genome.Band{Band: "7E9", Desc: "Band", StartPos: 8322383, EndPos: 8347846, Giemsa: "n/a", Chr: &ChrX} ChrX_7E10 = genome.Band{Band: "7E10", Desc: "Band", StartPos: 8347846, EndPos: 8350004, Giemsa: "n/a", Chr: &ChrX} ChrX_7E11 = genome.Band{Band: "7E11", Desc: "Band", StartPos: 8350004, EndPos: 8359671, Giemsa: "n/a", Chr: &ChrX} ChrX_7F1 = genome.Band{Band: "7F1", Desc: "Band", StartPos: 8359671, EndPos: 8410080, Giemsa: "n/a", Chr: &ChrX} ChrX_7F2 = genome.Band{Band: "7F2", Desc: "Band", StartPos: 8410080, EndPos: 8412238, Giemsa: "n/a", Chr: &ChrX} ChrX_7F3 = genome.Band{Band: "7F3", Desc: "Band", StartPos: 8412238, EndPos: 8438565, Giemsa: "n/a", Chr: &ChrX} ChrX_7F4 = genome.Band{Band: "7F4", Desc: "Band", StartPos: 8438565, EndPos: 8464891, Giemsa: "n/a", Chr: &ChrX} ChrX_7F5 = genome.Band{Band: "7F5", Desc: "Band", StartPos: 8464891, EndPos: 8470329, Giemsa: "n/a", Chr: &ChrX} ChrX_7F6 = genome.Band{Band: "7F6", Desc: "Band", StartPos: 8470329, EndPos: 8475767, Giemsa: "n/a", Chr: &ChrX} ChrX_7F7 = genome.Band{Band: "7F7", Desc: "Band", StartPos: 8475767, EndPos: 8493721, Giemsa: "n/a", Chr: &ChrX} ChrX_7F8 = genome.Band{Band: "7F8", Desc: "Band", StartPos: 8493721, EndPos: 8511674, Giemsa: "n/a", Chr: &ChrX} ChrX_7F9 = genome.Band{Band: "7F9", Desc: "Band", StartPos: 8511674, EndPos: 8521342, Giemsa: "n/a", Chr: &ChrX} ChrX_7F10 = genome.Band{Band: "7F10", Desc: "Band", StartPos: 8521342, EndPos: 8543439, Giemsa: "n/a", Chr: &ChrX} ChrX_8A1 = genome.Band{Band: "8A1", Desc: "Band", StartPos: 8543439, EndPos: 8578052, Giemsa: "n/a", Chr: &ChrX} ChrX_8A2 = genome.Band{Band: "8A2", Desc: "Band", StartPos: 8578052, EndPos: 8612665, Giemsa: "n/a", Chr: &ChrX} ChrX_8A3 = genome.Band{Band: "8A3", Desc: "Band", StartPos: 8612665, EndPos: 8622332, Giemsa: "n/a", Chr: &ChrX} ChrX_8A4 = genome.Band{Band: "8A4", Desc: "Band", StartPos: 8622332, EndPos: 8640286, Giemsa: "n/a", Chr: &ChrX} ChrX_8A5 = genome.Band{Band: "8A5", Desc: "Band", StartPos: 8640286, EndPos: 8662383, Giemsa: "n/a", Chr: &ChrX} ChrX_8B1 = genome.Band{Band: "8B1", Desc: "Band", StartPos: 8662383, EndPos: 8696996, Giemsa: "n/a", Chr: &ChrX} ChrX_8B2 = genome.Band{Band: "8B2", Desc: "Band", StartPos: 8696996, EndPos: 8727465, Giemsa: "n/a", Chr: &ChrX} ChrX_8B3 = genome.Band{Band: "8B3", Desc: "Band", StartPos: 8727465, EndPos: 8749562, Giemsa: "n/a", Chr: &ChrX} ChrX_8B4 = genome.Band{Band: "8B4", Desc: "Band", StartPos: 8749562, EndPos: 8771659, Giemsa: "n/a", Chr: &ChrX} ChrX_8B5 = genome.Band{Band: "8B5", Desc: "Band", StartPos: 8771659, EndPos: 8785470, Giemsa: "n/a", Chr: &ChrX} ChrX_8B6 = genome.Band{Band: "8B6", Desc: "Band", StartPos: 8785470, EndPos: 8795137, Giemsa: "n/a", Chr: &ChrX} ChrX_8B7 = genome.Band{Band: "8B7", Desc: "Band", StartPos: 8795137, EndPos: 8813148, Giemsa: "n/a", Chr: &ChrX} ChrX_8B8 = genome.Band{Band: "8B8", Desc: "Band", StartPos: 8813148, EndPos: 8827682, Giemsa: "n/a", Chr: &ChrX} ChrX_8C1 = genome.Band{Band: "8C1", Desc: "Band", StartPos: 8827682, EndPos: 8897239, Giemsa: "n/a", Chr: &ChrX} ChrX_8C2 = genome.Band{Band: "8C2", Desc: "Band", StartPos: 8897239, EndPos: 8900483, Giemsa: "n/a", Chr: &ChrX} ChrX_8C3 = genome.Band{Band: "8C3", Desc: "Band", StartPos: 8900483, EndPos: 8927476, Giemsa: "n/a", Chr: &ChrX} ChrX_8C4 = genome.Band{Band: "8C4", Desc: "Band", StartPos: 8927476, EndPos: 8978216, Giemsa: "n/a", Chr: &ChrX} ChrX_8C5 = genome.Band{Band: "8C5", Desc: "Band", StartPos: 8978216, EndPos: 8978226, Giemsa: "n/a", Chr: &ChrX} ChrX_8C6 = genome.Band{Band: "8C6", Desc: "Band", StartPos: 8978226, EndPos: 8978236, Giemsa: "n/a", Chr: &ChrX} ChrX_8C7 = genome.Band{Band: "8C7", Desc: "Band", StartPos: 8978236, EndPos: 8981929, Giemsa: "n/a", Chr: &ChrX} ChrX_8C8 = genome.Band{Band: "8C8", Desc: "Band", StartPos: 8981929, EndPos: 8989048, Giemsa: "n/a", Chr: &ChrX} ChrX_8C9 = genome.Band{Band: "8C9", Desc: "Band", StartPos: 8989048, EndPos: 9010851, Giemsa: "n/a", Chr: &ChrX} ChrX_8C10 = genome.Band{Band: "8C10", Desc: "Band", StartPos: 9010851, EndPos: 9012440, Giemsa: "n/a", Chr: &ChrX} ChrX_8C11 = genome.Band{Band: "8C11", Desc: "Band", StartPos: 9012440, EndPos: 9019560, Giemsa: "n/a", Chr: &ChrX} ChrX_8C12 = genome.Band{Band: "8C12", Desc: "Band", StartPos: 9019560, EndPos: 9026679, Giemsa: "n/a", Chr: &ChrX} ChrX_8C13 = genome.Band{Band: "8C13", Desc: "Band", StartPos: 9026679, EndPos: 9039901, Giemsa: "n/a", Chr: &ChrX} ChrX_8C14 = genome.Band{Band: "8C14", Desc: "Band", StartPos: 9039901, EndPos: 9057042, Giemsa: "n/a", Chr: &ChrX} ChrX_8C15 = genome.Band{Band: "8C15", Desc: "Band", StartPos: 9057042, EndPos: 9070228, Giemsa: "n/a", Chr: &ChrX} ChrX_8C16 = genome.Band{Band: "8C16", Desc: "Band", StartPos: 9070228, EndPos: 9079458, Giemsa: "n/a", Chr: &ChrX} ChrX_8C17 = genome.Band{Band: "8C17", Desc: "Band", StartPos: 9079458, EndPos: 9088688, Giemsa: "n/a", Chr: &ChrX} ChrX_8D1 = genome.Band{Band: "8D1", Desc: "Band", StartPos: 9088688, EndPos: 9117779, Giemsa: "n/a", Chr: &ChrX} ChrX_8D2 = genome.Band{Band: "8D2", Desc: "Band", StartPos: 9117779, EndPos: 9142914, Giemsa: "n/a", Chr: &ChrX} ChrX_8D3 = genome.Band{Band: "8D3", Desc: "Band", StartPos: 9142914, EndPos: 9156100, Giemsa: "n/a", Chr: &ChrX} ChrX_8D4 = genome.Band{Band: "8D4", Desc: "Band", StartPos: 9156100, EndPos: 9173241, Giemsa: "n/a", Chr: &ChrX} ChrX_8D5 = genome.Band{Band: "8D5", Desc: "Band", StartPos: 9173241, EndPos: 9190383, Giemsa: "n/a", Chr: &ChrX} ChrX_8D6 = genome.Band{Band: "8D6", Desc: "Band", StartPos: 9190383, EndPos: 9211480, Giemsa: "n/a", Chr: &ChrX} ChrX_8D7 = genome.Band{Band: "8D7", Desc: "Band", StartPos: 9211480, EndPos: 9220710, Giemsa: "n/a", Chr: &ChrX} ChrX_8D8 = genome.Band{Band: "8D8", Desc: "Band", StartPos: 9220710, EndPos: 9241807, Giemsa: "n/a", Chr: &ChrX} ChrX_8D9 = genome.Band{Band: "8D9", Desc: "Band", StartPos: 9241807, EndPos: 9258948, Giemsa: "n/a", Chr: &ChrX} ChrX_8D10 = genome.Band{Band: "8D10", Desc: "Band", StartPos: 9258948, EndPos: 9279221, Giemsa: "n/a", Chr: &ChrX} ChrX_8D11 = genome.Band{Band: "8D11", Desc: "Band", StartPos: 9279221, EndPos: 9281281, Giemsa: "n/a", Chr: &ChrX} ChrX_8D12 = genome.Band{Band: "8D12", Desc: "Band", StartPos: 9281281, EndPos: 9306416, Giemsa: "n/a", Chr: &ChrX} ChrX_8E1 = genome.Band{Band: "8E1", Desc: "Band", StartPos: 9306416, EndPos: 9339463, Giemsa: "n/a", Chr: &ChrX} ChrX_8E2 = genome.Band{Band: "8E2", Desc: "Band", StartPos: 9339463, EndPos: 9372510, Giemsa: "n/a", Chr: &ChrX} ChrX_8E3 = genome.Band{Band: "8E3", Desc: "Band", StartPos: 9372510, EndPos: 9389651, Giemsa: "n/a", Chr: &ChrX} ChrX_8E4 = genome.Band{Band: "8E4", Desc: "Band", StartPos: 9389651, EndPos: 9406792, Giemsa: "n/a", Chr: &ChrX} ChrX_8E5 = genome.Band{Band: "8E5", Desc: "Band", StartPos: 9406792, EndPos: 9416022, Giemsa: "n/a", Chr: &ChrX} ChrX_8E6 = genome.Band{Band: "8E6", Desc: "Band", StartPos: 9416022, EndPos: 9425252, Giemsa: "n/a", Chr: &ChrX} ChrX_8E7 = genome.Band{Band: "8E7", Desc: "Band", StartPos: 9425252, EndPos: 9453519, Giemsa: "n/a", Chr: &ChrX} ChrX_8E8 = genome.Band{Band: "8E8", Desc: "Band", StartPos: 9453519, EndPos: 9455579, Giemsa: "n/a", Chr: &ChrX} ChrX_8E9 = genome.Band{Band: "8E9", Desc: "Band", StartPos: 9455579, EndPos: 9460771, Giemsa: "n/a", Chr: &ChrX} ChrX_8E10 = genome.Band{Band: "8E10", Desc: "Band", StartPos: 9460771, EndPos: 9485082, Giemsa: "n/a", Chr: &ChrX} ChrX_8E11 = genome.Band{Band: "8E11", Desc: "Band", StartPos: 9485082, EndPos: 9485092, Giemsa: "n/a", Chr: &ChrX} ChrX_8E12 = genome.Band{Band: "8E12", Desc: "Band", StartPos: 9485092, EndPos: 9494493, Giemsa: "n/a", Chr: &ChrX} ChrX_8F1 = genome.Band{Band: "8F1", Desc: "Band", StartPos: 9494493, EndPos: 9508779, Giemsa: "n/a", Chr: &ChrX} ChrX_8F2 = genome.Band{Band: "8F2", Desc: "Band", StartPos: 9508779, EndPos: 9523065, Giemsa: "n/a", Chr: &ChrX} ChrX_8F3 = genome.Band{Band: "8F3", Desc: "Band", StartPos: 9523065, EndPos: 9529315, Giemsa: "n/a", Chr: &ChrX} ChrX_8F4 = genome.Band{Band: "8F4", Desc: "Band", StartPos: 9529315, EndPos: 9538244, Giemsa: "n/a", Chr: &ChrX} ChrX_8F5 = genome.Band{Band: "8F5", Desc: "Band", StartPos: 9538244, EndPos: 9547172, Giemsa: "n/a", Chr: &ChrX} ChrX_8F6 = genome.Band{Band: "8F6", Desc: "Band", StartPos: 9547172, EndPos: 9558780, Giemsa: "n/a", Chr: &ChrX} ChrX_8F7 = genome.Band{Band: "8F7", Desc: "Band", StartPos: 9558780, EndPos: 9570387, Giemsa: "n/a", Chr: &ChrX} ChrX_8F8 = genome.Band{Band: "8F8", Desc: "Band", StartPos: 9570387, EndPos: 9576637, Giemsa: "n/a", Chr: &ChrX} ChrX_8F9 = genome.Band{Band: "8F9", Desc: "Band", StartPos: 9576637, EndPos: 9582887, Giemsa: "n/a", Chr: &ChrX} ChrX_8F10 = genome.Band{Band: "8F10", Desc: "Band", StartPos: 9582887, EndPos: 9603589, Giemsa: "n/a", Chr: &ChrX} ChrX_9A1 = genome.Band{Band: "9A1", Desc: "Band", StartPos: 9603589, EndPos: 9681025, Giemsa: "n/a", Chr: &ChrX} ChrX_9A2 = genome.Band{Band: "9A2", Desc: "Band", StartPos: 9681025, EndPos: 9765270, Giemsa: "n/a", Chr: &ChrX} ChrX_9A3 = genome.Band{Band: "9A3", Desc: "Band", StartPos: 9765270, EndPos: 9870079, Giemsa: "n/a", Chr: &ChrX} ChrX_9A4 = genome.Band{Band: "9A4", Desc: "Band", StartPos: 9870079, EndPos: 9940708, Giemsa: "n/a", Chr: &ChrX} ChrX_9A5 = genome.Band{Band: "9A5", Desc: "Band", StartPos: 9940708, EndPos: 9949643, Giemsa: "n/a", Chr: &ChrX} ChrX_9B1 = genome.Band{Band: "9B1", Desc: "Band", StartPos: 9949643, EndPos: 10013322, Giemsa: "n/a", Chr: &ChrX} ChrX_9B2 = genome.Band{Band: "9B2", Desc: "Band", StartPos: 10013322, EndPos: 10083951, Giemsa: "n/a", Chr: &ChrX} ChrX_9B3 = genome.Band{Band: "9B3", Desc: "Band", StartPos: 10083951, EndPos: 10099836, Giemsa: "n/a", Chr: &ChrX} ChrX_9B4 = genome.Band{Band: "9B4", Desc: "Band", StartPos: 10099836, EndPos: 10129336, Giemsa: "n/a", Chr: &ChrX} ChrX_9B5 = genome.Band{Band: "9B5", Desc: "Band", StartPos: 10129336, EndPos: 10172592, Giemsa: "n/a", Chr: &ChrX} ChrX_9B6 = genome.Band{Band: "9B6", Desc: "Band", StartPos: 10172592, EndPos: 10215849, Giemsa: "n/a", Chr: &ChrX} ChrX_9B7 = genome.Band{Band: "9B7", Desc: "Band", StartPos: 10215849, EndPos: 10245349, Giemsa: "n/a", Chr: &ChrX} ChrX_9B8 = genome.Band{Band: "9B8", Desc: "Band", StartPos: 10245349, EndPos: 10245359, Giemsa: "n/a", Chr: &ChrX} ChrX_9B9 = genome.Band{Band: "9B9", Desc: "Band", StartPos: 10245359, EndPos: 10245369, Giemsa: "n/a", Chr: &ChrX} ChrX_9B10 = genome.Band{Band: "9B10", Desc: "Band", StartPos: 10245369, EndPos: 10245379, Giemsa: "n/a", Chr: &ChrX} ChrX_9B11 = genome.Band{Band: "9B11", Desc: "Band", StartPos: 10245379, EndPos: 10260283, Giemsa: "n/a", Chr: &ChrX} ChrX_9B12 = genome.Band{Band: "9B12", Desc: "Band", StartPos: 10260283, EndPos: 10271080, Giemsa: "n/a", Chr: &ChrX} ChrX_9B13 = genome.Band{Band: "9B13", Desc: "Band", StartPos: 10271080, EndPos: 10275804, Giemsa: "n/a", Chr: &ChrX} ChrX_9B14 = genome.Band{Band: "9B14", Desc: "Band", StartPos: 10275804, EndPos: 10294319, Giemsa: "n/a", Chr: &ChrX} ChrX_9B15 = genome.Band{Band: "9B15", Desc: "Band", StartPos: 10294319, EndPos: 10295374, Giemsa: "n/a", Chr: &ChrX} ChrX_9C1 = genome.Band{Band: "9C1", Desc: "Band", StartPos: 10295374, EndPos: 10318402, Giemsa: "n/a", Chr: &ChrX} ChrX_9C2 = genome.Band{Band: "9C2", Desc: "Band", StartPos: 10318402, EndPos: 10341430, Giemsa: "n/a", Chr: &ChrX} ChrX_9C3 = genome.Band{Band: "9C3", Desc: "Band", StartPos: 10341430, EndPos: 10348179, Giemsa: "n/a", Chr: &ChrX} ChrX_9C4 = genome.Band{Band: "9C4", Desc: "Band", StartPos: 10348179, EndPos: 10354927, Giemsa: "n/a", Chr: &ChrX} ChrX_9C5 = genome.Band{Band: "9C5", Desc: "Band", StartPos: 10354927, EndPos: 10357584, Giemsa: "n/a", Chr: &ChrX} ChrX_9C6 = genome.Band{Band: "9C6", Desc: "Band", StartPos: 10357584, EndPos: 10360241, Giemsa: "n/a", Chr: &ChrX} ChrX_9D1 = genome.Band{Band: "9D1", Desc: "Band", StartPos: 10360241, EndPos: 10373105, Giemsa: "n/a", Chr: &ChrX} ChrX_9D2 = genome.Band{Band: "9D2", Desc: "Band", StartPos: 10373105, EndPos: 10428594, Giemsa: "n/a", Chr: &ChrX} ChrX_9D3 = genome.Band{Band: "9D3", Desc: "Band", StartPos: 10428594, EndPos: 10492816, Giemsa: "n/a", Chr: &ChrX} ChrX_9D4 = genome.Band{Band: "9D4", Desc: "Band", StartPos: 10492816, EndPos: 10539391, Giemsa: "n/a", Chr: &ChrX} ChrX_9E1 = genome.Band{Band: "9E1", Desc: "Band", StartPos: 10539391, EndPos: 10638726, Giemsa: "n/a", Chr: &ChrX} ChrX_9E2 = genome.Band{Band: "9E2", Desc: "Band", StartPos: 10638726, EndPos: 10648193, Giemsa: "n/a", Chr: &ChrX} ChrX_9E3 = genome.Band{Band: "9E3", Desc: "Band", StartPos: 10648193, EndPos: 10650135, Giemsa: "n/a", Chr: &ChrX} ChrX_9E4 = genome.Band{Band: "9E4", Desc: "Band", StartPos: 10650135, EndPos: 10656282, Giemsa: "n/a", Chr: &ChrX} ChrX_9E5 = genome.Band{Band: "9E5", Desc: "Band", StartPos: 10656282, EndPos: 10657873, Giemsa: "n/a", Chr: &ChrX} ChrX_9E6 = genome.Band{Band: "9E6", Desc: "Band", StartPos: 10657873, EndPos: 10659463, Giemsa: "n/a", Chr: &ChrX} ChrX_9E7 = genome.Band{Band: "9E7", Desc: "Band", StartPos: 10659463, EndPos: 10665016, Giemsa: "n/a", Chr: &ChrX} ChrX_9E8 = genome.Band{Band: "9E8", Desc: "Band", StartPos: 10665016, EndPos: 10669698, Giemsa: "n/a", Chr: &ChrX} ChrX_9E9 = genome.Band{Band: "9E9", Desc: "Band", StartPos: 10669698, EndPos: 10673618, Giemsa: "n/a", Chr: &ChrX} ChrX_9E10 = genome.Band{Band: "9E10", Desc: "Band", StartPos: 10673618, EndPos: 10675823, Giemsa: "n/a", Chr: &ChrX} ChrX_9F1 = genome.Band{Band: "9F1", Desc: "Band", StartPos: 10675823, EndPos: 10688179, Giemsa: "n/a", Chr: &ChrX} ChrX_9F2 = genome.Band{Band: "9F2", Desc: "Band", StartPos: 10688179, EndPos: 10710516, Giemsa: "n/a", Chr: &ChrX} ChrX_9F3 = genome.Band{Band: "9F3", Desc: "Band", StartPos: 10710516, EndPos: 10714502, Giemsa: "n/a", Chr: &ChrX} ChrX_9F4 = genome.Band{Band: "9F4", Desc: "Band", StartPos: 10714502, EndPos: 10733801, Giemsa: "n/a", Chr: &ChrX} ChrX_9F5 = genome.Band{Band: "9F5", Desc: "Band", StartPos: 10733801, EndPos: 10764680, Giemsa: "n/a", Chr: &ChrX} ChrX_9F6 = genome.Band{Band: "9F6", Desc: "Band", StartPos: 10764680, EndPos: 10766262, Giemsa: "n/a", Chr: &ChrX} ChrX_9F7 = genome.Band{Band: "9F7", Desc: "Band", StartPos: 10766262, EndPos: 10779423, Giemsa: "n/a", Chr: &ChrX} ChrX_9F8 = genome.Band{Band: "9F8", Desc: "Band", StartPos: 10779423, EndPos: 10801127, Giemsa: "n/a", Chr: &ChrX} ChrX_9F9 = genome.Band{Band: "9F9", Desc: "Band", StartPos: 10801127, EndPos: 10802709, Giemsa: "n/a", Chr: &ChrX} ChrX_9F10 = genome.Band{Band: "9F10", Desc: "Band", StartPos: 10802709, EndPos: 10815870, Giemsa: "n/a", Chr: &ChrX} ChrX_9F11 = genome.Band{Band: "9F11", Desc: "Band", StartPos: 10815870, EndPos: 10822957, Giemsa: "n/a", Chr: &ChrX} ChrX_9F12 = genome.Band{Band: "9F12", Desc: "Band", StartPos: 10822957, EndPos: 10842257, Giemsa: "n/a", Chr: &ChrX} ChrX_9F13 = genome.Band{Band: "9F13", Desc: "Band", StartPos: 10842257, EndPos: 10870668, Giemsa: "n/a", Chr: &ChrX} ChrX_10A1 = genome.Band{Band: "10A1", Desc: "Band", StartPos: 10870668, EndPos: 10896041, Giemsa: "n/a", Chr: &ChrX} ChrX_10A2 = genome.Band{Band: "10A2", Desc: "Band", StartPos: 10896041, EndPos: 10927553, Giemsa: "n/a", Chr: &ChrX} ChrX_10A3 = genome.Band{Band: "10A3", Desc: "Band", StartPos: 10927553, EndPos: 10959403, Giemsa: "n/a", Chr: &ChrX} ChrX_10A4 = genome.Band{Band: "10A4", Desc: "Band", StartPos: 10959403, EndPos: 11006760, Giemsa: "n/a", Chr: &ChrX} ChrX_10A5 = genome.Band{Band: "10A5", Desc: "Band", StartPos: 11006760, EndPos: 11009186, Giemsa: "n/a", Chr: &ChrX} ChrX_10A6 = genome.Band{Band: "10A6", Desc: "Band", StartPos: 11009186, EndPos: 11033058, Giemsa: "n/a", Chr: &ChrX} ChrX_10A7 = genome.Band{Band: "10A7", Desc: "Band", StartPos: 11033058, EndPos: 11035484, Giemsa: "n/a", Chr: &ChrX} ChrX_10A8 = genome.Band{Band: "10A8", Desc: "Band", StartPos: 11035484, EndPos: 11059356, Giemsa: "n/a", Chr: &ChrX} ChrX_10A9 = genome.Band{Band: "10A9", Desc: "Band", StartPos: 11059356, EndPos: 11061782, Giemsa: "n/a", Chr: &ChrX} ChrX_10A10 = genome.Band{Band: "10A10", Desc: "Band", StartPos: 11061782, EndPos: 11081967, Giemsa: "n/a", Chr: &ChrX} ChrX_10A11 = genome.Band{Band: "10A11", Desc: "Band", StartPos: 11081967, EndPos: 11092836, Giemsa: "n/a", Chr: &ChrX} ChrX_10B1 = genome.Band{Band: "10B1", Desc: "Band", StartPos: 11092836, EndPos: 11155136, Giemsa: "n/a", Chr: &ChrX} ChrX_10B2 = genome.Band{Band: "10B2", Desc: "Band", StartPos: 11155136, EndPos: 11217437, Giemsa: "n/a", Chr: &ChrX} ChrX_10B3 = genome.Band{Band: "10B3", Desc: "Band", StartPos: 11217437, EndPos: 11247035, Giemsa: "n/a", Chr: &ChrX} ChrX_10B4 = genome.Band{Band: "10B4", Desc: "Band", StartPos: 11247035, EndPos: 11252262, Giemsa: "n/a", Chr: &ChrX} ChrX_10B5 = genome.Band{Band: "10B5", Desc: "Band", StartPos: 11252262, EndPos: 11260318, Giemsa: "n/a", Chr: &ChrX} ChrX_10B6 = genome.Band{Band: "10B6", Desc: "Band", StartPos: 11260318, EndPos: 11268374, Giemsa: "n/a", Chr: &ChrX} ChrX_10B7 = genome.Band{Band: "10B7", Desc: "Band", StartPos: 11268374, EndPos: 11276429, Giemsa: "n/a", Chr: &ChrX} ChrX_10B8 = genome.Band{Band: "10B8", Desc: "Band", StartPos: 11276429, EndPos: 11297188, Giemsa: "n/a", Chr: &ChrX} ChrX_10B9 = genome.Band{Band: "10B9", Desc: "Band", StartPos: 11297188, EndPos: 11298157, Giemsa: "n/a", Chr: &ChrX} ChrX_10B10 = genome.Band{Band: "10B10", Desc: "Band", StartPos: 11298157, EndPos: 11313687, Giemsa: "n/a", Chr: &ChrX} ChrX_10B11 = genome.Band{Band: "10B11", Desc: "Band", StartPos: 11313687, EndPos: 11329218, Giemsa: "n/a", Chr: &ChrX} ChrX_10B12 = genome.Band{Band: "10B12", Desc: "Band", StartPos: 11329218, EndPos: 11333555, Giemsa: "n/a", Chr: &ChrX} ChrX_10B13 = genome.Band{Band: "10B13", Desc: "Band", StartPos: 11333555, EndPos: 11347227, Giemsa: "n/a", Chr: &ChrX} ChrX_10B14 = genome.Band{Band: "10B14", Desc: "Band", StartPos: 11347227, EndPos: 11360898, Giemsa: "n/a", Chr: &ChrX} ChrX_10B15 = genome.Band{Band: "10B15", Desc: "Band", StartPos: 11360898, EndPos: 11379798, Giemsa: "n/a", Chr: &ChrX} ChrX_10B16 = genome.Band{Band: "10B16", Desc: "Band", StartPos: 11379798, EndPos: 11380767, Giemsa: "n/a", Chr: &ChrX} ChrX_10B17 = genome.Band{Band: "10B17", Desc: "Band", StartPos: 11380767, EndPos: 11383206, Giemsa: "n/a", Chr: &ChrX} ChrX_10C1 = genome.Band{Band: "10C1", Desc: "Band", StartPos: 11383206, EndPos: 11398737, Giemsa: "n/a", Chr: &ChrX} ChrX_10C2 = genome.Band{Band: "10C2", Desc: "Band", StartPos: 11398737, EndPos: 11416938, Giemsa: "n/a", Chr: &ChrX} ChrX_10C3 = genome.Band{Band: "10C3", Desc: "Band", StartPos: 11416938, EndPos: 11430782, Giemsa: "n/a", Chr: &ChrX} ChrX_10C4 = genome.Band{Band: "10C4", Desc: "Band", StartPos: 11430782, EndPos: 11442402, Giemsa: "n/a", Chr: &ChrX} ChrX_10C5 = genome.Band{Band: "10C5", Desc: "Band", StartPos: 11442402, EndPos: 11454022, Giemsa: "n/a", Chr: &ChrX} ChrX_10C6 = genome.Band{Band: "10C6", Desc: "Band", StartPos: 11454022, EndPos: 11465642, Giemsa: "n/a", Chr: &ChrX} ChrX_10C7 = genome.Band{Band: "10C7", Desc: "Band", StartPos: 11465642, EndPos: 11479032, Giemsa: "n/a", Chr: &ChrX} ChrX_10C8 = genome.Band{Band: "10C8", Desc: "Band", StartPos: 11479032, EndPos: 11480167, Giemsa: "n/a", Chr: &ChrX} ChrX_10C9 = genome.Band{Band: "10C9", Desc: "Band", StartPos: 11480167, EndPos: 11491787, Giemsa: "n/a", Chr: &ChrX} ChrX_10C10 = genome.Band{Band: "10C10", Desc: "Band", StartPos: 11491787, EndPos: 11501228, Giemsa: "n/a", Chr: &ChrX} ChrX_10D1 = genome.Band{Band: "10D1", Desc: "Band", StartPos: 11501228, EndPos: 11517250, Giemsa: "n/a", Chr: &ChrX} ChrX_10D2 = genome.Band{Band: "10D2", Desc: "Band", StartPos: 11517250, EndPos: 11551376, Giemsa: "n/a", Chr: &ChrX} ChrX_10D3 = genome.Band{Band: "10D3", Desc: "Band", StartPos: 11551376, EndPos: 11558119, Giemsa: "n/a", Chr: &ChrX} ChrX_10D4 = genome.Band{Band: "10D4", Desc: "Band", StartPos: 11558119, EndPos: 11580383, Giemsa: "n/a", Chr: &ChrX} ChrX_10D5 = genome.Band{Band: "10D5", Desc: "Band", StartPos: 11580383, EndPos: 11600812, Giemsa: "n/a", Chr: &ChrX} ChrX_10D6 = genome.Band{Band: "10D6", Desc: "Band", StartPos: 11600812, EndPos: 11609434, Giemsa: "n/a", Chr: &ChrX} ChrX_10D7 = genome.Band{Band: "10D7", Desc: "Band", StartPos: 11609434, EndPos: 11614284, Giemsa: "n/a", Chr: &ChrX} ChrX_10D8 = genome.Band{Band: "10D8", Desc: "Band", StartPos: 11614284, EndPos: 11622906, Giemsa: "n/a", Chr: &ChrX} ChrX_10E1 = genome.Band{Band: "10E1", Desc: "Band", StartPos: 11622906, EndPos: 11650081, Giemsa: "n/a", Chr: &ChrX} ChrX_10E2 = genome.Band{Band: "10E2", Desc: "Band", StartPos: 11650081, EndPos: 11675318, Giemsa: "n/a", Chr: &ChrX} ChrX_10E3 = genome.Band{Band: "10E3", Desc: "Band", StartPos: 11675318, EndPos: 11699603, Giemsa: "n/a", Chr: &ChrX} ChrX_10E4 = genome.Band{Band: "10E4", Desc: "Band", StartPos: 11699603, EndPos: 11701661, Giemsa: "n/a", Chr: &ChrX} ChrX_10E5 = genome.Band{Band: "10E5", Desc: "Band", StartPos: 11701661, EndPos: 11706848, Giemsa: "n/a", Chr: &ChrX} ChrX_10E6 = genome.Band{Band: "10E6", Desc: "Band", StartPos: 11706848, EndPos: 11723971, Giemsa: "n/a", Chr: &ChrX} ChrX_10F1 = genome.Band{Band: "10F1", Desc: "Band", StartPos: 11723971, EndPos: 11749080, Giemsa: "n/a", Chr: &ChrX} ChrX_10F2 = genome.Band{Band: "10F2", Desc: "Band", StartPos: 11749080, EndPos: 11772585, Giemsa: "n/a", Chr: &ChrX} ChrX_10F3 = genome.Band{Band: "10F3", Desc: "Band", StartPos: 11772585, EndPos: 11777440, Giemsa: "n/a", Chr: &ChrX} ChrX_10F4 = genome.Band{Band: "10F4", Desc: "Band", StartPos: 11777440, EndPos: 11803873, Giemsa: "n/a", Chr: &ChrX} ChrX_10F5 = genome.Band{Band: "10F5", Desc: "Band", StartPos: 11803873, EndPos: 11805799, Giemsa: "n/a", Chr: &ChrX} ChrX_10F6 = genome.Band{Band: "10F6", Desc: "Band", StartPos: 11805799, EndPos: 11814431, Giemsa: "n/a", Chr: &ChrX} ChrX_10F7 = genome.Band{Band: "10F7", Desc: "Band", StartPos: 11814431, EndPos: 11826761, Giemsa: "n/a", Chr: &ChrX} ChrX_10F8 = genome.Band{Band: "10F8", Desc: "Band", StartPos: 11826761, EndPos: 11839091, Giemsa: "n/a", Chr: &ChrX} ChrX_10F9 = genome.Band{Band: "10F9", Desc: "Band", StartPos: 11839091, EndPos: 11847722, Giemsa: "n/a", Chr: &ChrX} ChrX_10F10 = genome.Band{Band: "10F10", Desc: "Band", StartPos: 11847722, EndPos: 11863752, Giemsa: "n/a", Chr: &ChrX} ChrX_10F11 = genome.Band{Band: "10F11", Desc: "Band", StartPos: 11863752, EndPos: 11876082, Giemsa: "n/a", Chr: &ChrX} ChrX_11A1 = genome.Band{Band: "11A1", Desc: "Band", StartPos: 11876082, EndPos: 11921087, Giemsa: "n/a", Chr: &ChrX} ChrX_11A2 = genome.Band{Band: "11A2", Desc: "Band", StartPos: 11921087, EndPos: 11956703, Giemsa: "n/a", Chr: &ChrX} ChrX_11A3 = genome.Band{Band: "11A3", Desc: "Band", StartPos: 11956703, EndPos: 11995745, Giemsa: "n/a", Chr: &ChrX} ChrX_11A4 = genome.Band{Band: "11A4", Desc: "Band", StartPos: 11995745, EndPos: 12034787, Giemsa: "n/a", Chr: &ChrX} ChrX_11A5 = genome.Band{Band: "11A5", Desc: "Band", StartPos: 12034787, EndPos: 12064819, Giemsa: "n/a", Chr: &ChrX} ChrX_11A6 = genome.Band{Band: "11A6", Desc: "Band", StartPos: 12064819, EndPos: 12122068, Giemsa: "n/a", Chr: &ChrX} ChrX_11A7 = genome.Band{Band: "11A7", Desc: "Band", StartPos: 12122068, EndPos: 12188326, Giemsa: "n/a", Chr: &ChrX} ChrX_11A8 = genome.Band{Band: "11A8", Desc: "Band", StartPos: 12188326, EndPos: 12254585, Giemsa: "n/a", Chr: &ChrX} ChrX_11A9 = genome.Band{Band: "11A9", Desc: "Band", StartPos: 12254585, EndPos: 12320843, Giemsa: "n/a", Chr: &ChrX} ChrX_11A10 = genome.Band{Band: "11A10", Desc: "Band", StartPos: 12320843, EndPos: 12341866, Giemsa: "n/a", Chr: &ChrX} ChrX_11A11 = genome.Band{Band: "11A11", Desc: "Band", StartPos: 12341866, EndPos: 12380907, Giemsa: "n/a", Chr: &ChrX} ChrX_11A12 = genome.Band{Band: "11A12", Desc: "Band", StartPos: 12380907, EndPos: 12419949, Giemsa: "n/a", Chr: &ChrX} ChrX_11B1 = genome.Band{Band: "11B1", Desc: "Band", StartPos: 12419949, EndPos: 12477198, Giemsa: "n/a", Chr: &ChrX} ChrX_11B2 = genome.Band{Band: "11B2", Desc: "Band", StartPos: 12477198, EndPos: 12499852, Giemsa: "n/a", Chr: &ChrX} ChrX_11B3 = genome.Band{Band: "11B3", Desc: "Band", StartPos: 12499852, EndPos: 12508170, Giemsa: "n/a", Chr: &ChrX} ChrX_11B4 = genome.Band{Band: "11B4", Desc: "Band", StartPos: 12508170, EndPos: 12516489, Giemsa: "n/a", Chr: &ChrX} ChrX_11B5 = genome.Band{Band: "11B5", Desc: "Band", StartPos: 12516489, EndPos: 12524808, Giemsa: "n/a", Chr: &ChrX} ChrX_11B6 = genome.Band{Band: "11B6", Desc: "Band", StartPos: 12524808, EndPos: 12533127, Giemsa: "n/a", Chr: &ChrX} ChrX_11B7 = genome.Band{Band: "11B7", Desc: "Band", StartPos: 12533127, EndPos: 12551398, Giemsa: "n/a", Chr: &ChrX} ChrX_11B8 = genome.Band{Band: "11B8", Desc: "Band", StartPos: 12551398, EndPos: 12553255, Giemsa: "n/a", Chr: &ChrX} ChrX_11B9 = genome.Band{Band: "11B9", Desc: "Band", StartPos: 12553255, EndPos: 12572269, Giemsa: "n/a", Chr: &ChrX} ChrX_11B10 = genome.Band{Band: "11B10", Desc: "Band", StartPos: 12572269, EndPos: 12597746, Giemsa: "n/a", Chr: &ChrX} ChrX_11B11 = genome.Band{Band: "11B11", Desc: "Band", StartPos: 12597746, EndPos: 12599602, Giemsa: "n/a", Chr: &ChrX} ChrX_11B12 = genome.Band{Band: "11B12", Desc: "Band", StartPos: 12599602, EndPos: 12604282, Giemsa: "n/a", Chr: &ChrX} ChrX_11B13 = genome.Band{Band: "11B13", Desc: "Band", StartPos: 12604282, EndPos: 12616166, Giemsa: "n/a", Chr: &ChrX} ChrX_11B14 = genome.Band{Band: "11B14", Desc: "Band", StartPos: 12616166, EndPos: 12645207, Giemsa: "n/a", Chr: &ChrX} ChrX_11B15 = genome.Band{Band: "11B15", Desc: "Band", StartPos: 12645207, EndPos: 12647064, Giemsa: "n/a", Chr: &ChrX} ChrX_11B16 = genome.Band{Band: "11B16", Desc: "Band", StartPos: 12647064, EndPos: 12666078, Giemsa: "n/a", Chr: &ChrX} ChrX_11B17 = genome.Band{Band: "11B17", Desc: "Band", StartPos: 12666078, EndPos: 12666088, Giemsa: "n/a", Chr: &ChrX} ChrX_11B18 = genome.Band{Band: "11B18", Desc: "Band", StartPos: 12666088, EndPos: 12666098, Giemsa: "n/a", Chr: &ChrX} ChrX_11B19 = genome.Band{Band: "11B19", Desc: "Band", StartPos: 12666098, EndPos: 12666108, Giemsa: "n/a", Chr: &ChrX} ChrX_11C1 = genome.Band{Band: "11C1", Desc: "Band", StartPos: 12666108, EndPos: 12672565, Giemsa: "n/a", Chr: &ChrX} ChrX_11C2 = genome.Band{Band: "11C2", Desc: "Band", StartPos: 12672565, EndPos: 12705968, Giemsa: "n/a", Chr: &ChrX} ChrX_11C3 = genome.Band{Band: "11C3", Desc: "Band", StartPos: 12705968, EndPos: 12718234, Giemsa: "n/a", Chr: &ChrX} ChrX_11C4 = genome.Band{Band: "11C4", Desc: "Band", StartPos: 12718234, EndPos: 12730499, Giemsa: "n/a", Chr: &ChrX} ChrX_11D1 = genome.Band{Band: "11D1", Desc: "Band", StartPos: 12730499, EndPos: 12805079, Giemsa: "n/a", Chr: &ChrX} ChrX_11D2 = genome.Band{Band: "11D2", Desc: "Band", StartPos: 12805079, EndPos: 12807817, Giemsa: "n/a", Chr: &ChrX} ChrX_11D3 = genome.Band{Band: "11D3", Desc: "Band", StartPos: 12807817, EndPos: 12835853, Giemsa: "n/a", Chr: &ChrX} ChrX_11D4 = genome.Band{Band: "11D4", Desc: "Band", StartPos: 12835853, EndPos: 12848119, Giemsa: "n/a", Chr: &ChrX} ChrX_11D5 = genome.Band{Band: "11D5", Desc: "Band", StartPos: 12848119, EndPos: 12876154, Giemsa: "n/a", Chr: &ChrX} ChrX_11D6 = genome.Band{Band: "11D6", Desc: "Band", StartPos: 12876154, EndPos: 12904190, Giemsa: "n/a", Chr: &ChrX} ChrX_11D7 = genome.Band{Band: "11D7", Desc: "Band", StartPos: 12904190, EndPos: 12916456, Giemsa: "n/a", Chr: &ChrX} ChrX_11D8 = genome.Band{Band: "11D8", Desc: "Band", StartPos: 12916456, EndPos: 12949858, Giemsa: "n/a", Chr: &ChrX} ChrX_11D9 = genome.Band{Band: "11D9", Desc: "Band", StartPos: 12949858, EndPos: 12967381, Giemsa: "n/a", Chr: &ChrX} ChrX_11D10 = genome.Band{Band: "11D10", Desc: "Band", StartPos: 12967381, EndPos: 12995416, Giemsa: "n/a", Chr: &ChrX} ChrX_11D11 = genome.Band{Band: "11D11", Desc: "Band", StartPos: 12995416, EndPos: 13007682, Giemsa: "n/a", Chr: &ChrX} ChrX_11E1 = genome.Band{Band: "11E1", Desc: "Band", StartPos: 13007682, EndPos: 13066382, Giemsa: "n/a", Chr: &ChrX} ChrX_11E2 = genome.Band{Band: "11E2", Desc: "Band", StartPos: 13066382, EndPos: 13069120, Giemsa: "n/a", Chr: &ChrX} ChrX_11E3 = genome.Band{Band: "11E3", Desc: "Band", StartPos: 13069120, EndPos: 13111941, Giemsa: "n/a", Chr: &ChrX} ChrX_11E4 = genome.Band{Band: "11E4", Desc: "Band", StartPos: 13111941, EndPos: 13114678, Giemsa: "n/a", Chr: &ChrX} ChrX_11E5 = genome.Band{Band: "11E5", Desc: "Band", StartPos: 13114678, EndPos: 13121578, Giemsa: "n/a", Chr: &ChrX} ChrX_11E6 = genome.Band{Band: "11E6", Desc: "Band", StartPos: 13121578, EndPos: 13144357, Giemsa: "n/a", Chr: &ChrX} ChrX_11E7 = genome.Band{Band: "11E7", Desc: "Band", StartPos: 13144357, EndPos: 13151257, Giemsa: "n/a", Chr: &ChrX} ChrX_11E8 = genome.Band{Band: "11E8", Desc: "Band", StartPos: 13151257, EndPos: 13179292, Giemsa: "n/a", Chr: &ChrX} ChrX_11E9 = genome.Band{Band: "11E9", Desc: "Band", StartPos: 13179292, EndPos: 13206233, Giemsa: "n/a", Chr: &ChrX} ChrX_11E10 = genome.Band{Band: "11E10", Desc: "Band", StartPos: 13206233, EndPos: 13208971, Giemsa: "n/a", Chr: &ChrX} ChrX_11E11 = genome.Band{Band: "11E11", Desc: "Band", StartPos: 13208971, EndPos: 13230655, Giemsa: "n/a", Chr: &ChrX} ChrX_11E12 = genome.Band{Band: "11E12", Desc: "Band", StartPos: 13230655, EndPos: 13233393, Giemsa: "n/a", Chr: &ChrX} ChrX_11E13 = genome.Band{Band: "11E13", Desc: "Band", StartPos: 13233393, EndPos: 13240292, Giemsa: "n/a", Chr: &ChrX} ChrX_11F1 = genome.Band{Band: "11F1", Desc: "Band", StartPos: 13240292, EndPos: 13293736, Giemsa: "n/a", Chr: &ChrX} ChrX_11F2 = genome.Band{Band: "11F2", Desc: "Band", StartPos: 13293736, EndPos: 13293746, Giemsa: "n/a", Chr: &ChrX} ChrX_11F3 = genome.Band{Band: "11F3", Desc: "Band", StartPos: 13293746, EndPos: 13295723, Giemsa: "n/a", Chr: &ChrX} ChrX_11F4 = genome.Band{Band: "11F4", Desc: "Band", StartPos: 13295723, EndPos: 13307594, Giemsa: "n/a", Chr: &ChrX} ChrX_11F5 = genome.Band{Band: "11F5", Desc: "Band", StartPos: 13307594, EndPos: 13315904, Giemsa: "n/a", Chr: &ChrX} ChrX_11F6 = genome.Band{Band: "11F6", Desc: "Band", StartPos: 13315904, EndPos: 13331336, Giemsa: "n/a", Chr: &ChrX} ChrX_11F7 = genome.Band{Band: "11F7", Desc: "Band", StartPos: 13331336, EndPos: 13346768, Giemsa: "n/a", Chr: &ChrX} ChrX_11F8 = genome.Band{Band: "11F8", Desc: "Band", StartPos: 13346768, EndPos: 13355078, Giemsa: "n/a", Chr: &ChrX} ChrX_12A1 = genome.Band{Band: "12A1", Desc: "Band", StartPos: 13355078, EndPos: 13392026, Giemsa: "n/a", Chr: &ChrX} ChrX_12A2 = genome.Band{Band: "12A2", Desc: "Band", StartPos: 13392026, EndPos: 13425338, Giemsa: "n/a", Chr: &ChrX} ChrX_12A3 = genome.Band{Band: "12A3", Desc: "Band", StartPos: 13425338, EndPos: 13430012, Giemsa: "n/a", Chr: &ChrX} ChrX_12A4 = genome.Band{Band: "12A4", Desc: "Band", StartPos: 13430012, EndPos: 13466219, Giemsa: "n/a", Chr: &ChrX} ChrX_12A5 = genome.Band{Band: "12A5", Desc: "Band", StartPos: 13466219, EndPos: 13468073, Giemsa: "n/a", Chr: &ChrX} ChrX_12A6 = genome.Band{Band: "12A6", Desc: "Band", StartPos: 13468073, EndPos: 13483506, Giemsa: "n/a", Chr: &ChrX} ChrX_12A7 = genome.Band{Band: "12A7", Desc: "Band", StartPos: 13483506, EndPos: 13498938, Giemsa: "n/a", Chr: &ChrX} ChrX_12A8 = genome.Band{Band: "12A8", Desc: "Band", StartPos: 13498938, EndPos: 13517931, Giemsa: "n/a", Chr: &ChrX} ChrX_12A9 = genome.Band{Band: "12A9", Desc: "Band", StartPos: 13517931, EndPos: 13540560, Giemsa: "n/a", Chr: &ChrX} ChrX_12A10 = genome.Band{Band: "12A10", Desc: "Band", StartPos: 13540560, EndPos: 13540570, Giemsa: "n/a", Chr: &ChrX} ChrX_12B1 = genome.Band{Band: "12B1", Desc: "Band", StartPos: 13540570, EndPos: 13549067, Giemsa: "n/a", Chr: &ChrX} ChrX_12B2 = genome.Band{Band: "12B2", Desc: "Band", StartPos: 13549067, EndPos: 13585893, Giemsa: "n/a", Chr: &ChrX} ChrX_12B3 = genome.Band{Band: "12B3", Desc: "Band", StartPos: 13585893, EndPos: 13597578, Giemsa: "n/a", Chr: &ChrX} ChrX_12B4 = genome.Band{Band: "12B4", Desc: "Band", StartPos: 13597578, EndPos: 13648488, Giemsa: "n/a", Chr: &ChrX} ChrX_12B5 = genome.Band{Band: "12B5", Desc: "Band", StartPos: 13648488, EndPos: 13648498, Giemsa: "n/a", Chr: &ChrX} ChrX_12B6 = genome.Band{Band: "12B6", Desc: "Band", StartPos: 13648498, EndPos: 13648508, Giemsa: "n/a", Chr: &ChrX} ChrX_12B7 = genome.Band{Band: "12B7", Desc: "Band", StartPos: 13648508, EndPos: 13648518, Giemsa: "n/a", Chr: &ChrX} ChrX_12B8 = genome.Band{Band: "12B8", Desc: "Band", StartPos: 13648518, EndPos: 13648528, Giemsa: "n/a", Chr: &ChrX} ChrX_12B9 = genome.Band{Band: "12B9", Desc: "Band", StartPos: 13648528, EndPos: 13649247, Giemsa: "n/a", Chr: &ChrX} ChrX_12B10 = genome.Band{Band: "12B10", Desc: "Band", StartPos: 13649247, EndPos: 13651698, Giemsa: "n/a", Chr: &ChrX} ChrX_12C1 = genome.Band{Band: "12C1", Desc: "Band", StartPos: 13651698, EndPos: 13661303, Giemsa: "n/a", Chr: &ChrX} ChrX_12C2 = genome.Band{Band: "12C2", Desc: "Band", StartPos: 13661303, EndPos: 13666933, Giemsa: "n/a", Chr: &ChrX} ChrX_12C3 = genome.Band{Band: "12C3", Desc: "Band", StartPos: 13666933, EndPos: 13669691, Giemsa: "n/a", Chr: &ChrX} ChrX_12C4 = genome.Band{Band: "12C4", Desc: "Band", StartPos: 13669691, EndPos: 13678799, Giemsa: "n/a", Chr: &ChrX} ChrX_12C5 = genome.Band{Band: "12C5", Desc: "Band", StartPos: 13678799, EndPos: 13713509, Giemsa: "n/a", Chr: &ChrX} ChrX_12C6 = genome.Band{Band: "12C6", Desc: "Band", StartPos: 13713509, EndPos: 13735277, Giemsa: "n/a", Chr: &ChrX} ChrX_12C7 = genome.Band{Band: "12C7", Desc: "Band", StartPos: 13735277, EndPos: 13792612, Giemsa: "n/a", Chr: &ChrX} ChrX_12C8 = genome.Band{Band: "12C8", Desc: "Band", StartPos: 13792612, EndPos: 13797471, Giemsa: "n/a", Chr: &ChrX} ChrX_12D1 = genome.Band{Band: "12D1", Desc: "Band", StartPos: 13797471, EndPos: 13884736, Giemsa: "n/a", Chr: &ChrX} ChrX_12D2 = genome.Band{Band: "12D2", Desc: "Band", StartPos: 13884736, EndPos: 13938931, Giemsa: "n/a", Chr: &ChrX} ChrX_12D3 = genome.Band{Band: "12D3", Desc: "Band", StartPos: 13938931, EndPos: 13952449, Giemsa: "n/a", Chr: &ChrX} ChrX_12D4 = genome.Band{Band: "12D4", Desc: "Band", StartPos: 13952449, EndPos: 13965968, Giemsa: "n/a", Chr: &ChrX} ChrX_12D5 = genome.Band{Band: "12D5", Desc: "Band", StartPos: 13965968, EndPos: 13975020, Giemsa: "n/a", Chr: &ChrX} ChrX_12E1 = genome.Band{Band: "12E1", Desc: "Band", StartPos: 13975020, EndPos: 14023421, Giemsa: "n/a", Chr: &ChrX} ChrX_12E2 = genome.Band{Band: "12E2", Desc: "Band", StartPos: 14023421, EndPos: 14083530, Giemsa: "n/a", Chr: &ChrX} ChrX_12E3 = genome.Band{Band: "12E3", Desc: "Band", StartPos: 14083530, EndPos: 14097049, Giemsa: "n/a", Chr: &ChrX} ChrX_12E4 = genome.Band{Band: "12E4", Desc: "Band", StartPos: 14097049, EndPos: 14110567, Giemsa: "n/a", Chr: &ChrX} ChrX_12E5 = genome.Band{Band: "12E5", Desc: "Band", StartPos: 14110567, EndPos: 14145167, Giemsa: "n/a", Chr: &ChrX} ChrX_12E6 = genome.Band{Band: "12E6", Desc: "Band", StartPos: 14145167, EndPos: 14165332, Giemsa: "n/a", Chr: &ChrX} ChrX_12E7 = genome.Band{Band: "12E7", Desc: "Band", StartPos: 14165332, EndPos: 14185496, Giemsa: "n/a", Chr: &ChrX} ChrX_12E8 = genome.Band{Band: "12E8", Desc: "Band", StartPos: 14185496, EndPos: 14266333, Giemsa: "n/a", Chr: &ChrX} ChrX_12E9 = genome.Band{Band: "12E9", Desc: "Band", StartPos: 14266333, EndPos: 14347171, Giemsa: "n/a", Chr: &ChrX} ChrX_12E10 = genome.Band{Band: "12E10", Desc: "Band", StartPos: 14347171, EndPos: 14384619, Giemsa: "n/a", Chr: &ChrX} ChrX_12E11 = genome.Band{Band: "12E11", Desc: "Band", StartPos: 14384619, EndPos: 14404783, Giemsa: "n/a", Chr: &ChrX} ChrX_12F1 = genome.Band{Band: "12F1", Desc: "Band", StartPos: 14404783, EndPos: 14544674, Giemsa: "n/a", Chr: &ChrX} ChrX_12F2 = genome.Band{Band: "12F2", Desc: "Band", StartPos: 14544674, EndPos: 14612199, Giemsa: "n/a", Chr: &ChrX} ChrX_12F3 = genome.Band{Band: "12F3", Desc: "Band", StartPos: 14612199, EndPos: 14649966, Giemsa: "n/a", Chr: &ChrX} ChrX_12F4 = genome.Band{Band: "12F4", Desc: "Band", StartPos: 14649966, EndPos: 14720105, Giemsa: "n/a", Chr: &ChrX} ChrX_12F5 = genome.Band{Band: "12F5", Desc: "Band", StartPos: 14720105, EndPos: 14742849, Giemsa: "n/a", Chr: &ChrX} ChrX_12F6 = genome.Band{Band: "12F6", Desc: "Band", StartPos: 14742849, EndPos: 14764500, Giemsa: "n/a", Chr: &ChrX} ChrX_12F7 = genome.Band{Band: "12F7", Desc: "Band", StartPos: 14764500, EndPos: 14767234, Giemsa: "n/a", Chr: &ChrX} ChrX_13A1 = genome.Band{Band: "13A1", Desc: "Band", StartPos: 14767234, EndPos: 14862803, Giemsa: "n/a", Chr: &ChrX} ChrX_13A2 = genome.Band{Band: "13A2", Desc: "Band", StartPos: 14862803, EndPos: 14865537, Giemsa: "n/a", Chr: &ChrX} ChrX_13A3 = genome.Band{Band: "13A3", Desc: "Band", StartPos: 14865537, EndPos: 14872426, Giemsa: "n/a", Chr: &ChrX} ChrX_13A4 = genome.Band{Band: "13A4", Desc: "Band", StartPos: 14872426, EndPos: 14879314, Giemsa: "n/a", Chr: &ChrX} ChrX_13A5 = genome.Band{Band: "13A5", Desc: "Band", StartPos: 14879314, EndPos: 14953780, Giemsa: "n/a", Chr: &ChrX} ChrX_13A6 = genome.Band{Band: "13A6", Desc: "Band", StartPos: 14953780, EndPos: 14953790, Giemsa: "n/a", Chr: &ChrX} ChrX_13A7 = genome.Band{Band: "13A7", Desc: "Band", StartPos: 14953790, EndPos: 14953800, Giemsa: "n/a", Chr: &ChrX} ChrX_13A8 = genome.Band{Band: "13A8", Desc: "Band", StartPos: 14953800, EndPos: 14967097, Giemsa: "n/a", Chr: &ChrX} ChrX_13A9 = genome.Band{Band: "13A9", Desc: "Band", StartPos: 14967097, EndPos: 14979400, Giemsa: "n/a", Chr: &ChrX} ChrX_13A10 = genome.Band{Band: "13A10", Desc: "Band", StartPos: 14979400, EndPos: 14986926, Giemsa: "n/a", Chr: &ChrX} ChrX_13A11 = genome.Band{Band: "13A11", Desc: "Band", StartPos: 14986926, EndPos: 15006040, Giemsa: "n/a", Chr: &ChrX} ChrX_13A12 = genome.Band{Band: "13A12", Desc: "Band", StartPos: 15006040, EndPos: 15025154, Giemsa: "n/a", Chr: &ChrX} ChrX_13B1 = genome.Band{Band: "13B1", Desc: "Band", StartPos: 15025154, EndPos: 15089185, Giemsa: "n/a", Chr: &ChrX} ChrX_13B2 = genome.Band{Band: "13B2", Desc: "Band", StartPos: 15089185, EndPos: 15092172, Giemsa: "n/a", Chr: &ChrX} ChrX_13B3 = genome.Band{Band: "13B3", Desc: "Band", StartPos: 15092172, EndPos: 15140076, Giemsa: "n/a", Chr: &ChrX} ChrX_13B4 = genome.Band{Band: "13B4", Desc: "Band", StartPos: 15140076, EndPos: 15187980, Giemsa: "n/a", Chr: &ChrX} ChrX_13B5 = genome.Band{Band: "13B5", Desc: "Band", StartPos: 15187980, EndPos: 15201360, Giemsa: "n/a", Chr: &ChrX} ChrX_13B6 = genome.Band{Band: "13B6", Desc: "Band", StartPos: 15201360, EndPos: 15236601, Giemsa: "n/a", Chr: &ChrX} ChrX_13B7 = genome.Band{Band: "13B7", Desc: "Band", StartPos: 15236601, EndPos: 15239588, Giemsa: "n/a", Chr: &ChrX} ChrX_13B8 = genome.Band{Band: "13B8", Desc: "Band", StartPos: 15239588, EndPos: 15252967, Giemsa: "n/a", Chr: &ChrX} ChrX_13B9 = genome.Band{Band: "13B9", Desc: "Band", StartPos: 15252967, EndPos: 15266347, Giemsa: "n/a", Chr: &ChrX} ChrX_13C1 = genome.Band{Band: "13C1", Desc: "Band", StartPos: 15266347, EndPos: 15336113, Giemsa: "n/a", Chr: &ChrX} ChrX_13C2 = genome.Band{Band: "13C2", Desc: "Band", StartPos: 15336113, EndPos: 15339099, Giemsa: "n/a", Chr: &ChrX} ChrX_13C3 = genome.Band{Band: "13C3", Desc: "Band", StartPos: 15339099, EndPos: 15350080, Giemsa: "n/a", Chr: &ChrX} ChrX_13C4 = genome.Band{Band: "13C4", Desc: "Band", StartPos: 15350080, EndPos: 15367642, Giemsa: "n/a", Chr: &ChrX} ChrX_13C5 = genome.Band{Band: "13C5", Desc: "Band", StartPos: 15367642, EndPos: 15400655, Giemsa: "n/a", Chr: &ChrX} ChrX_13C6 = genome.Band{Band: "13C6", Desc: "Band", StartPos: 15400655, EndPos: 15400665, Giemsa: "n/a", Chr: &ChrX} ChrX_13C7 = genome.Band{Band: "13C7", Desc: "Band", StartPos: 15400665, EndPos: 15408658, Giemsa: "n/a", Chr: &ChrX} ChrX_13C8 = genome.Band{Band: "13C8", Desc: "Band", StartPos: 15408658, EndPos: 15416867, Giemsa: "n/a", Chr: &ChrX} ChrX_13D1 = genome.Band{Band: "13D1", Desc: "Band", StartPos: 15416867, EndPos: 15439222, Giemsa: "n/a", Chr: &ChrX} ChrX_13D2 = genome.Band{Band: "13D2", Desc: "Band", StartPos: 15439222, EndPos: 15461577, Giemsa: "n/a", Chr: &ChrX} ChrX_13D3 = genome.Band{Band: "13D3", Desc: "Band", StartPos: 15461577, EndPos: 15469786, Giemsa: "n/a", Chr: &ChrX} ChrX_13D4 = genome.Band{Band: "13D4", Desc: "Band", StartPos: 15469786, EndPos: 15484298, Giemsa: "n/a", Chr: &ChrX} ChrX_13D5 = genome.Band{Band: "13D5", Desc: "Band", StartPos: 15484298, EndPos: 15486131, Giemsa: "n/a", Chr: &ChrX} ChrX_13E1 = genome.Band{Band: "13E1", Desc: "Band", StartPos: 15486131, EndPos: 15521898, Giemsa: "n/a", Chr: &ChrX} ChrX_13E2 = genome.Band{Band: "13E2", Desc: "Band", StartPos: 15521898, EndPos: 15523731, Giemsa: "n/a", Chr: &ChrX} ChrX_13E3 = genome.Band{Band: "13E3", Desc: "Band", StartPos: 15523731, EndPos: 15563016, Giemsa: "n/a", Chr: &ChrX} ChrX_13E4 = genome.Band{Band: "13E4", Desc: "Band", StartPos: 15563016, EndPos: 15564849, Giemsa: "n/a", Chr: &ChrX} ChrX_13E5 = genome.Band{Band: "13E5", Desc: "Band", StartPos: 15564849, EndPos: 15573058, Giemsa: "n/a", Chr: &ChrX} ChrX_13E6 = genome.Band{Band: "13E6", Desc: "Band", StartPos: 15573058, EndPos: 15581267, Giemsa: "n/a", Chr: &ChrX} ChrX_13E7 = genome.Band{Band: "13E7", Desc: "Band", StartPos: 15581267, EndPos: 15592994, Giemsa: "n/a", Chr: &ChrX} ChrX_13E8 = genome.Band{Band: "13E8", Desc: "Band", StartPos: 15592994, EndPos: 15614616, Giemsa: "n/a", Chr: &ChrX} ChrX_13E9 = genome.Band{Band: "13E9", Desc: "Band", StartPos: 15614616, EndPos: 15614626, Giemsa: "n/a", Chr: &ChrX} ChrX_13E10 = genome.Band{Band: "13E10", Desc: "Band", StartPos: 15614626, EndPos: 15618637, Giemsa: "n/a", Chr: &ChrX} ChrX_13E11 = genome.Band{Band: "13E11", Desc: "Band", StartPos: 15618637, EndPos: 15624368, Giemsa: "n/a", Chr: &ChrX} ChrX_13E12 = genome.Band{Band: "13E12", Desc: "Band", StartPos: 15624368, EndPos: 15639461, Giemsa: "n/a", Chr: &ChrX} ChrX_13E13 = genome.Band{Band: "13E13", Desc: "Band", StartPos: 15639461, EndPos: 15640740, Giemsa: "n/a", Chr: &ChrX} ChrX_13E14 = genome.Band{Band: "13E14", Desc: "Band", StartPos: 15640740, EndPos: 15663201, Giemsa: "n/a", Chr: &ChrX} ChrX_13E15 = genome.Band{Band: "13E15", Desc: "Band", StartPos: 15663201, EndPos: 15664480, Giemsa: "n/a", Chr: &ChrX} ChrX_13E16 = genome.Band{Band: "13E16", Desc: "Band", StartPos: 15664480, EndPos: 15670210, Giemsa: "n/a", Chr: &ChrX} ChrX_13E17 = genome.Band{Band: "13E17", Desc: "Band", StartPos: 15670210, EndPos: 15675941, Giemsa: "n/a", Chr: &ChrX} ChrX_13E18 = genome.Band{Band: "13E18", Desc: "Band", StartPos: 15675941, EndPos: 15689039, Giemsa: "n/a", Chr: &ChrX} ChrX_13F1 = genome.Band{Band: "13F1", Desc: "Band", StartPos: 15689039, EndPos: 15714006, Giemsa: "n/a", Chr: &ChrX} ChrX_13F2 = genome.Band{Band: "13F2", Desc: "Band", StartPos: 15714006, EndPos: 15714016, Giemsa: "n/a", Chr: &ChrX} ChrX_13F3 = genome.Band{Band: "13F3", Desc: "Band", StartPos: 15714016, EndPos: 15714608, Giemsa: "n/a", Chr: &ChrX} ChrX_13F4 = genome.Band{Band: "13F4", Desc: "Band", StartPos: 15714608, EndPos: 15720825, Giemsa: "n/a", Chr: &ChrX} ChrX_13F5 = genome.Band{Band: "13F5", Desc: "Band", StartPos: 15720825, EndPos: 15723545, Giemsa: "n/a", Chr: &ChrX} ChrX_13F6 = genome.Band{Band: "13F6", Desc: "Band", StartPos: 15723545, EndPos: 15726265, Giemsa: "n/a", Chr: &ChrX} ChrX_13F7 = genome.Band{Band: "13F7", Desc: "Band", StartPos: 15726265, EndPos: 15731074, Giemsa: "n/a", Chr: &ChrX} ChrX_13F8 = genome.Band{Band: "13F8", Desc: "Band", StartPos: 15731074, EndPos: 15731681, Giemsa: "n/a", Chr: &ChrX} ChrX_13F9 = genome.Band{Band: "13F9", Desc: "Band", StartPos: 15731681, EndPos: 15733211, Giemsa: "n/a", Chr: &ChrX} ChrX_13F10 = genome.Band{Band: "13F10", Desc: "Band", StartPos: 15733211, EndPos: 15740375, Giemsa: "n/a", Chr: &ChrX} ChrX_13F11 = genome.Band{Band: "13F11", Desc: "Band", StartPos: 15740375, EndPos: 15740982, Giemsa: "n/a", Chr: &ChrX} ChrX_13F12 = genome.Band{Band: "13F12", Desc: "Band", StartPos: 15740982, EndPos: 15743702, Giemsa: "n/a", Chr: &ChrX} ChrX_13F13 = genome.Band{Band: "13F13", Desc: "Band", StartPos: 15743702, EndPos: 15746422, Giemsa: "n/a", Chr: &ChrX} ChrX_13F14 = genome.Band{Band: "13F14", Desc: "Band", StartPos: 15746422, EndPos: 15752396, Giemsa: "n/a", Chr: &ChrX} ChrX_13F15 = genome.Band{Band: "13F15", Desc: "Band", StartPos: 15752396, EndPos: 15753003, Giemsa: "n/a", Chr: &ChrX} ChrX_13F16 = genome.Band{Band: "13F16", Desc: "Band", StartPos: 15753003, EndPos: 15761333, Giemsa: "n/a", Chr: &ChrX} ChrX_13F17 = genome.Band{Band: "13F17", Desc: "Band", StartPos: 15761333, EndPos: 15785804, Giemsa: "n/a", Chr: &ChrX} ChrX_13F18 = genome.Band{Band: "13F18", Desc: "Band", StartPos: 15785804, EndPos: 15801641, Giemsa: "n/a", Chr: &ChrX} ChrX_14A1 = genome.Band{Band: "14A1", Desc: "Band", StartPos: 15801641, EndPos: 15849942, Giemsa: "n/a", Chr: &ChrX} ChrX_14A2 = genome.Band{Band: "14A2", Desc: "Band", StartPos: 15849942, EndPos: 15852416, Giemsa: "n/a", Chr: &ChrX} ChrX_14A3 = genome.Band{Band: "14A3", Desc: "Band", StartPos: 15852416, EndPos: 15863502, Giemsa: "n/a", Chr: &ChrX} ChrX_14A4 = genome.Band{Band: "14A4", Desc: "Band", StartPos: 15863502, EndPos: 15874587, Giemsa: "n/a", Chr: &ChrX} ChrX_14A5 = genome.Band{Band: "14A5", Desc: "Band", StartPos: 15874587, EndPos: 15895175, Giemsa: "n/a", Chr: &ChrX} ChrX_14A6 = genome.Band{Band: "14A6", Desc: "Band", StartPos: 15895175, EndPos: 15962578, Giemsa: "n/a", Chr: &ChrX} ChrX_14A7 = genome.Band{Band: "14A7", Desc: "Band", StartPos: 15962578, EndPos: 15965053, Giemsa: "n/a", Chr: &ChrX} ChrX_14A8 = genome.Band{Band: "14A8", Desc: "Band", StartPos: 15965053, EndPos: 15985640, Giemsa: "n/a", Chr: &ChrX} ChrX_14A9 = genome.Band{Band: "14A9", Desc: "Band", StartPos: 15985640, EndPos: 16007549, Giemsa: "n/a", Chr: &ChrX} ChrX_14B1 = genome.Band{Band: "14B1", Desc: "Band", StartPos: 16007549, EndPos: 16069065, Giemsa: "n/a", Chr: &ChrX} ChrX_14B2 = genome.Band{Band: "14B2", Desc: "Band", StartPos: 16069065, EndPos: 16071698, Giemsa: "n/a", Chr: &ChrX} ChrX_14B3 = genome.Band{Band: "14B3", Desc: "Band", StartPos: 16071698, EndPos: 16133213, Giemsa: "n/a", Chr: &ChrX} ChrX_14B4 = genome.Band{Band: "14B4", Desc: "Band", StartPos: 16133213, EndPos: 16135846, Giemsa: "n/a", Chr: &ChrX} ChrX_14B5 = genome.Band{Band: "14B5", Desc: "Band", StartPos: 16135846, EndPos: 16147644, Giemsa: "n/a", Chr: &ChrX} ChrX_14B6 = genome.Band{Band: "14B6", Desc: "Band", StartPos: 16147644, EndPos: 16159441, Giemsa: "n/a", Chr: &ChrX} ChrX_14B7 = genome.Band{Band: "14B7", Desc: "Band", StartPos: 16159441, EndPos: 16180297, Giemsa: "n/a", Chr: &ChrX} ChrX_14B8 = genome.Band{Band: "14B8", Desc: "Band", StartPos: 16180297, EndPos: 16182931, Giemsa: "n/a", Chr: &ChrX} ChrX_14B9 = genome.Band{Band: "14B9", Desc: "Band", StartPos: 16182931, EndPos: 16214004, Giemsa: "n/a", Chr: &ChrX} ChrX_14B10 = genome.Band{Band: "14B10", Desc: "Band", StartPos: 16214004, EndPos: 16214014, Giemsa: "n/a", Chr: &ChrX} ChrX_14B11 = genome.Band{Band: "14B11", Desc: "Band", StartPos: 16214014, EndPos: 16214024, Giemsa: "n/a", Chr: &ChrX} ChrX_14B12 = genome.Band{Band: "14B12", Desc: "Band", StartPos: 16214024, EndPos: 16217634, Giemsa: "n/a", Chr: &ChrX} ChrX_14B13 = genome.Band{Band: "14B13", Desc: "Band", StartPos: 16217634, EndPos: 16223432, Giemsa: "n/a", Chr: &ChrX} ChrX_14B14 = genome.Band{Band: "14B14", Desc: "Band", StartPos: 16223432, EndPos: 16229230, Giemsa: "n/a", Chr: &ChrX} ChrX_14B15 = genome.Band{Band: "14B15", Desc: "Band", StartPos: 16229230, EndPos: 16244503, Giemsa: "n/a", Chr: &ChrX} ChrX_14B16 = genome.Band{Band: "14B16", Desc: "Band", StartPos: 16244503, EndPos: 16245957, Giemsa: "n/a", Chr: &ChrX} ChrX_14B17 = genome.Band{Band: "14B17", Desc: "Band", StartPos: 16245957, EndPos: 16251793, Giemsa: "n/a", Chr: &ChrX} ChrX_14B18 = genome.Band{Band: "14B18", Desc: "Band", StartPos: 16251793, EndPos: 16257629, Giemsa: "n/a", Chr: &ChrX} ChrX_14C1 = genome.Band{Band: "14C1", Desc: "Band", StartPos: 16257629, EndPos: 16275501, Giemsa: "n/a", Chr: &ChrX} ChrX_14C2 = genome.Band{Band: "14C2", Desc: "Band", StartPos: 16275501, EndPos: 16285132, Giemsa: "n/a", Chr: &ChrX} ChrX_14C3 = genome.Band{Band: "14C3", Desc: "Band", StartPos: 16285132, EndPos: 16296038, Giemsa: "n/a", Chr: &ChrX} ChrX_14C4 = genome.Band{Band: "14C4", Desc: "Band", StartPos: 16296038, EndPos: 16334110, Giemsa: "n/a", Chr: &ChrX} ChrX_14C5 = genome.Band{Band: "14C5", Desc: "Band", StartPos: 16334110, EndPos: 16334120, Giemsa: "n/a", Chr: &ChrX} ChrX_14C6 = genome.Band{Band: "14C6", Desc: "Band", StartPos: 16334120, EndPos: 16344309, Giemsa: "n/a", Chr: &ChrX} ChrX_14C7 = genome.Band{Band: "14C7", Desc: "Band", StartPos: 16344309, EndPos: 16346035, Giemsa: "n/a", Chr: &ChrX} ChrX_14C8 = genome.Band{Band: "14C8", Desc: "Band", StartPos: 16346035, EndPos: 16350382, Giemsa: "n/a", Chr: &ChrX} ChrX_14D1 = genome.Band{Band: "14D1", Desc: "Band", StartPos: 16350382, EndPos: 16397379, Giemsa: "n/a", Chr: &ChrX} ChrX_14D2 = genome.Band{Band: "14D2", Desc: "Band", StartPos: 16397379, EndPos: 16399104, Giemsa: "n/a", Chr: &ChrX} ChrX_14D3 = genome.Band{Band: "14D3", Desc: "Band", StartPos: 16399104, EndPos: 16406833, Giemsa: "n/a", Chr: &ChrX} ChrX_14D4 = genome.Band{Band: "14D4", Desc: "Band", StartPos: 16406833, EndPos: 16414562, Giemsa: "n/a", Chr: &ChrX} ChrX_14E1 = genome.Band{Band: "14E1", Desc: "Band", StartPos: 16414562, EndPos: 16451552, Giemsa: "n/a", Chr: &ChrX} ChrX_14E2 = genome.Band{Band: "14E2", Desc: "Band", StartPos: 16451552, EndPos: 16453277, Giemsa: "n/a", Chr: &ChrX} ChrX_14E3 = genome.Band{Band: "14E3", Desc: "Band", StartPos: 16453277, EndPos: 16461007, Giemsa: "n/a", Chr: &ChrX} ChrX_14E4 = genome.Band{Band: "14E4", Desc: "Band", StartPos: 16461007, EndPos: 16468736, Giemsa: "n/a", Chr: &ChrX} ChrX_14F1 = genome.Band{Band: "14F1", Desc: "Band", StartPos: 16468736, EndPos: 16489784, Giemsa: "n/a", Chr: &ChrX} ChrX_14F2 = genome.Band{Band: "14F2", Desc: "Band", StartPos: 16489784, EndPos: 16526774, Giemsa: "n/a", Chr: &ChrX} ChrX_14F3 = genome.Band{Band: "14F3", Desc: "Band", StartPos: 16526774, EndPos: 16528499, Giemsa: "n/a", Chr: &ChrX} ChrX_14F4 = genome.Band{Band: "14F4", Desc: "Band", StartPos: 16528499, EndPos: 16536228, Giemsa: "n/a", Chr: &ChrX} ChrX_14F5 = genome.Band{Band: "14F5", Desc: "Band", StartPos: 16536228, EndPos: 16553895, Giemsa: "n/a", Chr: &ChrX} ChrX_14F6 = genome.Band{Band: "14F6", Desc: "Band", StartPos: 16553895, EndPos: 16561624, Giemsa: "n/a", Chr: &ChrX} ChrX_15A1 = genome.Band{Band: "15A1", Desc: "Band", StartPos: 16561624, EndPos: 16595302, Giemsa: "n/a", Chr: &ChrX} ChrX_15A2 = genome.Band{Band: "15A2", Desc: "Band", StartPos: 16595302, EndPos: 16597027, Giemsa: "n/a", Chr: &ChrX} ChrX_15A3 = genome.Band{Band: "15A3", Desc: "Band", StartPos: 16597027, EndPos: 16644023, Giemsa: "n/a", Chr: &ChrX} ChrX_15A4 = genome.Band{Band: "15A4", Desc: "Band", StartPos: 16644023, EndPos: 16645749, Giemsa: "n/a", Chr: &ChrX} ChrX_15A5 = genome.Band{Band: "15A5", Desc: "Band", StartPos: 16645749, EndPos: 16663415, Giemsa: "n/a", Chr: &ChrX} ChrX_15A6 = genome.Band{Band: "15A6", Desc: "Band", StartPos: 16663415, EndPos: 16671145, Giemsa: "n/a", Chr: &ChrX} ChrX_15A7 = genome.Band{Band: "15A7", Desc: "Band", StartPos: 16671145, EndPos: 16678874, Giemsa: "n/a", Chr: &ChrX} ChrX_15A8 = genome.Band{Band: "15A8", Desc: "Band", StartPos: 16678874, EndPos: 16693228, Giemsa: "n/a", Chr: &ChrX} ChrX_15A9 = genome.Band{Band: "15A9", Desc: "Band", StartPos: 16693228, EndPos: 16700957, Giemsa: "n/a", Chr: &ChrX} ChrX_15A10 = genome.Band{Band: "15A10", Desc: "Band", StartPos: 16700957, EndPos: 16715312, Giemsa: "n/a", Chr: &ChrX} ChrX_15A11 = genome.Band{Band: "15A11", Desc: "Band", StartPos: 16715312, EndPos: 16732978, Giemsa: "n/a", Chr: &ChrX} ChrX_15B1 = genome.Band{Band: "15B1", Desc: "Band", StartPos: 16732978, EndPos: 16766656, Giemsa: "n/a", Chr: &ChrX} ChrX_15B2 = genome.Band{Band: "15B2", Desc: "Band", StartPos: 16766656, EndPos: 16768381, Giemsa: "n/a", Chr: &ChrX} ChrX_15B3 = genome.Band{Band: "15B3", Desc: "Band", StartPos: 16768381, EndPos: 16772729, Giemsa: "n/a", Chr: &ChrX} ChrX_15B4 = genome.Band{Band: "15B4", Desc: "Band", StartPos: 16772729, EndPos: 16783770, Giemsa: "n/a", Chr: &ChrX} ChrX_15B5 = genome.Band{Band: "15B5", Desc: "Band", StartPos: 16783770, EndPos: 16794812, Giemsa: "n/a", Chr: &ChrX} ChrX_15C1 = genome.Band{Band: "15C1", Desc: "Band", StartPos: 16794812, EndPos: 16818483, Giemsa: "n/a", Chr: &ChrX} ChrX_15C2 = genome.Band{Band: "15C2", Desc: "Band", StartPos: 16818483, EndPos: 16822150, Giemsa: "n/a", Chr: &ChrX} ChrX_15C3 = genome.Band{Band: "15C3", Desc: "Band", StartPos: 16822150, EndPos: 16831062, Giemsa: "n/a", Chr: &ChrX} ChrX_15C4 = genome.Band{Band: "15C4", Desc: "Band", StartPos: 16831062, EndPos: 16850635, Giemsa: "n/a", Chr: &ChrX} ChrX_15C5 = genome.Band{Band: "15C5", Desc: "Band", StartPos: 16850635, EndPos: 16853584, Giemsa: "n/a", Chr: &ChrX} ChrX_15C6 = genome.Band{Band: "15C6", Desc: "Band", StartPos: 16853584, EndPos: 16863056, Giemsa: "n/a", Chr: &ChrX} ChrX_15D1 = genome.Band{Band: "15D1", Desc: "Band", StartPos: 16863056, EndPos: 16912450, Giemsa: "n/a", Chr: &ChrX} ChrX_15D2 = genome.Band{Band: "15D2", Desc: "Band", StartPos: 16912450, EndPos: 16914564, Giemsa: "n/a", Chr: &ChrX} ChrX_15D3 = genome.Band{Band: "15D3", Desc: "Band", StartPos: 16914564, EndPos: 16924037, Giemsa: "n/a", Chr: &ChrX} ChrX_15D4 = genome.Band{Band: "15D4", Desc: "Band", StartPos: 16924037, EndPos: 16948987, Giemsa: "n/a", Chr: &ChrX} ChrX_15D5 = genome.Band{Band: "15D5", Desc: "Band", StartPos: 16948987, EndPos: 16951102, Giemsa: "n/a", Chr: &ChrX} ChrX_15D6 = genome.Band{Band: "15D6", Desc: "Band", StartPos: 16951102, EndPos: 16960574, Giemsa: "n/a", Chr: &ChrX} ChrX_15E1 = genome.Band{Band: "15E1", Desc: "Band", StartPos: 16960574, EndPos: 16985525, Giemsa: "n/a", Chr: &ChrX} ChrX_15E2 = genome.Band{Band: "15E2", Desc: "Band", StartPos: 16985525, EndPos: 16987639, Giemsa: "n/a", Chr: &ChrX} ChrX_15E3 = genome.Band{Band: "15E3", Desc: "Band", StartPos: 16987639, EndPos: 17004385, Giemsa: "n/a", Chr: &ChrX} ChrX_15E4 = genome.Band{Band: "15E4", Desc: "Band", StartPos: 17004385, EndPos: 17006500, Giemsa: "n/a", Chr: &ChrX} ChrX_15E5 = genome.Band{Band: "15E5", Desc: "Band", StartPos: 17006500, EndPos: 17039570, Giemsa: "n/a", Chr: &ChrX} ChrX_15E6 = genome.Band{Band: "15E6", Desc: "Band", StartPos: 17039570, EndPos: 17041684, Giemsa: "n/a", Chr: &ChrX} ChrX_15E7 = genome.Band{Band: "15E7", Desc: "Band", StartPos: 17041684, EndPos: 17051157, Giemsa: "n/a", Chr: &ChrX} ChrX_15F1 = genome.Band{Band: "15F1", Desc: "Band", StartPos: 17051157, EndPos: 17092431, Giemsa: "n/a", Chr: &ChrX} ChrX_15F2 = genome.Band{Band: "15F2", Desc: "Band", StartPos: 17092431, EndPos: 17096796, Giemsa: "n/a", Chr: &ChrX} ChrX_15F3 = genome.Band{Band: "15F3", Desc: "Band", StartPos: 17096796, EndPos: 17107252, Giemsa: "n/a", Chr: &ChrX} ChrX_15F4 = genome.Band{Band: "15F4", Desc: "Band", StartPos: 17107252, EndPos: 17152808, Giemsa: "n/a", Chr: &ChrX} ChrX_15F5 = genome.Band{Band: "15F5", Desc: "Band", StartPos: 17152808, EndPos: 17155142, Giemsa: "n/a", Chr: &ChrX} ChrX_15F6 = genome.Band{Band: "15F6", Desc: "Band", StartPos: 17155142, EndPos: 17161023, Giemsa: "n/a", Chr: &ChrX} ChrX_15F7 = genome.Band{Band: "15F7", Desc: "Band", StartPos: 17161023, EndPos: 17179507, Giemsa: "n/a", Chr: &ChrX} ChrX_15F8 = genome.Band{Band: "15F8", Desc: "Band", StartPos: 17179507, EndPos: 17181841, Giemsa: "n/a", Chr: &ChrX} ChrX_15F9 = genome.Band{Band: "15F9", Desc: "Band", StartPos: 17181841, EndPos: 17187722, Giemsa: "n/a", Chr: &ChrX} ChrX_16A1 = genome.Band{Band: "16A1", Desc: "Band", StartPos: 17187722, EndPos: 17251295, Giemsa: "n/a", Chr: &ChrX} ChrX_16A2 = genome.Band{Band: "16A2", Desc: "Band", StartPos: 17251295, EndPos: 17253629, Giemsa: "n/a", Chr: &ChrX} ChrX_16A3 = genome.Band{Band: "16A3", Desc: "Band", StartPos: 17253629, EndPos: 17255963, Giemsa: "n/a", Chr: &ChrX} ChrX_16A4 = genome.Band{Band: "16A4", Desc: "Band", StartPos: 17255963, EndPos: 17293398, Giemsa: "n/a", Chr: &ChrX} ChrX_16A5 = genome.Band{Band: "16A5", Desc: "Band", StartPos: 17293398, EndPos: 17361452, Giemsa: "n/a", Chr: &ChrX} ChrX_16A6 = genome.Band{Band: "16A6", Desc: "Band", StartPos: 17361452, EndPos: 17363786, Giemsa: "n/a", Chr: &ChrX} ChrX_16A7 = genome.Band{Band: "16A7", Desc: "Band", StartPos: 17363786, EndPos: 17366120, Giemsa: "n/a", Chr: &ChrX} ChrX_16B1 = genome.Band{Band: "16B1", Desc: "Band", StartPos: 17366120, EndPos: 17420638, Giemsa: "n/a", Chr: &ChrX} ChrX_16B2 = genome.Band{Band: "16B2", Desc: "Band", StartPos: 17420638, EndPos: 17422972, Giemsa: "n/a", Chr: &ChrX} ChrX_16B3 = genome.Band{Band: "16B3", Desc: "Band", StartPos: 17422972, EndPos: 17428853, Giemsa: "n/a", Chr: &ChrX} ChrX_16B4 = genome.Band{Band: "16B4", Desc: "Band", StartPos: 17428853, EndPos: 17465354, Giemsa: "n/a", Chr: &ChrX} ChrX_16B5 = genome.Band{Band: "16B5", Desc: "Band", StartPos: 17465354, EndPos: 17467688, Giemsa: "n/a", Chr: &ChrX} ChrX_16B6 = genome.Band{Band: "16B6", Desc: "Band", StartPos: 17467688, EndPos: 17491586, Giemsa: "n/a", Chr: &ChrX} ChrX_16B7 = genome.Band{Band: "16B7", Desc: "Band", StartPos: 17491586, EndPos: 17502042, Giemsa: "n/a", Chr: &ChrX} ChrX_16B8 = genome.Band{Band: "16B8", Desc: "Band", StartPos: 17502042, EndPos: 17512497, Giemsa: "n/a", Chr: &ChrX} ChrX_16B9 = genome.Band{Band: "16B9", Desc: "Band", StartPos: 17512497, EndPos: 17522953, Giemsa: "n/a", Chr: &ChrX} ChrX_16B10 = genome.Band{Band: "16B10", Desc: "Band", StartPos: 17522953, EndPos: 17559454, Giemsa: "n/a", Chr: &ChrX} ChrX_16B11 = genome.Band{Band: "16B11", Desc: "Band", StartPos: 17559454, EndPos: 17561788, Giemsa: "n/a", Chr: &ChrX} ChrX_16B12 = genome.Band{Band: "16B12", Desc: "Band", StartPos: 17561788, EndPos: 17572243, Giemsa: "n/a", Chr: &ChrX} ChrX_16C1 = genome.Band{Band: "16C1", Desc: "Band", StartPos: 17572243, EndPos: 17613225, Giemsa: "n/a", Chr: &ChrX} ChrX_16C2 = genome.Band{Band: "16C2", Desc: "Band", StartPos: 17613225, EndPos: 17613235, Giemsa: "n/a", Chr: &ChrX} ChrX_16C3 = genome.Band{Band: "16C3", Desc: "Band", StartPos: 17613235, EndPos: 17613245, Giemsa: "n/a", Chr: &ChrX} ChrX_16C4 = genome.Band{Band: "16C4", Desc: "Band", StartPos: 17613245, EndPos: 17617230, Giemsa: "n/a", Chr: &ChrX} ChrX_16C5 = genome.Band{Band: "16C5", Desc: "Band", StartPos: 17617230, EndPos: 17633570, Giemsa: "n/a", Chr: &ChrX} ChrX_16C6 = genome.Band{Band: "16C6", Desc: "Band", StartPos: 17633570, EndPos: 17638754, Giemsa: "n/a", Chr: &ChrX} ChrX_16C7 = genome.Band{Band: "16C7", Desc: "Band", StartPos: 17638754, EndPos: 17643938, Giemsa: "n/a", Chr: &ChrX} ChrX_16C8 = genome.Band{Band: "16C8", Desc: "Band", StartPos: 17643938, EndPos: 17655788, Giemsa: "n/a", Chr: &ChrX} ChrX_16C9 = genome.Band{Band: "16C9", Desc: "Band", StartPos: 17655788, EndPos: 17658704, Giemsa: "n/a", Chr: &ChrX} ChrX_16C10 = genome.Band{Band: "16C10", Desc: "Band", StartPos: 17658704, EndPos: 17670554, Giemsa: "n/a", Chr: &ChrX} ChrX_16D1 = genome.Band{Band: "16D1", Desc: "Band", StartPos: 17670554, EndPos: 17686893, Giemsa: "n/a", Chr: &ChrX} ChrX_16D2 = genome.Band{Band: "16D2", Desc: "Band", StartPos: 17686893, EndPos: 17703233, Giemsa: "n/a", Chr: &ChrX} ChrX_16D3 = genome.Band{Band: "16D3", Desc: "Band", StartPos: 17703233, EndPos: 17710639, Giemsa: "n/a", Chr: &ChrX} ChrX_16D4 = genome.Band{Band: "16D4", Desc: "Band", StartPos: 17710639, EndPos: 17724294, Giemsa: "n/a", Chr: &ChrX} ChrX_16D5 = genome.Band{Band: "16D5", Desc: "Band", StartPos: 17724294, EndPos: 17725451, Giemsa: "n/a", Chr: &ChrX} ChrX_16D6 = genome.Band{Band: "16D6", Desc: "Band", StartPos: 17725451, EndPos: 17730635, Giemsa: "n/a", Chr: &ChrX} ChrX_16D7 = genome.Band{Band: "16D7", Desc: "Band", StartPos: 17730635, EndPos: 17735820, Giemsa: "n/a", Chr: &ChrX} ChrX_16E1 = genome.Band{Band: "16E1", Desc: "Band", StartPos: 17735820, EndPos: 17749938, Giemsa: "n/a", Chr: &ChrX} ChrX_16E2 = genome.Band{Band: "16E2", Desc: "Band", StartPos: 17749938, EndPos: 17759565, Giemsa: "n/a", Chr: &ChrX} ChrX_16E3 = genome.Band{Band: "16E3", Desc: "Band", StartPos: 17759565, EndPos: 17762482, Giemsa: "n/a", Chr: &ChrX} ChrX_16E4 = genome.Band{Band: "16E4", Desc: "Band", StartPos: 17762482, EndPos: 17776136, Giemsa: "n/a", Chr: &ChrX} ChrX_16E5 = genome.Band{Band: "16E5", Desc: "Band", StartPos: 17776136, EndPos: 17777294, Giemsa: "n/a", Chr: &ChrX} ChrX_16F1 = genome.Band{Band: "16F1", Desc: "Band", StartPos: 17777294, EndPos: 17804326, Giemsa: "n/a", Chr: &ChrX} ChrX_16F2 = genome.Band{Band: "16F2", Desc: "Band", StartPos: 17804326, EndPos: 17805483, Giemsa: "n/a", Chr: &ChrX} ChrX_16F3 = genome.Band{Band: "16F3", Desc: "Band", StartPos: 17805483, EndPos: 17832515, Giemsa: "n/a", Chr: &ChrX} ChrX_16F4 = genome.Band{Band: "16F4", Desc: "Band", StartPos: 17832515, EndPos: 17908964, Giemsa: "n/a", Chr: &ChrX} ChrX_16F5 = genome.Band{Band: "16F5", Desc: "Band", StartPos: 17908964, EndPos: 17952464, Giemsa: "n/a", Chr: &ChrX} ChrX_16F6 = genome.Band{Band: "16F6", Desc: "Band", StartPos: 17952464, EndPos: 17995964, Giemsa: "n/a", Chr: &ChrX} ChrX_16F7 = genome.Band{Band: "16F7", Desc: "Band", StartPos: 17995964, EndPos: 18062402, Giemsa: "n/a", Chr: &ChrX} ChrX_16F8 = genome.Band{Band: "16F8", Desc: "Band", StartPos: 18062402, EndPos: 18062412, Giemsa: "n/a", Chr: &ChrX} ChrX_17A1 = genome.Band{Band: "17A1", Desc: "Band", StartPos: 18062412, EndPos: 18082612, Giemsa: "n/a", Chr: &ChrX} ChrX_17A2 = genome.Band{Band: "17A2", Desc: "Band", StartPos: 18082612, EndPos: 18121500, Giemsa: "n/a", Chr: &ChrX} ChrX_17A3 = genome.Band{Band: "17A3", Desc: "Band", StartPos: 18121500, EndPos: 18160389, Giemsa: "n/a", Chr: &ChrX} ChrX_17A4 = genome.Band{Band: "17A4", Desc: "Band", StartPos: 18160389, EndPos: 18199277, Giemsa: "n/a", Chr: &ChrX} ChrX_17A5 = genome.Band{Band: "17A5", Desc: "Band", StartPos: 18199277, EndPos: 18248629, Giemsa: "n/a", Chr: &ChrX} ChrX_17A6 = genome.Band{Band: "17A6", Desc: "Band", StartPos: 18248629, EndPos: 18250582, Giemsa: "n/a", Chr: &ChrX} ChrX_17A7 = genome.Band{Band: "17A7", Desc: "Band", StartPos: 18250582, EndPos: 18263076, Giemsa: "n/a", Chr: &ChrX} ChrX_17A8 = genome.Band{Band: "17A8", Desc: "Band", StartPos: 18263076, EndPos: 18274089, Giemsa: "n/a", Chr: &ChrX} ChrX_17A9 = genome.Band{Band: "17A9", Desc: "Band", StartPos: 18274089, EndPos: 18284420, Giemsa: "n/a", Chr: &ChrX} ChrX_17A10 = genome.Band{Band: "17A10", Desc: "Band", StartPos: 18284420, EndPos: 18294751, Giemsa: "n/a", Chr: &ChrX} ChrX_17A11 = genome.Band{Band: "17A11", Desc: "Band", StartPos: 18294751, EndPos: 18311787, Giemsa: "n/a", Chr: &ChrX} ChrX_17A12 = genome.Band{Band: "17A12", Desc: "Band", StartPos: 18311787, EndPos: 18313796, Giemsa: "n/a", Chr: &ChrX} ChrX_17B1 = genome.Band{Band: "17B1", Desc: "Band", StartPos: 18313796, EndPos: 18346872, Giemsa: "n/a", Chr: &ChrX} ChrX_17B2 = genome.Band{Band: "17B2", Desc: "Band", StartPos: 18346872, EndPos: 18348180, Giemsa: "n/a", Chr: &ChrX} ChrX_17B3 = genome.Band{Band: "17B3", Desc: "Band", StartPos: 18348180, EndPos: 18361578, Giemsa: "n/a", Chr: &ChrX} ChrX_17B4 = genome.Band{Band: "17B4", Desc: "Band", StartPos: 18361578, EndPos: 18374976, Giemsa: "n/a", Chr: &ChrX} ChrX_17B5 = genome.Band{Band: "17B5", Desc: "Band", StartPos: 18374976, EndPos: 18388374, Giemsa: "n/a", Chr: &ChrX} ChrX_17B6 = genome.Band{Band: "17B6", Desc: "Band", StartPos: 18388374, EndPos: 18396747, Giemsa: "n/a", Chr: &ChrX} ChrX_17C1 = genome.Band{Band: "17C1", Desc: "Band", StartPos: 18396747, EndPos: 18427311, Giemsa: "n/a", Chr: &ChrX} ChrX_17C2 = genome.Band{Band: "17C2", Desc: "Band", StartPos: 18427311, EndPos: 18428619, Giemsa: "n/a", Chr: &ChrX} ChrX_17C3 = genome.Band{Band: "17C3", Desc: "Band", StartPos: 18428619, EndPos: 18459183, Giemsa: "n/a", Chr: &ChrX} ChrX_17C4 = genome.Band{Band: "17C4", Desc: "Band", StartPos: 18459183, EndPos: 18495098, Giemsa: "n/a", Chr: &ChrX} ChrX_17C5 = genome.Band{Band: "17C5", Desc: "Band", StartPos: 18495098, EndPos: 18523043, Giemsa: "n/a", Chr: &ChrX} ChrX_17C6 = genome.Band{Band: "17C6", Desc: "Band", StartPos: 18523043, EndPos: 18535269, Giemsa: "n/a", Chr: &ChrX} ChrX_17C7 = genome.Band{Band: "17C7", Desc: "Band", StartPos: 18535269, EndPos: 18547495, Giemsa: "n/a", Chr: &ChrX} ChrX_17D1 = genome.Band{Band: "17D1", Desc: "Band", StartPos: 18547495, EndPos: 18606005, Giemsa: "n/a", Chr: &ChrX} ChrX_17D2 = genome.Band{Band: "17D2", Desc: "Band", StartPos: 18606005, EndPos: 18608734, Giemsa: "n/a", Chr: &ChrX} ChrX_17D3 = genome.Band{Band: "17D3", Desc: "Band", StartPos: 18608734, EndPos: 18667244, Giemsa: "n/a", Chr: &ChrX} ChrX_17D4 = genome.Band{Band: "17D4", Desc: "Band", StartPos: 18667244, EndPos: 18669973, Giemsa: "n/a", Chr: &ChrX} ChrX_17D5 = genome.Band{Band: "17D5", Desc: "Band", StartPos: 18669973, EndPos: 18682199, Giemsa: "n/a", Chr: &ChrX} ChrX_17D6 = genome.Band{Band: "17D6", Desc: "Band", StartPos: 18682199, EndPos: 18697740, Giemsa: "n/a", Chr: &ChrX} ChrX_17E1 = genome.Band{Band: "17E1", Desc: "Band", StartPos: 18697740, EndPos: 18751993, Giemsa: "n/a", Chr: &ChrX} ChrX_17E2 = genome.Band{Band: "17E2", Desc: "Band", StartPos: 18751993, EndPos: 18752003, Giemsa: "n/a", Chr: &ChrX} ChrX_17E3 = genome.Band{Band: "17E3", Desc: "Band", StartPos: 18752003, EndPos: 18752013, Giemsa: "n/a", Chr: &ChrX} ChrX_17E4 = genome.Band{Band: "17E4", Desc: "Band", StartPos: 18752013, EndPos: 18752023, Giemsa: "n/a", Chr: &ChrX} ChrX_17E5 = genome.Band{Band: "17E5", Desc: "Band", StartPos: 18752023, EndPos: 18752033, Giemsa: "n/a", Chr: &ChrX} ChrX_17E6 = genome.Band{Band: "17E6", Desc: "Band", StartPos: 18752033, EndPos: 18752043, Giemsa: "n/a", Chr: &ChrX} ChrX_17E7 = genome.Band{Band: "17E7", Desc: "Band", StartPos: 18752043, EndPos: 18752053, Giemsa: "n/a", Chr: &ChrX} ChrX_17E8 = genome.Band{Band: "17E8", Desc: "Band", StartPos: 18752053, EndPos: 18752063, Giemsa: "n/a", Chr: &ChrX} ChrX_17E9 = genome.Band{Band: "17E9", Desc: "Band", StartPos: 18752063, EndPos: 18752073, Giemsa: "n/a", Chr: &ChrX} ChrX_17F1 = genome.Band{Band: "17F1", Desc: "Band", StartPos: 18752073, EndPos: 18763378, Giemsa: "n/a", Chr: &ChrX} ChrX_17F2 = genome.Band{Band: "17F2", Desc: "Band", StartPos: 18763378, EndPos: 18804787, Giemsa: "n/a", Chr: &ChrX} ChrX_17F3 = genome.Band{Band: "17F3", Desc: "Band", StartPos: 18804787, EndPos: 18830107, Giemsa: "n/a", Chr: &ChrX} ChrX_18A1 = genome.Band{Band: "18A1", Desc: "Band", StartPos: 18830107, EndPos: 18899059, Giemsa: "n/a", Chr: &ChrX} ChrX_18A2 = genome.Band{Band: "18A2", Desc: "Band", StartPos: 18899059, EndPos: 18968011, Giemsa: "n/a", Chr: &ChrX} ChrX_18A3 = genome.Band{Band: "18A3", Desc: "Band", StartPos: 18968011, EndPos: 19047815, Giemsa: "n/a", Chr: &ChrX} ChrX_18A4 = genome.Band{Band: "18A4", Desc: "Band", StartPos: 19047815, EndPos: 19068613, Giemsa: "n/a", Chr: &ChrX} ChrX_18A5 = genome.Band{Band: "18A5", Desc: "Band", StartPos: 19068613, EndPos: 19078039, Giemsa: "n/a", Chr: &ChrX} ChrX_18A6 = genome.Band{Band: "18A6", Desc: "Band", StartPos: 19078039, EndPos: 19084638, Giemsa: "n/a", Chr: &ChrX} ChrX_18A7 = genome.Band{Band: "18A7", Desc: "Band", StartPos: 19084638, EndPos: 19094065, Giemsa: "n/a", Chr: &ChrX} ChrX_18B1 = genome.Band{Band: "18B1", Desc: "Band", StartPos: 19094065, EndPos: 19114273, Giemsa: "n/a", Chr: &ChrX} ChrX_18B2 = genome.Band{Band: "18B2", Desc: "Band", StartPos: 19114273, EndPos: 19115746, Giemsa: "n/a", Chr: &ChrX} ChrX_18B3 = genome.Band{Band: "18B3", Desc: "Band", StartPos: 19115746, EndPos: 19125173, Giemsa: "n/a", Chr: &ChrX} ChrX_18B4 = genome.Band{Band: "18B4", Desc: "Band", StartPos: 19125173, EndPos: 19140255, Giemsa: "n/a", Chr: &ChrX} ChrX_18B5 = genome.Band{Band: "18B5", Desc: "Band", StartPos: 19140255, EndPos: 19143967, Giemsa: "n/a", Chr: &ChrX} ChrX_18B6 = genome.Band{Band: "18B6", Desc: "Band", StartPos: 19143967, EndPos: 19156222, Giemsa: "n/a", Chr: &ChrX} ChrX_18B7 = genome.Band{Band: "18B7", Desc: "Band", StartPos: 19156222, EndPos: 19168476, Giemsa: "n/a", Chr: &ChrX} ChrX_18B8 = genome.Band{Band: "18B8", Desc: "Band", StartPos: 19168476, EndPos: 19172188, Giemsa: "n/a", Chr: &ChrX} ChrX_18B9 = genome.Band{Band: "18B9", Desc: "Band", StartPos: 19172188, EndPos: 19178787, Giemsa: "n/a", Chr: &ChrX} ChrX_18B10 = genome.Band{Band: "18B10", Desc: "Band", StartPos: 19178787, EndPos: 19185386, Giemsa: "n/a", Chr: &ChrX} ChrX_18B11 = genome.Band{Band: "18B11", Desc: "Band", StartPos: 19185386, EndPos: 19189097, Giemsa: "n/a", Chr: &ChrX} ChrX_18C1 = genome.Band{Band: "18C1", Desc: "Band", StartPos: 19189097, EndPos: 19204180, Giemsa: "n/a", Chr: &ChrX} ChrX_18C2 = genome.Band{Band: "18C2", Desc: "Band", StartPos: 19204180, EndPos: 19236744, Giemsa: "n/a", Chr: &ChrX} ChrX_18C3 = genome.Band{Band: "18C3", Desc: "Band", StartPos: 19236744, EndPos: 19323371, Giemsa: "n/a", Chr: &ChrX} ChrX_18C4 = genome.Band{Band: "18C4", Desc: "Band", StartPos: 19323371, EndPos: 19326551, Giemsa: "n/a", Chr: &ChrX} ChrX_18C5 = genome.Band{Band: "18C5", Desc: "Band", StartPos: 19326551, EndPos: 19334565, Giemsa: "n/a", Chr: &ChrX} ChrX_18C6 = genome.Band{Band: "18C6", Desc: "Band", StartPos: 19334565, EndPos: 19361024, Giemsa: "n/a", Chr: &ChrX} ChrX_18C7 = genome.Band{Band: "18C7", Desc: "Band", StartPos: 19361024, EndPos: 19387483, Giemsa: "n/a", Chr: &ChrX} ChrX_18C8 = genome.Band{Band: "18C8", Desc: "Band", StartPos: 19387483, EndPos: 19449559, Giemsa: "n/a", Chr: &ChrX} ChrX_18C9 = genome.Band{Band: "18C9", Desc: "Band", StartPos: 19449559, EndPos: 19449569, Giemsa: "n/a", Chr: &ChrX} ChrX_18D1 = genome.Band{Band: "18D1", Desc: "Band", StartPos: 19449569, EndPos: 19464950, Giemsa: "n/a", Chr: &ChrX} ChrX_18D2 = genome.Band{Band: "18D2", Desc: "Band", StartPos: 19464950, EndPos: 19467194, Giemsa: "n/a", Chr: &ChrX} ChrX_18D3 = genome.Band{Band: "18D3", Desc: "Band", StartPos: 19467194, EndPos: 19510994, Giemsa: "n/a", Chr: &ChrX} ChrX_18D4 = genome.Band{Band: "18D4", Desc: "Band", StartPos: 19510994, EndPos: 19511004, Giemsa: "n/a", Chr: &ChrX} ChrX_18D5 = genome.Band{Band: "18D5", Desc: "Band", StartPos: 19511004, EndPos: 19511014, Giemsa: "n/a", Chr: &ChrX} ChrX_18D6 = genome.Band{Band: "18D6", Desc: "Band", StartPos: 19511014, EndPos: 19511217, Giemsa: "n/a", Chr: &ChrX} ChrX_18D7 = genome.Band{Band: "18D7", Desc: "Band", StartPos: 19511217, EndPos: 19519641, Giemsa: "n/a", Chr: &ChrX} ChrX_18D8 = genome.Band{Band: "18D8", Desc: "Band", StartPos: 19519641, EndPos: 19528066, Giemsa: "n/a", Chr: &ChrX} ChrX_18D9 = genome.Band{Band: "18D9", Desc: "Band", StartPos: 19528066, EndPos: 19528076, Giemsa: "n/a", Chr: &ChrX} ChrX_18D10 = genome.Band{Band: "18D10", Desc: "Band", StartPos: 19528076, EndPos: 19531583, Giemsa: "n/a", Chr: &ChrX} ChrX_18D11 = genome.Band{Band: "18D11", Desc: "Band", StartPos: 19531583, EndPos: 19538145, Giemsa: "n/a", Chr: &ChrX} ChrX_18D12 = genome.Band{Band: "18D12", Desc: "Band", StartPos: 19538145, EndPos: 19543193, Giemsa: "n/a", Chr: &ChrX} ChrX_18D13 = genome.Band{Band: "18D13", Desc: "Band", StartPos: 19543193, EndPos: 19570159, Giemsa: "n/a", Chr: &ChrX} ChrX_18E1 = genome.Band{Band: "18E1", Desc: "Band", StartPos: 19570159, EndPos: 19598262, Giemsa: "n/a", Chr: &ChrX} ChrX_18E2 = genome.Band{Band: "18E2", Desc: "Band", StartPos: 19598262, EndPos: 19600643, Giemsa: "n/a", Chr: &ChrX} ChrX_18E3 = genome.Band{Band: "18E3", Desc: "Band", StartPos: 19600643, EndPos: 19624078, Giemsa: "n/a", Chr: &ChrX} ChrX_18E4 = genome.Band{Band: "18E4", Desc: "Band", StartPos: 19624078, EndPos: 19626460, Giemsa: "n/a", Chr: &ChrX} ChrX_18E5 = genome.Band{Band: "18E5", Desc: "Band", StartPos: 19626460, EndPos: 19641702, Giemsa: "n/a", Chr: &ChrX} ChrX_18F1 = genome.Band{Band: "18F1", Desc: "Band", StartPos: 19641702, EndPos: 19675331, Giemsa: "n/a", Chr: &ChrX} ChrX_18F2 = genome.Band{Band: "18F2", Desc: "Band", StartPos: 19675331, EndPos: 19729986, Giemsa: "n/a", Chr: &ChrX} ChrX_18F3 = genome.Band{Band: "18F3", Desc: "Band", StartPos: 19729986, EndPos: 19745543, Giemsa: "n/a", Chr: &ChrX} ChrX_18F4 = genome.Band{Band: "18F4", Desc: "Band", StartPos: 19745543, EndPos: 19781104, Giemsa: "n/a", Chr: &ChrX} ChrX_18F5 = genome.Band{Band: "18F5", Desc: "Band", StartPos: 19781104, EndPos: 19781114, Giemsa: "n/a", Chr: &ChrX} ChrX_19A1 = genome.Band{Band: "19A1", Desc: "Band", StartPos: 19781114, EndPos: 19781124, Giemsa: "n/a", Chr: &ChrX} ChrX_19A2 = genome.Band{Band: "19A2", Desc: "Band", StartPos: 19781124, EndPos: 19816129, Giemsa: "n/a", Chr: &ChrX} ChrX_19A3 = genome.Band{Band: "19A3", Desc: "Band", StartPos: 19816129, EndPos: 19870888, Giemsa: "n/a", Chr: &ChrX} ChrX_19A4 = genome.Band{Band: "19A4", Desc: "Band", StartPos: 19870888, EndPos: 19925647, Giemsa: "n/a", Chr: &ChrX} ChrX_19A5 = genome.Band{Band: "19A5", Desc: "Band", StartPos: 19925647, EndPos: 19940941, Giemsa: "n/a", Chr: &ChrX} ChrX_19A6 = genome.Band{Band: "19A6", Desc: "Band", StartPos: 19940941, EndPos: 19962790, Giemsa: "n/a", Chr: &ChrX} ChrX_19B1 = genome.Band{Band: "19B1", Desc: "Band", StartPos: 19962790, EndPos: 20022738, Giemsa: "n/a", Chr: &ChrX} ChrX_19B2 = genome.Band{Band: "19B2", Desc: "Band", StartPos: 20022738, EndPos: 20026152, Giemsa: "n/a", Chr: &ChrX} ChrX_19B3 = genome.Band{Band: "19B3", Desc: "Band", StartPos: 20026152, EndPos: 20054556, Giemsa: "n/a", Chr: &ChrX} ChrX_19C1 = genome.Band{Band: "19C1", Desc: "Band", StartPos: 20054556, EndPos: 20173906, Giemsa: "n/a", Chr: &ChrX} ChrX_19C2 = genome.Band{Band: "19C2", Desc: "Band", StartPos: 20173906, EndPos: 20177320, Giemsa: "n/a", Chr: &ChrX} ChrX_19C3 = genome.Band{Band: "19C3", Desc: "Band", StartPos: 20177320, EndPos: 20192614, Giemsa: "n/a", Chr: &ChrX} ChrX_19C4 = genome.Band{Band: "19C4", Desc: "Band", StartPos: 20192614, EndPos: 20240819, Giemsa: "n/a", Chr: &ChrX} ChrX_19C5 = genome.Band{Band: "19C5", Desc: "Band", StartPos: 20240819, EndPos: 20262668, Giemsa: "n/a", Chr: &ChrX} ChrX_19C6 = genome.Band{Band: "19C6", Desc: "Band", StartPos: 20262668, EndPos: 20284517, Giemsa: "n/a", Chr: &ChrX} ChrX_19D1 = genome.Band{Band: "19D1", Desc: "Band", StartPos: 20284517, EndPos: 20352522, Giemsa: "n/a", Chr: &ChrX} ChrX_19D2 = genome.Band{Band: "19D2", Desc: "Band", StartPos: 20352522, EndPos: 20429372, Giemsa: "n/a", Chr: &ChrX} ChrX_19D3 = genome.Band{Band: "19D3", Desc: "Band", StartPos: 20429372, EndPos: 20476012, Giemsa: "n/a", Chr: &ChrX} ChrX_19E1 = genome.Band{Band: "19E1", Desc: "Band", StartPos: 20476012, EndPos: 20555165, Giemsa: "n/a", Chr: &ChrX} ChrX_19E2 = genome.Band{Band: "19E2", Desc: "Band", StartPos: 20555165, EndPos: 20634318, Giemsa: "n/a", Chr: &ChrX} ChrX_19E3 = genome.Band{Band: "19E3", Desc: "Band", StartPos: 20634318, EndPos: 20713471, Giemsa: "n/a", Chr: &ChrX} ChrX_19E4 = genome.Band{Band: "19E4", Desc: "Band", StartPos: 20713471, EndPos: 20792624, Giemsa: "n/a", Chr: &ChrX} ChrX_19E5 = genome.Band{Band: "19E5", Desc: "Band", StartPos: 20792624, EndPos: 20850026, Giemsa: "n/a", Chr: &ChrX} ChrX_19E6 = genome.Band{Band: "19E6", Desc: "Band", StartPos: 20850026, EndPos: 20885903, Giemsa: "n/a", Chr: &ChrX} ChrX_19E7 = genome.Band{Band: "19E7", Desc: "Band", StartPos: 20885903, EndPos: 20952051, Giemsa: "n/a", Chr: &ChrX} ChrX_19E8 = genome.Band{Band: "19E8", Desc: "Band", StartPos: 20952051, EndPos: 20957656, Giemsa: "n/a", Chr: &ChrX} ChrX_19F1 = genome.Band{Band: "19F1", Desc: "Band", StartPos: 20957656, EndPos: 21047572, Giemsa: "n/a", Chr: &ChrX} ChrX_19F2 = genome.Band{Band: "19F2", Desc: "Band", StartPos: 21047572, EndPos: 21137488, Giemsa: "n/a", Chr: &ChrX} ChrX_19F3 = genome.Band{Band: "19F3", Desc: "Band", StartPos: 21137488, EndPos: 21184128, Giemsa: "n/a", Chr: &ChrX} ChrX_19F4 = genome.Band{Band: "19F4", Desc: "Band", StartPos: 21184128, EndPos: 21209242, Giemsa: "n/a", Chr: &ChrX} ChrX_19F5 = genome.Band{Band: "19F5", Desc: "Band", StartPos: 21209242, EndPos: 21234356, Giemsa: "n/a", Chr: &ChrX} ChrX_19F6 = genome.Band{Band: "19F6", Desc: "Band", StartPos: 21234356, EndPos: 21248482, Giemsa: "n/a", Chr: &ChrX} ChrX_20A1 = genome.Band{Band: "20A1", Desc: "Band", StartPos: 21248482, EndPos: 21401182, Giemsa: "n/a", Chr: &ChrX} ChrX_20A2 = genome.Band{Band: "20A2", Desc: "Band", StartPos: 21401182, EndPos: 21406788, Giemsa: "n/a", Chr: &ChrX} ChrX_20A3 = genome.Band{Band: "20A3", Desc: "Band", StartPos: 21406788, EndPos: 21453428, Giemsa: "n/a", Chr: &ChrX} ChrX_20A4 = genome.Band{Band: "20A4", Desc: "Band", StartPos: 21453428, EndPos: 21500067, Giemsa: "n/a", Chr: &ChrX} ChrX_20A5 = genome.Band{Band: "20A5", Desc: "Band", StartPos: 21500067, EndPos: 21546707, Giemsa: "n/a", Chr: &ChrX} ChrX_20B1 = genome.Band{Band: "20B1", Desc: "Band", StartPos: 21546707, EndPos: 21720933, Giemsa: "n/a", Chr: &ChrX} ChrX_20B2 = genome.Band{Band: "20B2", Desc: "Band", StartPos: 21720933, EndPos: 21726539, Giemsa: "n/a", Chr: &ChrX} ChrX_20B3 = genome.Band{Band: "20B3", Desc: "Band", StartPos: 21726539, EndPos: 21773179, Giemsa: "n/a", Chr: &ChrX} ChrX_20C1 = genome.Band{Band: "20C1", Desc: "Band", StartPos: 21773179, EndPos: 21947405, Giemsa: "n/a", Chr: &ChrX} ChrX_20C2 = genome.Band{Band: "20C2", Desc: "Band", StartPos: 21947405, EndPos: 21953011, Giemsa: "n/a", Chr: &ChrX} ChrX_20C3 = genome.Band{Band: "20C3", Desc: "Band", StartPos: 21953011, EndPos: 21999650, Giemsa: "n/a", Chr: &ChrX} ChrX_20D1 = genome.Band{Band: "20D1", Desc: "Band", StartPos: 21999650, EndPos: 22059071, Giemsa: "n/a", Chr: &ChrX} ChrX_20D2 = genome.Band{Band: "20D2", Desc: "Band", StartPos: 22059071, EndPos: 22118492, Giemsa: "n/a", Chr: &ChrX} ChrX_20E1 = genome.Band{Band: "20E1", Desc: "Band", StartPos: 22118492, EndPos: 22177913, Giemsa: "n/a", Chr: &ChrX} ChrX_20E2 = genome.Band{Band: "20E2", Desc: "Band", StartPos: 22177913, EndPos: 22237333, Giemsa: "n/a", Chr: &ChrX} ChrX_20F1 = genome.Band{Band: "20F1", Desc: "Band", StartPos: 22237333, EndPos: 22296754, Giemsa: "n/a", Chr: &ChrX} ChrX_20F2 = genome.Band{Band: "20F2", Desc: "Band", StartPos: 22296754, EndPos: 22356175, Giemsa: "n/a", Chr: &ChrX} ChrX_20F3 = genome.Band{Band: "20F3", Desc: "Band", StartPos: 22356175, EndPos: 22415596, Giemsa: "n/a", Chr: &ChrX} ChrX_20F4 = genome.Band{Band: "20F4", Desc: "Band", StartPos: 22415596, EndPos: 22422827, Giemsa: "n/a", Chr: &ChrX} ) var Bands = []*genome.Band{ &Chr2L_21A5, &Chr2L_21B1, &Chr2L_21B2, &Chr2L_21B3, &Chr2L_21B4, &Chr2L_21B5, &Chr2L_21B6, &Chr2L_21B7, &Chr2L_21B8, &Chr2L_21C1, &Chr2L_21C2, &Chr2L_21C3, &Chr2L_21C4, &Chr2L_21C5, &Chr2L_21C6, &Chr2L_21C7, &Chr2L_21C8, &Chr2L_21D1, &Chr2L_21D2, &Chr2L_21D3, &Chr2L_21D4, &Chr2L_21E1, &Chr2L_21E2, &Chr2L_21E3, &Chr2L_21E4, &Chr2L_21F1, &Chr2L_21F2, &Chr2L_21F3, &Chr2L_21F4, &Chr2L_22A1, &Chr2L_22A2, &Chr2L_22A3, &Chr2L_22A4, &Chr2L_22A5, &Chr2L_22A6, &Chr2L_22A7, &Chr2L_22A8, &Chr2L_22B1, &Chr2L_22B2, &Chr2L_22B3, &Chr2L_22B4, &Chr2L_22B5, &Chr2L_22B6, &Chr2L_22B7, &Chr2L_22B8, &Chr2L_22B9, &Chr2L_22C1, &Chr2L_22C2, &Chr2L_22C3, &Chr2L_22D1, &Chr2L_22D2, &Chr2L_22D3, &Chr2L_22D4, &Chr2L_22D5, &Chr2L_22D6, &Chr2L_22E1, &Chr2L_22E2, &Chr2L_22E3, &Chr2L_22E4, &Chr2L_22F1, &Chr2L_22F2, &Chr2L_22F3, &Chr2L_22F4, &Chr2L_23A1, &Chr2L_23A2, &Chr2L_23A3, &Chr2L_23A4, &Chr2L_23A5, &Chr2L_23A6, &Chr2L_23A7, &Chr2L_23B1, &Chr2L_23B2, &Chr2L_23B3, &Chr2L_23B4, &Chr2L_23B5, &Chr2L_23B6, &Chr2L_23B7, &Chr2L_23B8, &Chr2L_23C1, &Chr2L_23C2, &Chr2L_23C3, &Chr2L_23C4, &Chr2L_23C5, &Chr2L_23D1, &Chr2L_23D2, &Chr2L_23D3, &Chr2L_23D4, &Chr2L_23D5, &Chr2L_23D6, &Chr2L_23E1, &Chr2L_23E2, &Chr2L_23E3, &Chr2L_23E4, &Chr2L_23E5, &Chr2L_23E6, &Chr2L_23F1, &Chr2L_23F2, &Chr2L_23F3, &Chr2L_23F4, &Chr2L_23F5, &Chr2L_23F6, &Chr2L_24A1, &Chr2L_24A2, &Chr2L_24A3, &Chr2L_24A4, &Chr2L_24A5, &Chr2L_24B1, &Chr2L_24B2, &Chr2L_24B3, &Chr2L_24C1, &Chr2L_24C2, &Chr2L_24C3, &Chr2L_24C4, &Chr2L_24C5, &Chr2L_24C6, &Chr2L_24C7, &Chr2L_24C8, &Chr2L_24C9, &Chr2L_24D1, &Chr2L_24D2, &Chr2L_24D3, &Chr2L_24D4, &Chr2L_24D5, &Chr2L_24D6, &Chr2L_24D7, &Chr2L_24D8, &Chr2L_24E1, &Chr2L_24E2, &Chr2L_24E3, &Chr2L_24E4, &Chr2L_24E5, &Chr2L_24F1, &Chr2L_24F2, &Chr2L_24F3, &Chr2L_24F4, &Chr2L_24F5, &Chr2L_24F6, &Chr2L_24F7, &Chr2L_24F8, &Chr2L_25A1, &Chr2L_25A2, &Chr2L_25A3, &Chr2L_25A4, &Chr2L_25A5, &Chr2L_25A6, &Chr2L_25A7, &Chr2L_25A8, &Chr2L_25B1, &Chr2L_25B2, &Chr2L_25B3, &Chr2L_25B4, &Chr2L_25B5, &Chr2L_25B6, &Chr2L_25B7, &Chr2L_25B8, &Chr2L_25B9, &Chr2L_25B10, &Chr2L_25C1, &Chr2L_25C2, &Chr2L_25C3, &Chr2L_25C4, &Chr2L_25C5, &Chr2L_25C6, &Chr2L_25C7, &Chr2L_25C8, &Chr2L_25C9, &Chr2L_25C10, &Chr2L_25D1, &Chr2L_25D2, &Chr2L_25D3, &Chr2L_25D4, &Chr2L_25D5, &Chr2L_25D6, &Chr2L_25D7, &Chr2L_25E1, &Chr2L_25E2, &Chr2L_25E3, &Chr2L_25E4, &Chr2L_25E5, &Chr2L_25E6, &Chr2L_25F1, &Chr2L_25F2, &Chr2L_25F3, &Chr2L_25F4, &Chr2L_25F5, &Chr2L_26A1, &Chr2L_26A2, &Chr2L_26A3, &Chr2L_26A4, &Chr2L_26A5, &Chr2L_26A6, &Chr2L_26A7, &Chr2L_26A8, &Chr2L_26A9, &Chr2L_26B1, &Chr2L_26B2, &Chr2L_26B3, &Chr2L_26B4, &Chr2L_26B5, &Chr2L_26B6, &Chr2L_26B7, &Chr2L_26B8, &Chr2L_26B9, &Chr2L_26B10, &Chr2L_26B11, &Chr2L_26C1, &Chr2L_26C2, &Chr2L_26C3, &Chr2L_26C4, &Chr2L_26D1, &Chr2L_26D2, &Chr2L_26D3, &Chr2L_26D4, &Chr2L_26D5, &Chr2L_26D6, &Chr2L_26D7, &Chr2L_26D8, &Chr2L_26D9, &Chr2L_26D10, &Chr2L_26D11, &Chr2L_26E1, &Chr2L_26E2, &Chr2L_26E3, &Chr2L_26E4, &Chr2L_26F1, &Chr2L_26F2, &Chr2L_26F3, &Chr2L_26F4, &Chr2L_26F5, &Chr2L_26F6, &Chr2L_26F7, &Chr2L_27A1, &Chr2L_27A2, &Chr2L_27B1, &Chr2L_27B2, &Chr2L_27B3, &Chr2L_27B4, &Chr2L_27C1, &Chr2L_27C2, &Chr2L_27C3, &Chr2L_27C4, &Chr2L_27C5, &Chr2L_27C6, &Chr2L_27C7, &Chr2L_27C8, &Chr2L_27C9, &Chr2L_27D1, &Chr2L_27D2, &Chr2L_27D3, &Chr2L_27D4, &Chr2L_27D5, &Chr2L_27D6, &Chr2L_27D7, &Chr2L_27E1, &Chr2L_27E2, &Chr2L_27E3, &Chr2L_27E4, &Chr2L_27E5, &Chr2L_27E6, &Chr2L_27E7, &Chr2L_27E8, &Chr2L_27F1, &Chr2L_27F2, &Chr2L_27F3, &Chr2L_27F4, &Chr2L_27F5, &Chr2L_27F6, &Chr2L_27F7, &Chr2L_28A1, &Chr2L_28A2, &Chr2L_28A3, &Chr2L_28A4, &Chr2L_28A5, &Chr2L_28A6, &Chr2L_28B1, &Chr2L_28B2, &Chr2L_28B3, &Chr2L_28B4, &Chr2L_28C1, &Chr2L_28C2, &Chr2L_28C3, &Chr2L_28C4, &Chr2L_28C5, &Chr2L_28C6, &Chr2L_28C7, &Chr2L_28C8, &Chr2L_28C9, &Chr2L_28D1, &Chr2L_28D2, &Chr2L_28D3, &Chr2L_28D4, &Chr2L_28D5, &Chr2L_28D6, &Chr2L_28D7, &Chr2L_28D8, &Chr2L_28D9, &Chr2L_28D10, &Chr2L_28D11, &Chr2L_28D12, &Chr2L_28E1, &Chr2L_28E2, &Chr2L_28E3, &Chr2L_28E4, &Chr2L_28E5, &Chr2L_28E6, &Chr2L_28E7, &Chr2L_28E8, &Chr2L_28E9, &Chr2L_28F1, &Chr2L_28F2, &Chr2L_28F3, &Chr2L_28F4, &Chr2L_28F5, &Chr2L_29A1, &Chr2L_29A2, &Chr2L_29A3, &Chr2L_29A4, &Chr2L_29A5, &Chr2L_29B1, &Chr2L_29B2, &Chr2L_29B3, &Chr2L_29B4, &Chr2L_29C1, &Chr2L_29C2, &Chr2L_29C3, &Chr2L_29C4, &Chr2L_29C5, &Chr2L_29D1, &Chr2L_29D2, &Chr2L_29D3, &Chr2L_29D4, &Chr2L_29D5, &Chr2L_29D6, &Chr2L_29D7, &Chr2L_29E1, &Chr2L_29E2, &Chr2L_29E3, &Chr2L_29E4, &Chr2L_29E5, &Chr2L_29E6, &Chr2L_29F1, &Chr2L_29F2, &Chr2L_29F3, &Chr2L_29F4, &Chr2L_29F5, &Chr2L_29F6, &Chr2L_29F7, &Chr2L_29F8, &Chr2L_30A1, &Chr2L_30A2, &Chr2L_30A3, &Chr2L_30A4, &Chr2L_30A5, &Chr2L_30A6, &Chr2L_30A7, &Chr2L_30A8, &Chr2L_30A9, &Chr2L_30B1, &Chr2L_30B2, &Chr2L_30B3, &Chr2L_30B4, &Chr2L_30B5, &Chr2L_30B6, &Chr2L_30B7, &Chr2L_30B8, &Chr2L_30B9, &Chr2L_30B10, &Chr2L_30B11, &Chr2L_30B12, &Chr2L_30C1, &Chr2L_30C2, &Chr2L_30C3, &Chr2L_30C4, &Chr2L_30C5, &Chr2L_30C6, &Chr2L_30C7, &Chr2L_30C8, &Chr2L_30C9, &Chr2L_30D1, &Chr2L_30D2, &Chr2L_30D3, &Chr2L_30D4, &Chr2L_30E1, &Chr2L_30E2, &Chr2L_30E3, &Chr2L_30E4, &Chr2L_30F1, &Chr2L_30F2, &Chr2L_30F3, &Chr2L_30F4, &Chr2L_30F5, &Chr2L_30F6, &Chr2L_31A1, &Chr2L_31A2, &Chr2L_31A3, &Chr2L_31B1, &Chr2L_31B2, &Chr2L_31B3, &Chr2L_31B4, &Chr2L_31B5, &Chr2L_31C1, &Chr2L_31C2, &Chr2L_31C3, &Chr2L_31C4, &Chr2L_31C5, &Chr2L_31C6, &Chr2L_31C7, &Chr2L_31D1, &Chr2L_31D2, &Chr2L_31D3, &Chr2L_31D4, &Chr2L_31D5, &Chr2L_31D6, &Chr2L_31D7, &Chr2L_31D8, &Chr2L_31D9, &Chr2L_31D10, &Chr2L_31D11, &Chr2L_31E1, &Chr2L_31E2, &Chr2L_31E3, &Chr2L_31E4, &Chr2L_31E5, &Chr2L_31E6, &Chr2L_31E7, &Chr2L_31F1, &Chr2L_31F2, &Chr2L_31F3, &Chr2L_31F4, &Chr2L_31F5, &Chr2L_32A1, &Chr2L_32A2, &Chr2L_32A3, &Chr2L_32A4, &Chr2L_32A5, &Chr2L_32B1, &Chr2L_32B2, &Chr2L_32B3, &Chr2L_32B4, &Chr2L_32C1, &Chr2L_32C2, &Chr2L_32C3, &Chr2L_32C4, &Chr2L_32C5, &Chr2L_32D1, &Chr2L_32D2, &Chr2L_32D3, &Chr2L_32D4, &Chr2L_32D5, &Chr2L_32E1, &Chr2L_32E2, &Chr2L_32E3, &Chr2L_32E4, &Chr2L_32E5, &Chr2L_32F1, &Chr2L_32F2, &Chr2L_32F3, &Chr2L_32F4, &Chr2L_33A1, &Chr2L_33A2, &Chr2L_33A3, &Chr2L_33A4, &Chr2L_33A5, &Chr2L_33A6, &Chr2L_33A7, &Chr2L_33A8, &Chr2L_33B1, &Chr2L_33B2, &Chr2L_33B3, &Chr2L_33B4, &Chr2L_33B5, &Chr2L_33B6, &Chr2L_33B7, &Chr2L_33B8, &Chr2L_33B9, &Chr2L_33B10, &Chr2L_33B11, &Chr2L_33B12, &Chr2L_33B13, &Chr2L_33B14, &Chr2L_33C1, &Chr2L_33C2, &Chr2L_33C3, &Chr2L_33C4, &Chr2L_33C5, &Chr2L_33C6, &Chr2L_33D1, &Chr2L_33D2, &Chr2L_33D3, &Chr2L_33D4, &Chr2L_33D5, &Chr2L_33E1, &Chr2L_33E2, &Chr2L_33E3, &Chr2L_33E4, &Chr2L_33E5, &Chr2L_33E6, &Chr2L_33E7, &Chr2L_33E8, &Chr2L_33E9, &Chr2L_33E10, &Chr2L_33F1, &Chr2L_33F2, &Chr2L_33F3, &Chr2L_33F4, &Chr2L_33F5, &Chr2L_34A1, &Chr2L_34A2, &Chr2L_34A3, &Chr2L_34A4, &Chr2L_34A5, &Chr2L_34A6, &Chr2L_34A7, &Chr2L_34A8, &Chr2L_34A9, &Chr2L_34A10, &Chr2L_34A11, &Chr2L_34B1, &Chr2L_34B2, &Chr2L_34B3, &Chr2L_34B4, &Chr2L_34B5, &Chr2L_34B6, &Chr2L_34B7, &Chr2L_34B8, &Chr2L_34B9, &Chr2L_34B10, &Chr2L_34B11, &Chr2L_34B12, &Chr2L_34C1, &Chr2L_34C2, &Chr2L_34C3, &Chr2L_34C4, &Chr2L_34C5, &Chr2L_34C6, &Chr2L_34C7, &Chr2L_34D1, &Chr2L_34D2, &Chr2L_34D3, &Chr2L_34D4, &Chr2L_34D5, &Chr2L_34D6, &Chr2L_34D7, &Chr2L_34D8, &Chr2L_34E1, &Chr2L_34E2, &Chr2L_34E3, &Chr2L_34E4, &Chr2L_34E5, &Chr2L_34E6, &Chr2L_34F1, &Chr2L_34F2, &Chr2L_34F3, &Chr2L_34F4, &Chr2L_34F5, &Chr2L_35A1, &Chr2L_35A2, &Chr2L_35A3, &Chr2L_35A4, &Chr2L_35B1, &Chr2L_35B2, &Chr2L_35B3, &Chr2L_35B4, &Chr2L_35B5, &Chr2L_35B6, &Chr2L_35B7, &Chr2L_35B8, &Chr2L_35B9, &Chr2L_35B10, &Chr2L_35C1, &Chr2L_35C2, &Chr2L_35C3, &Chr2L_35C4, &Chr2L_35C5, &Chr2L_35D1, &Chr2L_35D2, &Chr2L_35D3, &Chr2L_35D4, &Chr2L_35D5, &Chr2L_35D6, &Chr2L_35D7, &Chr2L_35E1, &Chr2L_35E2, &Chr2L_35E3, &Chr2L_35E4, &Chr2L_35E5, &Chr2L_35E6, &Chr2L_35F1, &Chr2L_35F2, &Chr2L_35F3, &Chr2L_35F4, &Chr2L_35F5, &Chr2L_35F6, &Chr2L_35F7, &Chr2L_35F8, &Chr2L_35F9, &Chr2L_35F10, &Chr2L_35F11, &Chr2L_35F12, &Chr2L_36A1, &Chr2L_36A2, &Chr2L_36A3, &Chr2L_36A4, &Chr2L_36A5, &Chr2L_36A6, &Chr2L_36A7, &Chr2L_36A8, &Chr2L_36A9, &Chr2L_36A10, &Chr2L_36A11, &Chr2L_36A12, &Chr2L_36A13, &Chr2L_36A14, &Chr2L_36B1, &Chr2L_36B2, &Chr2L_36B3, &Chr2L_36B4, &Chr2L_36B5, &Chr2L_36B6, &Chr2L_36B7, &Chr2L_36B8, &Chr2L_36C1, &Chr2L_36C2, &Chr2L_36C3, &Chr2L_36C4, &Chr2L_36C5, &Chr2L_36C6, &Chr2L_36C7, &Chr2L_36C8, &Chr2L_36C9, &Chr2L_36C10, &Chr2L_36C11, &Chr2L_36D1, &Chr2L_36D2, &Chr2L_36D3, &Chr2L_36E1, &Chr2L_36E2, &Chr2L_36E3, &Chr2L_36E4, &Chr2L_36E5, &Chr2L_36E6, &Chr2L_36F1, &Chr2L_36F2, &Chr2L_36F3, &Chr2L_36F4, &Chr2L_36F5, &Chr2L_36F6, &Chr2L_36F7, &Chr2L_36F8, &Chr2L_36F9, &Chr2L_36F10, &Chr2L_36F11, &Chr2L_37A1, &Chr2L_37A2, &Chr2L_37A3, &Chr2L_37A4, &Chr2L_37A5, &Chr2L_37A6, &Chr2L_37B1, &Chr2L_37B2, &Chr2L_37B3, &Chr2L_37B4, &Chr2L_37B5, &Chr2L_37B6, &Chr2L_37B7, &Chr2L_37B8, &Chr2L_37B9, &Chr2L_37B10, &Chr2L_37B11, &Chr2L_37B12, &Chr2L_37B13, &Chr2L_37C1, &Chr2L_37C2, &Chr2L_37C3, &Chr2L_37C4, &Chr2L_37C5, &Chr2L_37C6, &Chr2L_37C7, &Chr2L_37D1, &Chr2L_37D2, &Chr2L_37D3, &Chr2L_37D4, &Chr2L_37D5, &Chr2L_37D6, &Chr2L_37D7, &Chr2L_37E1, &Chr2L_37E2, &Chr2L_37E3, &Chr2L_37E4, &Chr2L_37E5, &Chr2L_37F1, &Chr2L_37F2, &Chr2L_37F3, &Chr2L_37F4, &Chr2L_37F5, &Chr2L_37F6, &Chr2L_38A1, &Chr2L_38A2, &Chr2L_38A3, &Chr2L_38A4, &Chr2L_38A5, &Chr2L_38A6, &Chr2L_38A7, &Chr2L_38A8, &Chr2L_38B1, &Chr2L_38B2, &Chr2L_38B3, &Chr2L_38B4, &Chr2L_38B5, &Chr2L_38B6, &Chr2L_38C1, &Chr2L_38C2, &Chr2L_38C3, &Chr2L_38C4, &Chr2L_38C5, &Chr2L_38C6, &Chr2L_38C7, &Chr2L_38C8, &Chr2L_38C9, &Chr2L_38C10, &Chr2L_38D1, &Chr2L_38D2, &Chr2L_38D3, &Chr2L_38D4, &Chr2L_38D5, &Chr2L_38E1, &Chr2L_38E2, &Chr2L_38E3, &Chr2L_38E4, &Chr2L_38E5, &Chr2L_38E6, &Chr2L_38E7, &Chr2L_38E8, &Chr2L_38E9, &Chr2L_38E10, &Chr2L_38F1, &Chr2L_38F2, &Chr2L_38F3, &Chr2L_38F4, &Chr2L_38F5, &Chr2L_38F6, &Chr2L_39A1, &Chr2L_39A2, &Chr2L_39A3, &Chr2L_39A4, &Chr2L_39A5, &Chr2L_39A6, &Chr2L_39A7, &Chr2L_39B1, &Chr2L_39B2, &Chr2L_39B3, &Chr2L_39B4, &Chr2L_39C1, &Chr2L_39C2, &Chr2L_39C3, &Chr2L_39C4, &Chr2L_39D1, &Chr2L_39D2, &Chr2L_39D3, &Chr2L_39D4, &Chr2L_39D5, &Chr2L_39E1, &Chr2L_39E2, &Chr2L_39E3, &Chr2L_39E4, &Chr2L_39E5, &Chr2L_39E6, &Chr2L_39E7, &Chr2L_39F1, &Chr2L_39F2, &Chr2L_39F3, &Chr2L_40A1, &Chr2L_40A2, &Chr2L_40A3, &Chr2L_40A4, &Chr2L_40A5, &Chr2L_40A6, &Chr2L_40B1, &Chr2L_40B2, &Chr2L_40B3, &Chr2L_40B4, &Chr2L_40B5, &Chr2L_40C1, &Chr2L_40C2, &Chr2L_40C3, &Chr2L_40D1, &Chr2L_40D2, &Chr2L_40D3, &Chr2L_40D4, &Chr2L_40D5, &Chr2L_40E1, &Chr2L_40E2, &Chr2L_40E3, &Chr2L_40E4, &Chr2L_40E5, &Chr2L_40F1, &Chr2L_40F2, &Chr2L_40F3, &Chr2L_40F4, &Chr2L_40F5, &Chr2L_40F6, &Chr2L_40F7, &Chr2R_41A1, &Chr2R_41A2, &Chr2R_41A3, &Chr2R_41B1, &Chr2R_41B2, &Chr2R_41B3, &Chr2R_41C1, &Chr2R_41C2, &Chr2R_41C3, &Chr2R_41C4, &Chr2R_41C5, &Chr2R_41C6, &Chr2R_41C7, &Chr2R_41D1, &Chr2R_41D2, &Chr2R_41D3, &Chr2R_41D4, &Chr2R_41E1, &Chr2R_41E2, &Chr2R_41E3, &Chr2R_41E4, &Chr2R_41E5, &Chr2R_41E6, &Chr2R_41F1, &Chr2R_41F2, &Chr2R_41F3, &Chr2R_41F4, &Chr2R_41F5, &Chr2R_41F6, &Chr2R_41F7, &Chr2R_41F8, &Chr2R_41F9, &Chr2R_41F10, &Chr2R_41F11, &Chr2R_42A1, &Chr2R_42A2, &Chr2R_42A3, &Chr2R_42A4, &Chr2R_42A5, &Chr2R_42A6, &Chr2R_42A7, &Chr2R_42A8, &Chr2R_42A9, &Chr2R_42A10, &Chr2R_42A11, &Chr2R_42A12, &Chr2R_42A13, &Chr2R_42A14, &Chr2R_42A15, &Chr2R_42A16, &Chr2R_42A17, &Chr2R_42A18, &Chr2R_42A19, &Chr2R_42B1, &Chr2R_42B2, &Chr2R_42B3, &Chr2R_42B4, &Chr2R_42B5, &Chr2R_42C1, &Chr2R_42C2, &Chr2R_42C3, &Chr2R_42C4, &Chr2R_42C5, &Chr2R_42C6, &Chr2R_42C7, &Chr2R_42C8, &Chr2R_42C9, &Chr2R_42C10, &Chr2R_42D1, &Chr2R_42D2, &Chr2R_42D3, &Chr2R_42D4, &Chr2R_42D5, &Chr2R_42D6, &Chr2R_42E1, &Chr2R_42E2, &Chr2R_42E3, &Chr2R_42E4, &Chr2R_42E5, &Chr2R_42E6, &Chr2R_42E7, &Chr2R_42F1, &Chr2R_42F2, &Chr2R_42F3, &Chr2R_43A1, &Chr2R_43A2, &Chr2R_43A3, &Chr2R_43A4, &Chr2R_43B1, &Chr2R_43B2, &Chr2R_43B3, &Chr2R_43C1, &Chr2R_43C2, &Chr2R_43C3, &Chr2R_43C4, &Chr2R_43C5, &Chr2R_43C6, &Chr2R_43C7, &Chr2R_43D1, &Chr2R_43D2, &Chr2R_43D3, &Chr2R_43D4, &Chr2R_43D5, &Chr2R_43D6, &Chr2R_43D7, &Chr2R_43E1, &Chr2R_43E2, &Chr2R_43E3, &Chr2R_43E4, &Chr2R_43E5, &Chr2R_43E6, &Chr2R_43E7, &Chr2R_43E8, &Chr2R_43E9, &Chr2R_43E10, &Chr2R_43E11, &Chr2R_43E12, &Chr2R_43E13, &Chr2R_43E14, &Chr2R_43E15, &Chr2R_43E16, &Chr2R_43E17, &Chr2R_43E18, &Chr2R_43F1, &Chr2R_43F2, &Chr2R_43F3, &Chr2R_43F4, &Chr2R_43F5, &Chr2R_43F6, &Chr2R_43F7, &Chr2R_43F8, &Chr2R_43F9, &Chr2R_44A1, &Chr2R_44A2, &Chr2R_44A3, &Chr2R_44A4, &Chr2R_44A5, &Chr2R_44A6, &Chr2R_44A7, &Chr2R_44A8, &Chr2R_44B1, &Chr2R_44B2, &Chr2R_44B3, &Chr2R_44B4, &Chr2R_44B5, &Chr2R_44B6, &Chr2R_44B7, &Chr2R_44B8, &Chr2R_44B9, &Chr2R_44C1, &Chr2R_44C2, &Chr2R_44C3, &Chr2R_44C4, &Chr2R_44C5, &Chr2R_44C6, &Chr2R_44D1, &Chr2R_44D2, &Chr2R_44D3, &Chr2R_44D4, &Chr2R_44D5, &Chr2R_44D6, &Chr2R_44D7, &Chr2R_44D8, &Chr2R_44E1, &Chr2R_44E2, &Chr2R_44E3, &Chr2R_44E4, &Chr2R_44F1, &Chr2R_44F2, &Chr2R_44F3, &Chr2R_44F4, &Chr2R_44F5, &Chr2R_44F6, &Chr2R_44F7, &Chr2R_44F8, &Chr2R_44F9, &Chr2R_44F10, &Chr2R_44F11, &Chr2R_44F12, &Chr2R_45A1, &Chr2R_45A2, &Chr2R_45A3, &Chr2R_45A4, &Chr2R_45A5, &Chr2R_45A6, &Chr2R_45A7, &Chr2R_45A8, &Chr2R_45A9, &Chr2R_45A10, &Chr2R_45A11, &Chr2R_45A12, &Chr2R_45A13, &Chr2R_45B1, &Chr2R_45B2, &Chr2R_45B3, &Chr2R_45B4, &Chr2R_45B5, &Chr2R_45B6, &Chr2R_45B7, &Chr2R_45B8, &Chr2R_45B9, &Chr2R_45C1, &Chr2R_45C2, &Chr2R_45C3, &Chr2R_45C4, &Chr2R_45C5, &Chr2R_45C6, &Chr2R_45C7, &Chr2R_45C8, &Chr2R_45C9, &Chr2R_45D1, &Chr2R_45D2, &Chr2R_45D3, &Chr2R_45D4, &Chr2R_45D5, &Chr2R_45D6, &Chr2R_45D7, &Chr2R_45D8, &Chr2R_45D9, &Chr2R_45D10, &Chr2R_45E1, &Chr2R_45E2, &Chr2R_45E3, &Chr2R_45E4, &Chr2R_45F1, &Chr2R_45F2, &Chr2R_45F3, &Chr2R_45F4, &Chr2R_45F5, &Chr2R_45F6, &Chr2R_45F7, &Chr2R_45F8, &Chr2R_46A1, &Chr2R_46A2, &Chr2R_46A3, &Chr2R_46A4, &Chr2R_46B1, &Chr2R_46B2, &Chr2R_46B3, &Chr2R_46B4, &Chr2R_46B5, &Chr2R_46B6, &Chr2R_46B7, &Chr2R_46B8, &Chr2R_46B9, &Chr2R_46B10, &Chr2R_46B11, &Chr2R_46B12, &Chr2R_46B13, &Chr2R_46B14, &Chr2R_46C1, &Chr2R_46C2, &Chr2R_46C3, &Chr2R_46C4, &Chr2R_46C5, &Chr2R_46C6, &Chr2R_46C7, &Chr2R_46C8, &Chr2R_46C9, &Chr2R_46C10, &Chr2R_46C11, &Chr2R_46C12, &Chr2R_46D1, &Chr2R_46D2, &Chr2R_46D3, &Chr2R_46D4, &Chr2R_46D5, &Chr2R_46D6, &Chr2R_46D7, &Chr2R_46D8, &Chr2R_46D9, &Chr2R_46E1, &Chr2R_46E2, &Chr2R_46E3, &Chr2R_46E4, &Chr2R_46E5, &Chr2R_46E6, &Chr2R_46E7, &Chr2R_46E8, &Chr2R_46E9, &Chr2R_46F1, &Chr2R_46F2, &Chr2R_46F3, &Chr2R_46F4, &Chr2R_46F5, &Chr2R_46F6, &Chr2R_46F7, &Chr2R_46F8, &Chr2R_46F9, &Chr2R_46F10, &Chr2R_46F11, &Chr2R_47A1, &Chr2R_47A2, &Chr2R_47A3, &Chr2R_47A4, &Chr2R_47A5, &Chr2R_47A6, &Chr2R_47A7, &Chr2R_47A8, &Chr2R_47A9, &Chr2R_47A10, &Chr2R_47A11, &Chr2R_47A12, &Chr2R_47A13, &Chr2R_47A14, &Chr2R_47A15, &Chr2R_47A16, &Chr2R_47B1, &Chr2R_47B2, &Chr2R_47B3, &Chr2R_47B4, &Chr2R_47B5, &Chr2R_47B6, &Chr2R_47B7, &Chr2R_47B8, &Chr2R_47B9, &Chr2R_47B10, &Chr2R_47B11, &Chr2R_47B12, &Chr2R_47B13, &Chr2R_47B14, &Chr2R_47C1, &Chr2R_47C2, &Chr2R_47C3, &Chr2R_47C4, &Chr2R_47C5, &Chr2R_47C6, &Chr2R_47C7, &Chr2R_47D1, &Chr2R_47D2, &Chr2R_47D3, &Chr2R_47D4, &Chr2R_47D5, &Chr2R_47D6, &Chr2R_47D7, &Chr2R_47D8, &Chr2R_47E1, &Chr2R_47E2, &Chr2R_47E3, &Chr2R_47E4, &Chr2R_47E5, &Chr2R_47E6, &Chr2R_47F1, &Chr2R_47F2, &Chr2R_47F3, &Chr2R_47F4, &Chr2R_47F5, &Chr2R_47F6, &Chr2R_47F7, &Chr2R_47F8, &Chr2R_47F9, &Chr2R_47F10, &Chr2R_47F11, &Chr2R_47F12, &Chr2R_47F13, &Chr2R_47F14, &Chr2R_47F15, &Chr2R_47F16, &Chr2R_47F17, &Chr2R_47F18, &Chr2R_48A1, &Chr2R_48A2, &Chr2R_48A3, &Chr2R_48A4, &Chr2R_48A5, &Chr2R_48A6, &Chr2R_48B1, &Chr2R_48B2, &Chr2R_48B3, &Chr2R_48B4, &Chr2R_48B5, &Chr2R_48B6, &Chr2R_48B7, &Chr2R_48B8, &Chr2R_48C1, &Chr2R_48C2, &Chr2R_48C3, &Chr2R_48C4, &Chr2R_48C5, &Chr2R_48C6, &Chr2R_48C7, &Chr2R_48C8, &Chr2R_48D1, &Chr2R_48D2, &Chr2R_48D3, &Chr2R_48D4, &Chr2R_48D5, &Chr2R_48D6, &Chr2R_48D7, &Chr2R_48D8, &Chr2R_48E1, &Chr2R_48E2, &Chr2R_48E3, &Chr2R_48E4, &Chr2R_48E5, &Chr2R_48E6, &Chr2R_48E7, &Chr2R_48E8, &Chr2R_48E9, &Chr2R_48E10, &Chr2R_48E11, &Chr2R_48E12, &Chr2R_48F1, &Chr2R_48F2, &Chr2R_48F3, &Chr2R_48F4, &Chr2R_48F5, &Chr2R_48F6, &Chr2R_48F7, &Chr2R_48F8, &Chr2R_48F9, &Chr2R_48F10, &Chr2R_48F11, &Chr2R_49A1, &Chr2R_49A2, &Chr2R_49A3, &Chr2R_49A4, &Chr2R_49A5, &Chr2R_49A6, &Chr2R_49A7, &Chr2R_49A8, &Chr2R_49A9, &Chr2R_49A10, &Chr2R_49A11, &Chr2R_49A12, &Chr2R_49A13, &Chr2R_49B1, &Chr2R_49B2, &Chr2R_49B3, &Chr2R_49B4, &Chr2R_49B5, &Chr2R_49B6, &Chr2R_49B7, &Chr2R_49B8, &Chr2R_49B9, &Chr2R_49B10, &Chr2R_49B11, &Chr2R_49B12, &Chr2R_49C1, &Chr2R_49C2, &Chr2R_49C3, &Chr2R_49C4, &Chr2R_49D1, &Chr2R_49D2, &Chr2R_49D3, &Chr2R_49D4, &Chr2R_49D5, &Chr2R_49D6, &Chr2R_49D7, &Chr2R_49E1, &Chr2R_49E2, &Chr2R_49E3, &Chr2R_49E4, &Chr2R_49E5, &Chr2R_49E6, &Chr2R_49E7, &Chr2R_49F1, &Chr2R_49F2, &Chr2R_49F3, &Chr2R_49F4, &Chr2R_49F5, &Chr2R_49F6, &Chr2R_49F7, &Chr2R_49F8, &Chr2R_49F9, &Chr2R_49F10, &Chr2R_49F11, &Chr2R_49F12, &Chr2R_49F13, &Chr2R_49F14, &Chr2R_49F15, &Chr2R_50A1, &Chr2R_50A2, &Chr2R_50A3, &Chr2R_50A4, &Chr2R_50A5, &Chr2R_50A6, &Chr2R_50A7, &Chr2R_50A8, &Chr2R_50A9, &Chr2R_50A10, &Chr2R_50A11, &Chr2R_50A12, &Chr2R_50A13, &Chr2R_50A14, &Chr2R_50A15, &Chr2R_50B1, &Chr2R_50B2, &Chr2R_50B3, &Chr2R_50B4, &Chr2R_50B5, &Chr2R_50B6, &Chr2R_50B7, &Chr2R_50B8, &Chr2R_50B9, &Chr2R_50C1, &Chr2R_50C2, &Chr2R_50C3, &Chr2R_50C4, &Chr2R_50C5, &Chr2R_50C6, &Chr2R_50C7, &Chr2R_50C8, &Chr2R_50C9, &Chr2R_50C10, &Chr2R_50C11, &Chr2R_50C12, &Chr2R_50C13, &Chr2R_50C14, &Chr2R_50C15, &Chr2R_50C16, &Chr2R_50C17, &Chr2R_50C18, &Chr2R_50C19, &Chr2R_50C20, &Chr2R_50C21, &Chr2R_50C22, &Chr2R_50C23, &Chr2R_50D1, &Chr2R_50D2, &Chr2R_50D3, &Chr2R_50D4, &Chr2R_50D5, &Chr2R_50D6, &Chr2R_50D7, &Chr2R_50E1, &Chr2R_50E2, &Chr2R_50E3, &Chr2R_50E4, &Chr2R_50E5, &Chr2R_50E6, &Chr2R_50E7, &Chr2R_50E8, &Chr2R_50E9, &Chr2R_50F1, &Chr2R_50F2, &Chr2R_50F3, &Chr2R_50F4, &Chr2R_50F5, &Chr2R_50F6, &Chr2R_50F7, &Chr2R_50F8, &Chr2R_50F9, &Chr2R_51A1, &Chr2R_51A2, &Chr2R_51A3, &Chr2R_51A4, &Chr2R_51A5, &Chr2R_51A6, &Chr2R_51A7, &Chr2R_51A8, &Chr2R_51B1, &Chr2R_51B2, &Chr2R_51B3, &Chr2R_51B4, &Chr2R_51B5, &Chr2R_51B6, &Chr2R_51B7, &Chr2R_51B8, &Chr2R_51B9, &Chr2R_51B10, &Chr2R_51B11, &Chr2R_51C1, &Chr2R_51C2, &Chr2R_51C3, &Chr2R_51C4, &Chr2R_51C5, &Chr2R_51C6, &Chr2R_51C7, &Chr2R_51D1, &Chr2R_51D2, &Chr2R_51D3, &Chr2R_51D4, &Chr2R_51D5, &Chr2R_51D6, &Chr2R_51D7, &Chr2R_51D8, &Chr2R_51D9, &Chr2R_51D10, &Chr2R_51D11, &Chr2R_51D12, &Chr2R_51E1, &Chr2R_51E2, &Chr2R_51E3, &Chr2R_51E4, &Chr2R_51E5, &Chr2R_51E6, &Chr2R_51E7, &Chr2R_51E8, &Chr2R_51E9, &Chr2R_51E10, &Chr2R_51E11, &Chr2R_51F1, &Chr2R_51F2, &Chr2R_51F3, &Chr2R_51F4, &Chr2R_51F5, &Chr2R_51F6, &Chr2R_51F7, &Chr2R_51F8, &Chr2R_51F9, &Chr2R_51F10, &Chr2R_51F11, &Chr2R_51F12, &Chr2R_51F13, &Chr2R_52A1, &Chr2R_52A2, &Chr2R_52A3, &Chr2R_52A4, &Chr2R_52A5, &Chr2R_52A6, &Chr2R_52A7, &Chr2R_52A8, &Chr2R_52A9, &Chr2R_52A10, &Chr2R_52A11, &Chr2R_52A12, &Chr2R_52A13, &Chr2R_52A14, &Chr2R_52B1, &Chr2R_52B2, &Chr2R_52B3, &Chr2R_52B4, &Chr2R_52B5, &Chr2R_52C1, &Chr2R_52C2, &Chr2R_52C3, &Chr2R_52C4, &Chr2R_52C5, &Chr2R_52C6, &Chr2R_52C7, &Chr2R_52C8, &Chr2R_52C9, &Chr2R_52D1, &Chr2R_52D2, &Chr2R_52D3, &Chr2R_52D4, &Chr2R_52D5, &Chr2R_52D6, &Chr2R_52D7, &Chr2R_52D8, &Chr2R_52D9, &Chr2R_52D10, &Chr2R_52D11, &Chr2R_52D12, &Chr2R_52D13, &Chr2R_52D14, &Chr2R_52D15, &Chr2R_52E1, &Chr2R_52E2, &Chr2R_52E3, &Chr2R_52E4, &Chr2R_52E5, &Chr2R_52E6, &Chr2R_52E7, &Chr2R_52E8, &Chr2R_52E9, &Chr2R_52E10, &Chr2R_52E11, &Chr2R_52F1, &Chr2R_52F2, &Chr2R_52F3, &Chr2R_52F4, &Chr2R_52F5, &Chr2R_52F6, &Chr2R_52F7, &Chr2R_52F8, &Chr2R_52F9, &Chr2R_52F10, &Chr2R_52F11, &Chr2R_53A1, &Chr2R_53A2, &Chr2R_53A3, &Chr2R_53A4, &Chr2R_53A5, &Chr2R_53B1, &Chr2R_53B2, &Chr2R_53B3, &Chr2R_53B4, &Chr2R_53B5, &Chr2R_53B6, &Chr2R_53C1, &Chr2R_53C2, &Chr2R_53C3, &Chr2R_53C4, &Chr2R_53C5, &Chr2R_53C6, &Chr2R_53C7, &Chr2R_53C8, &Chr2R_53C9, &Chr2R_53C10, &Chr2R_53C11, &Chr2R_53C12, &Chr2R_53C13, &Chr2R_53C14, &Chr2R_53C15, &Chr2R_53D1, &Chr2R_53D2, &Chr2R_53D3, &Chr2R_53D4, &Chr2R_53D5, &Chr2R_53D6, &Chr2R_53D7, &Chr2R_53D8, &Chr2R_53D9, &Chr2R_53D10, &Chr2R_53D11, &Chr2R_53D12, &Chr2R_53D13, &Chr2R_53D14, &Chr2R_53D15, &Chr2R_53E1, &Chr2R_53E2, &Chr2R_53E3, &Chr2R_53E4, &Chr2R_53E5, &Chr2R_53E6, &Chr2R_53E7, &Chr2R_53E8, &Chr2R_53E9, &Chr2R_53E10, &Chr2R_53E11, &Chr2R_53F1, &Chr2R_53F2, &Chr2R_53F3, &Chr2R_53F4, &Chr2R_53F5, &Chr2R_53F6, &Chr2R_53F7, &Chr2R_53F8, &Chr2R_53F9, &Chr2R_53F10, &Chr2R_53F11, &Chr2R_53F12, &Chr2R_53F13, &Chr2R_54A1, &Chr2R_54A2, &Chr2R_54A3, &Chr2R_54B1, &Chr2R_54B2, &Chr2R_54B3, &Chr2R_54B4, &Chr2R_54B5, &Chr2R_54B6, &Chr2R_54B7, &Chr2R_54B8, &Chr2R_54B9, &Chr2R_54B10, &Chr2R_54B11, &Chr2R_54B12, &Chr2R_54B13, &Chr2R_54B14, &Chr2R_54B15, &Chr2R_54B16, &Chr2R_54B17, &Chr2R_54B18, &Chr2R_54C1, &Chr2R_54C2, &Chr2R_54C3, &Chr2R_54C4, &Chr2R_54C5, &Chr2R_54C6, &Chr2R_54C7, &Chr2R_54C8, &Chr2R_54C9, &Chr2R_54C10, &Chr2R_54C11, &Chr2R_54C12, &Chr2R_54D1, &Chr2R_54D2, &Chr2R_54D3, &Chr2R_54D4, &Chr2R_54D5, &Chr2R_54D6, &Chr2R_54E1, &Chr2R_54E2, &Chr2R_54E3, &Chr2R_54E4, &Chr2R_54E5, &Chr2R_54E6, &Chr2R_54E7, &Chr2R_54E8, &Chr2R_54E9, &Chr2R_54E10, &Chr2R_54F1, &Chr2R_54F2, &Chr2R_54F3, &Chr2R_54F4, &Chr2R_54F5, &Chr2R_54F6, &Chr2R_55A1, &Chr2R_55A2, &Chr2R_55A3, &Chr2R_55A4, &Chr2R_55B1, &Chr2R_55B2, &Chr2R_55B3, &Chr2R_55B4, &Chr2R_55B5, &Chr2R_55B6, &Chr2R_55B7, &Chr2R_55B8, &Chr2R_55B9, &Chr2R_55B10, &Chr2R_55B11, &Chr2R_55B12, &Chr2R_55C1, &Chr2R_55C2, &Chr2R_55C3, &Chr2R_55C4, &Chr2R_55C5, &Chr2R_55C6, &Chr2R_55C7, &Chr2R_55C8, &Chr2R_55C9, &Chr2R_55C10, &Chr2R_55C11, &Chr2R_55C12, &Chr2R_55C13, &Chr2R_55D1, &Chr2R_55D2, &Chr2R_55D3, &Chr2R_55D4, &Chr2R_55E1, &Chr2R_55E2, &Chr2R_55E3, &Chr2R_55E4, &Chr2R_55E5, &Chr2R_55E6, &Chr2R_55E7, &Chr2R_55E8, &Chr2R_55E9, &Chr2R_55E10, &Chr2R_55E11, &Chr2R_55E12, &Chr2R_55F1, &Chr2R_55F2, &Chr2R_55F3, &Chr2R_55F4, &Chr2R_55F5, &Chr2R_55F6, &Chr2R_55F7, &Chr2R_55F8, &Chr2R_55F9, &Chr2R_55F10, &Chr2R_55F11, &Chr2R_55F12, &Chr2R_55F13, &Chr2R_56A1, &Chr2R_56A2, &Chr2R_56A3, &Chr2R_56B1, &Chr2R_56B2, &Chr2R_56B3, &Chr2R_56B4, &Chr2R_56B5, &Chr2R_56B6, &Chr2R_56B7, &Chr2R_56C1, &Chr2R_56C2, &Chr2R_56C3, &Chr2R_56C4, &Chr2R_56C5, &Chr2R_56C6, &Chr2R_56C7, &Chr2R_56C8, &Chr2R_56C9, &Chr2R_56C10, &Chr2R_56C11, &Chr2R_56D1, &Chr2R_56D2, &Chr2R_56D3, &Chr2R_56D4, &Chr2R_56D5, &Chr2R_56D6, &Chr2R_56D7, &Chr2R_56D8, &Chr2R_56D9, &Chr2R_56D10, &Chr2R_56D11, &Chr2R_56D12, &Chr2R_56D13, &Chr2R_56D14, &Chr2R_56D15, &Chr2R_56E1, &Chr2R_56E2, &Chr2R_56E3, &Chr2R_56E4, &Chr2R_56E5, &Chr2R_56E6, &Chr2R_56F1, &Chr2R_56F2, &Chr2R_56F3, &Chr2R_56F4, &Chr2R_56F5, &Chr2R_56F6, &Chr2R_56F7, &Chr2R_56F8, &Chr2R_56F9, &Chr2R_56F10, &Chr2R_56F11, &Chr2R_56F12, &Chr2R_56F13, &Chr2R_56F14, &Chr2R_56F15, &Chr2R_56F16, &Chr2R_56F17, &Chr2R_57A1, &Chr2R_57A2, &Chr2R_57A3, &Chr2R_57A4, &Chr2R_57A5, &Chr2R_57A6, &Chr2R_57A7, &Chr2R_57A8, &Chr2R_57A9, &Chr2R_57A10, &Chr2R_57B1, &Chr2R_57B2, &Chr2R_57B3, &Chr2R_57B4, &Chr2R_57B5, &Chr2R_57B6, &Chr2R_57B7, &Chr2R_57B8, &Chr2R_57B9, &Chr2R_57B10, &Chr2R_57B11, &Chr2R_57B12, &Chr2R_57B13, &Chr2R_57B14, &Chr2R_57B15, &Chr2R_57B16, &Chr2R_57B17, &Chr2R_57B18, &Chr2R_57B19, &Chr2R_57B20, &Chr2R_57C1, &Chr2R_57C2, &Chr2R_57C3, &Chr2R_57C4, &Chr2R_57C5, &Chr2R_57C6, &Chr2R_57C7, &Chr2R_57C8, &Chr2R_57C9, &Chr2R_57D1, &Chr2R_57D2, &Chr2R_57D3, &Chr2R_57D4, &Chr2R_57D5, &Chr2R_57D6, &Chr2R_57D7, &Chr2R_57D8, &Chr2R_57D9, &Chr2R_57D10, &Chr2R_57D11, &Chr2R_57D12, &Chr2R_57D13, &Chr2R_57E1, &Chr2R_57E2, &Chr2R_57E3, &Chr2R_57E4, &Chr2R_57E5, &Chr2R_57E6, &Chr2R_57E7, &Chr2R_57E8, &Chr2R_57E9, &Chr2R_57E10, &Chr2R_57E11, &Chr2R_57F1, &Chr2R_57F2, &Chr2R_57F3, &Chr2R_57F4, &Chr2R_57F5, &Chr2R_57F6, &Chr2R_57F7, &Chr2R_57F8, &Chr2R_57F9, &Chr2R_57F10, &Chr2R_57F11, &Chr2R_58A1, &Chr2R_58A2, &Chr2R_58A3, &Chr2R_58A4, &Chr2R_58B1, &Chr2R_58B2, &Chr2R_58B3, &Chr2R_58B4, &Chr2R_58B5, &Chr2R_58B6, &Chr2R_58B7, &Chr2R_58B8, &Chr2R_58B9, &Chr2R_58B10, &Chr2R_58C1, &Chr2R_58C2, &Chr2R_58C3, &Chr2R_58C4, &Chr2R_58C5, &Chr2R_58C6, &Chr2R_58C7, &Chr2R_58D1, &Chr2R_58D2, &Chr2R_58D3, &Chr2R_58D4, &Chr2R_58D5, &Chr2R_58D6, &Chr2R_58D7, &Chr2R_58D8, &Chr2R_58E1, &Chr2R_58E2, &Chr2R_58E3, &Chr2R_58E4, &Chr2R_58E5, &Chr2R_58E6, &Chr2R_58E7, &Chr2R_58E8, &Chr2R_58E9, &Chr2R_58E10, &Chr2R_58F1, &Chr2R_58F2, &Chr2R_58F3, &Chr2R_58F4, &Chr2R_58F5, &Chr2R_58F6, &Chr2R_58F7, &Chr2R_58F8, &Chr2R_59A1, &Chr2R_59A2, &Chr2R_59A3, &Chr2R_59A4, &Chr2R_59B1, &Chr2R_59B2, &Chr2R_59B3, &Chr2R_59B4, &Chr2R_59B5, &Chr2R_59B6, &Chr2R_59B7, &Chr2R_59B8, &Chr2R_59C1, &Chr2R_59C2, &Chr2R_59C3, &Chr2R_59C4, &Chr2R_59C5, &Chr2R_59D1, &Chr2R_59D2, &Chr2R_59D3, &Chr2R_59D4, &Chr2R_59D5, &Chr2R_59D6, &Chr2R_59D7, &Chr2R_59D8, &Chr2R_59D9, &Chr2R_59D10, &Chr2R_59D11, &Chr2R_59E1, &Chr2R_59E2, &Chr2R_59E3, &Chr2R_59E4, &Chr2R_59F1, &Chr2R_59F2, &Chr2R_59F3, &Chr2R_59F4, &Chr2R_59F5, &Chr2R_59F6, &Chr2R_59F7, &Chr2R_59F8, &Chr2R_60A1, &Chr2R_60A2, &Chr2R_60A3, &Chr2R_60A4, &Chr2R_60A5, &Chr2R_60A6, &Chr2R_60A7, &Chr2R_60A8, &Chr2R_60A9, &Chr2R_60A10, &Chr2R_60A11, &Chr2R_60A12, &Chr2R_60A13, &Chr2R_60A14, &Chr2R_60A15, &Chr2R_60A16, &Chr2R_60B1, &Chr2R_60B2, &Chr2R_60B3, &Chr2R_60B4, &Chr2R_60B5, &Chr2R_60B6, &Chr2R_60B7, &Chr2R_60B8, &Chr2R_60B9, &Chr2R_60B10, &Chr2R_60B11, &Chr2R_60B12, &Chr2R_60B13, &Chr2R_60C1, &Chr2R_60C2, &Chr2R_60C3, &Chr2R_60C4, &Chr2R_60C5, &Chr2R_60C6, &Chr2R_60C7, &Chr2R_60C8, &Chr2R_60D1, &Chr2R_60D2, &Chr2R_60D3, &Chr2R_60D4, &Chr2R_60D5, &Chr2R_60D6, &Chr2R_60D7, &Chr2R_60D8, &Chr2R_60D9, &Chr2R_60D10, &Chr2R_60D11, &Chr2R_60D12, &Chr2R_60D13, &Chr2R_60D14, &Chr2R_60D15, &Chr2R_60D16, &Chr2R_60E1, &Chr2R_60E2, &Chr2R_60E3, &Chr2R_60E4, &Chr2R_60E5, &Chr2R_60E6, &Chr2R_60E7, &Chr2R_60E8, &Chr2R_60E9, &Chr2R_60E10, &Chr2R_60E11, &Chr2R_60E12, &Chr2R_60F1, &Chr2R_60F2, &Chr2R_60F3, &Chr2R_60F4, &Chr2R_60F5, &Chr3L_61A5, &Chr3L_61A6, &Chr3L_61B1, &Chr3L_61B2, &Chr3L_61B3, &Chr3L_61C1, &Chr3L_61C2, &Chr3L_61C3, &Chr3L_61C4, &Chr3L_61C5, &Chr3L_61C6, &Chr3L_61C7, &Chr3L_61C8, &Chr3L_61C9, &Chr3L_61D1, &Chr3L_61D2, &Chr3L_61D3, &Chr3L_61D4, &Chr3L_61E1, &Chr3L_61E2, &Chr3L_61E3, &Chr3L_61F1, &Chr3L_61F2, &Chr3L_61F3, &Chr3L_61F4, &Chr3L_61F5, &Chr3L_61F6, &Chr3L_61F7, &Chr3L_61F8, &Chr3L_62A1, &Chr3L_62A2, &Chr3L_62A3, &Chr3L_62A4, &Chr3L_62A5, &Chr3L_62A6, &Chr3L_62A7, &Chr3L_62A8, &Chr3L_62A9, &Chr3L_62A10, &Chr3L_62A11, &Chr3L_62A12, &Chr3L_62B1, &Chr3L_62B2, &Chr3L_62B3, &Chr3L_62B4, &Chr3L_62B5, &Chr3L_62B6, &Chr3L_62B7, &Chr3L_62B8, &Chr3L_62B9, &Chr3L_62B10, &Chr3L_62B11, &Chr3L_62B12, &Chr3L_62C1, &Chr3L_62C2, &Chr3L_62C3, &Chr3L_62C4, &Chr3L_62D1, &Chr3L_62D2, &Chr3L_62D3, &Chr3L_62D4, &Chr3L_62D5, &Chr3L_62D6, &Chr3L_62D7, &Chr3L_62E1, &Chr3L_62E2, &Chr3L_62E3, &Chr3L_62E4, &Chr3L_62E5, &Chr3L_62E6, &Chr3L_62E7, &Chr3L_62E8, &Chr3L_62E9, &Chr3L_62F1, &Chr3L_62F2, &Chr3L_62F3, &Chr3L_62F4, &Chr3L_62F5, &Chr3L_62F6, &Chr3L_63A1, &Chr3L_63A2, &Chr3L_63A3, &Chr3L_63A4, &Chr3L_63A5, &Chr3L_63A6, &Chr3L_63A7, &Chr3L_63B1, &Chr3L_63B2, &Chr3L_63B3, &Chr3L_63B4, &Chr3L_63B5, &Chr3L_63B6, &Chr3L_63B7, &Chr3L_63B8, &Chr3L_63B9, &Chr3L_63B10, &Chr3L_63B11, &Chr3L_63B12, &Chr3L_63B13, &Chr3L_63B14, &Chr3L_63C1, &Chr3L_63C2, &Chr3L_63C3, &Chr3L_63C4, &Chr3L_63C5, &Chr3L_63C6, &Chr3L_63D1, &Chr3L_63D2, &Chr3L_63D3, &Chr3L_63E1, &Chr3L_63E2, &Chr3L_63E3, &Chr3L_63E4, &Chr3L_63E5, &Chr3L_63E6, &Chr3L_63E7, &Chr3L_63E8, &Chr3L_63E9, &Chr3L_63F1, &Chr3L_63F2, &Chr3L_63F3, &Chr3L_63F4, &Chr3L_63F5, &Chr3L_63F6, &Chr3L_63F7, &Chr3L_64A1, &Chr3L_64A2, &Chr3L_64A3, &Chr3L_64A4, &Chr3L_64A5, &Chr3L_64A6, &Chr3L_64A7, &Chr3L_64A8, &Chr3L_64A9, &Chr3L_64A10, &Chr3L_64A11, &Chr3L_64A12, &Chr3L_64B1, &Chr3L_64B2, &Chr3L_64B3, &Chr3L_64B4, &Chr3L_64B5, &Chr3L_64B6, &Chr3L_64B7, &Chr3L_64B8, &Chr3L_64B9, &Chr3L_64B10, &Chr3L_64B11, &Chr3L_64B12, &Chr3L_64B13, &Chr3L_64B14, &Chr3L_64B15, &Chr3L_64B16, &Chr3L_64B17, &Chr3L_64C1, &Chr3L_64C2, &Chr3L_64C3, &Chr3L_64C4, &Chr3L_64C5, &Chr3L_64C6, &Chr3L_64C7, &Chr3L_64C8, &Chr3L_64C9, &Chr3L_64C10, &Chr3L_64C11, &Chr3L_64C12, &Chr3L_64C13, &Chr3L_64C14, &Chr3L_64C15, &Chr3L_64D1, &Chr3L_64D2, &Chr3L_64D3, &Chr3L_64D4, &Chr3L_64D5, &Chr3L_64D6, &Chr3L_64D7, &Chr3L_64E1, &Chr3L_64E2, &Chr3L_64E3, &Chr3L_64E4, &Chr3L_64E5, &Chr3L_64E6, &Chr3L_64E7, &Chr3L_64E8, &Chr3L_64E9, &Chr3L_64E10, &Chr3L_64E11, &Chr3L_64E12, &Chr3L_64E13, &Chr3L_64F1, &Chr3L_64F2, &Chr3L_64F3, &Chr3L_64F4, &Chr3L_64F5, &Chr3L_65A1, &Chr3L_65A2, &Chr3L_65A3, &Chr3L_65A4, &Chr3L_65A5, &Chr3L_65A6, &Chr3L_65A7, &Chr3L_65A8, &Chr3L_65A9, &Chr3L_65A10, &Chr3L_65A11, &Chr3L_65A12, &Chr3L_65A13, &Chr3L_65A14, &Chr3L_65A15, &Chr3L_65B1, &Chr3L_65B2, &Chr3L_65B3, &Chr3L_65B4, &Chr3L_65B5, &Chr3L_65C1, &Chr3L_65C2, &Chr3L_65C3, &Chr3L_65C4, &Chr3L_65C5, &Chr3L_65D1, &Chr3L_65D2, &Chr3L_65D3, &Chr3L_65D4, &Chr3L_65D5, &Chr3L_65D6, &Chr3L_65E1, &Chr3L_65E2, &Chr3L_65E3, &Chr3L_65E4, &Chr3L_65E5, &Chr3L_65E6, &Chr3L_65E7, &Chr3L_65E8, &Chr3L_65E9, &Chr3L_65E10, &Chr3L_65E11, &Chr3L_65E12, &Chr3L_65F1, &Chr3L_65F2, &Chr3L_65F3, &Chr3L_65F4, &Chr3L_65F5, &Chr3L_65F6, &Chr3L_65F7, &Chr3L_65F8, &Chr3L_65F9, &Chr3L_65F10, &Chr3L_65F11, &Chr3L_66A1, &Chr3L_66A2, &Chr3L_66A3, &Chr3L_66A4, &Chr3L_66A5, &Chr3L_66A6, &Chr3L_66A7, &Chr3L_66A8, &Chr3L_66A9, &Chr3L_66A10, &Chr3L_66A11, &Chr3L_66A12, &Chr3L_66A13, &Chr3L_66A14, &Chr3L_66A15, &Chr3L_66A16, &Chr3L_66A17, &Chr3L_66A18, &Chr3L_66A19, &Chr3L_66A20, &Chr3L_66A21, &Chr3L_66A22, &Chr3L_66B1, &Chr3L_66B2, &Chr3L_66B3, &Chr3L_66B4, &Chr3L_66B5, &Chr3L_66B6, &Chr3L_66B7, &Chr3L_66B8, &Chr3L_66B9, &Chr3L_66B10, &Chr3L_66B11, &Chr3L_66B12, &Chr3L_66B13, &Chr3L_66C1, &Chr3L_66C2, &Chr3L_66C3, &Chr3L_66C4, &Chr3L_66C5, &Chr3L_66C6, &Chr3L_66C7, &Chr3L_66C8, &Chr3L_66C9, &Chr3L_66C10, &Chr3L_66C11, &Chr3L_66C12, &Chr3L_66C13, &Chr3L_66D1, &Chr3L_66D2, &Chr3L_66D3, &Chr3L_66D4, &Chr3L_66D5, &Chr3L_66D6, &Chr3L_66D7, &Chr3L_66D8, &Chr3L_66D9, &Chr3L_66D10, &Chr3L_66D11, &Chr3L_66D12, &Chr3L_66D13, &Chr3L_66D14, &Chr3L_66D15, &Chr3L_66E1, &Chr3L_66E2, &Chr3L_66E3, &Chr3L_66E4, &Chr3L_66E5, &Chr3L_66E6, &Chr3L_66F1, &Chr3L_66F2, &Chr3L_66F3, &Chr3L_66F4, &Chr3L_66F5, &Chr3L_66F6, &Chr3L_67A1, &Chr3L_67A2, &Chr3L_67A3, &Chr3L_67A4, &Chr3L_67A5, &Chr3L_67A6, &Chr3L_67A7, &Chr3L_67A8, &Chr3L_67A9, &Chr3L_67B1, &Chr3L_67B2, &Chr3L_67B3, &Chr3L_67B4, &Chr3L_67B5, &Chr3L_67B6, &Chr3L_67B7, &Chr3L_67B8, &Chr3L_67B9, &Chr3L_67B10, &Chr3L_67B11, &Chr3L_67B12, &Chr3L_67B13, &Chr3L_67C1, &Chr3L_67C2, &Chr3L_67C3, &Chr3L_67C4, &Chr3L_67C5, &Chr3L_67C6, &Chr3L_67C7, &Chr3L_67C8, &Chr3L_67C9, &Chr3L_67C10, &Chr3L_67C11, &Chr3L_67D1, &Chr3L_67D2, &Chr3L_67D3, &Chr3L_67D4, &Chr3L_67D5, &Chr3L_67D6, &Chr3L_67D7, &Chr3L_67D8, &Chr3L_67D9, &Chr3L_67D10, &Chr3L_67D11, &Chr3L_67D12, &Chr3L_67D13, &Chr3L_67E1, &Chr3L_67E2, &Chr3L_67E3, &Chr3L_67E4, &Chr3L_67E5, &Chr3L_67E6, &Chr3L_67E7, &Chr3L_67F1, &Chr3L_67F2, &Chr3L_67F3, &Chr3L_67F4, &Chr3L_68A1, &Chr3L_68A2, &Chr3L_68A3, &Chr3L_68A4, &Chr3L_68A5, &Chr3L_68A6, &Chr3L_68A7, &Chr3L_68A8, &Chr3L_68A9, &Chr3L_68B1, &Chr3L_68B2, &Chr3L_68B3, &Chr3L_68B4, &Chr3L_68C1, &Chr3L_68C2, &Chr3L_68C3, &Chr3L_68C4, &Chr3L_68C5, &Chr3L_68C6, &Chr3L_68C7, &Chr3L_68C8, &Chr3L_68C9, &Chr3L_68C10, &Chr3L_68C11, &Chr3L_68C12, &Chr3L_68C13, &Chr3L_68C14, &Chr3L_68C15, &Chr3L_68D1, &Chr3L_68D2, &Chr3L_68D3, &Chr3L_68D4, &Chr3L_68D5, &Chr3L_68D6, &Chr3L_68E1, &Chr3L_68E2, &Chr3L_68E3, &Chr3L_68E4, &Chr3L_68F1, &Chr3L_68F2, &Chr3L_68F3, &Chr3L_68F4, &Chr3L_68F5, &Chr3L_68F6, &Chr3L_68F7, &Chr3L_68F8, &Chr3L_69A1, &Chr3L_69A2, &Chr3L_69A3, &Chr3L_69A4, &Chr3L_69A5, &Chr3L_69B1, &Chr3L_69B2, &Chr3L_69B3, &Chr3L_69B4, &Chr3L_69B5, &Chr3L_69C1, &Chr3L_69C2, &Chr3L_69C3, &Chr3L_69C4, &Chr3L_69C5, &Chr3L_69C6, &Chr3L_69C7, &Chr3L_69C8, &Chr3L_69C9, &Chr3L_69C10, &Chr3L_69C11, &Chr3L_69D1, &Chr3L_69D2, &Chr3L_69D3, &Chr3L_69D4, &Chr3L_69D5, &Chr3L_69D6, &Chr3L_69E1, &Chr3L_69E2, &Chr3L_69E3, &Chr3L_69E4, &Chr3L_69E5, &Chr3L_69E6, &Chr3L_69E7, &Chr3L_69E8, &Chr3L_69F1, &Chr3L_69F2, &Chr3L_69F3, &Chr3L_69F4, &Chr3L_69F5, &Chr3L_69F6, &Chr3L_69F7, &Chr3L_70A1, &Chr3L_70A2, &Chr3L_70A3, &Chr3L_70A4, &Chr3L_70A5, &Chr3L_70A6, &Chr3L_70A7, &Chr3L_70A8, &Chr3L_70B1, &Chr3L_70B2, &Chr3L_70B3, &Chr3L_70B4, &Chr3L_70B5, &Chr3L_70B6, &Chr3L_70B7, &Chr3L_70C1, &Chr3L_70C2, &Chr3L_70C3, &Chr3L_70C4, &Chr3L_70C5, &Chr3L_70C6, &Chr3L_70C7, &Chr3L_70C8, &Chr3L_70C9, &Chr3L_70C10, &Chr3L_70C11, &Chr3L_70C12, &Chr3L_70C13, &Chr3L_70C14, &Chr3L_70C15, &Chr3L_70D1, &Chr3L_70D2, &Chr3L_70D3, &Chr3L_70D4, &Chr3L_70D5, &Chr3L_70D6, &Chr3L_70D7, &Chr3L_70E1, &Chr3L_70E2, &Chr3L_70E3, &Chr3L_70E4, &Chr3L_70E5, &Chr3L_70E6, &Chr3L_70E7, &Chr3L_70E8, &Chr3L_70F1, &Chr3L_70F2, &Chr3L_70F3, &Chr3L_70F4, &Chr3L_70F5, &Chr3L_70F6, &Chr3L_70F7, &Chr3L_71A1, &Chr3L_71A2, &Chr3L_71A3, &Chr3L_71A4, &Chr3L_71B1, &Chr3L_71B2, &Chr3L_71B3, &Chr3L_71B4, &Chr3L_71B5, &Chr3L_71B6, &Chr3L_71B7, &Chr3L_71B8, &Chr3L_71C1, &Chr3L_71C2, &Chr3L_71C3, &Chr3L_71C4, &Chr3L_71D1, &Chr3L_71D2, &Chr3L_71D3, &Chr3L_71D4, &Chr3L_71E1, &Chr3L_71E2, &Chr3L_71E3, &Chr3L_71E4, &Chr3L_71E5, &Chr3L_71F1, &Chr3L_71F2, &Chr3L_71F3, &Chr3L_71F4, &Chr3L_71F5, &Chr3L_72A1, &Chr3L_72A2, &Chr3L_72A3, &Chr3L_72A4, &Chr3L_72A5, &Chr3L_72B1, &Chr3L_72B2, &Chr3L_72C1, &Chr3L_72C2, &Chr3L_72C3, &Chr3L_72D1, &Chr3L_72D2, &Chr3L_72D3, &Chr3L_72D4, &Chr3L_72D5, &Chr3L_72D6, &Chr3L_72D7, &Chr3L_72D8, &Chr3L_72D9, &Chr3L_72D10, &Chr3L_72D11, &Chr3L_72D12, &Chr3L_72E1, &Chr3L_72E2, &Chr3L_72E3, &Chr3L_72E4, &Chr3L_72E5, &Chr3L_72F1, &Chr3L_72F2, &Chr3L_72F3, &Chr3L_72F4, &Chr3L_73A1, &Chr3L_73A2, &Chr3L_73A3, &Chr3L_73A4, &Chr3L_73A5, &Chr3L_73A6, &Chr3L_73A7, &Chr3L_73A8, &Chr3L_73A9, &Chr3L_73A10, &Chr3L_73A11, &Chr3L_73B1, &Chr3L_73B2, &Chr3L_73B3, &Chr3L_73B4, &Chr3L_73B5, &Chr3L_73B6, &Chr3L_73B7, &Chr3L_73C1, &Chr3L_73C2, &Chr3L_73C3, &Chr3L_73C4, &Chr3L_73C5, &Chr3L_73D1, &Chr3L_73D2, &Chr3L_73D3, &Chr3L_73D4, &Chr3L_73D5, &Chr3L_73D6, &Chr3L_73D7, &Chr3L_73E1, &Chr3L_73E2, &Chr3L_73E3, &Chr3L_73E4, &Chr3L_73E5, &Chr3L_73E6, &Chr3L_73F1, &Chr3L_73F2, &Chr3L_73F3, &Chr3L_73F4, &Chr3L_74A1, &Chr3L_74A2, &Chr3L_74A3, &Chr3L_74A4, &Chr3L_74A5, &Chr3L_74A6, &Chr3L_74B1, &Chr3L_74B2, &Chr3L_74B3, &Chr3L_74B4, &Chr3L_74B5, &Chr3L_74C1, &Chr3L_74C2, &Chr3L_74C3, &Chr3L_74C4, &Chr3L_74D1, &Chr3L_74D2, &Chr3L_74D3, &Chr3L_74D4, &Chr3L_74D5, &Chr3L_74E1, &Chr3L_74E2, &Chr3L_74E3, &Chr3L_74E4, &Chr3L_74E5, &Chr3L_74F1, &Chr3L_74F2, &Chr3L_74F3, &Chr3L_74F4, &Chr3L_75A1, &Chr3L_75A2, &Chr3L_75A3, &Chr3L_75A4, &Chr3L_75A5, &Chr3L_75A6, &Chr3L_75A7, &Chr3L_75A8, &Chr3L_75A9, &Chr3L_75A10, &Chr3L_75B1, &Chr3L_75B2, &Chr3L_75B3, &Chr3L_75B4, &Chr3L_75B5, &Chr3L_75B6, &Chr3L_75B7, &Chr3L_75B8, &Chr3L_75B9, &Chr3L_75B10, &Chr3L_75B11, &Chr3L_75B12, &Chr3L_75B13, &Chr3L_75C1, &Chr3L_75C2, &Chr3L_75C3, &Chr3L_75C4, &Chr3L_75C5, &Chr3L_75C6, &Chr3L_75C7, &Chr3L_75D1, &Chr3L_75D2, &Chr3L_75D3, &Chr3L_75D4, &Chr3L_75D5, &Chr3L_75D6, &Chr3L_75D7, &Chr3L_75D8, &Chr3L_75E1, &Chr3L_75E2, &Chr3L_75E3, &Chr3L_75E4, &Chr3L_75E5, &Chr3L_75E6, &Chr3L_75E7, &Chr3L_75F1, &Chr3L_75F2, &Chr3L_75F3, &Chr3L_75F4, &Chr3L_75F5, &Chr3L_75F6, &Chr3L_75F7, &Chr3L_75F8, &Chr3L_75F9, &Chr3L_75F10, &Chr3L_75F11, &Chr3L_76A1, &Chr3L_76A2, &Chr3L_76A3, &Chr3L_76A4, &Chr3L_76A5, &Chr3L_76A6, &Chr3L_76A7, &Chr3L_76B1, &Chr3L_76B2, &Chr3L_76B3, &Chr3L_76B4, &Chr3L_76B5, &Chr3L_76B6, &Chr3L_76B7, &Chr3L_76B8, &Chr3L_76B9, &Chr3L_76B10, &Chr3L_76B11, &Chr3L_76C1, &Chr3L_76C2, &Chr3L_76C3, &Chr3L_76C4, &Chr3L_76C5, &Chr3L_76C6, &Chr3L_76D1, &Chr3L_76D2, &Chr3L_76D3, &Chr3L_76D4, &Chr3L_76D5, &Chr3L_76D6, &Chr3L_76D7, &Chr3L_76D8, &Chr3L_76E1, &Chr3L_76E2, &Chr3L_76E3, &Chr3L_76E4, &Chr3L_76F1, &Chr3L_76F2, &Chr3L_76F3, &Chr3L_77A1, &Chr3L_77A2, &Chr3L_77A3, &Chr3L_77A4, &Chr3L_77B1, &Chr3L_77B2, &Chr3L_77B3, &Chr3L_77B4, &Chr3L_77B5, &Chr3L_77B6, &Chr3L_77B7, &Chr3L_77B8, &Chr3L_77B9, &Chr3L_77C1, &Chr3L_77C2, &Chr3L_77C3, &Chr3L_77C4, &Chr3L_77C5, &Chr3L_77C6, &Chr3L_77C7, &Chr3L_77D1, &Chr3L_77D2, &Chr3L_77D3, &Chr3L_77D4, &Chr3L_77D5, &Chr3L_77E1, &Chr3L_77E2, &Chr3L_77E3, &Chr3L_77E4, &Chr3L_77E5, &Chr3L_77E6, &Chr3L_77E7, &Chr3L_77E8, &Chr3L_77F1, &Chr3L_77F2, &Chr3L_77F3, &Chr3L_77F4, &Chr3L_77F5, &Chr3L_78A1, &Chr3L_78A2, &Chr3L_78A3, &Chr3L_78A4, &Chr3L_78A5, &Chr3L_78A6, &Chr3L_78A7, &Chr3L_78B1, &Chr3L_78B2, &Chr3L_78B3, &Chr3L_78B4, &Chr3L_78C1, &Chr3L_78C2, &Chr3L_78C3, &Chr3L_78C4, &Chr3L_78C5, &Chr3L_78C6, &Chr3L_78C7, &Chr3L_78C8, &Chr3L_78C9, &Chr3L_78D1, &Chr3L_78D2, &Chr3L_78D3, &Chr3L_78D4, &Chr3L_78D5, &Chr3L_78D6, &Chr3L_78D7, &Chr3L_78D8, &Chr3L_78E1, &Chr3L_78E2, &Chr3L_78E3, &Chr3L_78E4, &Chr3L_78E5, &Chr3L_78E6, &Chr3L_78F1, &Chr3L_78F2, &Chr3L_78F3, &Chr3L_78F4, &Chr3L_79A1, &Chr3L_79A2, &Chr3L_79A3, &Chr3L_79A4, &Chr3L_79A5, &Chr3L_79A6, &Chr3L_79A7, &Chr3L_79B1, &Chr3L_79B2, &Chr3L_79B3, &Chr3L_79C1, &Chr3L_79C2, &Chr3L_79C3, &Chr3L_79D1, &Chr3L_79D2, &Chr3L_79D3, &Chr3L_79D4, &Chr3L_79E1, &Chr3L_79E2, &Chr3L_79E3, &Chr3L_79E4, &Chr3L_79E5, &Chr3L_79E6, &Chr3L_79E7, &Chr3L_79E8, &Chr3L_79F1, &Chr3L_79F2, &Chr3L_79F3, &Chr3L_79F4, &Chr3L_79F5, &Chr3L_79F6, &Chr3L_80A1, &Chr3L_80A2, &Chr3L_80A3, &Chr3L_80A4, &Chr3L_80B1, &Chr3L_80B2, &Chr3L_80B3, &Chr3L_80C1, &Chr3L_80C2, &Chr3L_80C3, &Chr3L_80C4, &Chr3L_80C5, &Chr3L_80D1, &Chr3L_80D2, &Chr3L_80D3, &Chr3L_80D4, &Chr3L_80D5, &Chr3L_80E1, &Chr3L_80E2, &Chr3L_80E3, &Chr3L_80F1, &Chr3L_80F2, &Chr3L_80F3, &Chr3L_80F4, &Chr3L_80F5, &Chr3L_80F6, &Chr3L_80F7, &Chr3L_80F8, &Chr3L_80F9, &Chr3R_81F5, &Chr3R_81F6, &Chr3R_82A1, &Chr3R_82A2, &Chr3R_82A3, &Chr3R_82A4, &Chr3R_82A5, &Chr3R_82A6, &Chr3R_82B1, &Chr3R_82B2, &Chr3R_82B3, &Chr3R_82B4, &Chr3R_82C1, &Chr3R_82C2, &Chr3R_82C3, &Chr3R_82C4, &Chr3R_82C5, &Chr3R_82D1, &Chr3R_82D2, &Chr3R_82D3, &Chr3R_82D4, &Chr3R_82D5, &Chr3R_82D6, &Chr3R_82D7, &Chr3R_82D8, &Chr3R_82E1, &Chr3R_82E2, &Chr3R_82E3, &Chr3R_82E4, &Chr3R_82E5, &Chr3R_82E6, &Chr3R_82E7, &Chr3R_82E8, &Chr3R_82F1, &Chr3R_82F2, &Chr3R_82F3, &Chr3R_82F4, &Chr3R_82F5, &Chr3R_82F6, &Chr3R_82F7, &Chr3R_82F8, &Chr3R_82F9, &Chr3R_82F10, &Chr3R_82F11, &Chr3R_83A1, &Chr3R_83A2, &Chr3R_83A3, &Chr3R_83A4, &Chr3R_83A5, &Chr3R_83A6, &Chr3R_83A7, &Chr3R_83A8, &Chr3R_83A9, &Chr3R_83B1, &Chr3R_83B2, &Chr3R_83B3, &Chr3R_83B4, &Chr3R_83B5, &Chr3R_83B6, &Chr3R_83B7, &Chr3R_83B8, &Chr3R_83B9, &Chr3R_83C1, &Chr3R_83C2, &Chr3R_83C3, &Chr3R_83C4, &Chr3R_83C5, &Chr3R_83C6, &Chr3R_83C7, &Chr3R_83C8, &Chr3R_83C9, &Chr3R_83D1, &Chr3R_83D2, &Chr3R_83D3, &Chr3R_83D4, &Chr3R_83D5, &Chr3R_83E1, &Chr3R_83E2, &Chr3R_83E3, &Chr3R_83E4, &Chr3R_83E5, &Chr3R_83E6, &Chr3R_83E7, &Chr3R_83E8, &Chr3R_83F1, &Chr3R_83F2, &Chr3R_83F3, &Chr3R_83F4, &Chr3R_84A1, &Chr3R_84A2, &Chr3R_84A3, &Chr3R_84A4, &Chr3R_84A5, &Chr3R_84A6, &Chr3R_84B1, &Chr3R_84B2, &Chr3R_84B3, &Chr3R_84B4, &Chr3R_84B5, &Chr3R_84B6, &Chr3R_84C1, &Chr3R_84C2, &Chr3R_84C3, &Chr3R_84C4, &Chr3R_84C5, &Chr3R_84C6, &Chr3R_84C7, &Chr3R_84C8, &Chr3R_84D1, &Chr3R_84D2, &Chr3R_84D3, &Chr3R_84D4, &Chr3R_84D5, &Chr3R_84D6, &Chr3R_84D7, &Chr3R_84D8, &Chr3R_84D9, &Chr3R_84D10, &Chr3R_84D11, &Chr3R_84D12, &Chr3R_84D13, &Chr3R_84D14, &Chr3R_84E1, &Chr3R_84E2, &Chr3R_84E3, &Chr3R_84E4, &Chr3R_84E5, &Chr3R_84E6, &Chr3R_84E7, &Chr3R_84E8, &Chr3R_84E9, &Chr3R_84E10, &Chr3R_84E11, &Chr3R_84E12, &Chr3R_84E13, &Chr3R_84F1, &Chr3R_84F2, &Chr3R_84F3, &Chr3R_84F4, &Chr3R_84F5, &Chr3R_84F6, &Chr3R_84F7, &Chr3R_84F8, &Chr3R_84F9, &Chr3R_84F10, &Chr3R_84F11, &Chr3R_84F12, &Chr3R_84F13, &Chr3R_84F14, &Chr3R_84F15, &Chr3R_84F16, &Chr3R_85A1, &Chr3R_85A2, &Chr3R_85A3, &Chr3R_85A4, &Chr3R_85A5, &Chr3R_85A6, &Chr3R_85A7, &Chr3R_85A8, &Chr3R_85A9, &Chr3R_85A10, &Chr3R_85A11, &Chr3R_85B1, &Chr3R_85B2, &Chr3R_85B3, &Chr3R_85B4, &Chr3R_85B5, &Chr3R_85B6, &Chr3R_85B7, &Chr3R_85B8, &Chr3R_85B9, &Chr3R_85C1, &Chr3R_85C2, &Chr3R_85C3, &Chr3R_85C4, &Chr3R_85C5, &Chr3R_85C6, &Chr3R_85C7, &Chr3R_85C8, &Chr3R_85C9, &Chr3R_85C10, &Chr3R_85C11, &Chr3R_85C12, &Chr3R_85C13, &Chr3R_85D1, &Chr3R_85D2, &Chr3R_85D3, &Chr3R_85D4, &Chr3R_85D5, &Chr3R_85D6, &Chr3R_85D7, &Chr3R_85D8, &Chr3R_85D9, &Chr3R_85D10, &Chr3R_85D11, &Chr3R_85D12, &Chr3R_85D13, &Chr3R_85D14, &Chr3R_85D15, &Chr3R_85D16, &Chr3R_85D17, &Chr3R_85D18, &Chr3R_85D19, &Chr3R_85D20, &Chr3R_85D21, &Chr3R_85D22, &Chr3R_85D23, &Chr3R_85D24, &Chr3R_85D25, &Chr3R_85D26, &Chr3R_85D27, &Chr3R_85E1, &Chr3R_85E2, &Chr3R_85E3, &Chr3R_85E4, &Chr3R_85E5, &Chr3R_85E6, &Chr3R_85E7, &Chr3R_85E8, &Chr3R_85E9, &Chr3R_85E10, &Chr3R_85E11, &Chr3R_85E12, &Chr3R_85E13, &Chr3R_85E14, &Chr3R_85E15, &Chr3R_85F1, &Chr3R_85F2, &Chr3R_85F3, &Chr3R_85F4, &Chr3R_85F5, &Chr3R_85F6, &Chr3R_85F7, &Chr3R_85F8, &Chr3R_85F9, &Chr3R_85F10, &Chr3R_85F11, &Chr3R_85F12, &Chr3R_85F13, &Chr3R_85F14, &Chr3R_85F15, &Chr3R_85F16, &Chr3R_86A1, &Chr3R_86A2, &Chr3R_86A3, &Chr3R_86A4, &Chr3R_86A5, &Chr3R_86A6, &Chr3R_86A7, &Chr3R_86A8, &Chr3R_86B1, &Chr3R_86B2, &Chr3R_86B3, &Chr3R_86B4, &Chr3R_86B5, &Chr3R_86B6, &Chr3R_86C1, &Chr3R_86C2, &Chr3R_86C3, &Chr3R_86C4, &Chr3R_86C5, &Chr3R_86C6, &Chr3R_86C7, &Chr3R_86C8, &Chr3R_86C9, &Chr3R_86C10, &Chr3R_86C11, &Chr3R_86C12, &Chr3R_86C13, &Chr3R_86C14, &Chr3R_86C15, &Chr3R_86D1, &Chr3R_86D2, &Chr3R_86D3, &Chr3R_86D4, &Chr3R_86D5, &Chr3R_86D6, &Chr3R_86D7, &Chr3R_86D8, &Chr3R_86D9, &Chr3R_86D10, &Chr3R_86E1, &Chr3R_86E2, &Chr3R_86E3, &Chr3R_86E4, &Chr3R_86E5, &Chr3R_86E6, &Chr3R_86E7, &Chr3R_86E8, &Chr3R_86E9, &Chr3R_86E10, &Chr3R_86E11, &Chr3R_86E12, &Chr3R_86E13, &Chr3R_86E14, &Chr3R_86E15, &Chr3R_86E16, &Chr3R_86E17, &Chr3R_86E18, &Chr3R_86E19, &Chr3R_86E20, &Chr3R_86F1, &Chr3R_86F2, &Chr3R_86F3, &Chr3R_86F4, &Chr3R_86F5, &Chr3R_86F6, &Chr3R_86F7, &Chr3R_86F8, &Chr3R_86F9, &Chr3R_86F10, &Chr3R_86F11, &Chr3R_87A1, &Chr3R_87A2, &Chr3R_87A3, &Chr3R_87A4, &Chr3R_87A5, &Chr3R_87A6, &Chr3R_87A7, &Chr3R_87A8, &Chr3R_87A9, &Chr3R_87A10, &Chr3R_87B1, &Chr3R_87B2, &Chr3R_87B3, &Chr3R_87B4, &Chr3R_87B5, &Chr3R_87B6, &Chr3R_87B7, &Chr3R_87B8, &Chr3R_87B9, &Chr3R_87B10, &Chr3R_87B11, &Chr3R_87B12, &Chr3R_87B13, &Chr3R_87B14, &Chr3R_87B15, &Chr3R_87C1, &Chr3R_87C2, &Chr3R_87C3, &Chr3R_87C4, &Chr3R_87C5, &Chr3R_87C6, &Chr3R_87C7, &Chr3R_87C8, &Chr3R_87C9, &Chr3R_87D1, &Chr3R_87D2, &Chr3R_87D3, &Chr3R_87D4, &Chr3R_87D5, &Chr3R_87D6, &Chr3R_87D7, &Chr3R_87D8, &Chr3R_87D9, &Chr3R_87D10, &Chr3R_87D11, &Chr3R_87D12, &Chr3R_87D13, &Chr3R_87D14, &Chr3R_87E1, &Chr3R_87E2, &Chr3R_87E3, &Chr3R_87E4, &Chr3R_87E5, &Chr3R_87E6, &Chr3R_87E7, &Chr3R_87E8, &Chr3R_87E9, &Chr3R_87E10, &Chr3R_87E11, &Chr3R_87E12, &Chr3R_87F1, &Chr3R_87F2, &Chr3R_87F3, &Chr3R_87F4, &Chr3R_87F5, &Chr3R_87F6, &Chr3R_87F7, &Chr3R_87F8, &Chr3R_87F9, &Chr3R_87F10, &Chr3R_87F11, &Chr3R_87F12, &Chr3R_87F13, &Chr3R_87F14, &Chr3R_87F15, &Chr3R_88A1, &Chr3R_88A2, &Chr3R_88A3, &Chr3R_88A4, &Chr3R_88A5, &Chr3R_88A6, &Chr3R_88A7, &Chr3R_88A8, &Chr3R_88A9, &Chr3R_88A10, &Chr3R_88A11, &Chr3R_88A12, &Chr3R_88B1, &Chr3R_88B2, &Chr3R_88B3, &Chr3R_88B4, &Chr3R_88B5, &Chr3R_88B6, &Chr3R_88B7, &Chr3R_88B8, &Chr3R_88B9, &Chr3R_88C1, &Chr3R_88C2, &Chr3R_88C3, &Chr3R_88C4, &Chr3R_88C5, &Chr3R_88C6, &Chr3R_88C7, &Chr3R_88C8, &Chr3R_88C9, &Chr3R_88C10, &Chr3R_88C11, &Chr3R_88D1, &Chr3R_88D2, &Chr3R_88D3, &Chr3R_88D4, &Chr3R_88D5, &Chr3R_88D6, &Chr3R_88D7, &Chr3R_88D8, &Chr3R_88D9, &Chr3R_88D10, &Chr3R_88E1, &Chr3R_88E2, &Chr3R_88E3, &Chr3R_88E4, &Chr3R_88E5, &Chr3R_88E6, &Chr3R_88E7, &Chr3R_88E8, &Chr3R_88E9, &Chr3R_88E10, &Chr3R_88E11, &Chr3R_88E12, &Chr3R_88E13, &Chr3R_88F1, &Chr3R_88F2, &Chr3R_88F3, &Chr3R_88F4, &Chr3R_88F5, &Chr3R_88F6, &Chr3R_88F7, &Chr3R_88F8, &Chr3R_88F9, &Chr3R_89A1, &Chr3R_89A2, &Chr3R_89A3, &Chr3R_89A4, &Chr3R_89A5, &Chr3R_89A6, &Chr3R_89A7, &Chr3R_89A8, &Chr3R_89A9, &Chr3R_89A10, &Chr3R_89A11, &Chr3R_89A12, &Chr3R_89A13, &Chr3R_89B1, &Chr3R_89B2, &Chr3R_89B3, &Chr3R_89B4, &Chr3R_89B5, &Chr3R_89B6, &Chr3R_89B7, &Chr3R_89B8, &Chr3R_89B9, &Chr3R_89B10, &Chr3R_89B11, &Chr3R_89B12, &Chr3R_89B13, &Chr3R_89B14, &Chr3R_89B15, &Chr3R_89B16, &Chr3R_89B17, &Chr3R_89B18, &Chr3R_89B19, &Chr3R_89B20, &Chr3R_89B21, &Chr3R_89B22, &Chr3R_89C1, &Chr3R_89C2, &Chr3R_89C3, &Chr3R_89C4, &Chr3R_89C5, &Chr3R_89C6, &Chr3R_89C7, &Chr3R_89D1, &Chr3R_89D2, &Chr3R_89D3, &Chr3R_89D4, &Chr3R_89D5, &Chr3R_89D6, &Chr3R_89D7, &Chr3R_89D8, &Chr3R_89D9, &Chr3R_89E1, &Chr3R_89E2, &Chr3R_89E3, &Chr3R_89E4, &Chr3R_89E5, &Chr3R_89E6, &Chr3R_89E7, &Chr3R_89E8, &Chr3R_89E9, &Chr3R_89E10, &Chr3R_89E11, &Chr3R_89E12, &Chr3R_89E13, &Chr3R_89F1, &Chr3R_89F2, &Chr3R_89F3, &Chr3R_89F4, &Chr3R_90A1, &Chr3R_90A2, &Chr3R_90A3, &Chr3R_90A4, &Chr3R_90A5, &Chr3R_90A6, &Chr3R_90A7, &Chr3R_90B1, &Chr3R_90B2, &Chr3R_90B3, &Chr3R_90B4, &Chr3R_90B5, &Chr3R_90B6, &Chr3R_90B7, &Chr3R_90B8, &Chr3R_90C1, &Chr3R_90C2, &Chr3R_90C3, &Chr3R_90C4, &Chr3R_90C5, &Chr3R_90C6, &Chr3R_90C7, &Chr3R_90C8, &Chr3R_90C9, &Chr3R_90C10, &Chr3R_90D1, &Chr3R_90D2, &Chr3R_90D3, &Chr3R_90D4, &Chr3R_90D5, &Chr3R_90D6, &Chr3R_90E1, &Chr3R_90E2, &Chr3R_90E3, &Chr3R_90E4, &Chr3R_90E5, &Chr3R_90E6, &Chr3R_90E7, &Chr3R_90F1, &Chr3R_90F2, &Chr3R_90F3, &Chr3R_90F4, &Chr3R_90F5, &Chr3R_90F6, &Chr3R_90F7, &Chr3R_90F8, &Chr3R_90F9, &Chr3R_90F10, &Chr3R_90F11, &Chr3R_91A1, &Chr3R_91A2, &Chr3R_91A3, &Chr3R_91A4, &Chr3R_91A5, &Chr3R_91A6, &Chr3R_91A7, &Chr3R_91A8, &Chr3R_91B1, &Chr3R_91B2, &Chr3R_91B3, &Chr3R_91B4, &Chr3R_91B5, &Chr3R_91B6, &Chr3R_91B7, &Chr3R_91B8, &Chr3R_91C1, &Chr3R_91C2, &Chr3R_91C3, &Chr3R_91C4, &Chr3R_91C5, &Chr3R_91C6, &Chr3R_91C7, &Chr3R_91D1, &Chr3R_91D2, &Chr3R_91D3, &Chr3R_91D4, &Chr3R_91D5, &Chr3R_91E1, &Chr3R_91E2, &Chr3R_91E3, &Chr3R_91E4, &Chr3R_91E5, &Chr3R_91E6, &Chr3R_91F1, &Chr3R_91F2, &Chr3R_91F3, &Chr3R_91F4, &Chr3R_91F5, &Chr3R_91F6, &Chr3R_91F7, &Chr3R_91F8, &Chr3R_91F9, &Chr3R_91F10, &Chr3R_91F11, &Chr3R_91F12, &Chr3R_91F13, &Chr3R_92A1, &Chr3R_92A2, &Chr3R_92A3, &Chr3R_92A4, &Chr3R_92A5, &Chr3R_92A6, &Chr3R_92A7, &Chr3R_92A8, &Chr3R_92A9, &Chr3R_92A10, &Chr3R_92A11, &Chr3R_92A12, &Chr3R_92A13, &Chr3R_92A14, &Chr3R_92B1, &Chr3R_92B2, &Chr3R_92B3, &Chr3R_92B4, &Chr3R_92B5, &Chr3R_92B6, &Chr3R_92B7, &Chr3R_92B8, &Chr3R_92B9, &Chr3R_92B10, &Chr3R_92B11, &Chr3R_92C1, &Chr3R_92C2, &Chr3R_92C3, &Chr3R_92C4, &Chr3R_92C5, &Chr3R_92C6, &Chr3R_92D1, &Chr3R_92D2, &Chr3R_92D3, &Chr3R_92D4, &Chr3R_92D5, &Chr3R_92D6, &Chr3R_92D7, &Chr3R_92D8, &Chr3R_92D9, &Chr3R_92E1, &Chr3R_92E2, &Chr3R_92E3, &Chr3R_92E4, &Chr3R_92E5, &Chr3R_92E6, &Chr3R_92E7, &Chr3R_92E8, &Chr3R_92E9, &Chr3R_92E10, &Chr3R_92E11, &Chr3R_92E12, &Chr3R_92E13, &Chr3R_92E14, &Chr3R_92E15, &Chr3R_92F1, &Chr3R_92F2, &Chr3R_92F3, &Chr3R_92F4, &Chr3R_92F5, &Chr3R_92F6, &Chr3R_92F7, &Chr3R_92F8, &Chr3R_92F9, &Chr3R_92F10, &Chr3R_92F11, &Chr3R_92F12, &Chr3R_92F13, &Chr3R_93A1, &Chr3R_93A2, &Chr3R_93A3, &Chr3R_93A4, &Chr3R_93A5, &Chr3R_93A6, &Chr3R_93A7, &Chr3R_93B1, &Chr3R_93B2, &Chr3R_93B3, &Chr3R_93B4, &Chr3R_93B5, &Chr3R_93B6, &Chr3R_93B7, &Chr3R_93B8, &Chr3R_93B9, &Chr3R_93B10, &Chr3R_93B11, &Chr3R_93B12, &Chr3R_93B13, &Chr3R_93C1, &Chr3R_93C2, &Chr3R_93C3, &Chr3R_93C4, &Chr3R_93C5, &Chr3R_93C6, &Chr3R_93C7, &Chr3R_93D1, &Chr3R_93D2, &Chr3R_93D3, &Chr3R_93D4, &Chr3R_93D5, &Chr3R_93D6, &Chr3R_93D7, &Chr3R_93D8, &Chr3R_93D9, &Chr3R_93D10, &Chr3R_93E1, &Chr3R_93E2, &Chr3R_93E3, &Chr3R_93E4, &Chr3R_93E5, &Chr3R_93E6, &Chr3R_93E7, &Chr3R_93E8, &Chr3R_93E9, &Chr3R_93E10, &Chr3R_93E11, &Chr3R_93F1, &Chr3R_93F2, &Chr3R_93F3, &Chr3R_93F4, &Chr3R_93F5, &Chr3R_93F6, &Chr3R_93F7, &Chr3R_93F8, &Chr3R_93F9, &Chr3R_93F10, &Chr3R_93F11, &Chr3R_93F12, &Chr3R_93F13, &Chr3R_93F14, &Chr3R_94A1, &Chr3R_94A2, &Chr3R_94A3, &Chr3R_94A4, &Chr3R_94A5, &Chr3R_94A6, &Chr3R_94A7, &Chr3R_94A8, &Chr3R_94A9, &Chr3R_94A10, &Chr3R_94A11, &Chr3R_94A12, &Chr3R_94A13, &Chr3R_94A14, &Chr3R_94A15, &Chr3R_94A16, &Chr3R_94B1, &Chr3R_94B2, &Chr3R_94B3, &Chr3R_94B4, &Chr3R_94B5, &Chr3R_94B6, &Chr3R_94B7, &Chr3R_94B8, &Chr3R_94B9, &Chr3R_94B10, &Chr3R_94B11, &Chr3R_94C1, &Chr3R_94C2, &Chr3R_94C3, &Chr3R_94C4, &Chr3R_94C5, &Chr3R_94C6, &Chr3R_94C7, &Chr3R_94C8, &Chr3R_94C9, &Chr3R_94D1, &Chr3R_94D2, &Chr3R_94D3, &Chr3R_94D4, &Chr3R_94D5, &Chr3R_94D6, &Chr3R_94D7, &Chr3R_94D8, &Chr3R_94D9, &Chr3R_94D10, &Chr3R_94D11, &Chr3R_94D12, &Chr3R_94D13, &Chr3R_94E1, &Chr3R_94E2, &Chr3R_94E3, &Chr3R_94E4, &Chr3R_94E5, &Chr3R_94E6, &Chr3R_94E7, &Chr3R_94E8, &Chr3R_94E9, &Chr3R_94E10, &Chr3R_94E11, &Chr3R_94E12, &Chr3R_94E13, &Chr3R_94F1, &Chr3R_94F2, &Chr3R_94F3, &Chr3R_94F4, &Chr3R_94F5, &Chr3R_94F6, &Chr3R_95A1, &Chr3R_95A2, &Chr3R_95A3, &Chr3R_95A4, &Chr3R_95A5, &Chr3R_95A6, &Chr3R_95A7, &Chr3R_95A8, &Chr3R_95A9, &Chr3R_95A10, &Chr3R_95B1, &Chr3R_95B2, &Chr3R_95B3, &Chr3R_95B4, &Chr3R_95B5, &Chr3R_95B6, &Chr3R_95B7, &Chr3R_95B8, &Chr3R_95B9, &Chr3R_95C1, &Chr3R_95C2, &Chr3R_95C3, &Chr3R_95C4, &Chr3R_95C5, &Chr3R_95C6, &Chr3R_95C7, &Chr3R_95C8, &Chr3R_95C9, &Chr3R_95C10, &Chr3R_95C11, &Chr3R_95C12, &Chr3R_95C13, &Chr3R_95C14, &Chr3R_95D1, &Chr3R_95D2, &Chr3R_95D3, &Chr3R_95D4, &Chr3R_95D5, &Chr3R_95D6, &Chr3R_95D7, &Chr3R_95D8, &Chr3R_95D9, &Chr3R_95D10, &Chr3R_95D11, &Chr3R_95E1, &Chr3R_95E2, &Chr3R_95E3, &Chr3R_95E4, &Chr3R_95E5, &Chr3R_95E6, &Chr3R_95E7, &Chr3R_95E8, &Chr3R_95F1, &Chr3R_95F2, &Chr3R_95F3, &Chr3R_95F4, &Chr3R_95F5, &Chr3R_95F6, &Chr3R_95F7, &Chr3R_95F8, &Chr3R_95F9, &Chr3R_95F10, &Chr3R_95F11, &Chr3R_95F12, &Chr3R_95F13, &Chr3R_95F14, &Chr3R_95F15, &Chr3R_96A1, &Chr3R_96A2, &Chr3R_96A3, &Chr3R_96A4, &Chr3R_96A5, &Chr3R_96A6, &Chr3R_96A7, &Chr3R_96A8, &Chr3R_96A9, &Chr3R_96A10, &Chr3R_96A11, &Chr3R_96A12, &Chr3R_96A13, &Chr3R_96A14, &Chr3R_96A15, &Chr3R_96A16, &Chr3R_96A17, &Chr3R_96A18, &Chr3R_96A19, &Chr3R_96A20, &Chr3R_96A21, &Chr3R_96A22, &Chr3R_96A23, &Chr3R_96A24, &Chr3R_96A25, &Chr3R_96B1, &Chr3R_96B2, &Chr3R_96B3, &Chr3R_96B4, &Chr3R_96B5, &Chr3R_96B6, &Chr3R_96B7, &Chr3R_96B8, &Chr3R_96B9, &Chr3R_96B10, &Chr3R_96B11, &Chr3R_96B12, &Chr3R_96B13, &Chr3R_96B14, &Chr3R_96B15, &Chr3R_96B16, &Chr3R_96B17, &Chr3R_96B18, &Chr3R_96B19, &Chr3R_96B20, &Chr3R_96B21, &Chr3R_96C1, &Chr3R_96C2, &Chr3R_96C3, &Chr3R_96C4, &Chr3R_96C5, &Chr3R_96C6, &Chr3R_96C7, &Chr3R_96C8, &Chr3R_96C9, &Chr3R_96D1, &Chr3R_96D2, &Chr3R_96D3, &Chr3R_96D4, &Chr3R_96D5, &Chr3R_96D6, &Chr3R_96E1, &Chr3R_96E2, &Chr3R_96E3, &Chr3R_96E4, &Chr3R_96E5, &Chr3R_96E6, &Chr3R_96E7, &Chr3R_96E8, &Chr3R_96E9, &Chr3R_96E10, &Chr3R_96E11, &Chr3R_96E12, &Chr3R_96F1, &Chr3R_96F2, &Chr3R_96F3, &Chr3R_96F4, &Chr3R_96F5, &Chr3R_96F6, &Chr3R_96F7, &Chr3R_96F8, &Chr3R_96F9, &Chr3R_96F10, &Chr3R_96F11, &Chr3R_96F12, &Chr3R_96F13, &Chr3R_96F14, &Chr3R_97A1, &Chr3R_97A2, &Chr3R_97A3, &Chr3R_97A4, &Chr3R_97A5, &Chr3R_97A6, &Chr3R_97A7, &Chr3R_97A8, &Chr3R_97A9, &Chr3R_97A10, &Chr3R_97B1, &Chr3R_97B2, &Chr3R_97B3, &Chr3R_97B4, &Chr3R_97B5, &Chr3R_97B6, &Chr3R_97B7, &Chr3R_97B8, &Chr3R_97B9, &Chr3R_97B10, &Chr3R_97C1, &Chr3R_97C2, &Chr3R_97C3, &Chr3R_97C4, &Chr3R_97C5, &Chr3R_97D1, &Chr3R_97D2, &Chr3R_97D3, &Chr3R_97D4, &Chr3R_97D5, &Chr3R_97D6, &Chr3R_97D7, &Chr3R_97D8, &Chr3R_97D9, &Chr3R_97D10, &Chr3R_97D11, &Chr3R_97D12, &Chr3R_97D13, &Chr3R_97D14, &Chr3R_97D15, &Chr3R_97E1, &Chr3R_97E2, &Chr3R_97E3, &Chr3R_97E4, &Chr3R_97E5, &Chr3R_97E6, &Chr3R_97E7, &Chr3R_97E8, &Chr3R_97E9, &Chr3R_97E10, &Chr3R_97E11, &Chr3R_97F1, &Chr3R_97F2, &Chr3R_97F3, &Chr3R_97F4, &Chr3R_97F5, &Chr3R_97F6, &Chr3R_97F7, &Chr3R_97F8, &Chr3R_97F9, &Chr3R_97F10, &Chr3R_97F11, &Chr3R_98A1, &Chr3R_98A2, &Chr3R_98A3, &Chr3R_98A4, &Chr3R_98A5, &Chr3R_98A6, &Chr3R_98A7, &Chr3R_98A8, &Chr3R_98A9, &Chr3R_98A10, &Chr3R_98A11, &Chr3R_98A12, &Chr3R_98A13, &Chr3R_98A14, &Chr3R_98A15, &Chr3R_98B1, &Chr3R_98B2, &Chr3R_98B3, &Chr3R_98B4, &Chr3R_98B5, &Chr3R_98B6, &Chr3R_98B7, &Chr3R_98B8, &Chr3R_98C1, &Chr3R_98C2, &Chr3R_98C3, &Chr3R_98C4, &Chr3R_98C5, &Chr3R_98D1, &Chr3R_98D2, &Chr3R_98D3, &Chr3R_98D4, &Chr3R_98D5, &Chr3R_98D6, &Chr3R_98D7, &Chr3R_98E1, &Chr3R_98E2, &Chr3R_98E3, &Chr3R_98E4, &Chr3R_98E5, &Chr3R_98E6, &Chr3R_98F1, &Chr3R_98F2, &Chr3R_98F3, &Chr3R_98F4, &Chr3R_98F5, &Chr3R_98F6, &Chr3R_98F7, &Chr3R_98F8, &Chr3R_98F9, &Chr3R_98F10, &Chr3R_98F11, &Chr3R_98F12, &Chr3R_98F13, &Chr3R_98F14, &Chr3R_99A1, &Chr3R_99A2, &Chr3R_99A3, &Chr3R_99A4, &Chr3R_99A5, &Chr3R_99A6, &Chr3R_99A7, &Chr3R_99A8, &Chr3R_99A9, &Chr3R_99A10, &Chr3R_99A11, &Chr3R_99B1, &Chr3R_99B2, &Chr3R_99B3, &Chr3R_99B4, &Chr3R_99B5, &Chr3R_99B6, &Chr3R_99B7, &Chr3R_99B8, &Chr3R_99B9, &Chr3R_99B10, &Chr3R_99B11, &Chr3R_99C1, &Chr3R_99C2, &Chr3R_99C3, &Chr3R_99C4, &Chr3R_99C5, &Chr3R_99C6, &Chr3R_99C7, &Chr3R_99C8, &Chr3R_99D1, &Chr3R_99D2, &Chr3R_99D3, &Chr3R_99D4, &Chr3R_99D5, &Chr3R_99D6, &Chr3R_99D7, &Chr3R_99D8, &Chr3R_99D9, &Chr3R_99E1, &Chr3R_99E2, &Chr3R_99E3, &Chr3R_99E4, &Chr3R_99E5, &Chr3R_99F1, &Chr3R_99F2, &Chr3R_99F3, &Chr3R_99F4, &Chr3R_99F5, &Chr3R_99F6, &Chr3R_99F7, &Chr3R_99F8, &Chr3R_99F9, &Chr3R_99F10, &Chr3R_99F11, &Chr3R_100A1, &Chr3R_100A2, &Chr3R_100A3, &Chr3R_100A4, &Chr3R_100A5, &Chr3R_100A6, &Chr3R_100A7, &Chr3R_100B1, &Chr3R_100B2, &Chr3R_100B3, &Chr3R_100B4, &Chr3R_100B5, &Chr3R_100B6, &Chr3R_100B7, &Chr3R_100B8, &Chr3R_100B9, &Chr3R_100C1, &Chr3R_100C2, &Chr3R_100C3, &Chr3R_100C4, &Chr3R_100C5, &Chr3R_100C6, &Chr3R_100C7, &Chr3R_100D1, &Chr3R_100D2, &Chr3R_100D3, &Chr3R_100D4, &Chr3R_100E1, &Chr3R_100E2, &Chr3R_100E3, &Chr4_101F1, &Chr4_102A1, &Chr4_102A2, &Chr4_102A3, &Chr4_102A4, &Chr4_102A5, &Chr4_102A6, &Chr4_102A7, &Chr4_102A8, &Chr4_102B1, &Chr4_102B2, &Chr4_102B3, &Chr4_102B4, &Chr4_102B5, &Chr4_102B6, &Chr4_102B7, &Chr4_102B8, &Chr4_102C1, &Chr4_102C2, &Chr4_102C3, &Chr4_102C4, &Chr4_102C5, &Chr4_102C6, &Chr4_102D1, &Chr4_102D2, &Chr4_102D3, &Chr4_102D4, &Chr4_102D5, &Chr4_102D6, &Chr4_102E1, &Chr4_102E2, &Chr4_102E3, &Chr4_102E4, &Chr4_102E5, &Chr4_102E6, &Chr4_102E7, &Chr4_102F1, &Chr4_102F2, &Chr4_102F3, &Chr4_102F4, &Chr4_102F5, &Chr4_102F6, &Chr4_102F7, &Chr4_102F8, &ChrX_1A1, &ChrX_1A2, &ChrX_1A3, &ChrX_1A4, &ChrX_1A5, &ChrX_1A6, &ChrX_1A7, &ChrX_1A8, &ChrX_1B1, &ChrX_1B2, &ChrX_1B3, &ChrX_1B4, &ChrX_1B5, &ChrX_1B6, &ChrX_1B7, &ChrX_1B8, &ChrX_1B9, &ChrX_1B10, &ChrX_1B11, &ChrX_1B12, &ChrX_1B13, &ChrX_1B14, &ChrX_1C1, &ChrX_1C2, &ChrX_1C3, &ChrX_1C4, &ChrX_1C5, &ChrX_1D1, &ChrX_1D2, &ChrX_1D3, &ChrX_1D4, &ChrX_1E1, &ChrX_1E2, &ChrX_1E3, &ChrX_1E4, &ChrX_1E5, &ChrX_1F1, &ChrX_1F2, &ChrX_1F3, &ChrX_1F4, &ChrX_2A1, &ChrX_2A2, &ChrX_2A3, &ChrX_2A4, &ChrX_2B1, &ChrX_2B2, &ChrX_2B3, &ChrX_2B4, &ChrX_2B5, &ChrX_2B6, &ChrX_2B7, &ChrX_2B8, &ChrX_2B9, &ChrX_2B10, &ChrX_2B11, &ChrX_2B12, &ChrX_2B13, &ChrX_2B14, &ChrX_2B15, &ChrX_2B16, &ChrX_2B17, &ChrX_2B18, &ChrX_2C1, &ChrX_2C2, &ChrX_2C3, &ChrX_2C4, &ChrX_2C5, &ChrX_2C6, &ChrX_2C7, &ChrX_2C8, &ChrX_2C9, &ChrX_2C10, &ChrX_2D1, &ChrX_2D2, &ChrX_2D3, &ChrX_2D4, &ChrX_2D5, &ChrX_2D6, &ChrX_2E1, &ChrX_2E2, &ChrX_2E3, &ChrX_2F1, &ChrX_2F2, &ChrX_2F3, &ChrX_2F4, &ChrX_2F5, &ChrX_2F6, &ChrX_3A1, &ChrX_3A2, &ChrX_3A3, &ChrX_3A4, &ChrX_3A5, &ChrX_3A6, &ChrX_3A7, &ChrX_3A8, &ChrX_3A9, &ChrX_3A10, &ChrX_3B1, &ChrX_3B2, &ChrX_3B3, &ChrX_3B4, &ChrX_3B5, &ChrX_3B6, &ChrX_3C1, &ChrX_3C2, &ChrX_3C3, &ChrX_3C4, &ChrX_3C5, &ChrX_3C6, &ChrX_3C7, &ChrX_3C8, &ChrX_3C9, &ChrX_3C10, &ChrX_3C11, &ChrX_3C12, &ChrX_3D1, &ChrX_3D2, &ChrX_3D3, &ChrX_3D4, &ChrX_3D5, &ChrX_3D6, &ChrX_3D7, &ChrX_3E1, &ChrX_3E2, &ChrX_3E3, &ChrX_3E4, &ChrX_3E5, &ChrX_3E6, &ChrX_3E7, &ChrX_3E8, &ChrX_3F1, &ChrX_3F2, &ChrX_3F3, &ChrX_3F4, &ChrX_3F5, &ChrX_3F6, &ChrX_3F7, &ChrX_3F8, &ChrX_3F9, &ChrX_4A1, &ChrX_4A2, &ChrX_4A3, &ChrX_4A4, &ChrX_4A5, &ChrX_4A6, &ChrX_4B1, &ChrX_4B2, &ChrX_4B3, &ChrX_4B4, &ChrX_4B5, &ChrX_4B6, &ChrX_4C1, &ChrX_4C2, &ChrX_4C3, &ChrX_4C4, &ChrX_4C5, &ChrX_4C6, &ChrX_4C7, &ChrX_4C8, &ChrX_4C9, &ChrX_4C10, &ChrX_4C11, &ChrX_4C12, &ChrX_4C13, &ChrX_4C14, &ChrX_4C15, &ChrX_4C16, &ChrX_4D1, &ChrX_4D2, &ChrX_4D3, &ChrX_4D4, &ChrX_4D5, &ChrX_4D6, &ChrX_4D7, &ChrX_4E1, &ChrX_4E2, &ChrX_4E3, &ChrX_4F1, &ChrX_4F2, &ChrX_4F3, &ChrX_4F4, &ChrX_4F5, &ChrX_4F6, &ChrX_4F7, &ChrX_4F8, &ChrX_4F9, &ChrX_4F10, &ChrX_4F11, &ChrX_4F12, &ChrX_4F13, &ChrX_4F14, &ChrX_5A1, &ChrX_5A2, &ChrX_5A3, &ChrX_5A4, &ChrX_5A5, &ChrX_5A6, &ChrX_5A7, &ChrX_5A8, &ChrX_5A9, &ChrX_5A10, &ChrX_5A11, &ChrX_5A12, &ChrX_5A13, &ChrX_5A14, &ChrX_5B1, &ChrX_5B2, &ChrX_5B3, &ChrX_5B4, &ChrX_5B5, &ChrX_5B6, &ChrX_5B7, &ChrX_5B8, &ChrX_5B9, &ChrX_5B10, &ChrX_5C1, &ChrX_5C2, &ChrX_5C3, &ChrX_5C4, &ChrX_5C5, &ChrX_5C6, &ChrX_5C7, &ChrX_5C8, &ChrX_5C9, &ChrX_5C10, &ChrX_5D1, &ChrX_5D2, &ChrX_5D3, &ChrX_5D4, &ChrX_5D5, &ChrX_5D6, &ChrX_5D7, &ChrX_5D8, &ChrX_5E1, &ChrX_5E2, &ChrX_5E3, &ChrX_5E4, &ChrX_5E5, &ChrX_5E6, &ChrX_5E7, &ChrX_5E8, &ChrX_5F1, &ChrX_5F2, &ChrX_5F3, &ChrX_5F4, &ChrX_5F5, &ChrX_5F6, &ChrX_6A1, &ChrX_6A2, &ChrX_6A3, &ChrX_6A4, &ChrX_6B1, &ChrX_6B2, &ChrX_6B3, &ChrX_6B4, &ChrX_6C1, &ChrX_6C2, &ChrX_6C3, &ChrX_6C4, &ChrX_6C5, &ChrX_6C6, &ChrX_6C7, &ChrX_6C8, &ChrX_6C9, &ChrX_6C10, &ChrX_6C11, &ChrX_6C12, &ChrX_6C13, &ChrX_6D1, &ChrX_6D2, &ChrX_6D3, &ChrX_6D4, &ChrX_6D5, &ChrX_6D6, &ChrX_6D7, &ChrX_6D8, &ChrX_6E1, &ChrX_6E2, &ChrX_6E3, &ChrX_6E4, &ChrX_6E5, &ChrX_6E6, &ChrX_6E7, &ChrX_6F1, &ChrX_6F2, &ChrX_6F3, &ChrX_6F4, &ChrX_6F5, &ChrX_6F6, &ChrX_6F7, &ChrX_6F8, &ChrX_6F9, &ChrX_6F10, &ChrX_6F11, &ChrX_7A1, &ChrX_7A2, &ChrX_7A3, &ChrX_7A4, &ChrX_7A5, &ChrX_7A6, &ChrX_7A7, &ChrX_7A8, &ChrX_7B1, &ChrX_7B2, &ChrX_7B3, &ChrX_7B4, &ChrX_7B5, &ChrX_7B6, &ChrX_7B7, &ChrX_7B8, &ChrX_7C1, &ChrX_7C2, &ChrX_7C3, &ChrX_7C4, &ChrX_7C5, &ChrX_7C6, &ChrX_7C7, &ChrX_7C8, &ChrX_7C9, &ChrX_7D1, &ChrX_7D2, &ChrX_7D3, &ChrX_7D4, &ChrX_7D5, &ChrX_7D6, &ChrX_7D7, &ChrX_7D8, &ChrX_7D9, &ChrX_7D10, &ChrX_7D11, &ChrX_7D12, &ChrX_7D13, &ChrX_7D14, &ChrX_7D15, &ChrX_7D16, &ChrX_7D17, &ChrX_7D18, &ChrX_7D19, &ChrX_7D20, &ChrX_7D21, &ChrX_7D22, &ChrX_7E1, &ChrX_7E2, &ChrX_7E3, &ChrX_7E4, &ChrX_7E5, &ChrX_7E6, &ChrX_7E7, &ChrX_7E8, &ChrX_7E9, &ChrX_7E10, &ChrX_7E11, &ChrX_7F1, &ChrX_7F2, &ChrX_7F3, &ChrX_7F4, &ChrX_7F5, &ChrX_7F6, &ChrX_7F7, &ChrX_7F8, &ChrX_7F9, &ChrX_7F10, &ChrX_8A1, &ChrX_8A2, &ChrX_8A3, &ChrX_8A4, &ChrX_8A5, &ChrX_8B1, &ChrX_8B2, &ChrX_8B3, &ChrX_8B4, &ChrX_8B5, &ChrX_8B6, &ChrX_8B7, &ChrX_8B8, &ChrX_8C1, &ChrX_8C2, &ChrX_8C3, &ChrX_8C4, &ChrX_8C5, &ChrX_8C6, &ChrX_8C7, &ChrX_8C8, &ChrX_8C9, &ChrX_8C10, &ChrX_8C11, &ChrX_8C12, &ChrX_8C13, &ChrX_8C14, &ChrX_8C15, &ChrX_8C16, &ChrX_8C17, &ChrX_8D1, &ChrX_8D2, &ChrX_8D3, &ChrX_8D4, &ChrX_8D5, &ChrX_8D6, &ChrX_8D7, &ChrX_8D8, &ChrX_8D9, &ChrX_8D10, &ChrX_8D11, &ChrX_8D12, &ChrX_8E1, &ChrX_8E2, &ChrX_8E3, &ChrX_8E4, &ChrX_8E5, &ChrX_8E6, &ChrX_8E7, &ChrX_8E8, &ChrX_8E9, &ChrX_8E10, &ChrX_8E11, &ChrX_8E12, &ChrX_8F1, &ChrX_8F2, &ChrX_8F3, &ChrX_8F4, &ChrX_8F5, &ChrX_8F6, &ChrX_8F7, &ChrX_8F8, &ChrX_8F9, &ChrX_8F10, &ChrX_9A1, &ChrX_9A2, &ChrX_9A3, &ChrX_9A4, &ChrX_9A5, &ChrX_9B1, &ChrX_9B2, &ChrX_9B3, &ChrX_9B4, &ChrX_9B5, &ChrX_9B6, &ChrX_9B7, &ChrX_9B8, &ChrX_9B9, &ChrX_9B10, &ChrX_9B11, &ChrX_9B12, &ChrX_9B13, &ChrX_9B14, &ChrX_9B15, &ChrX_9C1, &ChrX_9C2, &ChrX_9C3, &ChrX_9C4, &ChrX_9C5, &ChrX_9C6, &ChrX_9D1, &ChrX_9D2, &ChrX_9D3, &ChrX_9D4, &ChrX_9E1, &ChrX_9E2, &ChrX_9E3, &ChrX_9E4, &ChrX_9E5, &ChrX_9E6, &ChrX_9E7, &ChrX_9E8, &ChrX_9E9, &ChrX_9E10, &ChrX_9F1, &ChrX_9F2, &ChrX_9F3, &ChrX_9F4, &ChrX_9F5, &ChrX_9F6, &ChrX_9F7, &ChrX_9F8, &ChrX_9F9, &ChrX_9F10, &ChrX_9F11, &ChrX_9F12, &ChrX_9F13, &ChrX_10A1, &ChrX_10A2, &ChrX_10A3, &ChrX_10A4, &ChrX_10A5, &ChrX_10A6, &ChrX_10A7, &ChrX_10A8, &ChrX_10A9, &ChrX_10A10, &ChrX_10A11, &ChrX_10B1, &ChrX_10B2, &ChrX_10B3, &ChrX_10B4, &ChrX_10B5, &ChrX_10B6, &ChrX_10B7, &ChrX_10B8, &ChrX_10B9, &ChrX_10B10, &ChrX_10B11, &ChrX_10B12, &ChrX_10B13, &ChrX_10B14, &ChrX_10B15, &ChrX_10B16, &ChrX_10B17, &ChrX_10C1, &ChrX_10C2, &ChrX_10C3, &ChrX_10C4, &ChrX_10C5, &ChrX_10C6, &ChrX_10C7, &ChrX_10C8, &ChrX_10C9, &ChrX_10C10, &ChrX_10D1, &ChrX_10D2, &ChrX_10D3, &ChrX_10D4, &ChrX_10D5, &ChrX_10D6, &ChrX_10D7, &ChrX_10D8, &ChrX_10E1, &ChrX_10E2, &ChrX_10E3, &ChrX_10E4, &ChrX_10E5, &ChrX_10E6, &ChrX_10F1, &ChrX_10F2, &ChrX_10F3, &ChrX_10F4, &ChrX_10F5, &ChrX_10F6, &ChrX_10F7, &ChrX_10F8, &ChrX_10F9, &ChrX_10F10, &ChrX_10F11, &ChrX_11A1, &ChrX_11A2, &ChrX_11A3, &ChrX_11A4, &ChrX_11A5, &ChrX_11A6, &ChrX_11A7, &ChrX_11A8, &ChrX_11A9, &ChrX_11A10, &ChrX_11A11, &ChrX_11A12, &ChrX_11B1, &ChrX_11B2, &ChrX_11B3, &ChrX_11B4, &ChrX_11B5, &ChrX_11B6, &ChrX_11B7, &ChrX_11B8, &ChrX_11B9, &ChrX_11B10, &ChrX_11B11, &ChrX_11B12, &ChrX_11B13, &ChrX_11B14, &ChrX_11B15, &ChrX_11B16, &ChrX_11B17, &ChrX_11B18, &ChrX_11B19, &ChrX_11C1, &ChrX_11C2, &ChrX_11C3, &ChrX_11C4, &ChrX_11D1, &ChrX_11D2, &ChrX_11D3, &ChrX_11D4, &ChrX_11D5, &ChrX_11D6, &ChrX_11D7, &ChrX_11D8, &ChrX_11D9, &ChrX_11D10, &ChrX_11D11, &ChrX_11E1, &ChrX_11E2, &ChrX_11E3, &ChrX_11E4, &ChrX_11E5, &ChrX_11E6, &ChrX_11E7, &ChrX_11E8, &ChrX_11E9, &ChrX_11E10, &ChrX_11E11, &ChrX_11E12, &ChrX_11E13, &ChrX_11F1, &ChrX_11F2, &ChrX_11F3, &ChrX_11F4, &ChrX_11F5, &ChrX_11F6, &ChrX_11F7, &ChrX_11F8, &ChrX_12A1, &ChrX_12A2, &ChrX_12A3, &ChrX_12A4, &ChrX_12A5, &ChrX_12A6, &ChrX_12A7, &ChrX_12A8, &ChrX_12A9, &ChrX_12A10, &ChrX_12B1, &ChrX_12B2, &ChrX_12B3, &ChrX_12B4, &ChrX_12B5, &ChrX_12B6, &ChrX_12B7, &ChrX_12B8, &ChrX_12B9, &ChrX_12B10, &ChrX_12C1, &ChrX_12C2, &ChrX_12C3, &ChrX_12C4, &ChrX_12C5, &ChrX_12C6, &ChrX_12C7, &ChrX_12C8, &ChrX_12D1, &ChrX_12D2, &ChrX_12D3, &ChrX_12D4, &ChrX_12D5, &ChrX_12E1, &ChrX_12E2, &ChrX_12E3, &ChrX_12E4, &ChrX_12E5, &ChrX_12E6, &ChrX_12E7, &ChrX_12E8, &ChrX_12E9, &ChrX_12E10, &ChrX_12E11, &ChrX_12F1, &ChrX_12F2, &ChrX_12F3, &ChrX_12F4, &ChrX_12F5, &ChrX_12F6, &ChrX_12F7, &ChrX_13A1, &ChrX_13A2, &ChrX_13A3, &ChrX_13A4, &ChrX_13A5, &ChrX_13A6, &ChrX_13A7, &ChrX_13A8, &ChrX_13A9, &ChrX_13A10, &ChrX_13A11, &ChrX_13A12, &ChrX_13B1, &ChrX_13B2, &ChrX_13B3, &ChrX_13B4, &ChrX_13B5, &ChrX_13B6, &ChrX_13B7, &ChrX_13B8, &ChrX_13B9, &ChrX_13C1, &ChrX_13C2, &ChrX_13C3, &ChrX_13C4, &ChrX_13C5, &ChrX_13C6, &ChrX_13C7, &ChrX_13C8, &ChrX_13D1, &ChrX_13D2, &ChrX_13D3, &ChrX_13D4, &ChrX_13D5, &ChrX_13E1, &ChrX_13E2, &ChrX_13E3, &ChrX_13E4, &ChrX_13E5, &ChrX_13E6, &ChrX_13E7, &ChrX_13E8, &ChrX_13E9, &ChrX_13E10, &ChrX_13E11, &ChrX_13E12, &ChrX_13E13, &ChrX_13E14, &ChrX_13E15, &ChrX_13E16, &ChrX_13E17, &ChrX_13E18, &ChrX_13F1, &ChrX_13F2, &ChrX_13F3, &ChrX_13F4, &ChrX_13F5, &ChrX_13F6, &ChrX_13F7, &ChrX_13F8, &ChrX_13F9, &ChrX_13F10, &ChrX_13F11, &ChrX_13F12, &ChrX_13F13, &ChrX_13F14, &ChrX_13F15, &ChrX_13F16, &ChrX_13F17, &ChrX_13F18, &ChrX_14A1, &ChrX_14A2, &ChrX_14A3, &ChrX_14A4, &ChrX_14A5, &ChrX_14A6, &ChrX_14A7, &ChrX_14A8, &ChrX_14A9, &ChrX_14B1, &ChrX_14B2, &ChrX_14B3, &ChrX_14B4, &ChrX_14B5, &ChrX_14B6, &ChrX_14B7, &ChrX_14B8, &ChrX_14B9, &ChrX_14B10, &ChrX_14B11, &ChrX_14B12, &ChrX_14B13, &ChrX_14B14, &ChrX_14B15, &ChrX_14B16, &ChrX_14B17, &ChrX_14B18, &ChrX_14C1, &ChrX_14C2, &ChrX_14C3, &ChrX_14C4, &ChrX_14C5, &ChrX_14C6, &ChrX_14C7, &ChrX_14C8, &ChrX_14D1, &ChrX_14D2, &ChrX_14D3, &ChrX_14D4, &ChrX_14E1, &ChrX_14E2, &ChrX_14E3, &ChrX_14E4, &ChrX_14F1, &ChrX_14F2, &ChrX_14F3, &ChrX_14F4, &ChrX_14F5, &ChrX_14F6, &ChrX_15A1, &ChrX_15A2, &ChrX_15A3, &ChrX_15A4, &ChrX_15A5, &ChrX_15A6, &ChrX_15A7, &ChrX_15A8, &ChrX_15A9, &ChrX_15A10, &ChrX_15A11, &ChrX_15B1, &ChrX_15B2, &ChrX_15B3, &ChrX_15B4, &ChrX_15B5, &ChrX_15C1, &ChrX_15C2, &ChrX_15C3, &ChrX_15C4, &ChrX_15C5, &ChrX_15C6, &ChrX_15D1, &ChrX_15D2, &ChrX_15D3, &ChrX_15D4, &ChrX_15D5, &ChrX_15D6, &ChrX_15E1, &ChrX_15E2, &ChrX_15E3, &ChrX_15E4, &ChrX_15E5, &ChrX_15E6, &ChrX_15E7, &ChrX_15F1, &ChrX_15F2, &ChrX_15F3, &ChrX_15F4, &ChrX_15F5, &ChrX_15F6, &ChrX_15F7, &ChrX_15F8, &ChrX_15F9, &ChrX_16A1, &ChrX_16A2, &ChrX_16A3, &ChrX_16A4, &ChrX_16A5, &ChrX_16A6, &ChrX_16A7, &ChrX_16B1, &ChrX_16B2, &ChrX_16B3, &ChrX_16B4, &ChrX_16B5, &ChrX_16B6, &ChrX_16B7, &ChrX_16B8, &ChrX_16B9, &ChrX_16B10, &ChrX_16B11, &ChrX_16B12, &ChrX_16C1, &ChrX_16C2, &ChrX_16C3, &ChrX_16C4, &ChrX_16C5, &ChrX_16C6, &ChrX_16C7, &ChrX_16C8, &ChrX_16C9, &ChrX_16C10, &ChrX_16D1, &ChrX_16D2, &ChrX_16D3, &ChrX_16D4, &ChrX_16D5, &ChrX_16D6, &ChrX_16D7, &ChrX_16E1, &ChrX_16E2, &ChrX_16E3, &ChrX_16E4, &ChrX_16E5, &ChrX_16F1, &ChrX_16F2, &ChrX_16F3, &ChrX_16F4, &ChrX_16F5, &ChrX_16F6, &ChrX_16F7, &ChrX_16F8, &ChrX_17A1, &ChrX_17A2, &ChrX_17A3, &ChrX_17A4, &ChrX_17A5, &ChrX_17A6, &ChrX_17A7, &ChrX_17A8, &ChrX_17A9, &ChrX_17A10, &ChrX_17A11, &ChrX_17A12, &ChrX_17B1, &ChrX_17B2, &ChrX_17B3, &ChrX_17B4, &ChrX_17B5, &ChrX_17B6, &ChrX_17C1, &ChrX_17C2, &ChrX_17C3, &ChrX_17C4, &ChrX_17C5, &ChrX_17C6, &ChrX_17C7, &ChrX_17D1, &ChrX_17D2, &ChrX_17D3, &ChrX_17D4, &ChrX_17D5, &ChrX_17D6, &ChrX_17E1, &ChrX_17E2, &ChrX_17E3, &ChrX_17E4, &ChrX_17E5, &ChrX_17E6, &ChrX_17E7, &ChrX_17E8, &ChrX_17E9, &ChrX_17F1, &ChrX_17F2, &ChrX_17F3, &ChrX_18A1, &ChrX_18A2, &ChrX_18A3, &ChrX_18A4, &ChrX_18A5, &ChrX_18A6, &ChrX_18A7, &ChrX_18B1, &ChrX_18B2, &ChrX_18B3, &ChrX_18B4, &ChrX_18B5, &ChrX_18B6, &ChrX_18B7, &ChrX_18B8, &ChrX_18B9, &ChrX_18B10, &ChrX_18B11, &ChrX_18C1, &ChrX_18C2, &ChrX_18C3, &ChrX_18C4, &ChrX_18C5, &ChrX_18C6, &ChrX_18C7, &ChrX_18C8, &ChrX_18C9, &ChrX_18D1, &ChrX_18D2, &ChrX_18D3, &ChrX_18D4, &ChrX_18D5, &ChrX_18D6, &ChrX_18D7, &ChrX_18D8, &ChrX_18D9, &ChrX_18D10, &ChrX_18D11, &ChrX_18D12, &ChrX_18D13, &ChrX_18E1, &ChrX_18E2, &ChrX_18E3, &ChrX_18E4, &ChrX_18E5, &ChrX_18F1, &ChrX_18F2, &ChrX_18F3, &ChrX_18F4, &ChrX_18F5, &ChrX_19A1, &ChrX_19A2, &ChrX_19A3, &ChrX_19A4, &ChrX_19A5, &ChrX_19A6, &ChrX_19B1, &ChrX_19B2, &ChrX_19B3, &ChrX_19C1, &ChrX_19C2, &ChrX_19C3, &ChrX_19C4, &ChrX_19C5, &ChrX_19C6, &ChrX_19D1, &ChrX_19D2, &ChrX_19D3, &ChrX_19E1, &ChrX_19E2, &ChrX_19E3, &ChrX_19E4, &ChrX_19E5, &ChrX_19E6, &ChrX_19E7, &ChrX_19E8, &ChrX_19F1, &ChrX_19F2, &ChrX_19F3, &ChrX_19F4, &ChrX_19F5, &ChrX_19F6, &ChrX_20A1, &ChrX_20A2, &ChrX_20A3, &ChrX_20A4, &ChrX_20A5, &ChrX_20B1, &ChrX_20B2, &ChrX_20B3, &ChrX_20C1, &ChrX_20C2, &ChrX_20C3, &ChrX_20D1, &ChrX_20D2, &ChrX_20E1, &ChrX_20E2, &ChrX_20F1, &ChrX_20F2, &ChrX_20F3, &ChrX_20F4, } //line parse.karyotype:82 func init() { for _, b := range Bands { b.Chr.(*genome.Chromosome).Features = append(b.Chr.(*genome.Chromosome).Features, b) } for _, c := range Chromosomes { bc := make([]feat.Feature, len(c.Features)) copy(bc, c.Features) c.Features = bc } } biogo-1.0.4/feat/genome/genome.go0000644000175000017500000000410014136731467016142 0ustar nileshnilesh// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package genome defines types useful for representing cytogenetic features. package genome import ( "github.com/biogo/biogo/feat" "github.com/biogo/biogo/seq" ) // Chromosome represent a chromosome and associated features. Elements in the // Features field should return the Chromosome when their Location() method is // called. type Chromosome struct { Chr string Desc string Length int Features []feat.Feature } func (c *Chromosome) Start() int { return 0 } func (c *Chromosome) End() int { return c.Length } func (c *Chromosome) Len() int { return c.Length } func (c *Chromosome) Name() string { return c.Chr } func (c *Chromosome) Description() string { return c.Desc } func (c *Chromosome) Location() feat.Feature { return nil } // Band represents a chromosome band. type Band struct { Band string Desc string Chr feat.Feature StartPos int EndPos int Giemsa string } func (b *Band) Start() int { return b.StartPos } func (b *Band) End() int { return b.EndPos } func (b *Band) Len() int { return b.End() - b.Start() } func (b *Band) Name() string { return b.Band } func (b *Band) Description() string { return b.Desc } func (b *Band) Location() feat.Feature { return b.Chr } // Fragment represents an assembly fragment. type Fragment struct { Frag string Desc string Chr feat.Feature ChrStart int ChrEnd int FragStart int FragEnd int Type byte Strand seq.Strand } func (f *Fragment) Start() int { return f.ChrStart } func (f *Fragment) End() int { return f.ChrEnd } func (f *Fragment) Len() int { return f.End() - f.Start() } func (f *Fragment) Name() string { return f.Frag } func (f *Fragment) Description() string { return f.Desc } func (f *Fragment) Location() feat.Feature { return f.Chr } biogo-1.0.4/feat/genome/parse.karyotype0000755000175000017500000000611214136731467017434 0ustar nileshnilesh#!/bin/bash # This file parses UCSC Chromosome Band table into a Go source code file. # # This script will only work on the Chromosome Band table - it will not # work on an 'Assembly' or 'Scaffold' table. # # The prefix, e.g. chr, will be used to label the chromosomes (e.g. chr1, chr2 ... ) # By default, "chr" is used. The package will be used to name the generated package. # # To download data tables, see http://genome.ucsc.edu/cgi-bin/hgTables file=$1 prefix=$2 species=$3 package=$4 if [ ! -n "$file" ]; then echo "Please specify the UCSC karyotype table file" exit fi if [ ! -n "$prefix" ]; then prefix="chr" fi label="$(tr '[:lower:]' '[:upper:]' <<< ${prefix:0:1})${prefix:1}" ( echo -e "// DO NOT EDIT. This file was autogenerated by parse.karyotype\n" echo "// Package $package defines chromosome and band intervals for the $species karyotype based on the $package assembly." echo -e "package $package\n" echo -e "import (\n\t\"github.com/biogo/biogo/feat\"\n\t\"github.com/biogo/biogo/feat/genome\"\n)\n" # # chromosomes echo 'var (' < $file zcat \ | grep -v '^#' \ | sed -e 's/\t/ /g' -e 's/chr//' | tr -s ' ' \ | awk '{print $1,$0}' \ | sed -e 's/^[XZ]/1.1e10/' -e 's/^[YW]/1.2e10/' -e 's/^M/1.3e10/' \ | sed -e 's/^\([1-9][0-9]*\)[lL]/\1/' -e 's/^\([1-9][0-9]*\)[rR]/\1.5/' \ | sort -k1,1g -k3rn,3 \ | sort -u -k1g,1 \ | awk -v prefix=$prefix -v label=$label '{print "\t"label$2" = genome.Chromosome{Chr: \""prefix$2"\", Desc: \"Chromosome\", Length:",$4"}"}' echo -e ')\n' echo 'var Chromosomes = []*genome.Chromosome{' < $file zcat \ | grep -v '^#' \ | sed -e 's/\t/ /g' -e 's/chr//' | tr -s ' ' \ | awk '{print $1,$0}' \ | sed -e 's/^[XZ]/1.1e10/' -e 's/^[YW]/1.2e10/' -e 's/^M/1.3e10/' \ | sed -e 's/^\([1-9][0-9]*\)[lL]/\1/' -e 's/^\([1-9][0-9]*\)[rR]/\1.5/' \ | sort -k1,1g -k3rn,3 \ | sort -u -k1g,1 \ | awk -v label=$label '{print "\t&"label$2","}' echo -e '}\n' # bands echo 'var (' < $file zcat \ | grep -v '^#' \ | sed -e 's/\t/ /g' -e 's/chr//' | tr -s ' ' \ | awk '{print $1,$0}' \ | sed -e 's/^[XZ]/1.1e10/' -e 's/^[YW]/1.2e10/' -e 's/^M/1.3e10/' \ | sed -e 's/^\([1-9][0-9]*\)[lL]/\1/' -e 's/^\([1-9][0-9]*\)[rR]/\1.5/' \ | sort -k1,1g -k3n,3 \ | awk -v label=$label '{print "\t"label$2"_"$5" = genome.Band{Band: \""$5"\", Desc: \"Band\", StartPos:",$3", EndPos:",$4", Giemsa: \""$6"\", Chr: &"label$2"}"}' \ | sed 's/\.\(.*=\)/_\1/' echo -e ')\n' echo 'var Bands = []*genome.Band{' < $file zcat \ | grep -v '^#' \ | sed -e 's/\t/ /g' -e 's/chr//' | tr -s ' ' \ | awk '{print $1,$0}' \ | sed -e 's/^[XZ]/1.1e10/' -e 's/^[YW]/1.2e10/' -e 's/^M/1.3e10/' \ | sed -e 's/^\([1-9][0-9]*\)[lL]/\1/' -e 's/^\([1-9][0-9]*\)[rR]/\1.5/' \ | sort -k1,1g -k3n,3 \ | awk -v label=$label '{print "\t&"label$2"_"$5","}' \ | sed 's/\./_/' echo '}' # init cat << 'END' //line parse.karyotype:82 func init() { for _, b := range Bands { b.Chr.(*genome.Chromosome).Features = append(b.Chr.(*genome.Chromosome).Features, b) } for _, c := range Chromosomes { bc := make([]feat.Feature, len(c.Features)) copy(bc, c.Features) c.Features = bc } } END ) | gofmt biogo-1.0.4/feat/moltype_test.go0000644000175000017500000000072314136731467016155 0ustar nileshnilesh// Copyright ©2011-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package feat import ( "gopkg.in/check.v1" ) // Tests func (s *S) TestMoltype(c *check.C) { for i, s := range moltypeToString { c.Check(Moltype(i).String(), check.Equals, s) c.Check(ParseMoltype(s), check.Equals, Moltype(i)) c.Check(ParseMoltype(s+"salt"), check.Equals, Undefined) } } biogo-1.0.4/codemeta.json0000644000175000017500000000274514136731467014641 0ustar nileshnilesh{ "@context": "https://raw.githubusercontent.com/mbjones/codemeta/master/codemeta.jsonld", "@type": "Code", "author": [ { "@id": "http://orcid.org/0000-0001-8295-2301", "@type": "Person", "email": "dan.kortschak@adelaide.edu.au", "name": "R Daniel Kortschak", "affiliation": "School of Biological Sciences, The University of Adelaide" }, { "@id": "http://orcid.org/0000-0001-8327-7643", "@type": "Person", "email": "josharian@gmail.com", "name": "Josh Bleecher Snyder", "affiliation": "" }, { "@id": "http://orcid.org/0000-0002-3158-1763", "@type": "Person", "email": "emarag@mail.med.upenn.edu", "name": "Manolis Maragkakis", "affiliation": "Department of Pathology and Laboratory Medicine, Perelman School of Medicine, University of Pennsylvania" }, { "@id": "http://orcid.org/0000-0003-2404-5636", "@type": "Person", "email": "david.adelson@adelaide.edu.au", "name": "David L Adelson", "affiliation": "School of Biological Sciences, The University of Adelaide" } ], "identifier": "", "codeRepository": "https://github.com/biogo/biogo", "datePublished": "2017-01-05", "dateModified": "2017-01-05", "dateCreated": "2017-01-05", "description": "a simple high-performance bioinformatics toolkit for the Go language", "keywords": "bioinformatics, toolkit, golang", "license": "BSD-3 like", "title": "bíogo", "version": "v1.0.1" } biogo-1.0.4/morass/0000755000175000017500000000000014136731467013461 5ustar nileshnileshbiogo-1.0.4/morass/morass.go0000644000175000017500000001751414136731467015324 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package morass implements file system-backed sorting. // // Use morass when you don't want your data to be a quagmire. // // Sort data larger than can fit in memory. // // morass məˈras/ // 1. An area of muddy or boggy ground. // 2. A complicated or confused situation. package morass import ( "container/heap" "encoding/gob" "errors" "fmt" "io" "io/ioutil" "os" "reflect" "runtime" "sort" "sync" ) var ( registerLock = &sync.Mutex{} registered = make(map[reflect.Type]struct{}) nextID = 0 ) func register(e interface{}, t reflect.Type) { registerLock.Lock() defer registerLock.Unlock() defer func() { recover() // The only panic that we can get is from trying to register a base type. registered[t] = struct{}{} // Remember for next time. }() if _, exists := registered[t]; !exists { registered[t] = struct{}{} gob.RegisterName(fmt.Sprintf("ℳ%d", nextID), e) nextID++ } } // LessInterface wraps the Less method. type LessInterface interface { // Is the receiver less than the parameterised interface Less(i interface{}) bool } type sorter []LessInterface func (s sorter) Len() int { return len(s) } func (s sorter) Less(i, j int) bool { return s[i].Less(s[j]) } func (s sorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] } type file struct { head LessInterface file *os.File encoder *gob.Encoder decoder *gob.Decoder } type files []*file func (f files) Len() int { return len(f) } func (f files) Less(i, j int) bool { return f[i].head.Less(f[j].head) } func (f files) Swap(i, j int) { f[i], f[j] = f[j], f[i] } func (f *files) Pop() (i interface{}) { i = (*f)[len(*f)-1] *f = (*f)[:len(*f)-1] return } func (f *files) Push(x interface{}) { *f = append(*f, x.(*file)) } // Morass implements sorting of very large data sets. type Morass struct { typ reflect.Type pos, len int64 // dir and prefix specify the location // of temporary files. dir string prefix string // AutoClear specifies that the Morass // should call Clear when emptied by // a call to Pull. AutoClear bool // AutoClean specifies that the Morass // should call delete temporary sort // files when it has been emptied by // a call to Pull. AutoClean bool // fast indicates sorting was performed // entirely in memory. fast bool chunk sorter chunkSize int pool chan sorter writable chan sorter filesLock sync.Mutex files files errLock sync.Mutex _err error } // New creates a new Morass. prefix and dir are passed to ioutil.TempDir. chunkSize specifies // the amount of sorting to be done in memory, concurrent specifies that temporary file // writing occurs concurrently with sorting. // An error is returned if no temporary directory can be created. // Note that the type is registered with the underlying gob encoder using the name ℳn, where // n is a sequentially assigned integer string, when the type registered. This is done to avoid using // too much space and will cause problems when using gob itself on this type. If you intend // use gob itself with this the type, preregister with gob and morass will use the existing // registration. func New(e interface{}, prefix, dir string, chunkSize int, concurrent bool) (*Morass, error) { d, err := ioutil.TempDir(dir, prefix) if err != nil { return nil, err } m := &Morass{ chunkSize: chunkSize, prefix: prefix, dir: d, pool: make(chan sorter, 2), writable: make(chan sorter, 1), files: files{}, } m.typ = reflect.TypeOf(e) register(e, m.typ) m.chunk = make(sorter, 0, chunkSize) if concurrent { m.pool <- nil } runtime.SetFinalizer(m, func(x *Morass) { if x.AutoClean { x.CleanUp() } }) return m, nil } // Push a value on to the Morass. Returns any error that occurs. func (m *Morass) Push(e LessInterface) error { if typ := reflect.TypeOf(e); typ != m.typ { return fmt.Errorf("morass: type mismatch: %s != %s", typ, m.typ) } if err := m.err(); err != nil { return err } if m.chunk == nil { return errors.New("morass: push on finalised morass") } if len(m.chunk) == m.chunkSize { m.writable <- m.chunk go m.write() m.chunk = <-m.pool if err := m.err(); err != nil { return err } if cap(m.chunk) == 0 { m.chunk = make(sorter, 0, m.chunkSize) } } m.chunk = append(m.chunk, e) m.pos++ m.len++ return nil } func (m *Morass) write() { writing := <-m.writable defer func() { m.pool <- writing[:0] }() sort.Sort(writing) tf, err := ioutil.TempFile(m.dir, m.prefix) if err != nil { m.setErr(err) return } enc := gob.NewEncoder(tf) dec := gob.NewDecoder(tf) f := &file{head: nil, file: tf, encoder: enc, decoder: dec} m.filesLock.Lock() m.files = append(m.files, f) m.filesLock.Unlock() for _, e := range writing { if err := enc.Encode(&e); err != nil { m.setErr(err) return } } m.setErr(tf.Sync()) } func (m *Morass) setErr(err error) { m.errLock.Lock() m._err = err m.errLock.Unlock() } func (m *Morass) err() error { m.errLock.Lock() defer m.errLock.Unlock() return m._err } // Pos returns the current position of the cursor in the Morass. func (m *Morass) Pos() int64 { return m.pos } // Len returns the current length of the Morass. func (m *Morass) Len() int64 { return m.len } // Finalise is called to indicate that the last element has been pushed on to the Morass // and write out final data. func (m *Morass) Finalise() error { if err := m.err(); err != nil { return err } if m.chunk != nil { if m.pos < int64(cap(m.chunk)) { m.fast = true sort.Sort(m.chunk) } else { if len(m.chunk) > 0 { m.writable <- m.chunk m.chunk = nil m.write() if err := m.err(); err != nil { return err } } } m.pos = 0 } else { return nil } if !m.fast { for _, f := range m.files { _, err := f.file.Seek(0, 0) if err != nil { return err } err = f.decoder.Decode(&f.head) if err != nil && err != io.EOF { return err } } heap.Init(&m.files) } return nil } // Clear resets the Morass to an empty state. func (m *Morass) Clear() error { var err error for _, f := range m.files { err = f.file.Close() if err != nil { return err } err = os.Remove(f.file.Name()) if err != nil { return err } } m._err = nil m.files = m.files[:0] m.pos = 0 m.len = 0 select { case m.chunk = <-m.pool: if m.chunk == nil { m.chunk = make(sorter, 0, m.chunkSize) } default: } return nil } // CleanUp deletes the file system components of the Morass. After this call // the Morass is not usable. func (m *Morass) CleanUp() error { return os.RemoveAll(m.dir) } // Pull sets the settable value e to the lowest value in the Morass. // If io.EOF is returned the Morass is empty. Any other error results // in no value being set on e. func (m *Morass) Pull(e LessInterface) error { var err error v := reflect.ValueOf(e) if !reflect.Indirect(v).CanSet() { return errors.New("morass: cannot set e") } if m.fast { switch { case m.chunk != nil && m.pos < int64(len(m.chunk)): e = m.chunk[m.pos].(LessInterface) m.pos++ case m.chunk != nil: m.pool <- m.chunk[:0] m.chunk = nil fallthrough default: if m.AutoClear { m.Clear() } err = io.EOF } } else { if m.files.Len() > 0 { low := heap.Pop(&m.files).(*file) e = low.head m.pos++ switch err = low.decoder.Decode(&low.head); err { case nil: heap.Push(&m.files, low) case io.EOF: err = nil fallthrough default: low.file.Close() if m.AutoClear { os.Remove(low.file.Name()) } } } else { if m.AutoClear { m.Clear() } if m.AutoClean { os.RemoveAll(m.dir) } err = io.EOF } } if err != nil { return err } reflect.Indirect(v).Set(reflect.ValueOf(e)) return nil } biogo-1.0.4/morass/morass_test.go0000644000175000017500000002442414136731467016361 0ustar nileshnilesh// Copyright ©2011-2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package morass import ( "io" "math/rand" "runtime" "testing" "unsafe" "gopkg.in/check.v1" ) const minInt = -int(^uint(0)>>1) - 1 // Tests func Test(t *testing.T) { check.TestingT(t) } type S struct{} const ( chunk = 100 testLen = 10000 ) var _ = check.Suite(&S{}) type intLesser int func (i intLesser) Less(j interface{}) bool { return i < j.(intLesser) } type structLesser struct { A int B int } func (i structLesser) Less(j interface{}) bool { return i.A < j.(structLesser).A } func (s *S) TestMorass(c *check.C) { for _, concurrent := range []bool{false, true} { if m, err := New(intLesser(0), "", "", chunk, concurrent); err != nil { m.CleanUp() c.Fatalf("New Morass failed: %v", err) } else { var i int for i = 0; i < testLen; i++ { c.Check(int64(i), check.Equals, m.Pos()) if err = m.Push(intLesser(rand.Int())); err != nil { m.CleanUp() c.Fatalf("Push %d failed: %v", i, err) } } if err = m.Finalise(); err != nil { m.CleanUp() c.Fatalf("Finalise failed: %v", err) } c.Logf("Pushed %d values", i) c.Check(m.Len(), check.Equals, int64(testLen)) L: for i = 0; i <= testLen; i++ { var v intLesser lv := intLesser(minInt) c.Check(int64(i), check.Equals, m.Pos()) switch err = m.Pull(&v); err { case nil: c.Check(v.Less(lv), check.Equals, false) case io.EOF: c.Logf("Pulled %d values", i) c.Check(i, check.Equals, testLen) break L default: m.CleanUp() c.Fatalf("Pull failed: %v", err) } } if err = m.CleanUp(); err != nil { c.Fatalf("CleanUp failed: %v", err) } } } } func (s *S) TestFast1(c *check.C) { if m, err := New(intLesser(0), "", "", chunk, false); err != nil { m.CleanUp() c.Fatalf("New Morass failed: %v", err) } else { for r := 1; r <= 2; r++ { var i int for i = 0; i < chunk/2; i++ { c.Check(int64(i), check.Equals, m.Pos()) if err = m.Push(intLesser(rand.Int())); err != nil { m.CleanUp() c.Fatalf("Push %d failed on use %d : %v", i, r, err) } } if err = m.Finalise(); err != nil { m.CleanUp() c.Fatalf("Finalise failed on use %d: %v", r, err) } c.Logf("Pushed %d values", i) c.Check(m.Len(), check.Equals, int64(chunk/2)) L: for i = 0; i <= testLen; i++ { var v intLesser lv := intLesser(minInt) c.Check(int64(i), check.Equals, m.Pos()) switch err = m.Pull(&v); err { case nil: c.Check(v.Less(lv), check.Equals, false) case io.EOF: c.Logf("Pulled %d values", i) c.Check(i, check.Equals, chunk/2) break L default: m.CleanUp() c.Fatalf("Pull failed on use %d: %v", r, err) } } if err = m.Clear(); err != nil { m.CleanUp() c.Fatalf("Clear failed on use %d: %v", r, err) } } if err = m.CleanUp(); err != nil { c.Fatalf("CleanUp failed: %v", err) } } } func (s *S) TestFast2(c *check.C) { if m, err := New(structLesser{}, "", "", chunk, false); err != nil { m.CleanUp() c.Fatalf("New Morass failed: %v", err) } else { for r := 1; r <= 2; r++ { var i int for i = 0; i < chunk/2; i++ { c.Check(int64(i), check.Equals, m.Pos()) if err = m.Push(structLesser{rand.Int(), r}); err != nil { m.CleanUp() c.Fatalf("Push %d failed on use %d : %v", i, r, err) } } if err = m.Finalise(); err != nil { m.CleanUp() c.Fatalf("Finalise failed on use %d: %v", r, err) } c.Logf("Pushed %d values", i) c.Check(m.Len(), check.Equals, int64(chunk/2)) L: for i = 0; i <= testLen; i++ { var v structLesser lv := structLesser{minInt, 0} c.Check(int64(i), check.Equals, m.Pos()) switch err = m.Pull(&v); err { case nil: c.Check(v.Less(lv), check.Equals, false) c.Check(v.B, check.Equals, r) case io.EOF: c.Logf("Pulled %d values", i) c.Check(i, check.Equals, chunk/2) break L default: m.CleanUp() c.Fatalf("Pull failed on use %d: %v", r, err) } } if err = m.Clear(); err != nil { m.CleanUp() c.Fatalf("Clear failed on use %d: %v", r, err) } } if err = m.CleanUp(); err != nil { c.Fatalf("CleanUp failed: %v", err) } } } func (s *S) TestReuse1(c *check.C) { if m, err := New(intLesser(0), "", "", chunk, false); err != nil { m.CleanUp() c.Fatalf("New Morass failed: %v", err) } else { for r := 1; r <= 2; r++ { var i int for i = 0; i < testLen; i++ { c.Check(int64(i), check.Equals, m.Pos()) if err = m.Push(intLesser(rand.Int())); err != nil { m.CleanUp() c.Fatalf("Push %d failed on use %d : %v", i, r, err) } } if err = m.Finalise(); err != nil { m.CleanUp() c.Fatalf("Finalise failed on use %d: %v", r, err) } c.Logf("Pushed %d values", i) c.Check(m.Len(), check.Equals, int64(testLen)) L: for i = 0; i <= testLen; i++ { var v intLesser lv := intLesser(minInt) c.Check(int64(i), check.Equals, m.Pos()) switch err = m.Pull(&v); err { case nil: c.Check(v.Less(lv), check.Equals, false) case io.EOF: c.Logf("Pulled %d values", i) c.Check(i, check.Equals, testLen) break L default: m.CleanUp() c.Fatalf("Pull failed on use %d: %v", r, err) } } if err = m.Clear(); err != nil { m.CleanUp() c.Fatalf("Clear failed on use %d: %v", r, err) } } if err = m.CleanUp(); err != nil { c.Fatalf("CleanUp failed: %v", err) } } } func (s *S) TestReuse2(c *check.C) { if m, err := New(structLesser{}, "", "", chunk, false); err != nil { m.CleanUp() c.Fatalf("New Morass failed: %v", err) } else { for r := 1; r <= 2; r++ { var i int for i = 0; i < testLen; i++ { c.Check(int64(i), check.Equals, m.Pos()) if err = m.Push(structLesser{rand.Int(), r}); err != nil { m.CleanUp() c.Fatalf("Push %d failed on use %d : %v", i, r, err) } } if err = m.Finalise(); err != nil { m.CleanUp() c.Fatalf("Finalise failed on use %d: %v", r, err) } c.Logf("Pushed %d values", i) c.Check(m.Len(), check.Equals, int64(testLen)) L: for i = 0; i <= testLen; i++ { var v structLesser lv := structLesser{minInt, 0} c.Check(int64(i), check.Equals, m.Pos()) switch err = m.Pull(&v); err { case nil: c.Check(v.Less(lv), check.Equals, false) c.Check(v.B, check.Equals, r) case io.EOF: c.Logf("Pulled %d values", i) c.Check(i, check.Equals, testLen) break L default: m.CleanUp() c.Fatalf("Pull failed on use %d: %v", r, err) } } if err = m.Clear(); err != nil { m.CleanUp() c.Fatalf("Clear failed on use %d: %v", r, err) } } if err = m.CleanUp(); err != nil { c.Fatalf("CleanUp failed: %v", err) } } } func (s *S) TestAutoClear(c *check.C) { if m, err := New(intLesser(0), "", "", chunk, false); err != nil { m.CleanUp() c.Fatalf("New Morass failed: %v", err) } else { m.AutoClear = true for r := 1; r <= 2; r++ { var i int for i = 0; i < testLen; i++ { c.Check(int64(i), check.Equals, m.Pos()) if err = m.Push(intLesser(rand.Int())); err != nil { c.Fatalf("Push %d failed on use %d : %v", i, r, err) } } if err = m.Finalise(); err != nil { m.CleanUp() c.Fatalf("Finalise failed on use %d: %v", r, err) } c.Logf("Pushed %d values", i) c.Check(m.Len(), check.Equals, int64(testLen)) L: for i = 0; i <= testLen; i++ { var v intLesser lv := intLesser(minInt) c.Check(int64(i), check.Equals, m.Pos()) switch err = m.Pull(&v); err { case nil: c.Check(v.Less(lv), check.Equals, false) case io.EOF: c.Logf("Pulled %d values", i) c.Check(i, check.Equals, testLen) break L default: m.CleanUp() c.Fatalf("Pull failed on repeat %d: %v", r, err) } } } if err = m.CleanUp(); err != nil { c.Fatalf("CleanUp failed: %v", err) } } } func (s *S) TestAutoClearSafety(c *check.C) { if m, err := New(intLesser(0), "", "", chunk, false); err != nil { m.CleanUp() c.Fatalf("New Morass failed: %v", err) } else { m.AutoClear = true for r := 1; r <= 2; r++ { var i int for i = 0; i < testLen; i++ { c.Check(int64(i), check.Equals, m.Pos()) if err = m.Push(intLesser(rand.Int())); err != nil { c.Fatalf("Push %d failed on use %d : %v", i, r, err) } } if err = m.Finalise(); err != nil { m.CleanUp() c.Fatalf("Finalise failed on use %d: %v", r, err) } c.Logf("Pushed %d values", i) c.Check(m.Len(), check.Equals, int64(testLen)) L: for i = 0; i <= testLen; i++ { var v intLesser lv := intLesser(minInt) c.Check(int64(i), check.Equals, m.Pos()) switch err = m.Pull(&v); err { case nil: c.Check(v.Less(lv), check.Equals, false) case io.EOF: c.Logf("Pulled %d values", i) c.Check(i, check.Equals, testLen) break L default: m.CleanUp() c.Fatalf("Pull failed on repeat %d: %v", r, err) } } if err = m.Clear(); err != nil { m.CleanUp() c.Fatalf("Clear failed on repeat %d: %v", r, err) } } if err = m.CleanUp(); err != nil { c.Fatalf("CleanUp failed: %v", err) } } } func BenchmarkFast(b *testing.B) { benchmark(b, chunk, chunk/2, true) } func BenchmarkConcurrent(b *testing.B) { benchmark(b, chunk, testLen, true) } func BenchmarkSequential(b *testing.B) { benchmark(b, chunk, testLen, false) } func benchmark(b *testing.B, chunk, count int, concurrent bool) { runtime.GC() // TODO: is this really necessary? If so, two calls are probably necessary. b.ResetTimer() b.SetBytes(int64(unsafe.Sizeof(intLesser(0))) * int64(count)) if m, err := New(intLesser(0), "", "", chunk, concurrent); err == nil { m.AutoClear = true for i := 0; i < b.N; i++ { for j := 0; j < count; j++ { if err = m.Push(intLesser(rand.Int())); err != nil { m.CleanUp() b.Fatalf("Push %d failed: %v", j, err) } } if err = m.Finalise(); err != nil { m.CleanUp() b.Fatalf("Finalise failed: %v", err) } L: for j := 0; j <= count; j++ { var v intLesser switch err = m.Pull(&v); err { case nil: case io.EOF: m.Clear() break L default: m.CleanUp() b.Fatalf("Pull %d failed: %v", j, err) } } } if err = m.CleanUp(); err != nil { b.Fatalf("Finalise failed: %v", err) } } }