From e4fe5c78409e26541ff4f28bfbb19a13ae1ef70c Mon Sep 17 00:00:00 2001 From: Edward S Rice Date: Wed, 21 Sep 2022 06:41:15 -0500 Subject: [PATCH 1/4] Fix a hellish integer size bug --- c/kmers.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/c/kmers.c b/c/kmers.c index ddaf3bd..6c8c2d5 100644 --- a/c/kmers.c +++ b/c/kmers.c @@ -58,13 +58,13 @@ uint64_t kmer_to_int(char* kmer, unsigned char k) { // no need to waste time doing 'kmer_int |= (0 << (i*2))' break; case 'C': - kmer_int |= (1 << (i*2)); + kmer_int |= (1ULL << (i*2)); break; case 'G': - kmer_int |= (2 << (i*2)); + kmer_int |= (2ULL << (i*2)); break; case 'T': - kmer_int |= (3 << (i*2)); + kmer_int |= (3ULL << (i*2)); } } From 05fd9f40a7d92dbeb4e703bf8b89e23e24219e5a Mon Sep 17 00:00:00 2001 From: Edward S Rice Date: Wed, 21 Sep 2022 06:41:57 -0500 Subject: [PATCH 2/4] Add python wrappers for a couple other c funcs --- src/trio_binning/kmers.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/trio_binning/kmers.py b/src/trio_binning/kmers.py index 25d7c32..f7820ef 100644 --- a/src/trio_binning/kmers.py +++ b/src/trio_binning/kmers.py @@ -72,6 +72,27 @@ class _HashSet(Structure): POINTER(c_int), ] +kmer_to_int_c = lib.kmer_to_int +kmer_to_int_c.argtypes = [c_char_p, c_ubyte] +kmer_to_int_c.restype = c_uint64 + + +def kmer_to_int(kmer: str) -> int: + """Convert a kmer to integer format""" + return kmer_to_int_c(bytes(kmer, "utf-8"), c_ubyte(len(kmer))) + + +reverse_complement_c = lib.reverse_complement +reverse_complement_c.argtypes = [c_char_p, c_char_p, c_ubyte] + + +def reverse_complement(kmer: str) -> str: + """Reverse complement a k-mer""" + out_kmer = bytes("x" * len(kmer), "utf-8") + reverse_complement_c(bytes(kmer, "utf-8"), out_kmer, len(kmer)) + return out_kmer.decode("utf-8") + + # this is ugly as sin, but necessary because mypy is ok with `pointer` # as a subscriptable type while python runtime is not if TYPE_CHECKING: From c3301e3385fa23ca07dd7342adc855116110e856 Mon Sep 17 00:00:00 2001 From: Edward S Rice Date: Wed, 21 Sep 2022 08:01:56 -0500 Subject: [PATCH 3/4] Use uint64 instead of ULL --- c/kmers.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/c/kmers.c b/c/kmers.c index 6c8c2d5..341893e 100644 --- a/c/kmers.c +++ b/c/kmers.c @@ -58,13 +58,13 @@ uint64_t kmer_to_int(char* kmer, unsigned char k) { // no need to waste time doing 'kmer_int |= (0 << (i*2))' break; case 'C': - kmer_int |= (1ULL << (i*2)); + kmer_int |= (UINT64_C(1) << (i*2)); break; case 'G': - kmer_int |= (2ULL << (i*2)); + kmer_int |= (UINT64_C(2) << (i*2)); break; case 'T': - kmer_int |= (3ULL << (i*2)); + kmer_int |= (UINT64_C(3) << (i*2)); } } @@ -290,7 +290,7 @@ void count_kmers_in_read( kmer[j] = read[i+j]; if (kmer_in_hash_set(kmer, kmer_revcomp, haplotype_A)) (*count_A)++; - if (kmer_in_hash_set(kmer, kmer_revcomp, haplotype_B)) + else if (kmer_in_hash_set(kmer, kmer_revcomp, haplotype_B)) (*count_B)++; } From 35a38054c04fdec0641c8676a577fd677b7943fd Mon Sep 17 00:00:00 2001 From: Edward S Rice Date: Wed, 21 Sep 2022 09:40:43 -0500 Subject: [PATCH 4/4] Improve tests --- tests/data/hapA.fastq | 9 ++++--- tests/data/hapA.txt | 10 ++++---- tests/data/hapB.txt | 10 +++----- tests/data/test.ccs.fastq.gz | Bin 0 -> 44819 bytes tests/data/unclassified.fastq | 12 ---------- tests/test_classify_by_kmers.py | 3 +-- tests/test_kmers.py | 40 ++++++++++++++++++++++++++++---- 7 files changed, 50 insertions(+), 34 deletions(-) create mode 100644 tests/data/test.ccs.fastq.gz delete mode 100644 tests/data/unclassified.fastq diff --git a/tests/data/hapA.fastq b/tests/data/hapA.fastq index 6eb050f..e42adc5 100644 --- a/tests/data/hapA.fastq +++ b/tests/data/hapA.fastq @@ -1,4 +1,7 @@ -@readAwesome -GAGGAGATTTAGAGTGTGAGTCGAGCATAGAGATATATA +@m64234e_220609_193909/3/ccs +GTGAGATAGAGAGCACTAATTTCTGACATCCTGTGTGGGTTGTCAGAGCCAGCGCTGCCATCCAAGAGTATCTATCACCTGACGACAGAAGCTTGCCACTGCTATTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGCGTGTGTGTGTGTGTGTATGTGCATGCAGGAAGGCATGTGGACACTGTCAGCAACTGTGATCATAATGGGTGCACTGATTTACAGAGTCTAATTCACTTTGTGTTGTTCACTTGCTTGGTGTAGTGAGTGAGCATTTTTAATTTGCCAACTGCTGCATGTGGTTCCTGAGATCTGGAAGAGGACTTTACCTTGTAATGGCTGATTTAACACACTGATGTTTTCATACGCATACAACACATCCTGCTTTGCAAAGTACGATGTAGCAGTGACGTAGCAGTGAGGAAAGAAAGGCTACATGGATTTTATGTTTTACAAAAAAAAAAAAAAGAAAAGAAAGTTCTTGCATTTTGCCTCCTAACCCCTAAGTGAAATCCACTGAAAGCAGTTACCTTCAGACGTCACCTAATGGGTGAGCAGTAAACTCTACTCTTACAAATCATTCATTAAATTATGAATGTGGCTGATTTGTGAAGGCATTAGAGGTTTATTAGTGAACAAACTTCATAGTAGAGACCAAGGAATACGTTGTACACGTCAGGGAGAAATTTGTGAAGGAGGTTAAATTTACTACAGTATCCTAAGCTTTTAACAAAGCTCAGTTCAATCCACAATCTACAGCTGCATTTTATAAAAACAAGGATAGTTACTAAAACTGACAGGCAAGAAGACCATTGCTACAGGATCTCCACATGACATTATACCTGTACACATCAGAGAAGCAGCAAAAAGCTCAATGGTAACTCTGGAGGAGCTGCAGAGATTCACAGCTTTGTTGACAGCATGTCCAACTACTACATTCTATAACTGGTCTTTATAGAAGAGTGGAGTTGAGAAAACCACTTTTGAAAGAATGCTACAGGAATTTTTTGCCATAAGATGACAAAAAAAATATATAGAAATGCTTATTTTTTATTTTATTGTATTTTTTTTTTACGTCACAGAAATGCAGTTTGTGACAAAATGTGAAACTATTCAAGGGATTTGAATACTAGAGTCGCAACACATAAACAAACACATATACATAGGGAAGCTCCTTTCCTGTTGGTATATGTTTATGCTCTTTCTATGAAGTCATAATTTGTAGTCAAAATGTCAATTTATGTGAGATATGTTCTTTTATGTTAATGTATATCTAGACAGATTTTGTTTTGTCTGTTTGTCCATTAGAGGAATCCATAATGAAACGATCCGGAAGTAGAGGAAGGCTTTGAGGAAAATACACATTTAAAAAGCAATACCATCATTAAAATGTTCCTTATGGTGCTGCTCAAATTCAGTGTAAAGCACTGAATTCAAAAGAACTGAAACAAGCATATCTGTCTCTTTTTTTTTTTTCAAATTCATTCTGATAATAAAAATCCTCATTATATAATCAATGCCCATCAAACTTAACCATGAAATATTTCACTGTACATTTTAGGAGGACCTAAATACCGAAGGCAGGATTTCTGCCCTGGAGAACAACTTGAAGATCATGGTGTATGAATATGTCTGCCGGTCACTTTTCAAGGTAAAATACATTCATGTGAGCGAATGGAATTTCTGAGGATCTATGAAAATATCTGTAATCAGTTTTATTTGTTCAGGTGATGAATGGGTAGTGACAAAGTAATGCTTCCTGCTGGCTGCAATTTGTAAACATCGTGTTCTTTGGCAAATTTATTTCAAATCAAGGATAAGCAGTTGATCTAAAATATAAAAACAGTCCACAAATAATATTTTCATATATCCACAAAATCTACTCCCTTTGTCTCTATTAGATACAGAGCTATCTTTTCTTCTTGAGACTAGATTTATGCACTGTTTTATATTCTAAACAGAAATGTGGACTGATACAAAGTGCTTTGATTAGAAATATGACGTCTTACTCTTACCTTGACAAACACCCTTATATTTTTTTAGCAGTTTAATTAGATGTGCATTAATCTCTAACAGTGTTCTTACGGATCCTGTAGGTCAAAGACGCCATCGCATAACCTTAGATATTAACTCCCTTCTGCAGTGTAACCTTTGAAGCCAACACACTAACAATGTGTCACAAGGGTAACAACAGGGTTATTGATTAGGCAGTGGATGTTAATTCTAATGTTTGTGCTCTGAGTGTTGCTATGTTGATCTATCACTTGTGGGATTGTGGGACTTTCAAGCACTGCAGGTGGAGGATAATATATGTATATTTAGTTAACATCACACATCTATGATCAGCAGCAGCTCAGCTACTACCTGATAGAAAACAACTGAATCTTTTCCTCTTCACTCAGGATCAGCATGTGTGCAGCTCACATGATGAAGTGTGGAAAAGATATATAGCAGGTTCACATTAATAGATATAGGTAGGGTGGATAGCTTGCACTGTGGGAAACTAATGATAAAGCTTGAAAAACTAACCCAAACATCTATATGATCAATAGACTAGAAATTGTTACTTCGTACTGTTGAATTAAAATTTTTTTGTATAAAAGCAGATTAATTCAATTAAATTACTAATTTTAACATGGCAGTTTGGAAATATTTCTGGTGCAAAAATACTGTGCACCACCCCTTGTTCTTATTAAGATAAAACTGTTTTAAAACTAAAGTTGTACTTATGTTGTATATAGTAACCTCCTAAAAACTGCTACTAAATTTAGCAGGCAGTATATTCTATTTATAAAAATCAAAATAACTACAAATAAAGGTAACATTTTTTACAAACACAATAGTCAACATATTTACCTGTAGTAGGAATGATCTTTGCTGTTCTGTTTTGAATAACAACTTTTGGGATATCCTATATCTTTTTCATTAAATATTTGGAAAATTTTGTTTTAAAACCATGATACTGTTATAATTTTACTCTGGTAAAACCATCACAATCTCACACTGAGTCATGCCTATTGTTGATTATTGTTGATGGTACACTTCTCACTGAAGAGAACATTACCTGATGGCGCAACAGGAACTGATTAAGCCAATCTAATGAGAATGTTACCTGGAAATGCTGTAAACGGTTTCCACATCTCTGCTCAGTAAAACATGACACATCGTGAAACCGATGTGTGTCCCAAATGCTTGAAATAAAGTGCTAAGCGGAGAAACATTTAGGCTGCGTTCACACTGCAGCCTAAAGTCATCCAATTCCGATATTTTTCGTCAACTCTGATTTTTTTTTTTTTTTGCCGTGGTCGTTCACATTTCCATATAAATGCGACCTGCTTGTGTTCAGCAGTGTGAACGGGAAAACGACCTGAAAGTGTCCCGCATGCGCAGTTGAGGGAGCAATAACAGCGTTCTTGGTGTTCTGCCAACCGCCATAAAAAGAAGAAGTGGTGCTCAGTGTTTGCAGAAGTAAACATGGAGGCTAACGGAGTAGCTTATTTGAAGTTGTTGTCCGACCGGAGCAGCATATTAACAACTTCATCCTCATTATAGTCCGTCATGGTTGTTGTTGTTCTTCCCGCTTGCGCATATCAGGACACAGAATAGTGAGATTTGTCGAGTATCAGTGACATTCAGGTCAGATGGAAGCGACCTGGACGTTAGGTCGCATTTGAATCAGATTCGTATCGGATATGGTCGCATTCGAAAAGAATTTGTGTTGTTCAGACTGTTATGAAAAGTTCAGATAAAGGTCGCACTACGTCAAAAAAAAAAATTGGGTTGAGTCACTTCAGACTGCAGTGTGAATGCAGACCTACTAATTTCAAAAAGGGTATGTTATTTGTCCAAAGATTACCAAGAAATTTCTGATTTCTGCTTCTTGCCAAATCAGAGCTGAATTTATGAATCATAACATGCAACAAAGTTCTTGCGATATAAGGAAAGCCTAAGTCTATAGGTTGTTTCACAGCTAAACATAGAGCTGTAACTGTTGATATTAGAAAGCCACATCTGCACCTGTTGAACTATTTATTGTGTGGAGGTCCGTTACTTCATCCTTCTGTATTTGATTAAATCTACAGACTGGATACAAAGTTACACAGACCGGAATTGCAGAAGTAGAATTCCTATGTAACGTTAGCACTCAAACATTTAAAGCAAAAGTTTCCCAATTTGTCTCCAAAGGCTATTTGTTTTTCTCAGATTTACTAGGCTTACACTAACCATTAGCAAACTCTTCAATGGCAGCATTTATGTATGCAAATGGATATTAAGCTCCTATATGTACTTGGTTTACACATAAGGGAGATCTGACTGAAGCTAAGTGATTAGATCAACAAGGTCTCTTAACTCCGCCACTTTACAAAGCACAGCATCGGCACATATTACTCCTGTATTGTAATTCTAATTCAGCTGTCCTTGCGAGCCACTTGTTAAGTGCATAAAAATTAGATTTACATAAATTTGCATGTCAACCACTGAGGCATAATGCCTGTATTTCATTGTGGGTGTAAATAGGGGCACAGTTTCCATGTTTGTTGTGTTGTTACACAGGAAAGAAAATTGATACTGTCACTCCAGTGACCAGCGTTCATTTATAAAGTCCTATCTTCACTCTCTTTGCAACATGAACTCAAAATATAATTCTCAGATATTTAGGAAAACACATACTGGATTAACAGGGTTTGTGTTAACAATTAAAATCCCTTGGCAACTGTCTCTCCGTTTCTCTCTGTGGGAGCAGGATAAGCATCTAGATTAATGGCTGTATCTGTTATCTTTATTCTAAATCACTATCAGATGTGAAAGACAGTGAGGTAGGTACACCAGAGGACTGTTAGTGTTTAAAGATGATTCAGCAGCCCATGCAGTACTTTCAGTCTTCGGAGAGCTTTTTCCTTTGAGCTTTTACAAATTCGCCAGATTGTGCTCTGCACCAACAACATCCTCTTTTTCAGTCAACATACCGTTTGATCTGTTTTCTATCCATTATTAACTATCCATTATTTTTGATATACTGAAGACAGTTAAACTGAATGTATATAATTGACTTTATGTCTCATCTCCCTCTTGTTGTCTCAGGCTGACCAACTGATGTTTGCAATGCATTTTGTGAAAGGGATGTACTCTGAACTCTTCCAGGAGAATGTGAGTAATTTTTTTTTATTTTTAGGTTGTCTGAAGCCAGTGACAGTTTGATTGCATAAATTCTAGTTTTGCCCAGATGCAACTTTTGACGGAGCTGTTTGTTGCAGGAATGGGAAGTTTTAATCGGATCCATTGTTGGAGAAATGTTTAAAAAAGAGGTAGGGATGCTTATTTATTCATTTGCACCATAAAACAAATATATCTGTCTCTAACGGGGTTTTTTTCGTCAGGAATTCCCTTCTTGGATTGATCAGGAGAGGCATGGAGCAGTGGCCATTTTGAAGGTATGTGCACTAAAATATTATTTAACAGGTTACTTTATTTAAAAGGTGATCAAACATTGAAACAGAACACTAGATATTTAATTCAACTCGAGACATCGGTAGTGTAATATGGGATCAATTAACATTTGATGGCAAGTTTATCAGTAAACAAATCTTTCCCCATCTGAAGATTATATTTGCATCTCTAATGTAATATCTTTCATCCTTGTCAATTTTAACCACCTCTTGCTTTGCAGGCTACTTTCCCAGCTCTGTACCAGACTCTGTGTTTGAGTGACTCAGACCTTTGGGTGTCCTTCTTGCAAAGCTCACAGTGTGAACAGGAAATCCCATCTTCCATCACCAGAAAGATTAGTCTCTTCCAGCAGGTCAGCTTCCATTCAGCTTTTAGCTGTGAAGTAATGAAACTAAATCAGATTTTCCCAGCTGTTTGATTAACGCTGGCTTTCTGTTTTGGCCAGCGAAATCCTTCTAATTTCTGTCACGACAGCAAGCTGTCAATCTCTTTTTATTTCTGATAAACTAATAATTTTAACAAATATTTGTTAAGTAAATAAATCATAGAAAAAAATAAGGGAGTGTTAAATTTTCAAAATGATTTAAAAAATATTAACTATTTCTTCTGACTAGAATATCATCAAATATGTCAATTTATTTCTGTAATTCAATTAAAAAACTCAGATTCATGAGTTATCCACTTGCAGGTGTTTTTTACTTAAGTTTGGTTCATTGTAGCTTAGTGCTAATAAAATTAAAAAATCTGTTTCTCAGACATGTCATGTGTAAGAAACATTTTGTGTCATTTATGTTATAAAGGACCCTTTTTAACAATATGTTATGCTACTGATCGCTTAAAGGTTTTGAGAGGCACGTTTTGAGGTTTTATTTGATCTGAGTTATATTATCCTAAAGTCTGGAAATTGATCACTGTGTGTGGAGTAAAAAATAAAGAAGTGTCTCTTCTTTAACTGAGTTGCTGAAAAAAAAGTATCTTTATATTATATTTGGATATACTGAGATGCACCTGCATATGTTAAAATCCTAGAAATGGCATAAAGTACATTCTTCTTACAATGACTGTACCAGTTGTAAGTTGAAGTCCAACTGTTTAAATGTGTGACTTAACTCCTTCAACATAGGTGAATTCAACCTTTTTTGCAAAGTGTTATTTTCTGATTTTATTTTATTTTATTTTTATTTTGTTACTTGTATGTACTCTACCATATATGCAGCTGCTGTTAATTCAGGCAGTGAGACCTGACCGTCTTCAGAGCGCCATGACAGCCTTTGCCTCTCAAGCTCTTGGTAAGAGTTTTACATTTTTTGTTTAACTTTTAAAGGTTTTGTGGGGGTCCACACTTTATCAGACAAATGCATTTGCACTTCTTAATTATTTCACCTTAATGTTTATTGCGGATGTTGGATGGCATATAATTTGACCAAATAACAGAGCGAGAAAAGAATAACCTTTTTTGAAAGAAATTTAGTTAAATGTTTTCTGTGTTTTCAAAATTCACACATAAATAAAATTGGCTAAAATTGGAGCCATTTGTAGTGGCTTGGCCATCTGGTAAGGATGCCTACTGGATGGCTCCCTGGTGAAGTTTTCTGGCCATTTTGCAATGTTAGGATACCCAGAGGAAGTGGAGAACTATTTTTTCTCGACTGACCTTGGTATTCTCCTGGATGAACTGGCCCAGGGCTTCTCTGATTAGGTTGTTGCCTCTGCAACCCAACCAAGGATTGGGTGAAAGATAATGGATGGATGGGTTTTATCTGTCGGTGCCTATCTCAGTTATTTATCATGACCATCCTCTGGTGGAAGACAAACCTGAGGATGTAGGTTCCTTTTTAACTAAAAGTGTAGCAGCAGGGCTTTACAACATGCGTCATCAGCGTCCTTGAAATATCCACCATTTCCACCCTAATGGGGCAGGGGAGGTAGTGGGAGAGGGTAATTATGTAGGCAAGATTTGAATAGGTGGCTTTGAGAAAAAAATAAAGCTGCCACACAAATCAGCAAAGAGTAGTAATTCACCCAAAATGATGGCAGTATTAAGATATAATAGTTGCTAATAAAAGATATATAAGCTTGCATAATTTGGTAACGAGATAAATGGAGATGACAGTCTGCATTAAGCAAGTTACTGATCAATGTTCTTACCTCCATTATATACAAGACACCCTTTACATGAACCTTACAATTTGTCTCTTTTTTTTTTTTTTGTAGTATTTTATAGCTATACAGCAGTTAAAAATAAAATTAAAGAATACTTACATTTGCTAAGTCTCAGAGAAACGTTTTTCCTACTGCTGCTTTGTGTCATTGTGGTTCTGCATAGTTTGAAGAACATATTCTTCCCGGCACTGACATTTTTTTTTTTTTTTGCCTCACTCTGGAAGAGTCTTGCTGTAACTGTGTCTGTGGGGAGAATATTAACTGGAGACATGTGACCCTCACCTACATTGAATGTATTTAGTAATTCCCTTTCTTGCTCTCACATGGATCAAGGCTCACTGACCAGGATTTCATCTTGTTTCCACATGACTAAAACTAGACCTTATTAGATTTCTACTCCTTCTAACATTTTTGCCAATGAAAAAAATTGCACTAACATATTCATTTTTTTTTTCTCAGAGGTTACACTGTTCTACGTCTGTTATTACTCACTTTCACCTGGTTTTTGTACAATAAAATTGCCATTGCATGAATATTTGCATCATAATTTTAGTCATAGGAAATAAACACTTATATTCTTATAATCTCTGAGGAGTAAAATATATCCCTGTCCGGATGATTCGCAGAATATTCCAAAAGTGATGATGACAAAGTCCTTTTAAGAGTCTGACTAAAATCTTGTCTTCCAAAATTTTAAAATAATTTAGCAATAATTTCATCTTGCTAACATGTAGAGGTTAGAACTTCCAATTTTCAGATTTGAAGAATTTATAAAAATGTTCCCTGATGTTGGAAATCCAGCCGTTAGTAGCCGAAATCTGTTTTGGTATGTAATGAGCACACCCACTGTTTACTGGCACATTTGATTATTTTGATGCTATTAAATTTGTCATCTTATAATTTTTGTAATGCAGAGAAGTACACGACTACTTCTTTATGCTAACAGGGTAACTAAGCATATCAGTTAGCAAGTCTTACTTTTTTGTTTGCTTTTTACTTTTTTTATGTGAAACAGTATACTGGGTTTGACATTATTTCCAGATGCAGATTCTGACATTTGAGGTAATTAGTGCACAACCACCACTAGTTTCTGATCCAGCAAACATTAATGTGCTTGAACAGCTAATATTTTTTACAGTTGGTGCTTATTAGTTAGTGCTTATGATATATTTCCTAATTAACTATCAAACAATTGCAACACAACTTTTTTTGAAGTACCACTGTAAAACCAGCAGTATTTGTTCCCTAGACTTTATGGATTTACATAACATTGAAGCAACAAAGACGGACATTAATGTGTTGCCAGTGTTTTTAAATTATTCTAAATAAAAATAGACTGTTGCATTTAAAAAGTAAGTTTTTTACCTTGAAATAAAACCTTGATCTGCTTGTGTTTTTGACAAATGTGTTGTTTGTTGAATAATATGTCTTGCGTGAATCTCAAACTCAAGAATAATGAGACGATTCCACTAACACGCCTCAGATGATGTTCGTGCAATGCCCACTTAAATTTATCACATTTATTTGGCTTAAAAGCTTGGACTTTCTGCTGCTCTCTGTGTTCACACAATATGAATAAGAATAACTCTCTTGCTTAAGGTTTTTCCTAATGATTTGCCATCCACATTGCAACACTTTTTGCAATGTGGATGGCACATATTGCATTTATCCATTTTTAAAGGTATATTTTGAATTTTATAAAGGTTTACAAATATGTAAGAGTTTGTGTCTATATATCTATCTATCCATCTATATAGATATGTTACGACTGGCTCAAGGTCATAACAAAACAGGAGACCACGCAGTGGTTAAAGTGCATACAAATGGGCTTTTATTAACAAAAACAACAATTGATTGTGGATATCAGTATCAGTGACGTAATGCAAATGCTTGGATGTGTTGTATGATGCATATGGAAGTGTTGAAGTGCAAAAACAAAGACAAACACAAATGTGCAAAAAGGAGGGGAGCTGAGGCCTGGCAACAAAACACCACAAGCGTCAAGCGGCACAGTGGATGCTGAAGGCCACCCAGAAGATGGAGATACCCAGGTTCAAATGCTCTGCGCTCCCAATCAACCTGATCAGCAGACTTTATAATGACAACTTAAACTGTGCACAAATTCTTTATGCTTTAAGTATTTGGGCCAATTGTACCAAAACAAAACAAGATGACATATGTGACCTTAAAAACAAC + -!61161!!!!!!!!!!!!!!!!!***()(!***!))!(% +~q~~~~~~~~~~~~~~~~~~~~~~~~~~~b~~~~~~u~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~w~d~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~w~~~~~g~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~U~~~~~~~~~~~~~~~~~~~~~~~~h~~~~~~~~~~~~~~~~~~t~~~~~~~~~~~~~~~~~~~~~~h~~~~~~~~~~~~~~~~~~~~~~~~~x~~~v~~~~~~~~~~~~~~~a~~~Z~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~d~~~~~~~~~~~l~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~u~~c~~~~~~~~~~U~~~~~~x~~~~~<~~~~~~~~~~~~~~t~~~~~~~~~~~~~~~~^~~~~m~~m~~~~p~~~~~~~~~~~~~x~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~q~~~~~~~~~~~~~~~~~~~~~~~~~c~~~~~~~~~~~~~~~~~~~~~~~~l~~~~~~~~~~~y~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{~~~v~~~~~~~~~~~~~~~p~~~~~~t~~~~~~~~~~~~~~~~~~~~~~z~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~d~~~~~~~w~~~~~a~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~m~~~~|~~~~~~~{~~~~~~~~~~~~~~c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]~~~~~~~7~~~~~~~~~~~~~~~~~~~~~\~~~~~~~~~~~~~~~~~~<~~~~~~~~~~~~~~~~~~~~~~~6~~~~~~V~~~~~~~~~J~~~~~~~~~~~~~~~~~~~~~~~~~~z~~~~~~~y~~~~~~~c~~~~~~~~~~s~~~~~~~~~~~~~~~~~~~~~~~~~~~~v~~~~~~~~~~~~~~~~~~u~~~~~~~j~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~j~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~z~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~m~~~~~~~~~~~~~~~~w~~~~~~~~}~~~~~~~~~~~}~{~~~~~~~~~~~~c~~~~~~~~~~~~~~~~~~i~~~~~~~~~~~~~~~~~~~~~~~v~~~~~~~~~~~~~~~~~~~o~j~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~7~~~~~~~~~~~~~~~~~~~~~~~~~~~~~w~~~~~~~~~~~~~~~~~~~~~~~~f~~~~~~~~~~~~~~~~~~~~~~~|~~s~~~~~~~~o~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~e~~~Q~~~~~~~~~~~~~~~~~~~~~~~~~~~~s~~~~~~~~~~~{~O~~~~~~~~~~o~~g~~~~~~~~~~~~~~~~~~~~~~p~g~?~~~~~~x~~~~~~~~|~~~~~~~~~~~~~~~~]~~~~~~~~~~~~w~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~0~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~v~~w~~~~~~~~~~~~~~~~~d~~~~~~~~~~~~~~~~i~~~~~~O~~~~~~~~~~~~j~~~~~~~a~~~~~~~~~~~~~~r~~~~~~~~~t~~l~~~~~~~~~~~~~~~~~~~~~~~~~~z~~~~~~~~~~~~~~~~~~~~~~~~~~~~~i~~~~~~{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~u~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~z~~~~~~~9~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~z~~~~~~~~~~~~~~~~q~~~~~~~~~~~~~~~~~~~~~~~~~{~~~~~~~~~~~~~~~~~k~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~e~~~~~~~~~~c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~q~~~~~z~J~~~~~~~~~~r~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~q~~~s~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o~~~j~~~~~~~~~~~~~l~~k~~~~~~~~~~~~~~~~~w~~~k~~~~~~~~w~~~~~~~~~~g~~w~~~~~~~~~~~~~~~~~~n~~~~~~~~|~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~w~~~d~~~~~~~~~~i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~a~~~~n~~~~y~~~~~~~~~n~~~~~~~~~~~~~~~~S~~~~~~~~~~~~~~~~~~~Z~~~~~~q~~~t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~k~~~~~~~~~~~~\~~g~~~~~~y~~~~~~~~~~~~~~~~~~{~~~~~~~~~~~~~~~~~k~~~~~~~~~~~~~W~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~s~~~~~~~~~~~~~~~~~~~~n~~~~~~~~~~~~~y~~~~~~~~~~v~~~~~~~f~~~~~~~~{~~~~I~~~~~~~~q~~~~w~~~G~~~~~~~~~~~~~~~~~~~~v~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~p~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~s~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~P~~~~~~~~~~~~~~~~6~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~g~~~~~~~k~~~~~~~~~~~~~~~~~~~~~~~~Z~~h~~~~~~~~~~~~~~~~~i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~p~~~H~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o~~~~~~~~l~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~v~~~~~~~c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~y~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~w~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n~~~~~~~~~~~~~~i~~~~~~~~~~~~~/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~q~~~h~~~~{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~v~~~~~~~~~~~~~~+~~~~~~~~~~~~~a~~~~~~~~~~~z~~~~~~e~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~y~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~y~~s~~~~~~~~~~~~~~o~~~~~~~~~~~~~~~t~~~~~~~~~~~~~~~~~~{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~y~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~h~~r~~~~~~~~~~~~~~~~~~~~~~~~~t~~~~~~~~~~t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~h~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~se~~~~~~~~~~~~~y~~~~{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~l~~~~~~~~~~~~~~~~~~~o~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~k~~~~~~~~~~]~~~~~~~~~~~~~~~~b~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~a~~~~~~~~~~~~~~~~P~~~~~~~~~~~~~~~~~~~~~~~~k~~~~~~~~~~~~~~~S~~~~~~~~~~~~~~~~~~n~~~~~/~~~~~~~~~~~~~~~~m~~~~~~~~~~~~~~~~~~~~~r~~~~l~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~l~~~{~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~x~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~q~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~A~~~~~~~~~~j~~~~u~~~~~~~~t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~U~~~~~~~~~~~~~~zm~~~~~~~~~~~W~~~~~~~o~~~~~~~~~~~~~~~~~~~]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~q~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~G~~~~~~~~~~~~~~~~~~~r~~w~~~~~~~~~~~~~~a~~~~~~~~~d~~~~~~~~~~~~~~~~~v~~~~~~~~~~~~~~~~~~~~~~~~~~~~~x~~~~i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~r~~~~~d~~~~~~~~~~~~~~~~~~~~~~~~~~~~x~~Y~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~J~~~~~~~~~~~~~~~~~~~~~~~o~~~F~~~~~~~~~~~~~~~~~T~~~~~~~~~~~~~~~~~~~~~~p~~~~~~~~~~~~u~~~~~~~~~~~~~~~~~~~~~~~x~~~~~~~~~~~~~~~~~~~~~~~~~~~~p~~~z~~~~~~~~~~~~~~w~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~z~~~~~~~~~~~~~~~~~~~~~~~~~~Z~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~i~~~z~x~~}~~~~~~~~~~~~~~~~~~~e~~q~~~~~~~~~~~l~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~b~~~~~o~~~~~~~~~~~~~~~~~~~~}~~~~~~~~z~~~U~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~i~~~~~~~~q~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~G~~~~~~~}~~~~~~~~~~~~~~~l~~~~~w~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~L~~~~~~~~~~~~~}~~~~~~~~~t~~~~~~~~~~~n~~~~~~~~~~~~~~~~~~~~~~h~~~~~~~~~~~~~~~~g~~~~q~~~~=~~~~~~~~~f~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_~~~~~~~~~~z~~~~~~~~~~~~~~~~~~~g~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Q~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~S~~~~~~~~~l~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~B~~J~~`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~x~~~~~~~~~~~~~~~~~~~~~y~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~t~~~~~~~~~~~~~~~~~~~~~~~~T~~~~~~\~~~~~~~~~~~~~~~`~~~~~~~~~~~~~~zN~~~~~~~~~~~~z~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~m~~~~~~~~~~~~~~~~~~~~~~~~~~~~~p~~~~~~~l~~~~~~~~G~~~~~~~~~~~~~~~~~w~~~~b~~~~~k~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~h~z~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~j~~~~~~~~~~~|~s~~~~~~~|~~~~~~i~~~~~~r~~~~~9~~~{~~~~~~~~~~K~~~~~~~~~~~~~~~~~~~~~~~~~~~~o~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~X~~~~~~~~~~~~~~~~~~v~r~~~~M~~~~~~~~n~~~~j~~~~~~~~~~~~v~~~N~~~b~~~~~v~~~~~~~~~~~~v~~~~~~~~~~~~o~~~~~~~~~~~~~~~~~q~~~~~t~~~~~~~C~~~~~~~~~~V~~~~~~~~~~N~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~8~~~~i~~~~~~~~~~l~~~~~~~~~~~~~~~|~~~~~~~S~~~m~z~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~s~~~~~~~~~~~`~p~~~~v~~~~~~~~n~~~~~~~~~~x~~~~~~~~~~~~~~|~~~~~~~~~~~~x~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~b~~~~~~~~~~~~~~k~~~~~~~~~~~~~~~~~~i~~~~~~~~~~~~~m~~~~~~~~y~~~~~~~~~~s~~u~~~~~~~~>~~~~~~S~~~~~U~~~~~~~~~~`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`~~~~~K~~~~~~~~~~~~~~~~~x~~~~~~~~~~r~~~~~~~~~~~~~~~^t~k~~~~~~~r~~~~~~~~~~~~~~~~~~~~~~~~~~~~n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~t~~b~~~~~~~~~~~~~~f~G~~~~~~~~~~~~~~~~~~~~~~~~~g~~<~~~~~~~~~~~~~~~~~~~j~~~~~~v~~~~~~~~~~~~~u~~~~~x~~~~~{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~a~~~~h~~~~~~~~~~~~~~~~~z~~~~~v~~~~~~~~~~~~~~~~~~}~~~~~~~~~~v~~{~~~~~v~~~8~~~~~~~~~~~~~~~~~~~~~~~~y~~~~~~~~~~~~~~~u~~~~~~~~~~~b~~~~~o~~~~~~~~~v~~~~~~~~~~~B~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~o~~p~~~~~~~~~~~~~~~w~~~~~~w~~~~~~~~~~~~n~~~~~~~~~~~~c~~}~~~~~~~~~C~~~~~~~~Y~~~~~~~~~~~~~~~~~~~~~~~Q~~~^~~~~~}~~~~~X~~~~~~e~~~~~~~~~[~~~~~~N~~~~~~~~~k~~~~~~~~~~~~~~~~~~~~|~~z~~k~~~~~~~x~~~~~~~H~~~~H~~~~~~~~~~~d~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~k~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~x~{~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~[~z~~~~~~~~~~~~~~~x~~~~~~~~~~~~~~w~~~u~~~~~~~~~~p~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~v~~~~h~~~|~~~~~~~~~~~z~~~~p~~~~z~~~~~~p~w~~~~~~~~~z~~~~~~~~~h~~~~~~~~~g~~~~~~~~~e~~~~~~~~~~~~~~~~~~~~[~~~~~~J~~~~~~~~~~~~~~~~~~~h~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~X~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~[~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~q~~~~~~~~~~~Q~~~~~|i~~~~~~~~~~~i~~~~~~~~~~~~~~\~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~x~~~~q~~~~~~~~~~~~~{~~~~~~~~~~~~~~~~~~~~~~~~x~~~~~~~~~~~~~~~~~~~~~~~~~~~]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~7~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~N~~~~~~~~~~~~v~~~~~~x~~~~~~~y~~~~~~~~~~g~~~~~~~~~~~~r~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~v~~~~~U~~~~~~~~~~~~~~Y~~~\~~~~~~v~~~~e~~~~~~~~~~~~~~~~~e~~~~~~~~~~~~~~~z~~~~~~~~~~~~~~~~~~~[~~~~s~~~~~~~~~~~~~~~~s~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~?~~~|~~~~~k~~~~~~~~~~~~~~~|~~~~r~~~~~~~q~~s~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~r~~~~~~~~~~~~~~~~~~~y~~~~x~~~~~~sY~~~~~~~~~~~~~~~~~~~~~a~~~~~~~~~~~~~~~~~~~~~~~~~~~~o~~~~L~~_~~~~~~~~~~~~~m~~~~~~l~~~~~k~~~~~~~~i~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~x~~~~~~~~~~~~~~~~`~~~~~~~~~~~~~~~~~~~~~~~Q~~~~~~~~~~~~~~~~~~~k~V~~~~~~~~~~~~|~~~r~~~c~~~~t~~~~W~~~~~k~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`~~~~~~~~~~~~~~~~~{~~~~~~~x~~~~~~~_~~~~~~~~~~~~~~|~~~~~q~~~~~~~~~~~~~{~~~~~~~~~~~~~~~~~~~~~~~~w~~~~{~~~~~~~~~{~~~~~~y~~~~~~~~~~~~~~~~~~r~~~l~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kj~~~~~~~~~~~~~~~~~~~~h~~`~~~~~~~~~~~k~j~~~~D~~~~~~~~~~~~~~~~~~~~~~~~]~~~~~~~~ +ACATTTGTGAATGTCACTGTGTGAACACTCTGACACGGTTGAGCTCTGTGTTTTCTGTCTCACCTGTCTGTGGTTAGAAACTAAATGGAGTGGAGTCATTACTTCAAAGCAAACTTTATTTAGCACTGAAGTTTTGAATAGATCATCACATAATTTCTCTGTGTCCCCACAGCAGGAGTGGATAAATATGACAGGCTTCCTCTGTGCACTGGGGGGTGTATGTCTTCAGCAGCGCAACACTCCAGGACTCGCACTTATAGCCCACCTATGGGCCCACTGAGTGACCGCAAACCCTCCATGATCTCAGTGGGGCCCGGTGACATCACCAACCCGGCTCCCTCTTCCTGCCCTTCATCTACCTCCATCGAGACGCCCGTCAGCCGCTTCCTGGACCGACTGCTGGCTCTGTTGGTGTGTGGCCATGACAGGGTGGGCCTTCATGTCCGCACCAATGTCAAAGACCTACTGGACTGGAACTAAGTCCTGCACTCTATCCCATGCTCTTCAATAAACTGAAAAACAGCATCGGAAAGTTCTCTGACGCTCAGGGACAGGTATGTCTAGCCATTATCTCTTATTAGGAACTCTACAAAAAAACCATGAAAAAGGTAGTGAAACATCTGCAAGCACAATAAAACTGGGAAGAAGGCAGTCTCTGTTTGTGTAGT ++ +~Ue;'3<<\\P^eZ@keD5Sjb8?b:B9?3]G]XaCMX(MdXIKRa\D858\TFZPbOA;RTO_HQSHAYFG~bGmU8C\Vb6fb[N\oeD-9RB,U11O]U1_[7]SWXNTSf.UGc^%X[JIXs`bPW(QTR?8HBC:5_Xd`,BB`ZK,biVCXRLHL=@Ia}\?l/s`%DTLWPZRL71RbedO-7RCVH?UYiAHPRVaf.\nY<@ZaES0;E_E_O`L>4?\Q5BQMFBbl\YKm\/IELUcYIUH1U\GthUETZ&:PGBP(':73j^_Q>XaN\5]XCb1qHUK/H?3-?PZ]ZEQVmN$1.B;8LI[RD>IS`HRXG64Md^Zj3YGo7kMqzR;?]ZYM)ZZEg*VS]O^aO@eb_:>H@N`\n[mRpSMRPAKx_XUXwaoQQP[K/`yRs]tQOk\dKf/dPE`FPLY-/+MK?M=bz`nR~uZiLv2c]GOe_bj[P^[+NZe6y_~WaQeMo8iZ`Wu@mX;4l;_>ACceZL5ZeX@OXbSOdc],gc=Y7gK@]W1`hf`ZYLVNE%.;;U7I@6cR3IPEYgHdqub_@Y_bZU\`7qzhaP:W>]J?tWeZs9gn,H`aST\?YhP\\>KbGn^CnW2RObrzdY7[AE(JOSbIdfY_M)MP@/'9\cUO;_SVM[DG7?54FD/UVfTQ{@ij`XUbBcZJ>=I0]2P?H>^_WIHGNI]7M7HcH[f_^Z[a==.cmZ;K_8;TRT``]/gU&)FHDY>:4HOV:TB5I;4YVII)RMYCJOQN>No-kKR(]1.ZSPSA%Ily^?nN7$2P_r]U5jkP9[WbhLG1^UKYRS[Y[_E`HT?G]9vcE8IKadL[ZUYF@`N=]pTyZ~bYgTA;J\^H;BVqIrV^d^ccJ?L7iHX;mU8?UaC`dY[8hAsUM=;m[@waZmQ~gS^:w`KG][[dNLBCT`disR=/7HGK_X2GY`[JUOv7\U\`W\lj`bWeMGGgJ~STVJaDvqr`oROs]B[:TW:[@1SNOL~g8g^k&fAbZpfd_oIxU~sI~m+X=FYXPrUWqal/]j[OQJaW8MPUOGdH=8VaHdg,ZF*Y`JO.&[;NIYUd_[Z2,+WO>m|i[Ci_Z_^E3:`[1W\;~~G~{lYaC\MVgSD`UTh96/cjQvSNHV9\`_`sadkJj`;@d7FK9%H,AQ7Q^XL[\b\e^T@hP5jXOFaX-W&-ZXDOj[RCtQwX^5kbBQ50jowc]_>n~kZ7CVYKzN@sZZXeZuFd@PIbHhkbk]JIJIaTL$&Y^9Sc[c0dd]9=cSFW&L>8NW'0;>8h\]S-+6T[dORFU[WKFL5*NCG2X]QMPX\27'>63?NKeXYMq[5lzVTmh`:~TRm_=/]HH\QX)ueX=6kPL--3\q~QJ~~_jDfaalYJYdvHk^cwjbhabeNFY\[=[GP31HN^oIhU]S@wnSg=)M1hmnh]fFO~~\g>lNRG:pnZlN^NsaqEn`J,F^``S.HOFID:B=cGCJX2L]JU^cN]`{NGE2GQbI~n_B~IXZU^L}tdC9qOKd[>RWaY>mYT'KZUU>2cNAcDKIpRk?c]X&=I,GVHE^t^3uHbPq_UMBuXPf__um_LD,=U0R?I&eK\W8KkOI+kc;^gV>M4b%W=XI,Wa?'@NSYa>L1Udo`^ccb`^Z@sC|yTe__^D2A>Rp*ggK6K5Pji;PFj4roYRUOjPvdJ~g^H=Z>TSQ:HZ^?(53REH?=nT*PY4dbpMt^IE]BMOTiU8UZJMTXYgIIKXFLEWAVL=9vURL-mA~boYMWcKsYf`S{beXgP[6_d=>$:mSQXcbT^)QT3t:IP`SZe`a\HHOC$,;&[CDveJcVKWwWXtMgAXE\nMRRR0^JP3SL_Gr]gQZzc>S\PLeEA\WI[^wTIeb\C/(QN\QP_Q7mwv`VU@@N\N`]c6wo_\TOL_FZJ^^^YhbhJ%Z=E7VKTOd9rLZ>[/V[Vco\K4UaJ2CLFQ?b[d<@H~~QAeeOuR?5S7$/Q]TbV>P)]hh$5jS&B=r_C7(00UXU\;HYd]SYab}Gpum[fHbTknBkla_P\'owtLE8>'X8Bh|W?hNp?W]UKkZY$?X>BsNa@m,VXW:PcNe@gQuZj]5[N]?ch`ou?ebhU=.;,IBVFWofe_IlJyeQV_9ClrTapDj3|iR[XI[YPztdcMHCV>GL^\_XUO^VJTHV:NHWiT@``;3O[REK4NXakTz;kZ3Ne9[PEpb[`R=AMU;d^I,SaVGm`MfFbZNb_gZ_Wb9lfMDSPPK`I7I?Tfm[`>W=dcH95OD-.0B8HLF]:c^`d>Q@yv1[_h`ESII92^SGLPG=GIKeEnnP?nkmU$m\Z(R>;FYr^StMlX$ZGSoI8pwcPMO?_S[._a6-.JVS(in_ZhdU@sB[g^Z\N~|Wx`L-7Bnt&Y`%UZVvrP~5mce_U~~ocbuusb`vaUp=^JVa[T*Ye`_eWYyFDgMH]lCiZZIylcEL/s^AQ64J9DO^;BLK7?;c0J;_yeLb?KUE^[NYGEMM9.N[OF;K>Y;5O_a\X9YpNSV&hQ]Z)RSCBah8P7v^]SA9R_0mJp@bMACK&46BRL^7EX^@_%E8'W>>EOqGZCEQM<>]R_KNXXgZz\O^>gh|Gi[~~Q{b_=aVR^\F~>ZS]UX\>PU`CMl2\0n`At|e4|G2I-O]X~{uG}~cxf]q&^keV9o\S;~bUgI@WPb3uQ:EBVH8WhQkll;{gUH_fGefN+\R3m~~~~~mhgfucHtd?i=o3IUMOd\MveI~~VMS$_:,bSMSUh_F^8boj_:`SxpmU1m[?LMq~am|ms69^[<0@j3\rylcWhLSGm]c]1[RhP`8s}vLLHR4U_j%ue~lQ~g,ZGZ{d3MmtQN?~~`t\~Zm9\b$bXKIDwqVj=s7ivfT^dU`_wjyou4xQTAk\Sb~qZ~gq`bT~fErzl]re[vK~wmOiZ~P~hbYAjw[B~lbN`^Z7uvn_S1EIURZ3lRv8uiUfb~VpNpc_ZUUG~pLGYB~zeOiAzf.8ZM8>KZ2slW3PGXngX~joS_KJYrGT~~Lrm{H\L]TmCV3dTB@`f[0Rv}[K`qLeY+EfVUX^VdcX^cTSU=RAXL&iA6*?VsdQv`58(PjrjX)\Vq^laewZ~L~pgQcmWH~[voZmJuY'JW?LRTMG?]o{nok0pwT5vC>cAmT?~NHZc=Z_gd]]jxOH=k_jYoqZhbNaHad^IH46XL%WHp9ajL(msdP[oponBF[4ejfnIhw[wY_4XlU2r3aM/]l%HJeXJ]g\]YiLMOP~d`LW;@BfC;1:Z:^aiU?hfibN`{bviRMi]kc}leecXxM$>H\5_Y\8^VUyNrhcg~d\a`,9Sa]cM=~reAybI9KTNMm`_hhR6EHB?bfeaD_HjDFdasI~P<{Q9}vAzbxfghOBpWrr[{4jSRnCDShmapeeXF\tURXF~~[`zYRGJ14abehYcPflfee^KMPWN4ULTVYDeV,]`X\_~Z^Gb.\N^Vd^<[KX9MLI=oVDXLSWqa{jzbDc5*.^j1ZDR2PcTW3[Gn^U~*ql3hc[wlZroA~~p:~~~oiJWO]t`\vP~]~\fMu5pwxZ^~Z~fgP[jA~`5>0OCh>+_qqtXNPW`Y~mcIP\U;FS~XegerSUcKv_QT~tlZsfjngbQR}cjip~oc}uZ~xcrYFPFq~a\~a~7nrN[k~_~el}To[>UyeiaDz_Y7U2IWnPho5\fY.pw~b`J]NF4zbcdgp+~p_J<^jdKrK~_[wemOyzgVJZRY8qhQ~Rjmx`o`pO}ud~S~]gB~TZ;%df^PThRXE(iTQ'6KFbQewcFKC.>dOGEk|~oeniUxjMwU`S~emXR_^>vmik^~V`Wd]pae6~mUP<>YMo['Sbcg],aHK_kEh_gvxEz_kzT@Yq<~reJxk[P\n,TQK=&7=K`LWfsMi`M~cuhvgWFP~blyQw~penfrT_LT$d^2q~~VO|aM~]gcR~j]ragjh_V\sp|N~onbsy[>rn@]WubbBUWdeegRqOz]k~.oq~fsahx=~n[;OPP^JZ^kWX:A%3?Oc$G@NLn[@^h[GTNm]bSV8TQ3(/q~oiVfLlAPFFkgiI>RPQig]~bY~]~~DQSfSiR|]~fva~^NlNAs*\PmtqT|H{r[fa[icZhhoNsOchhECKrae_bYWgQ>0ajnlZ7St~hQ;_5jtdSuekKyY+LWSbFQPTmd\^nTbccG]V36mU\*PJJpOz\eiKexJvdsZEm2YhfqpJrP\~i*gqX>nmI:VIJmc9_.TX\&EY;9wae]\]_RZ`KcLjq1`a\UVkU,`Imb68JF'aVjL=RJ;.=gI0L@)>QI09ROJOMW\Of3nsaujmj8sSXoOiy_7@J>?LRi_B>:T\^apGom5hI9]\P?*IaSZTJKoT8^grcT4$T[R8N@Pzzk/vUM|c`S~~hnz[]niZJRj{B~~mINih4SCM.&8/VQ[TEE_iafx]SqMoY.\j^M4VTwNTqY[n^SXxTW.ZBCNP[6)gJG\fwbVWV^@>]~mbe_EfPC+4@\ZEaY9roaJ%CLzqcdQxGj;XccY]I~an1~ZTxiUG\UNpo9>p]ZXXwl;eM)e\U55JL$SVk]bOfgNz``/lic~iI~fR[M\\9jD|qYa>pU@oyzfXm[9pq|~Llqe_oXR\?geOYY\y]onazTb`L?6vibp`xjQdm]ZC_KWVV\&B$EK>Wjj3IXSRV]eV~_\~\C~Y8Sk+hlddg]S[jX^rWbNf%q|bKoI~jUkfPv9Qt`y]IpK>Ya;uq?tEqeeY~UdL?xAKaeTlbchc^elVQ=dauRqVVTFlR~uVld~^pajFJ~xoZtePdD~pxnDNlcZX'YU/Nz~|VaM~PwC\TEmk7[=3)Hi^WX_^~Z|h8NM8^kOQ[bKedGRhaN8~]H[S~ZCb\Dybl}qjT1ll{AW[{ucJPtMt\VFbY5nrWMo^V)bZ`PIRENU]edvmC~mvo~OFVKbfYkoNJ[BaQQ8K=)UiW`AL7YKfVrVc+`gYCzmkA'ceQWVEBH]arZ*Smq^F1-VSQlfqut_Zy~wbrUfaxoW2Hkg=9=8jkEu@T?~nYJQ|oTDVx_]iB]F.M?OKJlB~kQY:1NMC`e?^h_liXWJ8a`|lPPdmi[~W?%]fSW]?B9JVU[\RI?%Zi@mW9RIhKcUJ\*Gfc[QWRPiieqU+A9PUF@DV/MZ[-/e^ej\aU=xd~SmZmmngFo>NNPZ$'F5A6O1lNlZf^RSq@~JD`f_L[t`P^bb*\mbsHghbjcIhGIm:97\7'tVlY[ef{;l{uD6::=65=TPNPUXYWTST32TgEkBgQU~kT~]vA|~tePnifn,~~dYwfbZYM~sI?fQ>?@>g_Phb;yglbYbWlNO>T:_o>ve3qofFQ\~xdudbCqUIfA|ljWH)u~~nG/FL3D[Rq3mQOa~X{S~yfYRhJj]LpM~~diwjNlp`HV+fKazdb]HL/Cu~z]^TfYc]PudZcm^F]TE`IDhTIiOkJZkcADLfbQb3TkIxPX4]Kg|lYLfMRdL^]UURUPUfOKco`L]]DF_]PZV^v\QOsU?]LOE;]GEBS+YN~~XtB~`MhiTmT~`eFyP&`EP2PH@TI=**pbgUMG^t0y@>XXgC~`weSi_]hShueHfe`N~TSXT~Zxn_O}b`rgb~cYdjIK8W\^~~bi\D^eJ{yb\X3SL8CI^VTP_XFQlH~~fal=~ckbzSYI.^Wa^PPNslhYgaL~CJ~jR~^^Yr]g`aQlJb9L7nILp~l~kVbVPYaWR~LSmRFTHAUO2+;E7Q^1KDSP4NYgc]{_e|_~^3]LNVtHo~nSPIXK~~\UA9R3JI$H$acTUX`6URJEaS`&Qp~~Qr9K[hWcC~\veO-_k]]+3I3]imkCx9poPM[RkncGS3qQG-tgfifNjh\cb/M6IAR_)SF<-B'J,xk]L8&(+@P\dZL_&GWIH6O98WRNYEk^H`g(L77[PF7nZp9oE+cgprGNXehU_`o]UPyYbJZeI[UmKdMiV^|~~kxjRmfEmY~~mc`gOb>wgNvkaav){\LZfdmVf3]JBD6DBmOKSR_1_L^T]`Xf8pYAwJ~;RLF=NjEe>TJ~|R6gD^C1>CMO.D[wS|}^Q>GXmS*ZLTm}~{^PO^BkF=dvbgLj`{yhzdqqZ*SbB~g^fi\dLLlVOU[rM~nyXG{aikWZMDnq0srxv@=?_~mVUY'\hJ~bP3llgh\G_db`c~ab`ZLRJ`UkATKfpEgJFTrY~cc~`odX^As1~~t_^vC=\f[eheZZAlXjTY*3'CTVVh89).-]Jq~|gp1M-6No_IMbZZ~L~~I}wk~R~vEmrrewnXIqwbPV?K9GHoZoN4p;OcPQ`hPpmsL~];D~k^['@hA_BpS^^hVek]h+M1RXgbwn_pZ~xblBL7?DQCin-pQHrmW,?RhszioN1~qqqNhVW=~kSEP1LMgh}cHomfM~SdPZYI=B:HVx[YV@:yupnxNfR~ULW>M\%lw'COYSQq.M@orxK1nLSlk}Smwf|yb=;ua\E=y`dS989`8=A^Z\2X?>VKJHY^dOs4,JDJslb=re`U{iaO]RrSyxSgvOe`?~~rUQ~^1MN|Y4th~TG@`>|lczatFejAd~dV,?d[P:nM?Si^YUhP^Wf4YYP]VnW+CeQ{eXq[fogb\OqnCk_K>AMYjYbPX$FJN.9TIXbUlQrfSZi]XEP0Cd8RNNbFz[VqlX~<]SHUud^I-YZ];eZj~]iog3{ZrVoKsf~YfuK?TXQ6ce5X^D(/ABrCkjCN|V(qdFFMRXS[&ONFCO58h|bXiG~jaOYS~[V~^4uc\~[U$8^NjTqhJIgLjBZYn\~O~~YPaOLPd``hHwINe\9~~^lja|\@I~\K\blCGUOH^P8%I:4?X`TSKKR@Y$~v[[q(>Qajy0~~pif3wR(~oMT>/\X]agl|uZTMVjKSv^o]P]HhdOWa'OT_bc`PG'HCC(GQPWU+)9CN_(+Oj`OeWcONFvrAV]\mji_crVS~K[IgiWmhNON&GYC~iaZNeL~1]Il_[c|TW}sh[H~~zrTSRtVMbpw\OigQTtfovWX~ivXFn:HfaGt|qPmI[ZDucP~Fu7~^[Ep}V~6\iw*CLX\kq]\WO]iYPBW9Qcgc\EI2_~kU~sUU4WbYsNeZpXNGuMfBtNM\-11X`&pU[skQc4uRB1Fy~iReM_?:,QzeygswfsE~%F-Y6aYTi^xipil`ko`Vb%zvkeWZKTTEiO-gtm]uQ~qm;|qKl^=~zS%ticYe&ZK~~ah_jQ8YK>hy^B}cIRHWifS~q^Q_Ugt_`V_WE`?bc6WhBHhU^McD/DMrX^FQ_af\{gK\XM]eb5wyhbg\`PfL~wux6dVjUhz`gjSYB\H~fFBua:~UOW\C~jT_VN:dS%TUNXDqLdCmsdTUeITqP}r[rAudgP~sbb^JnYEpO6~_B?,[Kt~h~k;./8Dfei~LxwIo]mR~~_WCQTW9OPGuX?WLJLRgp__WazZsu{Y;T~gvodXSmxbZTkQlo^jf_~3j`PTLEbV~s`Ky{W~}~pn]dcXmpd1~d6x~RdeS[1`BHNRnJ^Je(5FI7^RO]Pa=elc`4eiZ4@PX[erV[9m\XaQf2KWUO[ieBddW^GaU]XR]]O]x?SWslT>Uo:vldPSy@dJgDA00MG$dKNFUE@TO[*efuESIv~t^G+E]NO^)qS^]^Kd:jcMSv~mLkTa'xtZgGAWg`fJ'[3C]MnvQj]K2XllZqM~\PJ}bs`Rb`p+Ndj~bC;(l~sbWcAsaa^SV&BJaTZJEEPz~jjZw`~ujC,JRkdF[bdAh`^olb~WzS:j~kfcnl_PThaRVhYjc}_sU7[E0UG`fJ]_[NK6HO`\rVSHHY9LEdFg\paVaV^V^\PGd`E]E^QR~`]DlCQS5sWG7[ba[JX[um;RF`NCHd[]3~YbijxVo|yFfPy`KxC~`gjcLdQwfN*N^\supWCvpNTB~fd]P>FZXT^EgYULSORW[_wXe~TdYeY~e~IaK[cpZkcXMovk@AB\BKm?caAii^_\dlVtTo`~_bH]Bsn|~~~f>qrbja_dltpEceg\M:B*HZO<~al\6s^cYfYXN~N/8\5.UEw~]c6k_NI[O;Zcnw`dvludj@fT~b|nvM-%Qb_\m8o]V{M|hpDv^FZefZIzo_xHqXG{Z$tK;7.bfUQSBx~u:H>~b7PBr_J>,XRpY\j{a}N~-~uibR{dW~:ksKrmk|d~^ifNuZCn~Pw9dTLeQqOx~RvhGlZbAVl8,OppS)xXbDKdaRYKN`WLRYUlcl~Y~MZ^EfjfVfsU~jHmbX;kqc47^]cljFkjL[mweSINtbA_H[@VEpaLEFkcogx]BzQBWT~gjcbB~fnfo2~vaXM-cO}_jgmY{jp?^dR[Gn>[^rS3f1QARN`JWGM]XT\_OMoESWfm]'u`ck,/9lL-L6eyIE[>zjBR.PM1`P;J;:[%0=:ETR7_=0SIK7NJSbt\7H=F__|YZ~ckGnZcTOU2[Y>~Y__;rFN~@e9OLUgioAQ`k)wL1@J-kU]H_k\@LB~uZM&|l]^imIS]XN]:`a\.e8UeHub3*B7$>ANimr\IWedzkbgOdo~btWJ;:PW~tX~BT-KFb[mdW~~oZjjV];<9]QGxoel\^G\XE]A,DWijZP~~\Vb2i^dgjixemK~~|n5x6TIacgRsMF6CKsQ`pLSW~Vd[@ex{]Xx][vY~l<1*QKZmzbaR}T~nhtbdMepuG{[aBT^xigYbojfkeTU=X]?OMCc`JDTT`fRwTd~vWR~Mra]bXMA~OxSbKxe_-~gEAVb\h?obn\U^nOQPxTWuYSGa9XJ~kCdBTNWne_H8s~b\QC6^HBc`/HiR~_jAQOrJZqlqd:gXTqfbfPZjqfsrbM]YbVAQ@L_h`~MuNn,KF\q]@oiOIZ;K%d?JR[UZ~FN~lFecQBLNXGlucTTl^]ZYdr@paq5_13^byRyk]~gl_=HRPiapF^jqtq`pZU[[lU;bAoYSKJ~Eu9/[Ugid~*YY~e~mc:wx~vYjx8[^[*MI2v[Kt`Nx;[\`HhJ~zOUZAYNmjYWHiW\M3VbTaLajXnm\JylMOi[>J'Af_Gcd]eSK~Y~ZwPUWv5kN=]jpeW~T~EiKsagcqd8TPI=~\f_rs;>`FSz\?F4DRj:\\NH2Y7>YKQZCln_aqX_hjl^NU~vEKsdlf@Y[=^LwhSd`aeVP]`F\VZ=,9Vj:[QN}U^PKE3G-Q[TDaOhKA+y=WS{PKgu:Tf\WV]^VlMlXsS{]~R~an=CGZ0.Kbq_KQXgefovR~xfEjW[eXeK?0IEBKd8X~~z`ajaNyY7~]U~\~fhS~\:MfgAUfNd@{tX|Tx^X|\IO;wTMENlaydeQiSi`~gq=~M=w^Ki_enUa835SqD2U==mmggTNfF`~slpnW~~coNzbdB9c^|7{~^O:?@.YYkDalKyN^/~trplfClWzgw,~inT`mg_1f_^LcB]cXZILi=dgX;_I\GJkal^hY\`g4=[M`9cGOWfMBgpUf)WN[sgzYNjJSqHcR}md|Z~jRtNmftRrc\[SA_LSuhnM_h9mmzhJRa]d`IXIOMT`3P?[`]tgsdK\\bH~~~kPJVCO>d^8S+bq<_XgDjO|p=[FT=~U\XRfQ~fbNorNjgsTU\VeLh_Z~X(b{dk^'A,2J]nBKwE}\xce'[Ptjyf\E|waFgHRKUReW\6P\aB{HQhX~|lJ\6O0-MT?n[~k`E'@h45q>~zzzk^S,jbdb~eOH~ycGhkdE~\nfi'X=:B>PH3/a~\EUmRY~yH~^eQlIgK\l]^pedre;mk\NaXJeb:pTD<~`EETRJTUNW2H0*]SQq_QTAXEnn_hJ'6M`-YpdVPfXCUYR\D:H\HpV`$FIX^5zYaX{R~\~zX~~osAHMm[~}v_~k~kVnK]VpcXvo_V~K~{[_\^STW~VCRgS6bE11?Xd^z`1lIeanjKY~TD~{Z1uTMYrhR__~~zdbgEH>j~qpXmK[ZK~um;yo_PlKC\qbfNwk`|](SO?'>R408[REr`NE`hkUhH@ug>gF0c\W.V@Hc-_ZBb_\rQa_,9W9`VOHghIVMJGIcNRH~V?[[MNL+^MeG8RF^Y~);GcCEm\O~V*LoVoKku^SFhj`H&$$B_\O;Q=V;0,qXHtcqXK:JV_2`t[Kd(O_Dfy]R0EQ-eifQ)K8_[^CljU,\%IXUO~`PpnLzg2bL]kg:G>aO?hKcMGCEbva.d%F*67RbG~~u~de7xdpUxwL\P~e>mHw~#:.lZH[hAfgdcyZHS3BVhbfxz1wda-ewXNKcqXiL]Y\YFRa*fhBCcD)+Ne_ZTR~5TeT~.ebVOhW~ggYAjKzJ~~~Od.VL[wzuXjoL[obmW~ru_R]WcUUZXb^ZP~~=yp~gMm>~ln~dh\~Y~aS=`fyvI{oSrnqsf:_Cp`ckmZ^:`Uyo^~Ot_RUgo{fIgjZX~dTbVcHsoi=U;X>Zj8ki^kctagsNvMY^qm_8\fhXdtaUn]TPPxu=uRkMGnP~~lh_~R~dX\^fZj+a*JwW~~~fF[~j^jS~r~T~~wqreO~_~Fzd~qip+lg^K~MsyN~bJe`fggPhQZk~fcZkyZ}ojfo9?XF)kHBf~]MkM_r~xFL`BT]4y~o]~~@~~~~Vq?~_FQm~|'sky~j[gtf\~u[~qfLNr^bR~:\NKCczZuk;~~7bbT{4POX[dX~piS~pZ~mo^d_$-gabZdbdA~ZZ|smja}`ysYQwbkr[zmDzQmYeh@{z~~LikIJk^[LcN~~pln117AJ~eRPzsO~yjd~~j~h`9-due[Jpgt)\HY~iCm_HVU^~>~^~:]~vS~Jo^Pm^~]s-_>u[X@`dZQz*lqVb:NNrjalOgZUyKi%AWOU.LV\_~m~r]`OyH~^nbX~]Sl(^iN_rbXSiq^0j~~~[:B~w[~D{~k~[~PtV~wwmKb`^@RTQkjaYsi\[fSVm8oYMkWJ]V4VeQ,RL58e%H_eSELB\D~nmjm?|hlF`6ssXjbdSYBb?R^%TP\I~rec~=O[]5zxKCiKdDqickS7[]QxmgKJBUdTbdNy?7n~Ezyt9~i|IeRA^V\:[.Z`V>mmP^UQgSjD~Y;R%KdZwYM{a3[m6u~]I~~v8fLYXMOjh>_qYLQ`dc8]hxrjl~Vpl~huRq}h[~rPengP]TX`dkY^dH\|\~|zB~b~cbcKLQnY|\VzM@SvwX~jmks~r^~onk0J@=FGPS:m~[~yfl~XZ\dyoU{tWArr6~@`qne~hCd`bZ-dwpQ~mKb3y~~,~norj]~^T`f~E^UP3[kfY~Dq_mfMiNn~~o~mU`bNxbXthUxIlbD)TPKL&'Vn[{s|TtikxnLgwpi/SC9a`3mN`4kh_rcYFhUfohvQtYG~}pwkz~^~Wciyig~VmjK^Lq^duiT\k\q:~~nrdeEwmM~]~oZ|_~unQw_~mZHfpSsaKyuLbEQNW6.c??9.V>K%MbU7vp~gS~~kkTc|qe^QBuSXOcGyuT~EdVEgLQK~pGkz6Mvd~sXZbo[8[O[m~Q~~Y_~oU~oUGlY?~~pN*ra^aF4Eygudid_R~hhHN4B]SIjeA^N\[Wib%EKWU`l[e~gpwIG?B\S.~k&0Hf~6~~VFnw`\qKs%w~qTN9IS9pbWNB86qbDTcP.lbcDo^d~>yivkafTYu~o_QfphQ]JN}Vh.rpfb}Y~D~iR~oqj\iriQ~^NGYo.gooXsjbfd^-f_?^aWWAJf|~lm`kdD|zaL~Ne~ntrddX~ty]Wb]v>~mXySgZ:koxx^soDwd?]g~~x^~mrmEM;TR:be?shfhbp~p~|k~~H{ud2~rYF^GvQG%ukjbfTqXl8g_GL-cgUIlU~c^kPxW~gL]U~VXkxZ~lGfZZxW~V~x_9LTasSdMp[W~[ff|[\]_JbtL~mPt|nUKjalhqoof@52~lK~H~t_W[~~pC~~cnjwkM~~iA~@tP\XwlfL~xUP}|G~pfhK~rDsdU~f~~x\thR~^IYcrY4~vu3~&[S~ne~[uc~Uvr~T~|g@~~viz:yt`rgEWaeVn~VSERkihMwKfHp\xos]h;U~_~lxpf~qof.fYLGKTp`J~g^IWviaVZ~MP~~~cakdSdb_mXfZ`LV>Zc7xoa`m_Zugq<~~~|Djm`cG~~m~R~ggZw~gG[X}gU@wo3s1dYFUUkoT|hY*mov|^dom_a`hSA:rkiPoZS`rV~n]L[Mh}D}cD{16(ViNv}nn:-dpaB~\oSMg~Avxfosq}e[fUBBl^MztKkS2J]w~i~~a~WnpzM~~~L~}WyjEWMzh[QHRJA5CjTuX~?~RAdHUB_wf3x|VcX|qkd??aS^~~wkIg][P@Ha~fuky_V~jdj~2~s.yk?~i~s~Sq~>~gnmcfViTunQeiOTLUp\~Z~fw?AN}L~~6J;u\|Wq~NlrUbT~L~fc~/.nz^q9~{JMU~sviu?[`ppd/ib{Y~P8g|dk\_es3~kgdh\nmQ~eu~~:~x3fUJ~~~~jcmo~~i1\M~mkV]UnG\X~J]_L`$Be~~q{S~szkp~jy~`Y[HUhc>p_TU~oa~fLyS~eyhooS5zc=:CQ:|c}YHj~~~5nVdKo]A~}VOm8XEge~Qa~]`~F+lcuY~$~]\~oW}LcVo9Gbr^VJ=vu8CanLDk diff --git a/tests/data/hapA.txt b/tests/data/hapA.txt index a18d8cc..2dd6332 100644 --- a/tests/data/hapA.txt +++ b/tests/data/hapA.txt @@ -1,6 +1,4 @@ -CTACCGCCCTCCC -GAAGATCCTCATC -GAGGAGATTTAGA -CTACGGCGCTCAC -GTGAGCCCCCCGA -CCTGGGCACACAC +ACCTCTAAGAAGCTTTGAAAA +CTTATCATGTCTTTGTTTTCA +CCAGCTGTGTGATTGGTCCGC +AAAAATAAGACAGCATGTGAC diff --git a/tests/data/hapB.txt b/tests/data/hapB.txt index 9cbc452..0c44f56 100644 --- a/tests/data/hapB.txt +++ b/tests/data/hapB.txt @@ -1,7 +1,3 @@ -ATGCGTAGCAGTA -CATCGCCATCAGC -CCCCTCCCTGCCC -GCTCGACTCACAC -CACTGCGCATCTC -ATAGAGATATATA -CTCCCGCCCTCCC +AACACCAAAAAAAAAAACCTC +AACCCTGTTGTTACCCTTGTG +AAACTGTTTTAAAACTAAAGT diff --git a/tests/data/test.ccs.fastq.gz b/tests/data/test.ccs.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..b23a7c42b32f665b09ccfbc234fd9e792acc568f GIT binary patch literal 44819 zcmV(lK=i*KiwFSU5i4T=1I+zrcj8LWHjIA1f5p4j*^{HkIbjO{BF6@lb3#I73{L&q zkF2Vez4N}G_c?1F&5Q?wkXqeUS6y{=x=l`wejOfp#;;#LPkx>o2j_?9KhJ;s`r$b1 z|7T&X*WUX2?0*Q)@q}>ce?%bZtMq4j@Epep>2EI|37n9-aN5i7FU5T+t?*J@f~RuXMP43JcqvT! zUs_VA5h1IAtfVjJyj&-%A&$>Jeknbc@udp0XT{pfiVH=}?gpp7JUkCYe0iC^=CT@m z`Tgbf%l)%T!h61aEO2oB?Ck6!@JrS{@L_fc@Y~D3tO}uE*~1g4(wE{B{4~4OORYm$ zUaD7s_g|jvrPMr>D{I}Xie5f~zggK{S`2PYULJzLy`h@$=2`V-XF~J6UWU(}7cT!& zK2}D;|KS^)K=7fV*gUjW_E0?5GU4zmP-?s&nioC{{uEw+@*MlxOQUDEAZVePvGXrS zR%zIJnN6lAr+;6H|I$d%S})C-9;qn^FW-QA#2U>inB$?sur)bsG?KsI-*}hs<{!a2 zNH3n1^5x-P?gRA-=Emg)l)V(-2e<+cl`3RSgirC}&9A@0e{czo-7E9b?2nMyS!SJ? zE5AJci?e2~kU<3xC-ST^GUw+rAHq*wstvsP#jrEmeQB%giZ9>evWCoz8LAr2%G@mT z+?PrNZ-nclzXMp1-yuon6ns`7j-WGUjUX@-dbt*teV$zsAmQcA>;^B@2G5-VhLAl5 zFQ8Rt^~59OaM?F_DAvnYh3s2U^sMk$B^dx_jt9lz1SnKyUf_+`5QL%2OIv41^-}v_ zIaz5)c2@zK=H-`{8)cZC0cuw5*>|%F%UT0Uk=6do#e|m@5V9|2r316cj2=x*c>M*6 z@zP2H*aw0Rfma!p0Q&JHZv!s-TIL}yNS8GfJT?dD{_=QW_dEx-#b?z{7^GkmWu@Q% z%6L3EtMr#JlidxVD6>}%+Z#Lqj3vWA#5ZOHV1rqZNOc-npuFYiuC%bLd zVDJ}k_@xL0K{*S7S&hE^_wqoz0RENx3*sD{41t#epUGgKC)iRv zGy*&+Z~+b?HV=&sks*7R!vG3i#bNyB5%aT}NB+QrEkJNZqyp@RD1x7I_&5XuJUmc# z2D)oz8M&Ph1Wpc5gBs&suaF0Pf!zZP4NN_6jtn+{nh4Nz9JC%73o|hwKw!*S{6(XI ziprV^0(W*-yyaVXC+JRq9#E;!M!-KHRPtDj7)KeD0yIGlvBuyt%EM*ROvpe6%KH)l zAf&O+1PnCLNJx?ZaPx-b-jD_UcTpa>0@@IZ@o_vzH7#fCdT~qP-w1d?fI|Ah{e#GTsM|2Ilxu6F_jFxxkvTYh-Wn;GSR_ z=zs!`gciU%i#eHrAV4!5gJ^?o#vud&auP0wnyf&C;RMtxHi7_Dh6j*^a0SFb$Y39? z1pZ3E12Y(gC(B?G3Ydj10YA(z3SA}xQ2|(5W@s;U1&|IjmcVtOf&lrluV=L-Aeqh5 z2#7@lVsrK!Jm5PS8BO%x{V78fqVEer$5{&S| zTlg((EJig5ddzE5o6`xFRPr2>B8JF_$rv9H3*oL9YOz9cpJ0{>5W_Kgmzkpg%?#Wh zz?cA^7O=ed4)8Td*D&N`#xL-U#&OKGpgtgo5)^YVezJzapvPjjfPXSO5Ku74U?s27 zT=;?;7YF|3)C!oA4(~(!m{E(^2PyYgzF06SAYb0?u6-Jo<0!9tC%Q; zbt(`{W(d+F!VrYv4Ez+pJPAr^gu^6CU^*C@G)rfIC_tvoC?rsLWU!ejvpfYdB&=z? z7ZzDymdmt6uzn7068Jx0N!EOXu_2C?i-90QF{S|-H3cewK@yZ6969_I#U9` za{wqgCRebGj6Z?wHeLG&vp{6=g?E<{=M5I-e0Mf++){tpEa+fO#~K zMj$?~nSI6(AX&~X0S%LR2w`bL=7XjQcR|fLxOZxhjyS5F9=|W(h#ln2ZWW ziWC4E8UT(pG;15eC^%dk!w^!|*N6fl3ee2Apqn8o$Et@1=m1v9q39QyS)&;Iznu2w~9zArxH-WNkF3Ow?rhJ!FR{(1P=GLf(~z#1sq6BTAt@z~%OX zp@9hKX<7QfA)+v9L2{)P-G&2F3%xo#C?R=cgCYtfBSRNVQ+QNT1m>p*r+F62<*k7E zA3;*ZND=@Wi?OUL6KE#Sk`;nvi7;-?I4JuKdl8U02s{fq2$4BwLUoRLKEMqoY|yg+ zmX|SLcmQCgL_iQGj1@Ebg*^;lnkYCSV+D|dI%1{_2*|M~M@EZi3E`12I+Py*Yife< z0LTN?%%gzCqgX^xrO9FzaJg4WhU8WVi9JSqg5C!x$?{Vnr-}ptQ2?2NgK!369b1Lx zSg#a^DiJUmWb}*=^ErdYiW3+C=OG3o6^C96kg#*V#m30hC+KcMpgTP9Ws^RF*rj+91H0 zQ9vbZN$%gnZ%A6I}kOL@*(>H)a5X1%P0lUh90oInq_tXjRMvK zgi;P$7U`)#SVR|chJzV3P&8>gt{LZD*+S##E5$A;T*IP?LXF?$zMdcx>j zW=#U{CO)@Y2s^LcB|x|``X^-BJPv~6K!zaKt+{Icnt{1{t)ze)+>f1Q(%}2 zQla0GEC{X`caSf0JTgD90Z1GGyy0xnUpN-Oc~oi%CPf?~IrP82YB1oEjQv36fQ8~y z=9E6W84n~Ez66mK-vs)Lnroh@VN~IeP37`Tj(M zH)GPxSPQfjW=kA9^27qb8_*l1f;;D%JzlvS!&ihv=+B3s4R8vN$olFL?pS{Tv=aIzNRw!5Oi{v20Rtt$ z-o}hG@X+glxDCbP7!Gp;VHd#}=?2M#QMfW;Y8+}ADE{$0t11YOXv5rVmz{u2kqI7H zPlV~Z=({|RQZ6_g>($0?7#N}TDtq&oBxT-!gM?TX!UL8tOBGkOD3Qou%I{srDyS+V_7VL z{(n>ra(Lib8jcYm8+`#v&MRm_WAQx4x=}c0R)0JMgfjujCXc>PSf@7n1;h_%Z5+Ft zcTy0JW%e-Ify0~va|7rp5zv51{#U>oBCW_RmS9?m7LFMkgjPOJ%y{H0Oql2Mq(;Cr z26I@#lujJ4g6RQ1BkEmDH6dJX9t6p)kmo|o^LWfc;XgzMmLEZ8%_t)9BT#n18POn_ z9EAcdVfh%w2so9`MSg;^GvEU<6%;xM>O2CrJ3~7jn}o4lq$e!<5=gEd62^ug_~VEZ zXmWr_o`+sH0d;AX%!0hh2skR7!2EL}&#_dTjZ@)Jk>y?onsF>uXXAD-f#34gGjMIa=0y~pmdAqxfGRy<1K4tr7<4$u@p9pX0~qDdyU{uUoCGK+ z>+9m+27qIr@Nsz`H##lH#0>y=FhtOq1V;5xPJ$-`7iM*twIz^aHjq=m0Ur1ldja2c z$KmL?T;ey1OB>!WQFU@C*lIuUQ8vCc>BuVH&{t&r#3> zUH~MS!%6{@$FA1gpqZl}sp6pT163pJz$BOtqjpL#frl{gItYm4@hJ$?7r@Gq{&7rx z<_QWP9LMrL7jvzthFc5OsJ(X3RfaxSWHP8SQUU?>Af-nJ+1Jf%x#94t!fh^Fl zOacNohaL~X3ob^GA?At{$FVMdB(h8v5+Ius^5McTRsr0SY28d1hKgcizfel*Gh{-Q zB2%jv!AEr%wDZhUg`ErFDi zBdlWvT^0#QMlhkVQSxAaxtvAk?Jl76V#CQXB0=d!a50+~(VoYAE5C6U52bZ6~F--)F zoRtA?02j!qM;>(qtZ^6;3~D2)FIdDj=mxU9gE1RhLEfRX3SjTo!sP#^|)!uIDGTms`qG($fG z;NV$Y7FcSG6cqtFmTqKJ7E<- zn+cdrvecHxAK0?GnJbtl&jdB75`qi| zd=Uj3=!O7qLPtZjm8q^M`hpM%wUKuyqi2Fbh=2_-6O~kqJQ?l_I6G9ph2wcdQ zGc$xN5sJ#A4gr%~2&R-^6f8C~NQQ<4bk41t**N+SYFC(g;k8Mg`65%w9xIbR^N({4 z7VAG(Yk874EjBR8Q*RDZTf|9pOLjIU(z(Ks_cXIh0gXaB$1%FfBN;*)1^R&uk_qLk z`2;3%L9m9v0&*}ad>l?4B+v&$SW>`Ja(p;626zk(r|5Cmx51-{f*}gPZJ_^xB}^>- zarqCRLK#cpFj}zw5rQe|Yj2CdBrT51yAH5YSdNE-4*=y^j|LCS4U7{|g1nMPj$@w6 zgbRVq5JkgcF%^Oi*b(|IpglkVc1p4o6D*a-{zMK3G3A+wfLQ~|)F`%buhtFH8bX$U zLjd?}x^Gt3JW4Xqd%+ki2-Jkj#dV&?KAS9&$f6lgS2S5v$O+H_>>eeoTZrd5)+w3y z9Ru=ls3=1rc+@!sn2v(V7eju)c~m)=<^mcaJ|~Zzl38_Ns>n075lB0viCGn8o(BPg z1qLil{v8I)FboKM1px;WUjaMj0nM>{5NeVq`EY;2x~Wh!gjNLRNqD6BFmQt8i6T?o z37h`M;wfR1i{TbbNyHUQ7Mh&kk!0^wMHG7s*?=eOkZM1n9al^{B^y5sYQ z5Lg~eUQ=vDDx}lcM}i0_2zkzdK8C@8@n`OpF5&P14*FHmlE~`-77hau3ao?;%n?w% z!MMjDi=c`NtRJW|S`o@6ATTjb{VKRHY9lZi3lb_!Qw1FR4d6}CnmC>bA{Zk$9Q=j+ zJ!jwo6GI42(j$L_l=O ziYnyIg7qz+hjYlv!Bw#>5FiDPjXQ(pg=`NqZRpTo{kj}zuILRMBSDx`LfKzOVQ{$y zCa_w?JQ-?{MP`zV_W(#JeDSPF!Cz3eL7PSo6$I8l3OT%hIUvumo^*`MxyT2ygOK-f z0B?m9o97wr!{L9}&y9LE`aR%28%9YWZ(?Fg-pj-|GxwU30fS?zEplD_n2o7{`pc1p zgPALcYXbKBdmHQsy?G*)XC2>>WuAq>5;(uZ#fS;5nu#@R%;;(GUM2H6l!_%9UWk@l3`* zj6q<*NG)I&3_&kO_Cv5E1V_hUvi^3k3{&vI$MHvH-y!4z(ZI$+ z6$f=+9Q#F((xE3K-N7CKrZWTQhjnu>ZGni0_=uiD1l9_eQNrDjA~SZvy@EPRxsb#Y z7ICmMo9EsF4!9z7M7S0t?NUfT3;;nV*1!g~RG5KtFg!mIauL z@JiEuH&lf!2?Pb^A=cx&O;F|)p1+#hpNd{AVZZtgRZ-{FGYJk}G*oz_{>&+^ZLq-C`ha)8K zZqD7A&y^!URNzf(c)X;$CfMB8huMGogJU4q#}3i4tLon9i!SCR5__4P+LfbXS_PHPkdWx zt8=gP?Yv+7Iy^Y&Xu|_TIn@SZu}ub7W9h1UHY{q3L2G)^AWGF4E7#gg*H7D}Kv&L) zLJsJqtoEggThBNs`O2AjBJ!@Nf2_3je!>4f6de7XsMKrX+O)glk3G`AIja`=i(^A{ z&9B9xDL1~_lMyfWo7Lv^ZOwXCZ>B%i=DQMUj=OTdd3w;dJ-74iw9k*KH$!Q{RlEI> z<$qUa($%eOl?OjB%SPGgn9ah`joLdd_F9#qJyoSfqW-9rn?pyc4XX!3RoH~XGLhe3 zbcJH~fvN*(kNIT3StS#X{YF=T67{*0m)oiKCx;rc$m|)Q;HuSpD=v*AIAE zt^E8f%7LQ1J1*86?dG+4{be*hzWvb|aP@lqBl%IRRSwT@O7F_WO7(|1Zrl8$bk_aW zD_(p$J*rr8)jl&gI#E7$oYlC&g)(VhP0P*Jv{`9fHojiIKdN;`W%*R<{geh)&FnXB zzedg5@71w1C<-TqNH=-~(Q2#5n#kJ+%j&T4qk41r?WQYha=AB3+P@uqFJ7KCYf8UV zs13|&UldM`TCOffhmtTqjayfO_O2D##>f}cO0ip5KJ+hdG+AnWlI3#nc{I>Ey4AV$ zY~!L(y=|N7OiB8w4fMNQV{eF8#m_ZfJe{u+rG25Rov1Jrchne>O=6!#yZF-$p zbsPQo?(74sc2WIG-veX>4%kRElUJg%d zwzpN)U@JND|ql};6|{IT8{*frOejMk@C_x8t!bJZDkE{(ycrIduzo8zNO>Bn&7 zliuU)Br?UJU3BDn;kx!y`_;Xv7Ib5LwU;eft54^uTxyp;9dOmM`0eNA)y3nS)TU?c z^K!5%)T%w%4P92O>+A1MB40L)vrEz^rm6i1hVMUBswJs#aa8S$E=cjX zc6lU?YPC=Omc-XPy>_8J{}wm;AGL$;@}N85-qoh}`pv9;`rEIrvC@XeQQSRO#&*~g z4)kF|>JJo2G0J9@+z8tFol`!mT}A5m?%rrr+pW_BQolV(4XfUx5ovd8mwHX;9nLIY zuynpw?w(gZbUO9U1^?;&kA7XAj1A%BG&wQ5AM3u{+H~SZ)Gy29@uOjm-mBMV->nYU zEuA)62MtwSL`14qfBiZxS2_JSDEBXWT=}+kUj4-PC3}1=SCz074sP!|v1OWrTe}hu z`ARb&PCqpXgZudF`|EDb7tw#UEpY^rs_ui3l)c*PHhu+x7#_i8; zx7@L6@0vHqr?sp0cj;Q;>)e-{i^Gq;>B^l}ztcSrWmPiB=WBU1u6`eMjyZYlkBdi( zMCJ+&%WW$1P^#RT?Q3m8?qzzF4DJfH6cFyRuIkmx;%Hf0jdWLcocc}kbW#;BQ>?ui zTD<8>%2~**hpp?&M7iBra?+#0K)=|T4M9^Bx7{rA#JuX>h#ueicrY3)zSKIyv8WqY z+b3tG*hNh#xRZ7N`p0QiXc*!zK{A#4uyc2+rlvhsr;%xoy_O&ZbvhuUx>dScuFQGA zv(}2r1sPu`w^v2wye&)j`ng)xMn}ct9;Z6J3xA?t3`I+s2|waSd30_Y-)uRYeCi7y z&I<>FcBgq&GR%74(1Y>iWkL+o>eqe@O79xuq%=HPjfZ6LWl)JF>0m}W1FI6Z>t9P` zIhM!rdQ$2g8V#vBi|uJ=5}VGQt5!#JFebeE@#bPQR5-b({?Nx-BWh~=7ykONDvnz# zUzw;g*Bkc-?eq7>aq;$3Q4-5H#q;Zte0JF=4y%=)?>T!MgoY*$NnBKJRZUl~V^X_O zE?d`Q`4f@GL6?;KZQ3!*E z`|9vl&-X9AC2{9wVrr)Q^WMCj6=-l4=<$1>v*m^F8uQwINY^!*d=ak(?Z8$Ba%i4+ zdS_g8cQfjW7dqVz%b}`G50jP_O-;x0Di^JjzFV!Nv>>TS<9V^GNM_NI#*JU4A-U|I z-u@a+gW2g+9bL7ZFRrJKWKp}FxoxlEyxVqYSS@Squim+Suk~!YO6#!`4*SKrJ>t(b z;iJ)NUdt6b5Zp6m$jv8mkDohL&-f^Lh3kqWc2~pk(whFzBBj%-TjR4h;;k zs=C2fx$;>u>z(gcgI}GIr-^OT>FuJm=#y@vEYxmEcheYePnC%tmdbw3k&u$NB zq>?88sWHA1+Ll-@?z*PItCH|Y1GA-^k1fqshjeniqO@v-4LTFa2lGeeXQilCd*#LS z=-z8|R$mlNc&`3u+u4%h>LGt&Gkpg;6jlnL`qupZsv5-rb;G z9i6MDVXiGVu1DtOt$SK&oWHAn<$9+*U2H0%NmmN9TRDO64Z^?WnKyf3-jLN72buNuE``Q@wZU z_w@lc6dP&K>XNT^tJdn5+flv9sfobv+~ZN>rv2SpPbKfW{YZbiFv`_95X-|wLu+pjCH;KhD9%sU)y}V-L1p~DSvYHt zKm5EboTWBB`1a+5C~l`;87kvOrFs0h%?rOot=H;`>aWueg_FaZcEb~;)>1j1K8#2b znirJx6XW`aR;{W%@zd55uTSD`^V_#WbxC`5N{y)GTh>&nOYU7Y)}38shnDTNE0U^Q zD?<11pxV~wwQ#5nZg;amaQ&%u5GJ!w^D7-n)u1qK_l1kaOrEy&_S#yOXJ-9tMNb3A z_iCq7D_sI6#8RJDkKv5(2$42!Y`-IIi*Hz(T{H&O?-b{ z`znm8WqqR`ZmV{8X$)J%t=RPqW1ASw(%0+Z&;CvAz1L93XN|a1`w}~sdN3-qj_h~i zYq9oqY~6ggZ4V@?&^#EXfRu(7+tlUTHUD%^Jj2jSzqmqw@i_<@CynE7G`Z|nqNCMZ z>JK|n_s*@;K(AiQ1v2PeRAv3<$-XfwD z)M^c}(kzd;QSrOE_w$kU4f5YsohUkG3ZUUFF1ZuM59jB!iyl*hK%-BZr%d zTGt%No@uGoYKQ+V<+KW4y7TJJs4?D+#Z4>V#IibT_51ywdcAu%Xd1#w3wrW{Qy8e- zrdQ_FaZS;8q~_Tw|Knq?t@gS`?=;!nnWN$DZCh=dnsc(78!G8Ejfz~?bzKVWu>MZI zE}xDXq~o5insPz;F;Yg(Tx}c;t@rj|Ap1Xuvx+`&iP&r0OvFOkiuSXx*d~f!wMjfH##77asvqXN zO|yJf_#mDY!>930*k0U>wP7QcrQdGELUG-;Zj-MgaeUEr+TLx@+scu4thBWo=c+r^ zZ}pB4HVdIS-`;q3IK2LT`L$LYRmOAQGiuZNz1JHV=lpakbThqKe>?r+mb0)}Ya}FQ%dgmS+cpB(7~AJlzf~G^yA88;wW<@z5v>)j7HPu&POCW%8XT zEA`#bHHl%ZtVCBOQv6;xt=$kmQOv^l+I6bu$DPu*?>~!Y)n-MzaCFlx^ltC(4iqCa z%Y$0&{FgounqA>qs5QLuY}UP*#mVruM3q1G3zrpXr4Kf(srZ{L4Cb}7#m?!rIyc5Z z`EFPz-@eyJgO8J$A&2hpc3o5gT~^!lX}mX^-%hW@tDheNJsO`}eCf94J*|2iuZ*j{ z7Fr|KQECP;?MmmiL@qo@>}U&n6*OC(WjV1uD0TU=6?K~niNEQ@#bvurmy4cpC!*Uys>m&DFrEt zP5Fr|*Y2lIx%p$QbG?(J`gy6NUlyB<)0<1@XZ_N+_nP)iV_4Rewj`8Wt@H0~rBk_V z6r{`Jj$x_dxwL2xM(@L(CV%P=_@Wh_bx-efZNQ!Pjh{(Zy#!Mg`5h%^^Q+&yOI{vyCtQ2)@`*;?DDUleQhvkUeAJBqi>cB zam2s>swu@?Z!HQ^ zx)tngWw-mf)W^-TW)-f+y}@m}SKEYrQolZG9XEdRDVNbqTcL|jqgb=KeqeRY<;t?R z)>^-E%F3@oQ$H<>`mOPT1E*+N?s1NlMi=!GDB60X|og=K0b z>s-6&Us&3%Iz39$18*0EHQJ(CRs1+)7$4JJjiFi}$Qd$f&fYt+}(3N6S3Z78aR?$G30 z(_iY(naORQyrU=KSM6Iz6Y1ktc&5(Y*Ou?~*c+YC)xjmThe7Rj+_ew4y^C^jR6QGq zy?8pkd<=$F!xuci{YC8`CiLYn`UcCt>h_LpPcK;)z91LP+g@4JPw-!A<-P|K2n^p&6eyJw|gE}Ne8rRS(D?EpI2&CS3$QCmC0%ayOTg`d0c-AKx_lq$S*F z^T*jd{<+wZ<2%0Ka0$7g?W*it%SPa8TD0#}uVW*U=1V!W+g8;|5x;tLA~xTRtBZ3h zYJN=CZdaKv=Cfi&Ir1WZRttB^PBMG0R;&}#kArthkCPpoT!s!5Y(tJ9^f*&JWq z7JdHm;6lF8t;z5v^e1V3KH7Jaeruw|&hyms9C6?Jtx#2u4M{!IN5lK}Ds%$ss+Rfn zd|+u#>zb}S?%uAQH%Pmcm_``(Ps-KejqQ6@$*4x9ifg41)V;crE*czvE*={l-tC7| zZXg_=OX9g5$V$ygv`sj6-N-y8gQ99#KaOu|t=_RV9^Aawy3Tam-s~fF9BcPITEBad zB7Ct=?C!z9D?IkjpYON_d+!Hfr??oeR?6d1H0aOx(jZK%h3APCbu;XXsrM@8gVY!5 z2S+KZ4JD`RPkqnR8?ElReKc&6kyP?VUo}%y4Jzw`{atORO|4&Dah%w#lr4Wev`2mV zJYV&mf|SEp)wVEltZ7oK*8EHQ{P5sd6XP;$ZD(_T?oqizk0@QO@AdI)SmbuogZI^w z_VIW&-^ix7Q-+e5-P&Fofbzyt89zH=cF*`>0|mltEG9|*o)1H`w*El5^GvBs#y2mm1Zm}*3cR4XU<%p zl@C^Jcx9T#DlRAu@x0ZnUC&1)u{lUH)5qw+E;+}azw6O~TslvoAeGVsFeT-EX&pOHyzecSeuU%~W3d(JZig{bwhd zEYc|byp`$RSxJ>{CB-(CTJ&_bYAZ1{s5gBkbEPo6_a;{9!H`aeziQ)IH=G} zN{`&eszD89=Ovx{hhS8f`_kDm?9qOd?9I8k=sc&7IG|ckq(r`a=lXh=gnhC6@v7zz zJ{lYIX<{e7TC@W{{gyncq}eu|QtDHYmZ>)A4o_nG@MS?QKP72g$LUbNZC*sSM(-VE z*n6H!d$&ERRdr42QuSHhbf4;l3F&<}X;kc;4S za#0T=xmul!JDa_y#ok`rHzss0`03+Z5VMmG=jT*`N4=E$gQ-z zN^z#XkCm=E`$~F^>-VSEjTFQDb!%d_sIv{P=3S}L9T|hlgWm}iqaqwT>)z@0s4Nb6 zO1tjX9ce+QduXSbszo=+cWE`IL2(@ns%`ghxE;E>HfcU+a_8!#{kc0cb|t!)7Gu2> zZN!@rZFk0_?U;@QdEgncdfPf*YGrRor@>4s9Za4dR8Mai!D#Fbt>;G z&kOp?&Vv@y@AD<~*H*Z{rZeTT)9vbYS&zr!1^4dorsMo3+_sxD!~Wq;=rTMrr0XBYTmK;u&|3>xObuk6(6=EK9KZ2 z9qP){EV-Gwou{}LG}du-6wn&=2Gw6>E5$|iLy7A?wfun)3LW!`^tdK3MWcr_4%}>{ zGpkQ4_mo~}18VhaRj!sgOz>_NZ>EY)dTxVSr&>cRX&;+Eew>}%)+D1y`tB%}CzC;M zW!P1X=)OSvgQU%OOL3J9^g!}Qv!C;J>5EjfrVr7crfkNr2D&-b#&VN-x@Zm6ZfIOi zYe&|Bcg@LD!z-60o>hF8zCueX=a&xRlkIj_~7 z^S#sYu{j~Dd0e`igytz7OpBBL$#H#3XSznW-o13`r1Wt?BsuCmcuy&uxjLP6u6mcz z$KLJXN3No|okq8?Oi^~^H>X^;Qi+2}tJ9wCq@S`-|IVU%d)nsK zpVe-%S(2yf<4W-@W#Y(TIB%~zP8gQ?#>(;xTN($w!cQxjP362_liK>E;qB{p?piJEv^; z6brMYb}_2e6X)FcPDJ&6S-L#mS)Qh9Mqf4?PBU5_n3g&m#lx>=EwN9|>S<6KMa}De z{qp;DQ2W`u{Z#1HexCO`^-gQ7cKpNH+S*1*bhaLd^UmbnIK8bGQVumSiiHcJ>efP- zC&yv!TvNL@pKI1YCiTXgoaw>JAxFOvrGM7G?LIujKkkODCnp6o8qOXRZ8nkX{phin zlH^)@5*`is*7x^kKSn);l*`7%^7qhJ8)c%802De)e*2F=7qtbT){;gj3fIw1EixdOL&^x&1t7HYS_LM&)apSX!Wk9h2B}?`qOYSHo4}hbVXGEF*M>>rRGCBN|t_m zL-&d`2qV3-s@p&5T2icH?|dFtC91?3?%*`iMbDs*Bg(@#j0klrq$VoB_D)U0S-Iag)P&wvKItSDCRQC1$V0laHCDS*W%Es*Kw*6U6>~%E= z?Z~NxLM^!p*QTit)?(}W+zpCP&BDd`se1ZhGnz_@=RaOfAGcRG)@W>ZZfC|+PBztF zi7ZZ}UxV|}$&t0VGsZ!S61zfo!R>VIw0mmti^TN~oKAJzqxO^Pq;+v^TQkM}`0hvJ z=C&>p;v0Sb%ZJ0Os;V{XC&I7dH-1EpzjHUGQnfxRb5&IwH;0v0p>%R_aeZ=pO}g#w zP?W}GKn{Ohm5+-DhleL$56H0P^g0*4(ff+lx#`}vibR`CxFF3jrai{G#wTwAL) zfACxSpy|Yy9Id-`Whc=q8Y!E#Qb=l(PF$B`hbuLGyJsJgxVG<#M_MCzno3Q-)pwh^ zHXQbc-J#!UICHb9X{Cyxb>)$Mr}jGQ;f>bplrJ@*TpWCn+B9X!MQXOf2}uYwy~=&} zy;<)5>Q=A(wg2mGw(#A;Eva39{=Be*VN1|AKksh~q8RYh+s5WvY*R82 z36=LVqw{Q=tH7p?tjprcH8S|CaEikR#v~Hg_PiM8}BF#MFkv-~4*0@ibgQQ;} zRc_e%_2sgB+S3mjr9t1@!gi75kBhunGpuwMJ^Dz?7G zfgX&Mm2n?WjK_MQ^@4twW~B4U@krE-q0<=~R8{8J>qu|kr5~q-UaM8Zlct^7_+U<^ z-Y9I`MSVh^cTKZ?txv;3^*75QL(x1L_UmP9V7~7yDDADz8%j8Kc&grcoo`00Xh7>qq0{Zb^6pl2}(MDP`Hx9+v$f7A5ZM9Th_}dtW-v6gfq>BR^)xp)%8w$Vh6ug?#11M(=&cKw&7C0OG(A=Nw?z0*5l#X z=TGO2I`^gO59P|yvp9#Kqab?$`RE>^}GvB8HM>#+}gVCxIT%hE4h;cFr4v zU=U72&x*{i1-{k!UQ%|0r)Rxa5X5BgS#FZ#nLg^>j$Vu_*H`_5duIpD$b7sHAKc|K zjZJou2D(2{-DYz->I{`ti_Y#v;nAAJW4TqDEq|_8`@7rg8-pgJq4Yrw>(uTZPNzYr z3WjT&4z+AkZuaZuFy=_ZUzCG-g{&m%IMkfGqRy=kDBT$P9e=I*iWhpa%uU6JNS_Zs z@MJU!&(1%6|EATK^eI>zw7#9R=SHn%%P*22tv&Bz+NXErWVP~kGqJYZ+1=4i<6NlD z<$3#PaoKUYJu~bsl68}6mn9nO%7@#KGm49Wu7@Kp*1|8XgT5HpyP2_&>E50eo2NIW z9zU6VTlA`{Wc>A}AFdxJ^Y#HdIH-%B7UX^sWvp)J-FV)vm`+DV>!^er$(fX^w{eBSK zbv*MXP56dAsvor4PtwsQq(rzi3r|z$!P->3h;yks`g-Fk-HTc4W-!sEVc6Bj{*feg zwb5++h4*@op14%}d0?xZ<&2MwMuBTdk#yBE2K|EF6@RPL+uzSgO|*y8-pU`y6HP34 zfAa2GzumSg56Wmc73q~Ws1CQTUi&7=+NCE)R7Wc&AeWzXFJI80?lPyjJ8d+(*QDsE+qphP-W%%2f-j2vJ ztk+VbEy~hNr5#G8uGMLFUDFJ!yIR{*&neZXk@ckB)~MQ0?I|w|J5{}V_O5nubR(K% z&}j5;rQhhCqAWiadRBD*lhVb+Kiu^{(s_#%eyE~m1=FXkOj@I;F}Ty`T34%vZf9(L z=n%tp%&zdE%JUzEUUxkF^68v!8y~-PBD3R-o%A8@R@_KalW1Z%tI>cqlv*$uCt$WE^#I~?)`Nd7UrG7g&5Y6|Cp|Xy9&e67CJgD5$N#AQ3Hy2;i6#70` z@BDR{zN>tbPArK`^!;QpnVRw39NF(4?qY8&HwYVyZg`%RI}?h>2A9}aYxZGd@zG(AQjar^()1#bwP)nahmo- zBuy(X+`-lQLy{PYIrUC>zSA&=_6Nt;zG?$1CKY-oOV*b=8n^`rQ6}NSRE?wKUUY|+jMdySX#hb56BhCD2eEI#y zS;_Y%w7K8a=33IH)EM(UGCuEgg{^oqZq}RqU||?z>p@;$g``e&-Y%VdvM)+)>GG3p zPlsFExe}Gzf!+9^kww()I8))wC0zUYzSFR3oncLy-59rXi7RX$rAtDCyA)vu$=;Sp z+?&qz$T#R=WOhljY>(*LY}`MN=`&r-G}jTYoama;^>pNoZVSo6J)rK%p7vdDpd6UR ztCF`KRomn4vDOply&VKkT5w*BNA*_75kDOIQ%|EUIw{lj?N;j^nBwQA?V5{T?43~h zR3FWvBd>q_LDI*Hw@4|6t!rwp%b!1X&YPmK4_nh)`SW*c{K1^Yg=)J$tLt^|<8h^S zs`oou*Shwmj(Oxw0*>@rtfH)&*;*iG5A$X#1PNcs(VB z;r!xm>UIbBw{ATsaX){ygx}moyD}`_l8*A(^S9+e?T&7A;Y(R-cl1xofv)Kd_absy zgFBiuV`6>SZ{$GW#)0YAKPZR1)|%b*BCYXDoKEFsi>lrFv%NO^wz>Gyb|Y%@mmjC8 zDU2QNYCHCa)U)hHvrj#z>ut8t!(~dWwC?BXvcECK#QC*0NUi?Cr2?@Ulk=_-3d_fF zeQYlhW%5|Dys)Dg!`i879)3MI{C+8(93IpTe(?Q~6G(%;oAT1`GSFlP}qNc3_b z4V!~bf2(X*Ykn8saz(Y+NNya9n@n^=b*G~ZnVa-Q&@8TJ zSGK3=CHdVsU%zl3oV`w0PU_o3>YI+y8g?XYF4S9-mE1H3GehzRZb>PNV zr8~VMd%j$Im>c`*G9`-gZ=1&D>32IVz@WIN+ly*}+Na&(%BUB^!+RPGs6M(V6ds~t|9iJ} zV0JI-mlw*rpVt><(myq>e-3Jm({_DeZ`9N3b;U5ABsonTg_-P-&hVEa6{utwm#a#f z-g@Vq<}jGdxt)+y`RyAVvwt2;WX%D5PBeo@~lXvBmrul^;-O8=^Pg6~w zB(;GiwzUh>Qonm=L$A8E4?h=Ae=Bh9NwQLFW6ynv?V#h%sl6GeW$cdWMx;gZtx>U+ zByBA^m!oK;U0$81abZ9Arm8NeVp-$9md2Av?xqRo$o@6a-5{Fmy(A6%PqX9w38`65 z&|kMICwybwGZ)Rln2ucK*4sa7;$BnkBs#r1_}pvA$%Ae6pHn{yH@4gI7F*#_v5F+6 z9f4%eBR}@Y@LJSvIxXHY>m@==zrQ0cy-V}u*2>aS9OP(cp9amnXMCeUnH$+^cr&+W z>QJ9`dfh!4Z>51?or`rE^KOx}$1~5Uo~@~^_V^RMT6D}G)k&Wk5!dUi>hf~BbT0yt zEPdPW%F)tauk4m4*(0uZ+cZLxwzlor*G5HMYPa)ArzT%E-nlpRzA}_)+F;X)=k$tK zJ-zp{qW7J~?7>eXM$72va^DIy8kSdGn)F zuiO4Z<+$3KnZ8(FP28Wo@72dd87j@09LBz_R>EIBp)oE?`pld4(@ImV<4a4ajBhlz zYS(9XO5GdAGw)H;+LIpj)7Y1cmoDkk#2b3~?>UhQM)^62EC+>V24#T|=YyRM8| zCran0KHK%V$JVoYe&lSIZlgY``XLoPU)kOFbi3QQ8lFY9{_fqdKXBA(d_P?++Y5d9 z{`yiI9mo2{i+hxY@o&5===Hnx)AM?jtW8fzN`A4)*POm|8uJh488u60ns|IS8@=oG z+HSTTx7@5dfkjhZC%4*kVavUGqkk!N7sPFdvF7g<{=KUTeb>2kS7AR4qOe1E zzW2m!`h$hlqch1IsDqhyr>gQW4SnHox0xFcbbT0KyPoF@G>CTweX{6%iZNq7wjw9u z@2N9RzpT^luI+fvForbkjS=FVlj`zNEUT?(3rSQxv<)_%~TIRBE z)i38ePjAfwc~o!G8Vw#(Y%UH|fnX+uUh@QMP4uc?nbAR-+|qg7uF&>_CU=iLFQ^4v zH)@toYh-xrD${w_tbOi|yRq7?O1e_*8qI#`P<5QqaPXP5hV^E5cKa~$s=ZIEr~Yy3 zh|S5P|2$gWYRaN;m*ya5dw;2@W;LwSht5#uq;?WXLN^9{jqHE+;JgQ>jh4##)Lar;_}7T%Z=TAno4R^Tk%D{^U!2g6lEyBf$H@~(UN z@i*I1)d?@09Q}4Ex1`IyZp~t4v;9h+NToO5Pv+aWTq&H9Zta??zOhaW? zfBDUD#`ga7{^9x)<$sfQn`)>l^3ZCJJ72H+jjmkn>$baXMPfa5hS-}0y@^PtX!qbKvzS!zk5 z5k^zJJ*0Q##@e0ww~}(LH+SK{H7#${)y#@IlCQs>kD?2u*M1)A-A4IP_|{WM$?Aj+ z?#uo4c<|V51ltSZtK*TTkEX4uxE?%ev`?+sH803Nzc=iq(ddbRm*(<)y7$Xbnh%Ly zm&&R()KH6n&B;GY20?^?FZW}o;&)} z=_A!U7dN-xB`Gdh)5d*U|3Npa#nk7gVsv~=|3m#lT4%jrk(hk{>o96 z0cSJ^+i=!0!t*3~2$He@*u7CqZ4<2BhN{}tlqtvE`iSooT>WhD#a><+ zVo-`YPm61%Laymh75jb~5$yJS)sBKS8LA_%85%MbKiZFOtbgFX{;F%UVq;f+R`-tg zLFsOydtWU-?W{^r?Kg&fZ>*klRjc?|?S&$Jn%32m&d+Zxax+tCY?eRVhDXQC0)2RR zi1oqO$aZb&b*l8<5yIFlQ+4J~K8V*B#X`4w_`{-Vd6@JidS9iw*PGUYhMMxOh3Brk z%Ov$?ORRhL#e$Tss98?AU!4rw<6qUEpS3}6Y4ivumS-~~tbaIZnct*^JL>u(Ka~1v z>7uGu7bEkxN=?*{A0$hB?5DQ!kebhY%~e~8LZ9yp8q;_*YiOf|Bi_x8QR)VdilOQQ zlF}`{9}G_H^1;E4=;{yV!L*jf$fzMvQlgLY!Ire76vhoBHAvSE%GE+dmkTjzC~||Q zdD{Kl=uR8Fy0rcFE;gUEkAu$5heH48=h;=WC0upn!1cPT_JA7&yD~KjO251^+hsG1 zhhg=08x(@dPe&bpAKg}+Z-!hFqZ>tOwVPk`mM5I`E4oBK zT?!6gPSg$^eQwT2^G3YY2bC}~tM7mNt!Sv7%ii_q^5@s3Slu{Fv2jr!8NbYp(r`a^ zjFNw^^?#Oo-@L23-6%}_-lxWyq3HZH8h%yZ)x=?kn%%{$`4IfFn_3)P2nDNi6E>Wd zz?bbi>%04|^7-VnZ>MO#rLK3ncNfF`uBmpZS4gTm`v1B3K7E-B%K3ro+{@L$VR01N z{{G=$=UU&qo!D-qrJ6J~NtG&n>$4vgd8hR0OWQMK(x=D7BlNpxk2>L)27$yyjfZ;b zG9CB(sHyB8w&Il=R^NXUDqY83jf|Sq2uIQd-ES6)>3HxmT|~d3pYHGCk=`-eTm9tf zs~*r`u{@zmRi7SGdh_hXv}D&bjy}2WSRKdqqzc7Il>7MxSrARV6Wx zlWtusx7T;e^+?vHcMf%vE|n>LClBe$+Zub{?-^xs=ikXRnI6sPKDO;N(UvNAWHFr_ zKdt8Gc4@B?Wv9u$_c-OP3%g09)TMpPj@59fS@w`F6V8zzVmj+>e^%DKoYG>&(zyM- zaN3VPOgu&08lCcWA(}Upxt)yZYHRehu`?XXqOHGVDcAQ48nluEozAEms%gx#t{!wZ zN**7HPmN`TQsahBNIaQ8`m>I+30}13`Cg8vdhDl=X4JNyzJDgCQu$2lJ$CG{Z`t9a zww(AKwK{E&M9b#4?YT(X=1o!j`uSRw#R+$3Hurb!N9tYPt<4#o$SK|_`=}Y^zZL#kMqH5wp{xc2ERzt%S6^M%;Ei9r=5+_9|mdhYC$B6)Ft-F zsjlaf>*1wXkfXDBqQ_3k!Po7(mZUEe<4pBK(cM_XnMS(Z{q}m>k6Xelt&M4Dq#?@{ zRo$1PFV^S!Zv3KBR1_NN(SWW}0zh}mmDiyLtvtANIaz#}26}_G*7t2{*FDn@f^OK8 zW9mC{d@nzzncDpPMyz~_t3{t`t+-{Z=)Tf4i$puRr*ndOd62j9C8ejfO&*WB9Z_*bx|j^;BDJHr?i#;+3oKi9 zZI`36{IpIY>)E_tOTC>Puat+R^w3KrFT8zxxLQu>^mEEzyTf9;t=dj|zKK3iI&)`q zc3+l1aQx%_bUj-oZMvfxwI73T%fS2~OKA9i?bOlJoNr(B(S{qDoM zL+>M((ujuU`8Rj#DfLCL`J`4QI^h$eIvVP2V*yM`<8 zq}HQ#s3a#_s?{jHJM){8*y==K!B|Sop6NPgTDV_DQ#x8qX}Ik#pF@SNx+#_HYD6^M zSkm39`lQmQha$D9V>^vzZzesdqleb*;BF_mCoj?NTWJ2eOlIs-9zPNgm!6Z zBz|kso~7_Ylc8z1_qMnRhx^*pE`1{1M)UoL(M)+CMlc7Tv3F*Ue(+bw0n3pRe7jW10P~Hfi*Sw_4;4=rXnBHPw&Z)y%M4gTDCFcJ>!?V>Vod zmaR-(8V*a%S^s?1b;wroD{fz22%+zj))hxSUiP|^WtdFEpz@GhtZDByC53KBRa=3b zgp+meFI}kgLaKBA6Mt4*Wn!N^H2=T*7>&~TXQMTvGnbJ`b znzn^x(D^X^D@>)dffnu0D@(U3N9Frq>rPywPs6a6Y^RA*-+0t{NdV)NKW@`9n#p3h z7^;iKnBG0Pfl4ouZJJDm&zE;4ZBV&e(dE`xox4es4*BKDcovcFnUgq9I8CcO`FLl_ z<3UeLpZTHv;ag`jz1O`cI2t6A!I!lYoXm-|Uroj-l9Z`adN`gMFFhrJz+X7wa{EG7 zTC>@cU2uY7Z91fm9(VUC?{20!`$&xUGMx&(ET?ac=-xPQ5^FthTMK1O72khSRL!W{ znv-1slD6WOQVY;u5&Y-ZPL5D zo$}43_jvk3Zv1fyinGJnCeX$T;qSu{T`gNjsTb`YQvmxmyWc7Ecv}^E5?$S-Xku)a z0ksU3n+H}P(5<9CF9|i8^jW1!Jxo6v(W~0H-%EM#dOdwn-|n3*>4y>Zx1Z7~t7+S^ z-%O0Y@x9WYO;h?-pQV@Giz%2aqL#ZT+WVvNB22mBI{iym(WrK&&t7QGa(6aMQmpw= zS35yzII-vQHf5XlYLXK8-4XpDlg5`;`uq`HtXIvEFWUQ7<2ZE%#n9+zpXjp-`+=4w zkA#lt{rhNHFVjY`SMlFb`j|5K2CdSKF;>#Y=TnQFMZ35~>4c-Vo31MErhb#|hu!BV zfiC>8L06@a+=YuE6r3w1wVYvJWEWyaI}!l%o*|J}bDPVdI5Ihj&>Q4JTf_0`^9 zk|*)rTOHpA3O%l9>L8$(-XI#8%TNj_^>nJIl^-?>Qd4MjPJ+ z42SWYJcZKdWPbOgyYs}b%y7V6tl~*`E)UGrh|aX8(h8qT&ra#_;N;_I(!P71%`U#V z3#&-g`Jfe0?r!hT*UM*5@rT9YRBt_O8u8#)UE9&g%RHd*Z1Ipb08OoHd>@s^t%p$Q zRr_`Bn2*R-q&KwBxz%CO*!hS1r;#H*Eo1lQ#u}vlwu@_lrgU$sR%&?hy)mMZ8_{2M z{rx^p^Rd*j2FsKO2eZWSM-!3;Yj4sa&EZ0QnI5;h;o8qlN>A#STlHzYr0wZyXp^)g zzC(X}pFQZybNX0s4e9!Bvb|Bv#lrnDu^%PcJqw=PST(%$A&rAHBb+5Y>TM}a^W{T- z_>x!C$Vuj@T^*<`n#3b*I1^Nn)-|JP{#Nu-JAWL|^+UX%(LFUKr8*3q!onbFh)bWP zc|V}ueK?;Fjvt)s3%+;p4m{eksAkg2m#MRr=xp$Wa7`PfGVe6{nwr;SbKU;JX*2Ral17Ue?0XJdb zaVIL_-~aq++j3aVnqzy52m-FZ%;8d&9Bz|D1h${T$mMLW~*+yJ!S1Meso3NdG*!qiXRaN!_7lUP+R`9Ut3lB@f!t#s+*S+NO zrKQ;-u(&-St5jSNnyvVltpSP4%D>%f1Q!&|YXMe4g*BjY6QS%SEH%pE0_GfULz!8W zfJ?v<*c3@%n>TRWn+tOJs`YI1GT1Q$mqukP(89uaZ;OO$ zRKhBwuUnuI+}92F9fZ|rae-)95*6DOmkY<`tn+O<1Xu|i7pKKSz@Cq6EoxYW8#kq3 zJ2|nnkYP&z!uA-(9f$lU<0p3#&wqkSO69_p<@=qHhF^c*%HlIL4+;d zk82F$j>~W|hwFB7Y(Z#T3>Fsk$5rJySmihKMS)p=z7#O*7?W86uBgr9^4+i+D#y0{ zz!glhiV$GIXmnKEU63t_imn0BhD#!&x3J~l^KEFrHwdm4&2|-H<_dPhR#1m^-38o% zf?*ON%tdi2Yh37do0$U0?--ax!D_q;3t*FnlwOVmAHrVPxzzqxdH=EnA zC3s<>UN}_{5PiWYUUyT01#Po^QegF97JUR<`5$YQz*ZB4?Xf@*!(qD?+*brp1+f$i zna`Kjh5Z5u+bV|_m|48p^8#yuTE^ZaKiV zF$8GjaJAzMbYO*H9v6Pboq+h)Ju`4S9kz`VZeYNu2m#{4vHx+sY}_%2gSFxXfi1*O z*tTgL?wdpSe9>-T7i@n5*z$qn*`^eTy6C5b?XAW(^TAy@kwCC*fFN=Jh_O}c1%|@7 z%s7Y5fgixmEw~CckSm}*0$Y9?d>=joLxo_^7GdVtqrh70Xfp&?l823Va1#jJT>%0H z+CA@96>!HK9`^`i+rn{-6(P!I1sBlz39j(Z zY?Q5tpWRkq`+-6H;j@H*J!!UVI-HJ~N475w!!w@kE=<_QcKHEY_GNopuzf9H11l(q zz&5TBFr)x#Wm`5tE8!_n)R!lKl!QeG0r!;v%*5Tg1O!ijJYHa{?&A(c0>*y?S>S>B zK5no*0PNnt;if~#qab;~of&vRU>lfmBsV_(ZQvK!zJvn%CORDti_i-^vI^YE2e(fG z>Xh9m-&KIT?(0NgrySTN0&OGPkwO51hwcD?0h?5VKjfeDEJq=4Q!;@WKWOgDXSR!yxh^rj7E<`luqPVdG>@UGHe#K*LLe>xPh8u4Ho&jZM zEC84`FjCx|0Cyik#*UkSK$!ub7_8z}aRR}oARH!&AYcIHz)Y9mHWR=$a1VowtFX;B zF=2e&5dkw3+-p_9Oo)*X-~j^cv4q>)vF(-wwr2|?SA=kE6BoAA4rXewO(^hH)?Peg zEdaFyHUZ;!tZ7Doa>s!tWEuf*Cywp-!K3RkY|6u-0M*Ed3SmkFXF3gRAq5+f;MN_8VT^DSB*IKdLGF)1l=0!L$Ote3rn*cj z!My?5CR7M1fU_JXzWMGTJgQ5$UlweW#^aWL1i2jUg2HU%Hf@ z90m-~TnJ(64>lnO!W+TjV|2t67#jnb2(o)-dl1wGd>oXP0O%0pVfRnMv%S$U977s{ zdu$3E+Z9D%o0t)7J@5oTVSIzbER_K#a2(ueC-*8~)jVz$!{O%N060)JjCEsp1*ZaC zgeh|z$96u0-RA_1YJ}kq&k`t((NYW*Of~^XMpHsW0MQXa9(Sn$?|R)C2sh3l7;Oon z7pv7=i+d$kxTzGDlpwiJ(iM zD%wyK2JHmF6P37pleb)W$@u}^@=X%N2tLFCv5&yCgiJ{w$n?ORIM`toe|wdEIL!J9`dpqBV1fd!hCLS` zjpo&k)Ef;8%0h7KEy9`yJ2dheV7kUI8ITM%SHh=2<6#?b@fcoFv?ZvN6Wk7z=P|2= z^nqhCFM=Bso6G45VKD^uV~1Z+{=<#~)z)_Idu#N}p z(_vfsWlCMXFBLdC5BsVCGC-~>AdIuLTEMC%Z<`o4>>{{%AHo=i=^+Dhs67N%9=Csm z>t(bHBAXzvdIv|uo%8^WGxyHZjW?CY2fZPmT;igywz#96K z5PJon{*ayXtc+~qITq^pH(`axWE?C0qq91tL3=Yt_a+V8DQoO zI6%6N$}V=^;J%$`2z(CIOkyHTxZ`jaV1}4X&SP2~S|%h@nASqWB7NeS0E=-Qagk#k z7;G~+xGWD<44}$5J3|`6Fz)RE&jGCo5;VuNPCxF|x|yHw%zp)zxbhqdG?>$|T}H9r zO33pT6n_bFLKL02Tz9}e4u%e|CFFU`MX+xbSqRIC*_MMyPccLa0t-bDW1!a(nHFYL ztOcQCi2!TI-6T=)XCfJ&cXDvZr(b*efK(FXIC*Y|Vn474d@9^Cmzfu1idYYCo*e5H z(>Q2r+%1%_>=Tm{Kn`q6{uPg~Ym#-kAl1uB3G|Z*OmAb`AENe(tOj}{8JC5;O@PiW z$d?43RXUGZzknJx1R);b9h!|*7E~e6zJw6~i^gQL*UH8!5?Eg`z#htdgz-9oDMu{F z7NBYKV35V*Y@bDFdVxoV$4DQl8U%L%#?2oIIGw=f92-L?hhrEx=387|ci0*n>&oS@ z)0zX$j7b`wr^o<(x#)(K!1`?RXo<-udyB9%7js)EeQpwkngEKI0%OP>#^We=9rZEak!vdC`li@eQH2y-~$irCW`OToT zz$-8r&tez!1fiPw}uG9V^#_2Dkd{LVj4ji zn`bN=@(o}|2)B^}(0v&P}-o0|H}ho< zJ1K;`siBR4^kW_Yb}ZzVW~?VS5vDdHKS8;VM?nm}1%1ZAc(Ps)%#s0hGOYpF4)h%$ zXTS}}fu%AP3g{)rVUCdZTcRUzh}K|0JYkr?y}>C=TQft07=}3umlv2(7Q$jK`q9gk zU$$;t(!W1!_;33Ur~L1a9d-XtzVvbg|9;}|?>-3s{MP0_pNYpl{df0=_pJ1v{O{%Z z{qeR2rvLd{X*)QtzYSl@MCsM<&-~Mq=`TN$>@TH@-+i?I_Z$DcjW~bz!P}?0|Mxrm z)A30ET#sC|8X;1q6zq$a_>J$F*`1{ZPwub)Cj=y;FYP(D}<#{bL3EbrZ8=_je!ofAjv+o5q^|3myN<#l6>;{}%xh zO8D>=yjFj6Djeqjg&Y1O=Ka<2;%>jku<2h_*o%?IZ-2of_)9OCu@`^xpZ^A|FPD7d z1b>HJe{~NlzyE9CpV2=YgTJ^8(x{h8{O2(Ddi<`M)Erp;f^qztO^*NL9sja|Cf0j9P8gVVpb3T)n0yg{FM*?CvFYL8(7l*_?i9RFJt}jjX&Y#U)(S|{vt+$ zTmH%a{*)qRM`ja$31n{w!^`K7e@RpR_V}}6@t5EJCuQp&4(|13#>#Sn{lBr^KgduI zZ!3r~jlVL5KQ;7!KmLy%_pf-z>QBi2YC?aO?*5siWKH#7Bj)OFZt?r;N%->LEavYN zi zji3NR{UzMxSAThezZGo%=E#ldAMG7)A^iT={D8v$T|4}9)M)du-^QYrA8vJ9^>wo=rF>}cOkYE3`GyNwr^0xqu z&izOI^ADwYX#eiF|8mDa9{-Ez{;$Vh$5eJOV9ML#&q$t`H@IOQ+5ZJJ|77{$f2fDI z+Qm~&L-9`Nt^n;X%F`Pr)%d5Y{@<+1KOW+r-@1b$w%G5P2S>j@gVGlZvGd=4_fdZQ zx!{0Q%sTnk4_@VU`a9eE%j4|j$D2_4M=xYe`{Jib)@=H}T=8wjV1h;EPx1!A{@{_n zGojbd{sAN5FlpVoe_wJxg|DLu%ox+3vmsBSsgn!Pu9{%Fe+406W?${k( zPCNU%8~hRP-%_tXGK;tOEB@8R^!(NQ&jQu%cmKihyXJG=7C(1hiT?G`%kKwYLa2F7 zDHZtd)!+Y8eR|3&lYPW2vYP+E<6nEy|4n!Qw`2cT=J3}+MEO&w_ycgfRPmd3{5Pc# zkF0gWKiu^pzrX{#*zWfqQuZ}CUir{pDm2(Af0Z)){b+#f_=`~TdOW>e`oA4-IW4fW zr?;5+heYakeC972W&g)Z{)2P>Qx5aLNlO2@Tk;Qa?(X;Ze&h7NBInH=qC63jX-cU-6!-E&rro|NlVJrdc;AH0d8*ID3~>$@0J6{;%pVt8c9Q^U;RZ&^zytpE&Q+AXZ)ArC&J%9R1CbK^miA@A>!|r zGCO&@l-cqBkbIploU?#q$Jt~w91utZHopW%>a#g4IPnmt#Ng0k_5+t$U~3z|^nQFZ zpBF8>8Dz)?;PNCNKTdG09uM=waa?9TwUte@V3QNG;^xI?XRzUxFw~SyFXC|=Dh?6l zaPl8a%7M96IK>NJ@NXx4!E_)FXKxa=1OSJtba5Q3JzNkD#<+6%9BsDD2+p?Uar`38 zHG~nqFs}k8SnxRJ9!69`wc-2^n305&^f;V0BfxA%oL9rK1uJl74^E|lpD>V9fH?*N z4mrj-UfG@U6%%ltXTER)&c%kI{MlL&IIj$c^zv+aFgtLX)axXB4hAmcv^F+3Mu3$V zaJ{yCh%StgCO8n44aCJIQ8?C?JdUKrHD}-l&W&e7n>qGnf#8xf`L%?6{v*s25penm zn|sdVTp%K_HiNOCwEKysWRE#T5)FzJL%CxoZu+3;t$9sx_q$5!)PJ|m682`sq6 z4GdGo83Jrlg23jnWK&{cRtCvud-6E*jl+q+tiE6#haj-w#xN3?x zwgQ_~frHC&=r0?i4@0a0RB=v`fa9`po(fKif$`2TdYDxMTknG8Q-JdYdw8~{01PnZ z*kTB5+PZ*qmT_V+PNU;-wh7L$;PZ(|FuM#^&H&7X*;8y_zkq99kbKTwZdp7V#x3Br zVQLHylgGf5V4{VApCX2bPDz$zg0g5C$GB#=%4$9C^>dwD&w3;?zuZ zdiZiaSBm*I%(26XXatcqYa@ZpaR-mWwSIV9n~i7lneom9ss;-u;2bJ}#a4*CI2rME zMhCNfoI)xv0~Z7g_Xq+!PRd|Q;;;!w0*t&DSP5Z9E{@=b8IrH#-vz{54(5|XEwRQR zY)C#nF;0}i2^#{={pIrq#G&|kP~ixhI0JSqu(=undjJ4q0p>_>uQLdtQQ2HzY`51b zu{bplX6Z3n0^fOcMnri)30Q9o0&8wP94yp{lMvw)Hsc@eh!b34t{Kcs;n*~1f)j^v zE>j-;0RMS(UXH_geQZ&Hd>T$ZI};}X62vDqUsqtO6cL!1!2?U<*i=P=tJ5F}!pRUY z;WVE)h!YxcYCFy|aDo;jSJg+!BMQ+jy9=J&#UH82{O z|40}JvKUYDb(i>8*vG{bIP@8u1;}P(61FNs7DWm3C4ew6Q$`wrnef24-n23-m4@r( z2yA{P)H?=7oR$aEcKCd18?H&gSOLH)LI=)P0YZUZjuY7siSoKYdI2>cu!%=d?0gji z2uBE1Fo6`%9Yabstq3>=!I(;N4wL~Jn5B@HkUqo=a3)_?Z@@^h6OiQOm%*7ouVe`W2AUe184Up#Uh!<*T%Nf)$!9kaHbau* z*i13DPzEmk1zwEv`3ak^#~~45^e~?r#$g(O!IF`@oUOA`WM)N#*Y<{KP>AlZ{0rn} z=+?Y|>%SpXz*ivH<}OMgrC_-i56Q=??FxB{@;Xb4@h>(%4Pz{i!G)1_j=VDX*Eycq zWPi-Mkah}aBm!F&iLDYv5boIw&aBip=NzgfoBH>I1bk` z0K|HEE{1y;Jp_abOeX~7q1pOqu-FJJ^}*r2a0X?*1W=Y{u^c#SYRne}%*>DvqqFni zPy((fNU-uSvEac)@;8w7L)!G3-{DMQg1iAOKzQ>-Sl@vl%5%8Z9xx6Lm+wKu#cAt2 zJ1Z*>*aWlz%rV9c8<-RRm*915ISd{bi{v5RA%SEx z5|t9nV;Iz+X8>!*If5LUd5G1*@p<*&*Kvk9fF&Vp);`D3i_v6UyhmUwqj4;@aa`^$ zuTBTd1#%+>NL+pz$K(MvosqF6jJSDg@<7>f20cvQM}AFk0xD15U;s<8IkwmwLEOxP zHi4z=IJUY7@@*a`O|w7Dgy3=5+C*>zmN2mCqBxrxqYIB|CXaxHc}9-Xm^8em0|?3x z5&%jGhYNBrEdUz_g%e;z9IOJ0$_~nC3}pbL2oOXzDVb+5%IGzpM+lhT%s3h0-X1)g zOe^5yK%l|-&>8w;s1|Yu1Uu(&QZ>PfLTCe<0IYzS;B3__XkebOMF4nkW8i)~gc6c3 z%gNXnVOCGj*8pL%wh&OuV77tk26#6|7+-pw#E$C?V8Vky!B+7>r44}@gDCS3mOO%| z6M@aI7x1MOe?_${&yb~1~&xQ-vH zTO4at0|5WK*ki;rW%wvA0ks0prR1gcp#Z;^cK)VFb{L1rHSJur_#1@tC-a z^Ti2*x{y1LkSDGTBVYw2q`)k%;~>>1d1wXUlX1FNha{{FjQ9Y(AdJ1|YoZV&Pbi!a zch1JP(S8T^g$cNs)viSg%)8Q zl5AmO2o;P&VLl8D2SYKEFaeVX0nrjOAhb4tU0>jMwrb5AAuz-D>_d1!LKu_8z|8~h z!8%^3_oE(+@fq6;msddHnBa0|9P2be9TBC9*Z9Wc?}YWCAbCS7O&B*Kh?SV=vIR=s ztYU~OZJ=ty(uuq_2p}{ri@>@7IOGPot_eVsn-wbDJbuDfqr%VxDG_=l1TzF^=BOO1 zS{y`wbjO?naU4_Hc$VYBE%FCM%>qgQj>8uBVCf*w=mpDb&@MSlMtGLaV?fUJ8-~32 z78C9`1}?ai7|D4M&*kS6Tv3kIF2_Uw3`88P^8jZvMHm4n4+mgpEcFHw%T^xA>j=;) z3qa6G!D0M{4kKP*@)iUO_Efpd$0I{VwwSAy@X(mzVX6p;Cva~_FY-07aPsf zUfR z_5Q4}*!?-yAdG{s+%dO5f%ThkJkndxT0sP24#iX#5SO84crIz;ntq;~cL=h5k156Uu%!SS-4v9Nr^s5j8sLhsH;ThH7^AdxK!6ZhM7dVcIj<2K% z6(dOhKt%>hkpVuk9!z_10Xr`5qWBB6z(ByEe+ldnvG;~&?u`utFLI$nAUTHswBqva z2YhOhyFb=87<#U)=Do8-$N>b>7M98p?$u^9M#%ARh*0(znL%W$xCszRc}DV}7`TuP zaELsmK(dBZj4+Xip*PF4UV)I$KZAZs%&2k_2gw$Bht!vs|p2pNL#dLy1iAPxf}kNJi`auC4IUSLE5J{@9pp5KCQ zk7gmDM`t($_6-II0Td;DAe`AXc@`L0S0>;L>WBhz4?rfY1UN2Us~oaiC_%``%zCCeus-2iAu2PgW#> z*#-8Jz15_7OzQ-IwfsR?`{fY>i9RIe$T6S}I0jK1#x!PcU>pFTXd{rTq0b6Pf7otk zS%C!ho%|3`hs$gds}F@R!gwOu4PhRGSkC3o!!#)Dy3JW$2GOijNMO$ijgEwq<--D7 z&Jv7EO2Z@(g8V9%FbH7+62~YkXfRj~0R&K7ArN{qP=SVbFh&7b9i$H+Gc!dP5r{Cu0%XrX7ka2N zf(orFAU^S6a!e}BmUaetA6$(wLN4zJ1{DKzCwMHZ0_;DBeG~+qNr8-^@Qkn{{|5`< zv3C^mB@llxq=E)TpsheM;9oHaFM*3p=lBfv2G9h;BqoNiKqF!4RPMu|>A)Be9?2_X z^n^!WKv|GSr8WmDGE-KN&W1xHhNo`hNJQkhc&4Dek z{xTM6kZ$5?-{e*1Woa-fW3M?Y8WGAa5E?kNIuxpNF3fTU7UwYCMLCxB`*3Kq9FA0B z77SMh|3o5@yJ#Mc--s_r_g?Rfah7{cQJ}L4-_6U3{dr8pfC59)@a!33B}*(K$A~(J z?#z~;>y99e&Ga?`$^i~60VBsq0U8jGDkO{C;OOuX&z=tqG3!UqO7%MQ2f{1?W`%vH z1cz?0#YB13576J>X5=-sM}**@;|nMXi~bzuB`DEgngp?pFsqyfOVqC#G_qe6+j?>s$iWdz^FmVV5u8)rIJ_O6xs;B3z`y_ z*DIJ0crGR!5PJniA9XY_oQYyEATjG82F%I45ZeFc%1qZlYVfMQV}F7G0}fb5nJ1hAHZ)--z(RReUo7@; zprU0}$#Pf@K?qYofzg?ax%*0z1Pat5x zXcWK{0f7c18ty>=f*zN14$OEEvjv8pj7f3~vT}JD#<;Mo9-}VCF^E3`$^D6qtKpca zne!}W1_F*EzzzsREu`-R>XpOMrzmZ+y%uNR>FIwnLTkI9hZP37aQcpdbLF#Svs+rReN$=?)q;Iw&oiNlX*e9FerSx?`wcKIu)#$ji8BntxiSLdm;h`7be^L* z6Xu@4?l|sEaS75io)g$C4|s5l;1HkRswhw-rWLaqe5JKKVY&}tVH=toQY-=cTrg8$ zqiXUn!9-Dkb+w?gWAq^cOGPoNy-`#-%!0u2!9oR;p>hmj(_w%oBEKOlEk&u8e_1*` zxEV~==5CNkKW1@jOX=j;n?}otTYFwsDP7)}^I3yFZj$C~o=pA5LuhFAMcXoVisx1W#sr< zxg3<2(M9s~yo|=nMY4~RhNu22hLrM;n|RTpbmN@tQnh@J8(aUE_u5!1^>^XWJ- zylt{vPRA`8PSipm%%+=grHR{clhi3)SA)fnF12B8JP+FOv~JU6npiZNnuKoDI9iEu zdfGDD%G7ki(!(mAMeAfTo0!5wIEv!^U8K=X?2RU?>8))|%E@|@tfJ=7jRISa#&krN zLfT-eTd@SgiDI+Xps_z*tjPGrd3--N{dl3$&eUHerWDrijrm|6E~1r?RKvMF?Ji4H zb_KCN8_i9JI7Lc3_XnY_45cgWtR||9>9)Izm)+e|p`mi+Mbjo#P3miOl6W*O#h+Jk zb7)BGbx1_XGVP(|j-m~rPXlUBd^#24XhdnUa^FSS5!y*w3Cjw{g|^&IW?z?+nNI_e zhGT5N9IpH+yQ|noydWZUU@qyCkrh9GOP4u{O zKlN*LSD&n9x{CKlbiJH>ck9WzP1mklkXsLtLsygPWAABPo(`iETi09~@5c{{vrLV= zO?Mv_Lyg}&#q#iDJRVF_JN7z{(%3fV(Xvjr)5*{6M7sYHx!=^%(P|Mk>3o?)tI|Vg zn(JQw*=ui2Q>N(?Y?9E7mxKn@r|m;xT1I(yzfk&1m#%|gB73qMFI>8qO|@yVsL|@S z9Zttl-=-_8G}y)7vqblUUAQ%5dUr8fxUv{X>R3zP`P?8@E4 z^i02|QPQNlSfS6G%_do{;)e6veBLeYDBT<3CSFC`$@nfxmX2KA?;<7gC&RszTIXis zCQ&pWOyWCfx=8A4t3)5n&(+yH-tg3IY@(e?SJ8#m*~XDGrt(}flG)Vx`0()H9PbHV zzMmAE>+aX}b9OvQk|!rqD~WdlO2gDQys=k_Qiobx--$C}{Me!zT}qqTh(=xde7uzV zEB!Vkz4bmE)2Zi8rq!^%r|a>P?07U>C9~z2R_ONn`FXzbXrlMl`j8Gr%k-JNr%4dX zZvRr&8?%?%k2a~<>gF(6~-;GjZj!NEs8zmRvax)-SH*%G> z(Xp$$WpZ|ZzY|+trxRZ7!zkDnZ4w%LaJ_4px4mK!T= z@i6t0*bPVDtk|EEXHhpN%U|=h?1rgFTt6+sZF>5AwEwhlE{_A_o2{hC zLszcoO@qzSm94M!r5&!g#Fy&9gm@_iuO?Qwo>pu7coRnw-9}55&IX~sj#kMo6oV+e zq{hj@bHSMH!)daO*74oM8@N-WcAtbo^7GMFE{$I^zh9XOrb1I(^wrUGf3jC;ee26p zcQXmiBuOhTZj|ZP+(cryn)aK6cTFYSSr4R3gJ4XXLA!gOUVc8JgQ@t`AIrN;3pBkoRhwCs_oOl(A znr%swap5kB^#iBoL=%BdQtMgrbgN%pHRbsH(I?codVC1>as16J$!V)6n=n)+sh^D( zf$r;8Pg^A0aQ@R)VtKKUDYsn&HtmEm-G*DI_dqAZyVS|XTjgT4oJqz-GI6Gpad4Zs z>-B1KXx)7botN8M)En8OlP#61H9K{wQd{e^yTXi5YeowF!LIcfm7ctjP$6F@GM!#d z<&Nl1t?7X0-TF?dEW6Vqx)0n~O;W?~#)oda3*ECxG@VYiRhmdCj#@!#J87M7wv#V+ zTjOwU=!#dP8zU{iQ`BF0smH{a!3Jw{s^muB@ z@tmabD3X^i2JYJhO1sO{q^j2GBvks3BHbn_8pZKGSw!63WE!*|Ck~A*-WbOM-74=r z>sZ#;(o=uYuV@3WWXqx5o^{;Y{k=0h-_WJMnhfa+y1uw|Jk{Fu$1q5`>!QC%AF&{g zn%imlc@`zTmw@57e0ekRylek?JDHeMDe=eD+;*GB>;>VULL|%JBgOlDqYF`xD|b!5y?migGoP7S}#BJ zR?79`^YfzUZ(qk--Zn<;RGlIW;c6DhcKzQ@y8AN*95lBsqg>)2KJ?~-GTm+|Bx z8F$Lth|u$$(diCVN!7a5>a}?#CvI9(=5=q-)`rx+CO_n+x0Bi($?j`zAa%Q+Cly;f z>xRa;BeuB9PUoYghVA-O;@#NB@`r6jC3EoDk;g)X4y18l7{$I91jaANZ1YRwtJpVg z7Fyx3UpYG&^zLc{(Q%!UJ5a}i+J$QBJtK9bsy@E?KIbyM=iY zM4DsPMBBM0wVT1TY1#794%|>QYQ<5YR@C~;tSPhpoo~sm+MJ7G>OR}(meS$Z@LucR zr1WgiSC5uYQ(u}+;^C+{pS3pU;b?g8DWgUT?$Iug?Rhwxw9{r+rVE~KCW;|nyJE_A zHk-7a&7yHppRbdJ*%QL_EVp0N+nxLR_Ys-)ue-yvtv6vxHJ9;J*T#pt*{s5OFOs&uheK8`*#QWBorSxta z9{FidejJDEv^)|m2AwNIne(%hA;gjw#6h%-y@e+k@nkwH(JIxt4`NWGWbbGLsV;XF zdo`U%GnGa?`CWO_ibr0sxFK!&>?!MI(46{$?deHS>XUWjj*JFs-A!S4Jkc7IZfo=< zs)lKvRGCCw_tsAt=vw={kgxCW?Sbb{gOAH)R4?uQ6!fO8Zki{E?#r{!%++Nn4TLmu zL+k#+^W35=)8+hRc`+jN=KjQXPfh_b(@|IMhb5UzwzZI==U< z6fS3{&%5p2HrhvGijuLLB&$i9pA2cVis!Q7l3S@v@8-!aJ-6+8UP_A^9jZzGbUBUV z=5`Wpr`}MhSd%nzYBj1Rlf)u1jXRUVO}EUMT4<@C9kI}uw|=B7-f&&B))rfdrI*jz zYDZWq7h&YvS|Hu2d{X%t`>s{!{!kRX-wtQ)%=xI>-1wP}7Ku$BWJ9WzZ=Ry1B!<^& zb-|f&wL2PJsA6|yG-i@DRxQmmzfIEPW3Sih^_*iO_G?Zpj>FD0&3ncx&+A1SSHI9y zxBfn;2g@`gsk`;NcLo11omZJHm?(hxf|!{xlJar3oXqwXe-t^4lC z?=>IObgHg+Uqg{Mdg_OucUySytGhH$ET;*~CN=u$D!5kbeam!Q|E4!-3euH4sl-WN zb8OM{KevS0@WBs^xj#J}`Xcq4G)j$WF&B*9!}K7wxX1hUV-QV(G_yN(%;sb~aSk0% zbgzxZH^<=JQR981Gu*Vyaa@n;bUK=Cx|_|>%r8)6jM%BAWGSU@)4@czaE%lY zmdix^&}dw)ADYyCpUmKJ-0$mEyK(ir@iO_|^t0DeM&TsB@;%pGZ?;D5;;ZqaeB>H@vmRDw z>u9+MYGHrea2BEd$<}_P9+svrQ4*x+Qg8im^^&`2h4OLwG;vRvZ2RFx0+uUApz` zXk|(ht6o$pKg^Sn+$$>NvusMerDD})x}%0R|?;vaCj33Pt>f4 zx8B#WU@zm`_0zqNaN~dr?;4Qox{MjY}2sCwkO|dL93(7JgH1K+`M3UuI;1< zBwM4M?T4-<^~b+F{-@hLHA2e^AUlCX8N^CD3YD!h3&oL zno=l#a?-;ZyvPP=`ql62zA=!9OpHOH^{#E1wTmIYv=przHu_3=bZzu|rnb>fZmSNz zAC;6Vh4hAA-yOz-Fpc_Q^?a3DR@*tz+L1N($DiHti8lEE_Vis{jw(Tu@B26Q&RjFz zx3}^Z354+8L*bne%HO_8f4i%Gm~(mr6j_mx5l~&J?;m8mnN@Fm6(rhb{9WrhDpT+4 zKncC08XS$6qB1zfQ;yqrdtOzPNA>t?Ke>lo`RX6oWk@ou6wG-~{#o2j7=3mvaYsi& zF}WiA%V_-TxQ~!6j={33J$@oR#QeLa{`{=|#qHgcI%3d;6(7wm)ZBmlJbL;3_3Otk zbANnP7@oUP89C7{WzHS1sZqH7w%#H=X?NRqe{PoYfm8PCBoI82dm104Z)=8HEbd=M ztG%#Z@99x5-b>r}tIc-(*J^2c$`g^Nn|ku^o|~*pdZSEsKmDU{9e3GWcpia!H5ed{C*(Wo$4FsC zZSCtJDSRw)y8|*WRT%Rm7acz=F3C-qtFaLwhiOp zNNUNn+2Oz4FI6^XzT*qJDG9Z>C^sLK`ybMddBS2Xvy^_2WMZ7p7WEds`n4! zK^ADsG9-T@x(gu?4e#suXn0(@s7%?P7RL0fto4<~a*oLBQ6@U>gYR^OyfyUDvwv^B z#5T99#poXusrjfG%zu`+Y^bqLZkEvc(w?CtquS8aLu zI_1nmjT~Cl7J6$h505h&y|BJ}HH|o=w-C(&THAubGb8>tw{`7z+#=Xd9X3EeS1f4@ zk>O4Bt*=wii}M?9zM@fllg=c=xL=<*@%!N&Cs1stUke9%$NxENcl35V z6~BFYd3c`F8TS;>oc+%Fyr#7E?#8E!ku(+#OV6{UzZeDOVeV4LIWyXg_JM9ik~>M9 z8E;cjABQ*GPCp*_-7I-}2z9L;Luhg{-5!lZ=l6~=B44bI{Qb@`r?%xlBsRy&{9z^cXW#HW3as z>h2XP#)>v~{MLHfndr0*rJ5eWiWRgXQM6bPJ8*-R6jL}{i?hPE#FyVs*M1*V|u9AwUs4X@5L zGV3~_NUTN=onr7P;x^GCFu(r1arK%OoG8fA8n6&?+dtFIY^PlOA_zm(q&8R1+K^(+ z+8p-p`CxN5|8k7-V|0qcg>A^Y5gX`0V)mV3s`I~W&4@Bm9GXCXKx0C@5r^^^N^*1* zqxe>MDl-D*)4>+)bA|T(=`0);8$*p=` zckJ~$D+r3z;Ge9K;XB*EBvrA5&Hh57G9!Y*#uWEq`|+Maf6lhQPn6;_qt<4-TG>|i z2-?#foEzKPOLZNmIl4V38xVFpY?%CBa^QpBVpUm0*vi#2$P`^yClG@IR=}R9x3q69m@yWnquou4ClW z28#8md(D$Mg-LbLoJAOw9Qb7LV#U*p9y07V10LOVLLUZ{~50GL;m1u+!G7%|56GHU$2_cX# zz}KWZ!t|}?j&WEA+GO*rX<;*m+^-ORK+;_P9yKN>Hj>jT`x`zeV+hY zS8;pHQ)5n|e3*bJ)cV94izqmUmr&#uiu=z0({)`#MFPqH#NrL#hVc^O^y&inu<3d0 zripj|4;`6K6U7H8_kr#IozTZa=PIu9t25tMrOnc%*XyNOCTh)qRjuHrwW^oA&Eu>$ zpf9fLB1#;fpl*5K51V>;e`dUg8{~<+aBnIPWR@;EkRq7}TTh}X^rV<*m()8Q@Ydl4 zt{^t^rjT_5I<6;KRO1}F^LYNdREo9eRc%P*yhIO8CB>PT=fp}&I0adqu53=6G);I+ zW65=BaFZ~0hgY8vqqTrmRF5okyLSqE4(*F12kJpdg_H+tmJ;&;MElEg>aN@Tz2qCN z2SSxsi~Gz^MDgD`2>h*eQ@3PmdmOTip5!ItX(YiyoRs`oM3tmu&cy`PVFiR-#WaEE}F zWdX;fLb0v>^a_*#Hx{QqMC<7x1tHJJo(6ybeDg-%V=w`$^v` z$#cC*|7w~f3RRk!)iOpYN$v{s6Zq4Wn4OX^QTDw(g^Z=wQIA<=F8(Q9EC!+Q zB%yb3hAqIOTKMK2DCNqi6%2GEd)HaGCzopfwoh|@*_E|4?3#S;5i6)^6^pEa`EiDv z(8FfkGsyR;7Xw_*q|wV}1eKNfP}T^uwH;)Jp8iT$&%DhbeboXPqR31yq%hzs1PL@f z-moXTX5yjfz)RHn>RckV?4cNX2s9TLG8}*t>3)AH_RyybMh?2T-0M6Ks}MC#r``BR zi+2h1bI0XQ!R=;l8iYJtQdOdXFq>5@0H0iX9D18u&(AbHy?Dp%@}s;G#_;`uB-XB= zrjR&Y|Lu*;|9tvL@=^9ChC_SQrmAxaF5>N`t}qdH9oXtZ6ScWom-35JV$C~A|5AQ- zauuliv$pBd+V>I-qi2MWzcm{rkclCI@~Uc-y2>A*&fgkeU{>Zg&_xrkhOUh==%4!% zG-(GXzRwTkA^x9cnpt(i^4iIJxH#$G14@jC@N8CD20H#cf$P-pibSyaIDB1k-@2&P z$;^u2rFk6oTqo+L?VV3T7Ir7CwJ^M!7x<`5=OYU5<{&H26 zo=snXm`crfIOP0r`CO=0bbvn35eFuu{lGvD6c!lMs^$CU^g^IAL4Za8DYLxSC-$yw z-yZlvHLm{ClIlFu1Zk1Uw_)XKvDM_%+n(2!n<{WJza-Y(F-Q{{qxQiy51aXF{A&Mp z(-39UmEoV`BdZ2P|L9sr_+fdFDzYu@Iw3)G?(I?0sO_tcTygU19{{n_8Fhzqzz40n z9bVEI!}j!zA}d{=xe{!E2M2$O4e4+S!Cgrv!2(3}5Ot?Z_TT?UMxEw{m%yaCl)_sF zlo1qhXzD|Yqk}&2Vw8tbQ$YuR-<60Ui|xA#wF>jL5BV4``qp3Dt<@D|O?FCwv?f%; z*6DAZ3~IsxMnHhN8s3CixOGz6?Xa_cmt8CrC6{yVWKQDxnOvf!gA&h@Dk!_lyjCH?3F$A{>B79V z6KNqobKnlkCyxHgcFb-{Lanqy`#%_(nEq^`z>tn8qC>+4eFPIY3FMn0WR z89`>vH8|t23oLrXf%|k-@POTgvOA~nlE95t3G8j*Tsxg-g+v@F`T0%xj-MM&0E8JyTL<}bH(d< zs?ZR+`C4-u#jz-3?!6i@4xNtoy*ufg(f-J>7xAr2UW1w0WjJ!tDE7@Ww5i8VQc|AM zs)$5Xhh-8Mz9&V%UD{~1bns6GQ%Qin^7PVM{xSr}ypzq;SW1PC!#1Wkf{%;0B2Cc@yrH0UM zf)~hs;5Pz01Ua8ypoYh80o4u$RN1|izmRh>yFlkVtG>DvIMVw5L-PMxEVO4;&qsSi zRcgkIvm2vyvzrpLN0}(IBXwv@AoFPlz6_|gbDZ^WXZ-*+U6~CkrN+lJ(C^TM;P`qA zh&~3#uL4F^C3C>?=PWDtl~O(;zgN2rLp`614GP>UXcS$vayT`rDn?WTRaK)KNz+FNu*h{D7CNiZLF!>B zYxdNuHPCDmZ@<7&(!J#2s#%IyX^4_S`2`_*3PA!levD3KYJb%d-wKDO9yVae(|29M zsL{I)hV^%#M6JeN5p%q=_j-w?GF)0X;NX}v&Adq8+FfA=_gb6{lUfKe7{fgvuzHJ_ z6XS^AHZ5_V*CM8;7ebhvBdY>io3;AdGT1YsCDxpX$jBLi9Vub(*e699k-%^m?pJU) zc@0*e7a%TUO#KBpxS>Dyj>e?-MK_pOv+8wquvAt)#%bsfHqAnmpW@8FQ!RowrCD6+scjh~37m zc4NzU(YMn2%e&p~RwoXH65*`>R_l13vc?l?KPE4{Q8?mlq^#(^>&$E==kE3j>&bw? zH8~4T_)4$fWrCDaXYO7PD&|aGo%%itP5P^7Sedm?LdVX6P)ZIL?-TTscvvbx$}pp- zfZc~{&c|PvGcC54bnTa=`}b<@DBddOm%%a1XzNBA{mx1v!o_R+=UlK`2k`tUr=Nz^ zejGS#Jy&QtM`fex+#>se1RZ#mx~P4cC@;Dcj=k4x6I4N&g$=`;Uc(R(c7Cm_Fl>X0 zXzqS^|9Np&`<=8=P3p^XFEXr~8Xq`REQ##wtKvXQFNNH6>#_ME4SN25REnoz0r zE3ocdmvBs+Mj81#+Y8_LY2)df7CD@;qR{S!k*-WT0sgUul`>Y4+9+_-B6}HzF!S0vaG5NU9qmH>k}@}Px!rPqADUHAR47E0=hNnQQm2mW z>{&P-gWDCb%$#`)V^JFiuJrs!q-|s@Rw!3PPXJH-&MfDqX#FS01nof8hDa7+VIJ=z zmJ$l8ad+2ho*FwhyZ5F@5@{0JFOH|!glfri>=1- z(qpZ1;;J?bV|Velel@=APYB#7mw@r7IGDbu$BD3RtJcfIRJx5TF{ym%yHwaJ zCRy0x$iC$^?+*>gbX{;4`$>UERY4VhL3YZ$WTJib;?PqSLP{*7F||YKV+@UuQc01I zvZpUsZV*MSE3lAxx^OBM(fEhJWg%uL*};W`$saTa<4ckflG}gKD?DVm*8~*KPfiTZ z_vE_t1%H`g7UaY~>gd+N&kg_Oz^T1W4Gk-+%EQ~z3KMk{p~^t)+{Y~&EaK-V%J23w zko^7dKpR0E@Fv>DAd1D)p(BJGPzcGv%RPI&uo<5PpXAmmlk?ZghMP*a!x-IEVA77e zZ-4YCqx!N^-0Q9+PpGj(zH3NUZnww-?S40J@NlmYE;r{=m_rvL>*W~j3Hg-I*dmo+ z+WS&p2T^i#eM7T!;zx!ndNg%7aPsYJuPk-lXOx9_Kq%UVZfH13vL@VIAGFX6jmYHL zvFzF^{bN1e`NmJ;;2BsT5gin6B7t_++}xCBkn9}evK}tDdg9Bw&$%2e&k1_};W2Ku z^6ol6oI(%uCBxl|~q1r|cK_1N_DMT%Uw{0== z8ZA^fN`-qm%qjkCB5sATBu^N@bp9{>ur&I$GHAevwRnqM_vLSVg2ER+2Zwy@s zB45prY6fNJZB=xsA$f@p!Ix<3d$*TMzk98Qr-fJpo7RnHfhQu!4rp1P@$C3Z>$Nri zbS|e0R?h!h<#Lue$~Gglx9luG(RYhgd;}&sOonwoG#L2rmo9faH?%*dMS?UHwM8{W$i&Wo}CCa-_0j3a&8i) z=Zy8LY1Davs4S7B{UC3a7t>p>N;Xkdmt6!cY4+5=PS_L%Q+SH@ZiU!KgET#2GLIxD%7%rOFt*qRq-A zLU#@E`jTT5Yu_;tY_Tog9-fpT*)eN#A7$IcSHU7dW7CGY6@HQy)$=fn~oPuQBUfI4np2YU|q8$DZ z$Qu4DwQ+ovE=R%lh&h1jq<7=t;ge|0K~HM)XHk%uxDa-SP_lUaGKb!vDOB&u7@}42 zzH*6YZ#w^dmL<%$^i%67{RHi`3^{$!Dt)*#8s~xpA2UO2cR*f&d5HZPknsOD)=qV$ z2=gf(#J3MUI7{Q01|!g_(gs^baI%p$gO^Lb?8@-vf0j!7O*lL}>qCztUV~(Zc(r72 z4At>lK`|IkN(5ru?>aw;hDRR1v?#LHMi!8arA5y>y4Gu59h;nu)=@(DvdB!aZ15&i z?zG2{x}L8&?RSQ8_oclQ#mp&-j!$2YUSS9|l?j(+>y9IrS6v?Rv9zB$`8bLo)i~$r!=Bx1?FAf=Q}@hG$1<% P{@4EjHbuDZAz1+c7zEq! literal 0 HcmV?d00001 diff --git a/tests/data/unclassified.fastq b/tests/data/unclassified.fastq deleted file mode 100644 index 5fb7797..0000000 --- a/tests/data/unclassified.fastq +++ /dev/null @@ -1,12 +0,0 @@ -@read1 -GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTA -+ -!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65 -@read2 -GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTA -+ -!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65 -@read3 -GATTTCGTAGTGTGGGCGCGCGGCGCATCTACGGACGATGTCGCGCGCCGCGATGCTATTA -+ -!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC655 diff --git a/tests/test_classify_by_kmers.py b/tests/test_classify_by_kmers.py index cc1e9f3..9dca610 100644 --- a/tests/test_classify_by_kmers.py +++ b/tests/test_classify_by_kmers.py @@ -17,12 +17,11 @@ def test_classify_by_kmers_help(capsys): def test_classify_by_kmers(capsys, tmpdir): - # TODO make better test files with patch( "sys.argv", [ "classify-by-kmers", - join(dirname(__file__), "data", "test.fastq"), + join(dirname(__file__), "data", "test.ccs.fastq.gz"), join(dirname(__file__), "data", "hapA.txt"), join(dirname(__file__), "data", "hapB.txt"), "--haplotype-a-out-prefix", diff --git a/tests/test_kmers.py b/tests/test_kmers.py index 4217db0..f996b1e 100644 --- a/tests/test_kmers.py +++ b/tests/test_kmers.py @@ -1,12 +1,14 @@ import os.path -import kmers +import pytest + +from trio_binning import kmers def test_build_kmer_hash(): kmers_path = os.path.join(os.path.dirname(__file__), "data", "hapA.txt") kmer_set = kmers.create_kmer_hash_set(kmers_path) - assert kmers.get_number_kmers_in_set(kmer_set) == 6 + assert kmers.get_number_kmers_in_set(kmer_set) == 4 def test_count_kmers_in_read(): @@ -17,5 +19,35 @@ def test_count_kmers_in_read(): hap_b_set = kmers.create_kmer_hash_set(hap_b_path) assert kmers.count_kmers_in_read( - "GAGGAGATTTAGAGTGTGAGTCGAGCATAGAGATATATA", hap_a_set, hap_b_set - ) == (1, 2) + "CTTATCATGTCTTTGTTTTCAAAGCTTCTTAGAGGTTTTTTTTTTTGGTGTTAATTGGCATAAATTATGGCT", + hap_a_set, + hap_b_set, + ) == (2, 1) + + +@pytest.mark.parametrize( + "kmer_str,kmer_int", + [ + ("ATGCTAGCTAGAGAGAGAGGA", 696357446508), + ("TTTTTTTTTTTTTTTTTTTTTTTTTTTT", 72057594037927935), + ("TTTTTTTTTTTTTTTAGGCCCACTTTTT", 72006304612220927), + ("AAAAAAAAAAAAAAAAAAAAAAAAAA", 0), + ("GGGAGGGAGGGAGGGAGGGAGGGAGGG", 11868309606246954), + ], +) +def test_kmer_to_int(kmer_str, kmer_int): + assert kmers.kmer_to_int(kmer_str) == kmer_int + + +@pytest.mark.parametrize( + "kmer,revcomp_kmer", + [ + ("ATGCTAGCTAGAGAGAGAGGA", "TCCTCTCTCTCTAGCTAGCAT"), + ("TTTTTTTTTTTTTTTTTTTTTTTTTTTT", "AAAAAAAAAAAAAAAAAAAAAAAAAAAA"), + ("TTTTTTTTTTTTTTTAGGCCCACTTTTT", "AAAAAGTGGGCCTAAAAAAAAAAAAAAA"), + ("AAAAAAAAAAAAAAAAAAAAAAAAAA", "TTTTTTTTTTTTTTTTTTTTTTTTTT"), + ("GGGAGGGAGGGAGGGAGGGAGGGAGGG", "CCCTCCCTCCCTCCCTCCCTCCCTCCC"), + ], +) +def test_reverse_complement(kmer, revcomp_kmer): + assert kmers.reverse_complement(kmer) == revcomp_kmer