qtl/0000755000176000001440000000000012131547440011103 5ustar ripleyusersqtl/MD50000644000176000001440000007611412131547440011424 0ustar ripleyusers482e4eea8c6c181fea72312557ff56f1 *DESCRIPTION f7a3c403474b6ea97396fbf1380c271b *NAMESPACE 9534fa5b3fef01751aa7ad102308617e *R/add.cim.covar.R 26e4fb9fb12808d9d324256dfb74966e *R/add_threshold.R 5abc45a301a66c72978b13b498e7c695 *R/addqtl.R a2af53963fe54e5c3d8420b9b7adddfe *R/argmax.geno.R 134d900339f062c47d31d081e721528f *R/arithscan.R 0fd39c1e8a8c826f5e56dc34ce4b8c59 *R/bcsft.R e45897bb853a79827ba7e4557e64c8e9 *R/calc.genoprob.R 3b7db9a01ea79e1f35a7fb7eb3b9fb7b *R/calc.pairprob.R 978258f5171a5bea70673949310328bb *R/cim.R 0f00c18dc07694cf9891abea4c199f01 *R/compareorder.R dd68d382efac709ab5d3dcc1cef74692 *R/countXO.R 2c16bdeb87ead2527bd807c94e74fe81 *R/discan.R 936e5d4a5274ce31c23e0efac79639f0 *R/droponemarker.R 2da3d100b831fed5d4c01e3755400014 *R/effectplot.R f2bb4f37421dd129860bfdfb3b0058af *R/effectscan.R 55e5f9f69609243c204eb252aa2ee6b5 *R/errorlod.R 235b4a7cf055f0dd2531e1718f0a99ce *R/est.map.R 60739ca0cbdd95209e2581cc17727bb2 *R/est.rf.R 42aab6a034280107f9ef90af52e2974b *R/fitqtl.R 94a16edd0f6ff0afc6811010bf5be101 *R/fitstahl.R 39cb57412c5f5a5fd15108a1dcb46533 *R/inferFounderHap.R 0a72cb0f03afb90a25d80169eb17c1b4 *R/interpPositions.R c50a19b3e1d248d467fe35f9ad491632 *R/makeqtl.R 9bc7eb266d5333d53a50a98526414a5f *R/map_construction.R beafb29e8d50e78f40a4c7fdb86a6881 *R/markerlrt.R 5d3191c0e4a2a1de10ebb4ef4b243a45 *R/mqmaugment.R 950583abd5db31eebaa86c5823b2ee53 *R/mqmcircleplot.R d2f1b12d95d85e9d0a5a693ae119ed45 *R/mqmcofactors.R 5204cb142a4a30cf7cbfef3deb94c18b *R/mqmpermutation.R 1aa6c14a30c7cd61a681e230fd04cfb6 *R/mqmplots.R d1c37f4eb2a6bd33406daa43f9bff487 *R/mqmprepare.R 65ff3173dfd7934c5e98dba8f0c95da0 *R/mqmscan.R c909ef73b1061c3749956a4075e1e0c5 *R/mqmscanall.R 8cde196b685448a2ccda4afb787ab750 *R/mqmsnow.R 4f6172a4a53bcf0b093a76ef005cf328 *R/mqmutil.R 6e719f7346c2e77b7f20200d950e21fb *R/phyloqtl_scan.R 1b55fa3bd1406b5bcd709903b01eabcd *R/phyloqtl_sim.R 3298e212e71dd8e46e10a2e8c466031f *R/phyloqtl_util.R ed4c7fff84662a3583b07a465f3e8f03 *R/pickMarkerSubset.R 2c6d25aa43482ba0ac2512193477a092 *R/plot.R 2dd09c8e40cbdc0e0521456f7f2147a5 *R/plot.scanone.R 0db84a8c6138482ea5c596cf3bc07c90 *R/plot.scantwo.R 116ea9236ca2e2200d0f36da6b64ccfe *R/plotModel.R a74ba2b3c4de15a30db1825aad615803 *R/plotperm.R 68767bbb79f7fb0cb49e836bfb74aa91 *R/pull_stuff.R e8c29bbd7e443adeb7d8f5f97eff774f *R/qtlcart_io.R a2ec55b93790629e46f57fb6f78db95b *R/read.cross.R 9be8badf6b2915020cc34043c2f92704 *R/read.cross.csv.R fbb01e3ef371e0f9131aca83e2b70c90 *R/read.cross.csvs.R 37a724270f8321d1de585ead7d86d941 *R/read.cross.gary.R 29cb2330276570f881c877b2a7aa4ff6 *R/read.cross.karl.R 272fd7175b608c18ddb2d5cb90dbd7c4 *R/read.cross.mm.R d1f926e99b1757e972d8a6e32f3c9c6f *R/read.cross.qtx.R 93b89892c16861058ee28b9e031bff3e *R/readMWril.R eabf35b898438696f01b88b03075e4de *R/refineqtl.R bce8f1deea75a8294b07a69eef98e76b *R/replacemap.R 6898567c8df0f40757e9b3063710b2c6 *R/ril48_reorg.R e288b10cd0f8c8063e01594f69ab57d1 *R/ripple.R 10fa2ae8d4f0020bc02ad64f29149e68 *R/scanone.R 10dbe6ca5597f0701c64a09a52bc4798 *R/scanoneboot.R c5e877d545d5cfe85caf0a4683a8d32d *R/scanqtl.R 0b47ad4a9861436c1126788a2c1e9c95 *R/scantwo.R 580e5ea304e6ece31b95561a9d899a0f *R/sim.geno.R 1b929b2343901d6d16226f3b6361685b *R/sim_ril.R 748f83fa976d5c1ccebf045d86d678d2 *R/simulate.R 4aa5537bda7289b98a4fac0c9694650d *R/stepwiseqtl.R 4f99062f637cf6c81c51ba44cd77f5fb *R/summary.cross.R 282d7eb7cda0d25e7c37a823dd46d0c3 *R/summary.scanone.R 9eae52067259216cb1c64884ac23da11 *R/summary.scantwo.R 1a5401d2d9ae7d5578f15708616d362f *R/summary.scantwo.old.R 013dc49a91b851056f7237f602b333eb *R/transformPheno.R fbfe08b30f781b03c44fadfa6fe86021 *R/tryallpositions.R 3f7098385f6916ef3baede2a29d247fe *R/util.R 27ffca46aa616a12c2f7522bae89ee03 *R/vbscan.R 8600bd37699bd68ac11661c553338f8b *R/write.cross.R 9709445edb89015f3b7be49e578c3194 *R/write.cross.qtab.R c99e9d8b4d4cc80c5ab6dbc12df8faaa *R/xchr.R 41e4300e3ac4740680f1acf9f4443a01 *README.txt bfdc793706886935deaa09ac656b1f85 *contrib/bin/CMakeLists.txt 88bd9a1f93997dc7a0f3b9f42ba3042e *contrib/bin/FindRLibs.cmake a2151c53575c7e54ceef324add76f356 *contrib/bin/README f300bcbb15db0aa41bfa87e4598ca999 *contrib/bin/mqmdebugout.cpp abf1c82264d998df8b0cab3e7705c1d4 *contrib/bin/mqmmain.cpp 872352d722e347e7202db6d5e7208f26 *contrib/bin/regressiontests.bat 72e795393b05712e52d2dfcd013853d2 *contrib/bin/rtest/regression/mqm_listeria1.rtest 1fc00c7595303eb7b28b7c22552e6a32 *contrib/bin/rtest/regression/scanone_mr.rtest 725982f79fa57446b0c29485db932256 *contrib/bin/rtest/test_augmentation.R 200622b9e837aa6daab95d45df5f5c80 *contrib/bin/rtest/test_mqm_hyper_prob.R ff8da1695c81b1bf1fa5ae33b55f89da *contrib/bin/rtest/test_mqm_listeria1.R 277edd7b8d3d18846bcd4c83d2470fda *contrib/bin/rtest/test_scanone_mr.R 106fc8e130e914c8e1921dca34e3a46f *contrib/bin/scripts/cleanup.sh cf3c3279879ff2febff55923a96ba6b8 *contrib/bin/scripts/create-diff.sh 973cc58b4269e7e8301bd45983a93b78 *contrib/bin/scripts/profiler.sh 32d1bc0785a5d50f78ae5756d16e9f43 *contrib/bin/scripts/r.sh f6b6a330299fdb56a874a47f577ebd08 *contrib/bin/scripts/regression_tests.sh 9760ebdd5b902882af0c93ea062e5e96 *contrib/bin/scripts/regression_tests_windows.bat 96a589c2fd23cc2fd5d1ad8eaf425f6e *contrib/bin/test/chrid.dat cd80cecee345e6e4a8f0f4fa565131d9 *contrib/bin/test/chridhyper.txt e476e10cab390697d56bb54e9ad6b435 *contrib/bin/test/cofactors.txt 0e5803c6aa09400ba7cca13fa1d2c9dd *contrib/bin/test/filledgenohyper.txt 446a8d08d0deda48af4367932016e95d *contrib/bin/test/geno.dat 3ba90f4528761f630956a01e28da2d02 *contrib/bin/test/genohyper.txt 48aa9dfa5117e23001cdde5d75e9c681 *contrib/bin/test/markerpos.txt 58e0f70e4a38f89e0ea05200b1485f4c *contrib/bin/test/markerposhyper.txt c8fcff8988bdcad867ab1d623afa53c9 *contrib/bin/test/pheno.dat c8bad11adb4ec06926194513c745d1c8 *contrib/bin/test/phenohyper.txt c73498b52f1d78efb2a60720e8b1c48c *contrib/bin/test/regression/debugout_dnorm.txt 27131c5ce714adebfdd4f986662b53a6 *contrib/bin/test/regression/debugout_pbeta.txt 79cdeca0abdbc0e981163e6203a294dd *contrib/bin/test/regression/t11out-test0.txt db72cd13d6a1e2f81ff68dc4886a1910 *contrib/bin/test/regression/t11out.txt 12edd0259b6630dd1281baf97b2ad7cf *contrib/bin/test/regression/t12out.txt db11ebfe1d7065970b3187888bb20311 *contrib/bin/test/regression/t13out.txt 4d585be836c907068dab6809184492d0 *contrib/bin/test/regression/t21out.txt 93908e9b72560c748f51fc8edda09cb9 *contrib/bin/test/regression/t22out.txt ed93df5f2be805fd389820394cf61221 *contrib/bin/test/regression/t23out.txt 076f23f188360ca130a7c4cf428ef4f6 *contrib/bin/test/regression/t24out.txt 421333f8f1a1a217f66601fa1d2ac8a1 *contrib/bin/test/regression/t25out.txt d3c2546698c6f1a749821630abb0a4d8 *contrib/bin/test/regression/t31out.txt fa97e5f006391c4a0dbdee6f9c8025fc *contrib/bin/test/regression/t32out.txt d8acf152a44ae6e0198b2896f4174dcc *contrib/bin/test/regression/t33out.txt be52b633c566c82bffd9eca8ea0c20c5 *contrib/bin/test/regression/t34out.txt f43319ef224ad76487b64c22b01a6625 *contrib/bin/test/settings.dat e03f233c8e59be66d7f013a8db976f58 *contrib/bin/test/settingshyper.txt 446a8d08d0deda48af4367932016e95d *contrib/bin/test/std/genotypes1.txt fdfed5a596dfe2cfc1c51ef4dbd06b7a *contrib/bin/test/std/genotypes2.txt 3ba90f4528761f630956a01e28da2d02 *contrib/bin/test/std/genotypes2m.txt 2bbf9cf9386f4a96908017107406fcd1 *contrib/bin/test/std/genotypes3.txt d9c37b331ff43e122bf6443188b3826a *contrib/bin/test/std/genotypes3m.txt 48aa9dfa5117e23001cdde5d75e9c681 *contrib/bin/test/std/markers1.txt aaadb868ebb6041f45461a184900e31a *contrib/bin/test/std/markers2.txt 73f35c4f2740b77be7c56adf7c33616d *contrib/bin/test/std/markers3.txt c8fcff8988bdcad867ab1d623afa53c9 *contrib/bin/test/std/phenotypes1.txt c8bad11adb4ec06926194513c745d1c8 *contrib/bin/test/std/phenotypes2.txt 2411a1ba80fdd818d57ab6baad428651 *contrib/bin/test/std/phenotypes3.txt 9a49e2d18c04c38baa91c18c08095c12 *contrib/bin/test/std/settings1.txt d552fec023d3136c84922f940a26d75e *contrib/bin/test/std/settings2.txt 88fc63b4af80b742e159b3d2cbec8b60 *contrib/bin/test/std/settings3.txt c13ea1fd1dbd3322aa0773bb2712d6ab *contrib/bin/test/t11/cofactors.txt 63810466f0b74772939995cff28dbc73 *contrib/bin/test/t12/cofactors.txt 87726298c97c135ec4caaa1d77c4c3d0 *contrib/bin/test/t22/cofactors.txt 9ba0cb2dbebbf849508443e305ad22f8 *contrib/bin/test/t23/cofactors.txt aa492705f6ef171b31d4b95208da2279 *contrib/bin/test/t33/cofactors.txt 4b9c827a80e2681861dc2d41baa7212c *contrib/bin/wincompile.bat 4b07a887cd026fadbcd9f986054f3236 *contrib/biolib/CMakeLists.txt d89ef8ce1e7a097fb859b6f0463a28ee *contrib/biolib/README 73c7b09cfe6ae19cc28961e64ee7d8fd *contrib/scripts/check_rqtl.sh f0b2ec07431ce2f9fda701f567b65eb2 *contrib/scripts/cleanup.sh 2b3f7306cdc6fb6add972d40a09d7028 *contrib/scripts/install_rqtl.sh 83c1e2ea3cdf1ff0f886eb96b5c4d5e2 *contrib/scripts/repl_inputs.rb 6cfb9ed2898a6f7bdc8b9e59ffae7b6f *contrib/scripts/run_all_tests.sh 241ab5cd315e17513c395de2703aeec3 *contrib/scripts/update_header.rb 21808ae6ce74675c31b2c84b97c7f305 *data/badorder.RData 703095c3a0bb152219197582c7e57115 *data/bristle3.RData 14e1d2df6eebfdc61b233c172c94b41f *data/bristleX.RData 27637d2171320cb0e6cf19cd71fda817 *data/fake.4way.RData c6d44b7520405440fe38956be416f5f8 *data/fake.bc.RData 17a74b3ead695f85c38a9923a02e834e *data/fake.f2.RData 6263b6ce1c63ceeaf1104fe586cd012c *data/hyper.RData f86bd68be4a11e07e2d790fc2b012ca5 *data/listeria.RData f3128811c78d1282d044e5da58c73c60 *data/locations.RData 0665b9d31044e77f5a0569349b08c865 *data/map10.RData 6a0fec7b0483f3c5a3aed4efbff43294 *data/mapthis.RData ca388f8ed50d697871f42431037d7f50 *data/multitrait.RData 39550e6d5a0a95f2e2120f96c9f6bb43 *inst/BUGS.txt 19b849f792af25c391f31d677210b0d5 *inst/CITATION 78450eeaa78a5dfca8dcbeb77a1f0da8 *inst/INSTALL_ME.txt f6bc7c5215d6f1b0c94235a5ef381e25 *inst/LICENSE.txt c8b990e307ecee343beb5a217265ffcf *inst/MQM-TODO.txt 41e4300e3ac4740680f1acf9f4443a01 *inst/README.txt 7465eb35d4e2768c8177756ebe87f4c6 *inst/STATUS.txt 1684db7130c4fa1781d98346bd7306c9 *inst/TODO.txt aeebf758f12f6aaba5a7299c46ec7989 *inst/doc/MQM-tour.R 61657f562f1d0aa6a419caa461382d69 *inst/doc/Sources/MQM/MQM-tour.Rnw 33c6a39f98c9f6ea383bb7e6120c80d6 *inst/doc/Sources/MQM/SweaveIt.R 8b9c03961a1f83a3593dd2c4f424f0ee *inst/doc/Sources/MQM/mqm/advantages_Rd.txt 9ae2c3be23d6b18713df99dea771bc74 *inst/doc/Sources/MQM/mqm/advantages_latex.txt e5963995b8306a5709edb4a82d312737 *inst/doc/Sources/MQM/mqm/description.txt 93182cf669598c167d49a863b29e1c44 *inst/doc/Sources/MQM/mqm/limitations.txt fe67beb7507899b848f71b812c71fd44 *inst/doc/Sources/MQM/mqm/parallelisation_references.txt 33c48149918dc1bb67bc4dc32941d1d3 *inst/doc/Sources/MQM/mqm/significance_references.txt cbec485f87463463f5920867f8f7852b *inst/doc/Sources/MQM/mqm/standard_example.txt 00c8d3ee12a9126fd90c00fb8236d0d4 *inst/doc/Sources/MQM/mqm/standard_references.txt f9cbb0876fe653fc8119fbfb7f35456d *inst/doc/Sources/MQM/mqm/standard_seealso.txt dce125c0ba08d0504b05baf36296dc94 *inst/doc/Sources/MQM/sweaveit.bat b069721f290cbd45cc9a1d4a13c93603 *inst/doc/Sources/MQM/sweaveit.sh 0242414e7ce8a4de69f373b05e7f8049 *inst/doc/Sources/geneticmaps.Rnw 380f79ca75c5ac3187513d674862dac8 *inst/doc/Sources/new_multiqtl.Rnw 7743409fb09a35b80fb22da863cbea8b *inst/doc/Sources/new_summary_scanone.Rnw 2d06706e91525e0e8f56ca2b2f025636 *inst/doc/Sources/new_summary_scantwo.Rnw 652a18184806471cf02675efce3261c3 *inst/doc/Sources/rqtltour.tex fd6f68dea428d26a88e6ec2a5b0ac682 *inst/doc/Sources/rqtltour2.tex ef706b931ed81b855a49469602f79a9f *inst/doc/bcsft.R f0451cbb02cace4ddc2058015753ba80 *inst/doc/bcsft.Rnw ba0e0e664119f6e4bb62c96e6be52d04 *inst/doc/bcsft.pdf 92b2c2c03224914617a19bc3ac02b7e4 *inst/doc/geneticmaps.R 536f8a7a96f10fc7c622a64165587051 *inst/doc/geneticmaps.pdf 40eb8179441ce7496f6c5e252c8b2b56 *inst/doc/new_multiqtl.R 2bfd394e7e6556f6f7043e9034c64234 *inst/doc/new_multiqtl.pdf b7ee88c6b1ce5df40209c9bd58acf9b8 *inst/doc/new_summary_scanone.R 1e49e4956c20a4fb3554633734be1bbb *inst/doc/new_summary_scanone.pdf a808a0dcf90e74a422bf3ea84f4bd55b *inst/doc/new_summary_scantwo.R 83dbe80c9f5b641b0b269be341c80df2 *inst/doc/new_summary_scantwo.pdf 5de0f099578b884016db92738d3f2dc3 *inst/doc/rqtltour.R 10f3a5edcee05ed0b3df892716128d84 *inst/doc/rqtltour.pdf f8569d240e7f00630b002306f6af77a3 *inst/doc/rqtltour2.R 9d5b2a9da7b700ca1d9f014b79a880fb *inst/doc/rqtltour2.pdf 1b42a662f601adaa9660800eefa4e42f *inst/sampledata/README.txt f6a9eebc3f37d26e0a5b8ed672354712 *inst/sampledata/gen.txt 9198bd35e7a221556c5e2008d00cf84c *inst/sampledata/listeria.csv 846a80e9b730dc4a5144437d1563f0a0 *inst/sampledata/listeria.qtx e064a29e8b8199c38b094b9c8170b434 *inst/sampledata/listeria_gen.csv 2dcca54c31a1e372c6da15881636d2c4 *inst/sampledata/listeria_gen_rot.csv 01b987cb739560eafac3cf41ec0c6154 *inst/sampledata/listeria_map.txt 3bc93e86db600b2f263a1a197269e8de *inst/sampledata/listeria_maps.txt 9bc5c1daf65145ed51a7acf1c30e6146 *inst/sampledata/listeria_phe.csv 216700811ae74ee1d581d7cff9504f05 *inst/sampledata/listeria_phe_rot.csv 3efd61cac8e5cdbba21f04c0d5a56adc *inst/sampledata/listeria_qc_cro.txt a857de8b79fd03837008a0d750dfad9c *inst/sampledata/listeria_qc_map.txt 8520b0234e8d59152126248b0cfa7566 *inst/sampledata/listeria_raw.txt af7100ff129f117e5d3b67cd10a76f63 *inst/sampledata/listeria_rot.csv dde45251d41488fedc3693dc67fc9429 *inst/sampledata/map.txt ffecb0696dd5873a13e48157180271fa *inst/sampledata/phe.txt e28aefee34bbe9f7bcab4a7a98c3bfa7 *man/MQM.Rd 1fa327675e935bd6a7a9ab74a89c4731 *man/a.starting.point.Rd 35f5486b6591f87b2d9ea77bfda5a51a *man/add.cim.covar.Rd d2e90efd2232b98e31c1284a698726ab *man/add.threshold.Rd 7d5885ea8c80124c956751b754bc6b81 *man/addcovarint.Rd ea3769ba60f2dd1d4a930e5a607e837c *man/addint.Rd da3c0761b93d760d9c09d206242938d5 *man/addloctocross.Rd 4889660feda30faa7f9ea8aaf9ccfd1a *man/addpair.Rd d063e7738603d037f2f49fd96c821727 *man/addqtl.Rd 52c90f99736bf48422c12f4707b09453 *man/addtoqtl.Rd 96d8b82b0ff834e4ca13e4f01bd79e01 *man/allchrsplits.Rd f0eeacdbf7046f00d464125dadfc622a *man/argmax.geno.Rd f8f258258899079b057d0a7fc5b0c44c *man/arithscan.Rd 823a6ccd95bf7f05212dafb54b450c0e *man/arithscanperm.Rd 30f3db3b537bbaf41f3a73bd5a04c5b8 *man/badorder.Rd c05a603d58f71e605a2be559d7f20326 *man/bayesint.Rd 5a6bd367ecb7e3819c4371eba2b1e24c *man/bristle3.Rd 855ab1a83ad2a10c468c0da3d7672cf6 *man/bristleX.Rd 5c3ac5e812fb044fa04d6fe3be485eaf *man/c.cross.Rd b7dbf460ff78ac5f377dbd7420e3fd28 *man/c.scanone.Rd bf9ba0415703542965541ec32dfff26d *man/c.scanoneperm.Rd 27cbb0f6b73e0ac69662c5515192558a *man/c.scantwo.Rd d7e427d929f900f18aaeb1d3207b794c *man/c.scantwoperm.Rd 4f5b5505a967b2d05b468eca7adec88d *man/calc.errorlod.Rd 753f7897ca580afd39d6722de7508081 *man/calc.genoprob.Rd 90ff7a78791574cbc7b00bc8c672b539 *man/calc.penalties.Rd d7414ce5dd7a7e1b0ab1340d8daea79a *man/cbind.scanoneperm.Rd fa7811f6e2a3ea43c2c52372537b3359 *man/checkAlleles.Rd 0b0383cdfa8aafc01f468f01df3a77af *man/chrlen.Rd dd04999fb8c1a1492ccd255c6ca42a0b *man/chrnames.Rd 4e1da1b4b0eaa62a9e391a19bf50d472 *man/cim.Rd 965e4191289176633c68f1896a787614 *man/clean.cross.Rd 314dd49f51800915c6e03c373fd8ddf5 *man/clean.scantwo.Rd 033576e8f94473e04eb68a332a18a3ff *man/cleanGeno.Rd 2128b8f0a5de896b54ee47c78985d0c0 *man/comparecrosses.Rd b8ec2afa6848f427bc454d4f51fa55d3 *man/comparegeno.Rd 0c7fe2e49f2d804935c5b15a07071c35 *man/compareorder.Rd a76b0870df7f07c85c4015471be1bd6a *man/condense.scantwo.Rd 3c3e7b1ca7d08e8943318061f4eabfa8 *man/convert.map.Rd 6729d8a8a9af709664ba2ef6ca692378 *man/convert.scanone.Rd a608c4fabf93f0c83aacdb9a647106c7 *man/convert.scantwo.Rd 88182a7fccbf7ff9bc96d1757ba58f71 *man/convert2riself.Rd 7ed7202393cdcba8ca5644f201098324 *man/convert2risib.Rd 9491ebf0f68acfe316906a5f239a0dbb *man/convert2sa.Rd 545f7dc6a54e0eeef2304068855b527e *man/countXO.Rd f832e0b2036a5ac3e9ba4c1f929648f2 *man/drop.dupmarkers.Rd 4fa21dcb96c8e726a4bf3085561cceb1 *man/drop.markers.Rd bec228fb22603e98b0da1c3cb6cc5b13 *man/drop.nullmarkers.Rd 49bf176801a1e2ced5bc9006dc9d39ad *man/dropfromqtl.Rd 096b6783c4f40d7a649a95f09213773a *man/droponemarker.Rd 380a08a39336185be26321aaeaf35f4d *man/effectplot.Rd 72ad6631eb6f7f3b49cc358d16d13e60 *man/effectscan.Rd a52fb9fd86c3f18b942cc9b8a80a09fc *man/est.map.Rd 30426606764afdf9c6b994169ec7f818 *man/est.rf.Rd 3a51043591f7470220e36f49b71057b6 *man/fake.4way.Rd fd1ed904f2c329da778c11a6590a7fb8 *man/fake.bc.Rd 634a140c7d495289d0b3f590d9d62a25 *man/fake.f2.Rd 7c9e56e2635b2ef0a7468a1c085f61ae *man/fill.geno.Rd a63955ea854d8dcec0fa40c881663df3 *man/find.flanking.Rd dedcc44afba05ac2793e996d60eec001 *man/find.marker.Rd 730c2da7401d6644cc4530a92e3b1da4 *man/find.markerpos.Rd 49955f3579cb744042744f6f20935dfc *man/find.pheno.Rd d1a4fd9eb327246e8e90ba1b419b47ea *man/find.pseudomarker.Rd ae0356bc440221337090d7d54aa46ef3 *man/findDupMarkers.Rd 611ce128c758de04eb623bc25bf5ba8f *man/findmarkerindex.Rd 44fe852442c1491c2fb9e2f2667c7534 *man/fitqtl.Rd 302fcbaf134900dbfa2e1d43d92bb1cc *man/fitstahl.Rd e7ea8ff0aa2114b13d37a11360f94711 *man/formLinkageGroups.Rd 23ffb71427bbd60bd559ef5e8d7cab9a *man/geno.crosstab.Rd 3fa1ee8ea2babffa208ac4908bebcef5 *man/geno.image.Rd 0f9e23340c941f97417f339dacf149dd *man/geno.table.Rd 8f254e0ea0ab55203f95f3dcb999c498 *man/getid.Rd 35d5419ffe33622f630090538d74b1a0 *man/groupclusteredheatmap.Rd 1fbb8aab2c79fe231054f8a93951cd32 *man/hyper.Rd 4d5b3a7be2e806becb67e8ae8bd08e3a *man/inferFounderHap.Rd db798f1159ff8a132008ebb142156a8f *man/inferredpartitions.Rd 1b0fa91082beb9a1b5e9dbd839111303 *man/interpPositions.Rd 15b866f052e23a1e6957536e5e6b18a8 *man/jittermap.Rd 4931be212350b060ca14d0934876b195 *man/listeria.Rd d408c850a4a8575fee1fe89173659add *man/locateXO.Rd 28fcd1d0d872f90317ed511fe3cec877 *man/locations.Rd 6f87935e11c8cd26bed12e6d82a59cef *man/lodint.Rd 87981e632b4dff4ea12e05ffe6e35328 *man/makeqtl.Rd 707162a8af63aaeadd5cbeb03758bce6 *man/map10.Rd e10ec2b321490c68a5004f06f9e772b6 *man/mapthis.Rd 7697ffd6cd4a83ae9a53a8f058b5953f *man/markerlrt.Rd 5d8d9ab636f919d2bd32f091f4a20d1e *man/markernames.Rd fd3bcd3ed4dcfd2676f96f34c5e1c0e2 *man/max.scanPhyloQTL.Rd 8ffa1201500986dfeb33e9e5098fc32e *man/max.scanone.Rd 7cbb9d614427653d038044f7d4bf6cef *man/max.scantwo.Rd e472d11285bd6ec39c2821557ebae43c *man/movemarker.Rd a8d19086633b3a74ce8158cdcd346e36 *man/mqmaugment.Rd fc86d572c1aae0b1382a3935d7715cce *man/mqmautocofactors.Rd c3d19df99c7e54b9b4c757a2c9c0f05d *man/mqmextractmarkers.Rd 5e753b10fdcbd951685ab6abe9a0a6f5 *man/mqmfind.marker.Rd 49f5372ad8941b0e59746d4c3c64fd0b *man/mqmgetmodel.Rd b004fcd5d7aa56a2e48177402c97d214 *man/mqmpermutation.Rd 8728db91456e11557e6c5ee28c3f8da6 *man/mqmplotcircle.Rd 437937c04dc83c7561a2466680ed55e3 *man/mqmplotcistrans.Rd 45d62c0b839d1a533d2e3508762422d7 *man/mqmplotclusteredheatmap.Rd 15fcc6b971efe162a0d23a9c8e5f6d17 *man/mqmplotcofactors.Rd 6f88c8a538364224f624e4858a66bcdb *man/mqmplotdirectedqtl.Rd 3477b2d0fafaa11eeaa4fcdacc59b22d *man/mqmplotheatmap.Rd 311f6be1563dfd41a9ad3645e9fe2547 *man/mqmplotmultitrait.Rd 0030cfb28a4c7c59ac8f64828f3c1ef4 *man/mqmplotpermutations.Rd f473d29e0c7b5be53966081fbd9369d6 *man/mqmplotsingletrait.Rd 82e8ed8e2a1bcbb4071d66b43dfafa42 *man/mqmprocesspermutation.Rd 9e48186ffe98f298079c1485c738b5d7 *man/mqmscan.Rd 60204739e43579ae66783bbae9cb47d1 *man/mqmscanall.Rd a9f9e536a21a220e272a8229834f3e4c *man/mqmscanfdr.Rd 7718828d7dbb098fc6e94aef73b56835 *man/mqmsetcofactors.Rd 33a3c545e26399523fd38dd7c5ca1f65 *man/mqmtestnormal.Rd f906cbec37e3ba36ef464499b41e8422 *man/multitrait.Rd 1250f3b4d0b959510cecaf188c0234aa *man/nchr.Rd 1f7deb0f335935f8a4903b298edf7aa1 *man/nind.Rd d7770a39dcf5be6b3e722d0cda3d7161 *man/nmar.Rd a3f370a50ce51354ed70049efb6b75d8 *man/nmissing.Rd 5266a15e69ebd96baaadf5395c7d90e6 *man/nphe.Rd 23dbd4ad8b077eba041896d789eec3f1 *man/nqrank.Rd cea48ea2bac2ef7ae958aee4c6bbcc63 *man/ntyped.Rd 2787aad2cd5805355ce8bf536e37101c *man/nullmarkers.Rd 7e9ee9cd88a6b991c36196c34f1266d4 *man/orderMarkers.Rd d731a816a7155e452898fe368c154cd4 *man/phenames.Rd 7d153472d3f0b39902540818fd6259d6 *man/pickMarkerSubset.Rd cb197bdd16e3f28691fdc5c1358f9015 *man/plot.cross.Rd 994b19074d0b3929fc8ab9bc0d25b293 *man/plot.errorlod.Rd 48ab6edd2385ef8ed884901f1bd762e8 *man/plot.geno.Rd 01cc22cfff089a2a0c553d1b16a4d840 *man/plot.info.Rd 0f68a66e04a875900b55dba660fcf542 *man/plot.map.Rd 2e031824784ceca91597e58ffdfaf627 *man/plot.missing.Rd a71480644300e56eb625814ade95a287 *man/plot.pheno.Rd 796a1f0eab7d95a0729511d7990ff312 *man/plot.pxg.Rd 1df7291ccd09f7a0501514d8132b71aa *man/plot.qtl.Rd 1b7c13b543ae2d051dc7bba196f54276 *man/plot.rf.Rd 989c6b19d38a7f66a02d770c9e0e96c0 *man/plot.rfmatrix.Rd ef07e985c0d0d52417eefc61ab65e2e3 *man/plot.scanPhyloQTL.Rd 89776fd0300dfab748a9ca12fee6e60a *man/plot.scanone.Rd 514eb55d45edabe3f4a5ac9afcb70183 *man/plot.scanoneboot.Rd eecd8b28366d39db5ed9fbf2c54afbb3 *man/plot.scanoneperm.Rd cda855b2c31a2c47a05efb47848bea78 *man/plot.scantwo.Rd 3f21fb69ec4ef92b32563b941b3533f7 *man/plot.scantwoperm.Rd efb1511f9c689e6723b9e27eb107514a *man/plotLodProfile.Rd ae9d1e5f8089025fd2f7fff53268bc1e *man/plotModel.Rd 0543c43796b17159edb33be7b8c6f3e4 *man/pull.argmaxgeno.Rd bc14f54020bdab5bad02784231c2f344 *man/pull.draws.Rd 692c95014f0257563bf5df5c2495a6e8 *man/pull.geno.Rd 84b743649313f13717838bc9b093013c *man/pull.genoprob.Rd e5f42dc19df06293843d3d25889f2428 *man/pull.map.Rd 6048a4b528b7603475b886c7f0c49d69 *man/pull.markers.Rd 5113351810c28a3637e00e814de48c0c *man/pull.pheno.Rd 3183e45d039cc313e2cfcea1d492add8 *man/pull.rf.Rd 4d25371384489f8a35bab2cbe18becde *man/qtl-internal.Rd db0b934b4f846b2c203a6b26dd2c48f3 *man/qtlversion.Rd 09ad720c0c656fdc47fa6d99b58576e9 *man/read.cross.Rd 84e4eaa518d2e9dc78a9b2a622d6f6dd *man/readMWril.Rd a098c7308d2e957c109c4d6f3f9ae442 *man/refineqtl.Rd 51c75e5ed191274d3ed2294b194e4172 *man/reorderqtl.Rd 47b63dd66eda40e390df04405ffb2c92 *man/replace.map.Rd 36befb99381afe13818c8dd69122977b *man/replacemap.scanone.Rd d7e3e91dd1299a6faffff29ad70031b9 *man/replacemap.scantwo.Rd 105f4d13c5aad3f9d4977507a6b7933a *man/replaceqtl.Rd 6b5b678c5d4fc417db81510d90ae37e7 *man/rescalemap.Rd 737a8328c90835ab13519d4aca2057a8 *man/ripple.Rd 7b557cde314fb3107ffa098c139db958 *man/scanPhyloQTL.Rd 95fee830130583bf893c645d865018ac *man/scanone.Rd 6d8a4c31fd7a4a20d2b1a570e0bd39fa *man/scanoneboot.Rd 95de1f7101b85b13111ca3cbc6747a08 *man/scanqtl.Rd 93dc88c432830aaea9485b4992896387 *man/scantwo.Rd 97253b279907c72f0806d69339e3a0c9 *man/shiftmap.Rd 232680dbe82ff7d1b9914e1a3966e26d *man/sim.cross.Rd da4f2cafb2ef00c38c72908d49f0d2ce *man/sim.geno.Rd 86d7f4dfb00c493e0e6c06f6a03e73c4 *man/sim.map.Rd 7076ca41f367f5089e8fd2043fc0afa0 *man/simFounderSnps.Rd c0227cffd6e0f6af790c395ba923cf72 *man/simPhyloQTL.Rd eae422e3cc12d4f01130194ed0eb1b29 *man/simulateMissingData.Rd 1723f9b7c5333cdae5c3a40f3d6d22d0 *man/stepwiseqtl.Rd 2ea9dbf54e03ecee46765d181e0494ac *man/strip.partials.Rd 249f701db93bc27a863a1bb5996a23c8 *man/subset.cross.Rd 52d642e21fba23c3ad09347dcfb65c92 *man/subset.map.Rd be43cfcde4af6f45c4620f3f2d1a455c *man/subset.scanone.Rd ec249ad881ccebe98d817d7f54a7cdee *man/subset.scanoneperm.Rd 1e6227167548140d0eac6c95c5ecf52b *man/subset.scantwo.Rd 6e31ebc6f1a45375fa5146bd9b54b67f *man/subset.scantwoperm.Rd 3d81a55200fee6b31f74af52b8420415 *man/summary.cross.Rd 52e1d49af936dd0c3b3921836a48f172 *man/summary.fitqtl.Rd 2a79d456338bb56e827e1cae5ecf936c *man/summary.map.Rd d483f74ce3805574351782e4e0827e0b *man/summary.qtl.Rd 6f29cee661307bbac418766a2273bade *man/summary.ripple.Rd 62ddf80972b9b0b4124dc741b662b1b3 *man/summary.scanPhyloQTL.Rd e3e630f08b87de54bc06865fa11bcf27 *man/summary.scanone.Rd 96b033ce0694537cb0b5944483af7371 *man/summary.scanoneboot.Rd ca8bdf008c2d6c1a81ca51fe77a37f78 *man/summary.scanoneperm.Rd 6a5c9eca2447a60f9f005db3d4c07494 *man/summary.scantwo.Rd 96e7705ab97225150d43c7b86c2e22f7 *man/summary.scantwo.old.Rd 555f59b7a0f0f11969954c4373f567ad *man/summary.scantwoperm.Rd bb679055c91dec764a340357e141c38e *man/switch.order.Rd 2e1dcf2360fc2ecbd5ecb5bf70a37a5c *man/switchAlleles.Rd 94a14cf7cd376c60681c3359ceb360d9 *man/top.errorlod.Rd 36d8f8c057c6b78499f86d463530838d *man/totmar.Rd d5ac1ab65a99180a8d096037e6de95a7 *man/transformPheno.Rd 834347327b0a2d242a809f733ecb628b *man/tryallpositions.Rd 2f126e6ba3135e2a792085abf3d3c1c4 *man/typingGap.Rd aef1a2b5a9c6e4d494ab8ffbcc06745d *man/write.cross.Rd cd3811e5bbfede40915d15ef3c55c736 *man/xaxisloc.scanone.Rd 7ab4aae0ebff42ce151372d97076416b *src/Makevars 30bd8c777116400799dccdb3ce73fb04 *src/countXO.c 52152622fa2191ee8cc06905ac1a0622 *src/countXO.h 40d794b54ccf2c6fd253246c88c1af86 *src/discan.c 1edf431c18381ef7023035ffdcd1ef1f *src/discan.h ee2d9831533bea3ad2529a7115fb76f0 *src/discan_covar.c 7a790e059f8772ab03a69bbe2023100a *src/discan_covar.h 8f40b69ad9c3f06d6b5c06771a1067cb *src/effectscan.c 2f13698f55f5f145facbd8a067184808 *src/effectscan.h 1ef458860b773d85b14dd83560122237 *src/fill_geno_nodblXO.c 884d6b8e4bebc94da2d7a92b41ccd2db *src/fill_geno_nodblXO.h 908d67725b76723eec968903a3aaf38e *src/findDupMarkers_notexact.c 92ebe62d5dad6ee5213292a2868be8a2 *src/findDupMarkers_notexact.h ac9fabcd966665afe603b780988722a3 *src/fitqtl_hk.c 04640c993d8185d4d53dc88f5be5ab1d *src/fitqtl_hk.h 5c0796c9117ec96232df479894ae6106 *src/fitqtl_hk_binary.c d710dae6a8cfe9e1c893cedba6c86542 *src/fitqtl_hk_binary.h 71e901f45940b813d16c6649cceb1985 *src/fitqtl_imp.c 4fa4415b478897aef4578499563fbb6a *src/fitqtl_imp.h 8f2115b12b3e5c4ccdad377e1771c762 *src/fitqtl_imp_binary.c 7ec7637065001a11eb08ffc93f2844bd *src/fitqtl_imp_binary.h 9f82c730e23326e562a32e34d0c86e41 *src/forwsel.c 7abf5716f9a1658c8cb6479c89dc8c16 *src/forwsel.h f3cbf098a877365f974ea2825000c3f5 *src/hmm_4way.c cfb612263a6fcda76ff0cfa8535ecdfd *src/hmm_4way.h 6c0879d3846fc0b58b747609be194919 *src/hmm_bc.c a5d9b9f4e4970062335002845281cf9e *src/hmm_bc.h cffb503c01b891cc31686aa751196a42 *src/hmm_bci.c f4df0a4ef5981aa378e066889c2ad3a8 *src/hmm_bci.h 417649c9ab61a2d646f610267bc3447b *src/hmm_bcsft.c 243a52b9042cd32ff66b89b9e1946c2d *src/hmm_bcsft.h 3b492fde1929f70b0acc4d1292036578 *src/hmm_bgmagic16.c ee0546bc3732c6f78b9be83e703257bb *src/hmm_bgmagic16.h d3d1825710a4fc3b34c9984619c2cd5d *src/hmm_f2.c 1ca686313b26d2c07b01211dd71887d0 *src/hmm_f2.h 5b9f62d01b64f592deb9bb5098b4edc8 *src/hmm_f2i.c 12d615ea2967a445f757a73af3f7771d *src/hmm_f2i.h de6384c1f3cf8266eb9688369d8ea0af *src/hmm_main.c 25cde82c7f76a329cde27d95f47bc51e *src/hmm_main.h 683f0e64a21184ad10eff78cf7464115 *src/hmm_ri4self.c e6bb620d8f4d835836899bf536e412bf *src/hmm_ri4self.h d1cc3c4ef6dc7634583a9bcee136a4b0 *src/hmm_ri4sib.c e86a39c3401659678acc9a0e92ff4d1d *src/hmm_ri4sib.h 12d92cced2dda07fd42e79d99ac1d761 *src/hmm_ri8self.c 36dd85d67e581cf34632874997e1ec8d *src/hmm_ri8self.h 246584748ddc4fefe2518d53ab3a2ad1 *src/hmm_ri8sib.c e87c15095b4cc6b40ff54dfb11189991 *src/hmm_ri8sib.h d0b3026b60110278edfd8ce42e3567d1 *src/hmm_util.c 881200ae6627c68cbc8a9b106bb3f7f8 *src/hmm_util.h 29d28c5d31f823a8b66a4c2e7a5a591e *src/inferFounderHap.c 844c51987a1a472162c9bb46c62a7e20 *src/inferFounderHap.h 3bdaa903a0a3db177baa64d2a6bebc00 *src/info.c f158a70c0f351d18af9444b70e87c926 *src/info.h 15dbcc8f34e7b9afe2419ec3957b63dd *src/lapackutil.c 3fd22a64d1ad18da8e1795de198ccdee *src/lapackutil.h 81bd2428f9e1d2c2db61fbb356605896 *src/markerlrt.c 908aa40946c69bebb7d97540c0fd21e5 *src/markerlrt.h 331d66bab6b9ea33c6ed014a160c5f03 *src/mqm.h d1e371b180b4865c3d6d8e9fe73d3d59 *src/mqmaugment.cpp df157c58617019f3d9f2d4b995b8f7fb *src/mqmaugment.h bed427bf8f9397990f25f40bd28ac0c9 *src/mqmdatatypes.cpp 157ec508e39121566d312aa0290d6cb4 *src/mqmdatatypes.h 7864c013b1a6e56257e036d399175d51 *src/mqmeliminate.cpp 2721bb3d7aeb7c5f4a0e96ca2de9530a *src/mqmeliminate.h 54e90182c6685d3da29cd97fd457ea90 *src/mqmmapqtl.cpp 5d6045082bf3dde6c6f5b5e5655fa3e1 *src/mqmmapqtl.h bcf75bfd0d8e0c31b2e775466657ef8e *src/mqmmixture.cpp fc1a1a62a3aec7f982ac13e4a798a391 *src/mqmmixture.h 972d82b8dc832dbf24c73612a4d6591c *src/mqmprob.cpp 70ff1060b83ff81c9327d77cb081bcc1 *src/mqmprob.h 4c1611e856954984b562a0c957dd1362 *src/mqmregression.cpp 479bbcc28a702267d129f2e3886563af *src/mqmregression.h 8a8aff6c8dfe96576bc7ff735def03a8 *src/mqmscan.cpp 92e37580394ec23de670a77fe05afa16 *src/mqmscan.h fca2c7e36371aae972eedc4d3576100b *src/pickMarkerSubset.c 119e0f0fe1633d083dac63a5e9b9c0bf *src/pickMarkerSubset.h 4b3a8facb454f5c6a89a682d60fc4ee1 *src/ril48_reorg.c 22913042b6ebd00b5db201be62982a2f *src/ril48_reorg.h 998381214856a56bba366cd218d35592 *src/ripple.c 9b657e8afd5624cdf2eb983e2ff827ed *src/ripple.h 43a6d099b546f26760fac38f7ea0f725 *src/scanone_ehk.c 4069b37fe8985c08598b63a755753d4e *src/scanone_ehk.h 3bbbb5ab7f579b2a170f0ce596f00875 *src/scanone_em.c 5c979f419a76b2cb2af1d4c1608a826b *src/scanone_em.h 90859ec522ed76716d6e16b014adb7dd *src/scanone_em_covar.c 17ca3198acbf2f10a448230b3ff8f63d *src/scanone_em_covar.h 5aa8679c342ee58495211d82ab50640c *src/scanone_hk.c 36eaa62c22479d3ae04f3590204fc352 *src/scanone_hk.h e68f43961db6fbbbbfefbcab3d40ba86 *src/scanone_hk_binary.c 8a39fa685e6a310e35330cf2cd968259 *src/scanone_hk_binary.h bbf3a7fd241e8b89be4ebcd402332961 *src/scanone_imp.c 1ac163e8fe911e209abf076a9a92e5ef *src/scanone_imp.h 300d07312ece4fcf50b0d1d040727a25 *src/scanone_mr.c 4e42bb1c115e5f354b7ab0fa86cfea98 *src/scanone_mr.h 869efbc6e28407ac63d13bafc29c65e4 *src/scanone_np.c 2a1889fe29a5d3c7af61d511561c0fcd *src/scanone_np.h c98f61f5782f3df71df3708a0f913d50 *src/scantwo_binary_em.c 6fbaeae36cd793e8763e115760014026 *src/scantwo_binary_em.h 9401c60ed8bd5c93cf7d89e3858a003a *src/scantwo_binary_hk.c cd86df51193057724b34421091cd05d2 *src/scantwo_binary_hk.h 9c484c15911ddab2621d42a2d06ccd19 *src/scantwo_em.c 5f7887151b08afa5aef55b99e3cbc940 *src/scantwo_em.h 62d66b3b2330da4cef4fe63c713c4e52 *src/scantwo_hk.c 3a7465ef2585dd8643b5ea2d0a7e1d79 *src/scantwo_hk.h f79e531b0422fdbbff64e9c0f9b5fe7c *src/scantwo_imp.c 815e1e4ce03ebe8cd3f25d3202286a92 *src/scantwo_imp.h 02e8217662af949d8494ac6cfceae625 *src/scantwo_mr.c cba4e984fc5e24bc7f77e840c74c80fa *src/scantwo_mr.h 290a08b05ba440d3690967c09cbffa47 *src/simulate.c 5bd0383e6aeffc101fc46bb2fcd699d9 *src/simulate.h 030228e733585761515230c85310bce0 *src/simulate_ril.c 2a9158dd96b8f1b65d0360d08e7ab5cf *src/simulate_ril.h d4109f5d0bcc4764c8cd488ab5d9aaeb *src/stahl_mf.c d03cec6a3f9aa7a9d208fa8da45e4e2c *src/stahl_mf.h 5a9fbf593d1289f13b8b0d3ffb1662ca *src/standalone.h e7979363df2836a74beaee48ea2a4758 *src/summary_scantwo.c 6ea80c129fde6aa28a004e0e65649f62 *src/summary_scantwo.h e2bd4868023917ef4e1b71bf66bf744f *src/test_bcsft.c 3bbdb262c253aabdd0c3ad7b31fe2603 *src/util.c ad1b64a000bfa38281551a22dcd88968 *src/util.h 248d0b42ce5ae96dd6e4f86183220cc5 *src/vbscan.c 68047bddaa47b586dca581f57d6c57da *src/vbscan.h 901123a6adf78206e4f530065d0bbf7a *src/zeroin.c f4c317d3e5c2af5405243e66b5ed354a *src/zeroin.h f6a9eebc3f37d26e0a5b8ed672354712 *tests/gen.txt 9198bd35e7a221556c5e2008d00cf84c *tests/listeria.csv d04dd9a92564d4c9f61dc86df6a861ca *tests/listeria.map 8520b0234e8d59152126248b0cfa7566 *tests/listeria.raw a47368f05bf5a91580550b1d2c2f4bc5 *tests/listeria2.csv 1d9a688bc52515830ad0664ce1d4a0e5 *tests/listeria2.map a753f49fb90ca63e0a0adce9bdb3161f *tests/map.txt ffecb0696dd5873a13e48157180271fa *tests/phe.txt 054e7cc55d89114c4fb69d3b425c1c01 *tests/test_io.R 5b9d04dda3ed56e163694b2de7e8a4dd *tests/test_io.Rout.save 9d487b394434c61b15806926325555fd *tests/test_qtl.R 3001461196cd550e16acd9df7a1d5f98 *tests/testaugmentation.R f0451cbb02cace4ddc2058015753ba80 *vignettes/bcsft.Rnw 8eb3984bd344d8557aad7a97941a9c8b *vignettes/fancyheadings.sty 0e3e2fcb99258ac5ca671d3cafc4ac67 *vignettes/genotypeprobabilities.pdf 36ea3b648f7f5e5ca0720876ef5a65a2 *vignettes/goldensectionsearch.pdf af7b55dc73d4866ee50f358467df740a *vignettes/plos.bst 184292403e1f03bf2e7ceb24b5ca46b2 *vignettes/recombinationcount.pdf 42c083fe6530877a8c1af63caf3347ed *vignettes/vignette.bib 6d4070e06aad8a67922d18ef1d835f01 *vignettes/why_we_need_a_new_program.pdf qtl/vignettes/0000755000176000001440000000000012131541647013116 5ustar ripleyusersqtl/vignettes/why_we_need_a_new_program.pdf0000644000176000001440000016407512113233445021015 0ustar ripleyusers%PDF-1.3 %흮 1 0 obj << /Creator (CANVAS X \251 ACD Systems of America, Inc.) /Producer (Deneba PDF Filter 1.3.10.011 \050Win\051) /Author (Laura) /CreationDate (D:20120404114849) >> endobj 2 0 obj << /Pages 3 0 R /Dests 5 0 R /Type /Catalog >> endobj 6 0 obj << /Type /Page /Resources 7 0 R /Parent 3 0 R /Contents 8 0 R /MediaBox [0 0 612 792] >> endobj 7 0 obj << /ProcSet [/PDF /Text] /Font <> >> endobj 8 0 obj << /Length 9 0 R /Filter [/FlateDecode] >> stream x]ۮdq}8N)sKD,ر&pl}֪侜9RaAj^6U*X_?/_i/pxƘR|-!rB ^cn9 ]5^S*šӟ~qki)UfCkrG-RKdl241iQ頯E%jhh򱰬-QI.lJZ6%EMMv4Ԡde.Kn,[lh e @窎JS47vMGVl~Mb.΅3BtptU:bE:AW9FZ:8Km.s6Nc찋 ZAҩEQfQo6lpa,]lmihb,[TVZ)M[CƞBL0GSc"]ZFIYxOA9.,U|W0x :銲|ޥ^'O.P#Jpy+y'Z/ N`ƌ?/wj|ix*4m'IM&+$l埨oQR*%#PDk+C-&l(E}?AY?є\?Aje?XC?ʐEZ䟰w]'$N&.p-e'DK{WռyQ-C 'B9ߊ?.O8dA[WxQ-uV!ƴ~-jeH?ү˧=ʧ/LZIs~CгVƒߧxMsz%q)lZU!]jzo]Gob:c[ E|k eƈ OM||kg "`c!#g¬R*VKz*F`Cދ][焁BQu^).k&mҡt-x#f44% Z4,1{Ɂòt5`6tɗNU)*yKg-TdY),5`S|EwJ +KVdߧP:LJo{(P j\Ɛ C=zXۣ8'8+Fq+bՕ*پd&’+9u1^]aw~{` -U0]B2CXIB 4U y77=}%9}|',)h9,չXZƵdG%- W"}+lu`Z$O 6 a.ʣ+v((vQ.X\~B [׿nέ·i%yi0L<5ߜw?' [y˿=ߜ6ڝ qGMn@%aAZᐧ}me"b8)ʤwB`0,̍|i />S(q!+d4]c+%Ic~l*a&Z76;mKHmIj7D_ NJ~$y%¶֝Z!bܺi[,tR1z Zx&\w`EJ'8ppؕ^0Hzm_EP[$z=4YWJwj/X <`,FֹJX* xWML,Ikǭ^ q}AQHJ Ғ*xDcz&si IXCs};*gŰ,}K7?bjMܽM pD K@tKkNجU([g-Y'c/}( r Zkp6W <],W7m1\ /ZFnrx k@3y+UU'4`Tbz :!{&JG&+{ ^kw􎮒_,skNJZI;Nm]͙TIsKA\exHM{*LCI8% 䧑CWH* >TW)_c3U{4PS^*V:*c =|!Xz4fƷAaAZѶjW #i>U-暛M(L \\a]F0tb^t%q|.ܕw|MM-y ;95T9/({aXf[saXMJ? -0OoOv`Zh CNBԴ@is3cFͨ()uvNtDq 5+P +In% 꼏܁ I)aDᡆ#hK5`&K0>m?I wK',Gv}]`z  0ϋ\Ww兿h9Ր 晻Wȼ*r0;LQZTFB恛W7;0;˚Uc}:1(%1}2m]aoz$>VP9g3H|pAJ ܀Ͷ-VS('x[)<Ѓy47Ƕj/_e Op nqV&pnd\‰롥a9#T.O1n[ Ԃ6 %O5 74\/<3d@nEQԇvaEp=wOǺ䫩(oMZ@9\,u,ѐ {ٚFj?.kHtldbH;8cKZ}ydMbWLI|Tr;e>eG^krDܻq͏CF rpfԎU(WcؕL(?<P+-T݁YJ[%ffʯ29ܩcL3op/ .X!4H!ȸ<5ֹޮ1a^O07qe;ס WZƌ6FQ6E/rM D wnm?;:]!bư4w2Nds^IndVCCFB^Ku 4rKcd,|&WV=w6ptXEذ34ɓw|&ˁ,3Yٰ=woo-R8#2C[wei(af.k-<.ovx Ykf%w^xz>8Ŝy͇ain"ϐ}e"S.%#o_ .f܄: m#r̟,?w/…iFzަ~|xP} ,H՛^SF^a.&Tt\ K+`+9HdS%*:[啹g+~-c)]2j>>6&=!bhH?zBҘP&0aR +1`F(݇ZR"O4;L3M˚*]]x1Z0P)5wKPX[VM̉5x Ť ?ĊG̩ixoMMSֻrAk&4n53iS5Q]3ȸLeyP(ڔ$4va5/ͳDTr暗x=/Mܑ祑#,Lm;43i:m Ux(ə54Nbk8sH{Buu[7Cd2Ls)[”oNI9: ӵk0gK[.L=H v ˅_+kp;vHiȚa ѿ7 /q;˒>,yNO`O*4s7>fg-h Y\֎+\@o_^2#{w`%,5s+DrȟSU0_'">l&hͭSSq>s'd~cQω&9ɀ;'1Oɴ^|jWEu3_Oe]w_/p Ϙ|IdRqg7la ]t֝1if3BRڊFB8`0!Bpc2B_0nL[?tB,!dHzޘ|m?&M\U_qɴ^睲)-6gq̽x nxxBƬ~"!#|Ĥ%-n>\|o<1f:ڲ?G"a`99ޒ[]m,LVcz7-v諧k򶷷lVl>HB|ϼ%Tp}6tϗ|wr3='4FGm-yꚝx quGB|/q6AUci;Llh󇾎 ^@tfJ>Ll(cjWxw7x:̳]b]U[d26ӲeokM#gu+,£>E›\{ze<) zH['%;4HxmEK #cn`ŭ!P%F[eJH jUKwfX_2~})TfL;/Z-KȤ,0@S+bõKq+ebj$P@fkYR$[ұ_iSJY%{r$+"CsPmr(bCB}j]2ffK)=5 N?E5G{t> #36,s T> ̉ 0'*ć$9tAA*yi$磜^ :mlڊbzzٺ 2Q gh4])KU]<@c` >l ̪uoqp32E(+Av(Ј[B՟]f: /q%^KsBLX\>+Sˠ^~RJS#DjE<HuCintW\;vQ$!u*LE/F6P-`̙ڋWn5B)Zm Yi`)tTXBp%K2xzT> ;>(Jj{h"Y9&AUGx[&N˨Eey,ޱge-XXDz`r66CՅ\`e:(k,3!OykQ󹨬ԊVA^mNS^(z{`O rWvv%a@#M 1/xJ`ƀy1$5?8iV a'(hZ֬쳻;a٭]a}JoS]TȾ.1 *=%j_o=tJ }R:J[=+WNJ3t;2:f~e/GWQtW\Q3u?mnï0pė+TawJr *si& sezUB}m럸*>"du[˄tg9д=/bBSauKqDY!vEyQQIUaw:&[:] yVzP<_&w\L!WC-W}'<|g\bj)uyUai+w:*w0:j(8?'DX.av,SHtsn}Ishk~Gi!ɚؿrP9|}4NEy2ɺحg #U#\-?{۝YCJinZf}mmY]j>lOƒW;kCba|F&p++a'>/%IIy0_}KMQB3 K<"V2sznF9xM,~k !uK QߧuKv'nO9qq#QSu1* 7t?j_jЙpu3,i%#G'hN-AfnIajϷ})J2&bc}Lx]6_+ُJN?a^3-Y ,6{{79 $qSW{"։S[_>A)|eq[ Ro,8> stream x|T?|fnߒlz#M$@P"lhRBO@$T `ATE@D@P1%6EADłOED Ĉ}?{ܙ9SΜ9sfe%FDvN8'dMhĖ m%4IKm|ݎD;)|=? ѾD-F:x eFD$ѷMQDm=DF:nЁmBymCN;#uFrīDVyq'5c{lHK;FבDÉB޷[-M6iԬEN\W3}U!1*?^}];xr5p䉻ۃ;ŋSdTQ>=J*qrPc|)x.tetFP]VMOPnb Qv]?eo/Tk|>!5/>k\hh5V0 7i5SĸQߖ5t 5z}!S?Tw]uWUw]uWUw]uWUw]uWUw]uWUw]uWUw6Fv~IƓ?,QȕxFX51YNjœ?I@X+r*½t̂; 5ݸ[GP/@݁Nt(;h [)8h-qTXMe>y)Y)&KSRitA=0%^yK^9Jj:VMO-~l-ǿKdª~wF8ݝA[o8?pu<]I4W+ʕj55͵kD%1,1*1)1-Qbľ7%H|{N8O/|K/99D ϣO8>OǛO9XcZk~c %;~G;/=Gw}Ky٣vM4ͦ0зm0ͷ 4F{"MIt'E4{~^h֛}Ogh;[ž`ILf ]l)[Ɩ'LeVl[ְ,li ]_ٿسl-[ֳmbϳfa[X+0+esV"^b΂v3 at`a,dXdsUWk,Ef^go8Vų&CEbNb,}m{gdRY;C}vtV5`tfRu:WWU EcbquTIQiB]RWkԧԧgϪkuXuAݨnRW_P7uZ[[mKj]ݡTw/JU5u MuWݧWSr} )LኤȊ芡XzH}_@=~~Q?Q?U K+izV7}̎Oا5Tsh!ZkZEk1ZVO4$k5a ~n=a+IoZb`wE%e[k\KRT-MKk -SIFZڃC am6KjsӞjsmI{^{A۬y-ZVm^F[c8k=k5괺$k5ŚjM[ˋvAwү'.zW~] ^zoWEz>Pߨo҇% k5ؚm=ezzzĚcm "1}DB_/ӗO+v.J`?O;~f+.Lv]fU˲kgs\*׸ na ۸`!?amCa#c~T??O___'oooG'~^E_lšJW^%\P"(g D+1dȆbfaX aԃ8 dť$*IJbaFaDQFcqF=#H0H4djiFQh`dF FFc#hbM\3Z-VJn66F[mFzqٮuaحvjt3n0=Fm1nكh 2n47Cc1n0Fycqqqq1oL00&Ɲ| B?/ /|_W] _YgkZY[nnnRZ/liLZ]sFyiEzQ.,*)Ca3 ktVAy )-J+UVg#;/˼{O"I\$V6J'UV+%r2LUnWPҕ)Te g'Kg! pd-EhbX,f[,%j I|Qd}zzz֏[X?S{~&m2^rEF= J3؉ƎczcoIH#x->+/[+rg2.+]fuXCl9OiYZңE1vU=ޞ`w]D{=ٞbO ]]73,{C{#{c{=^NR'w=֝]֗Xw[+^=~~O/+~ͿBׯnQ*$$hpe2ZS)TzA(%P̃n Jwhʛh~=̄$e28e2AJK ̍{1/fcv옃2Mʔ0GJ FRc)[j"HM\yrV7uBԱ[[hy= K̅J'5[ms^4PHͤyrԫ6c?}-DIVTM7,V=(W/>JLJNIMK #3aMr6kעe׵i.h׾CNwҵ {,ջO~t aGu1coǍpI{{SMf;yMMM_N`"1W4VOס.CJziO-iG]sQF2R@ ^bפ?uEz)}>mi#6DY3Pv7h31*8[!_  >'!lE Pmt~Wm6$u ѶژLRSsD@kA.^/k߯:k'# CζVZ Db 'l)z ě(X5 "?2_7ah SbQV 0u𥳐 ;c\u02X !ڇ ce! Mu:MqY@X`7hC5L= ,kI|g0 ,-EoA~B?n(oGs. ̙?ꫛ#0bT-tKL55uS~ A+KUMżC*EmZ.6T[5r&棘ZXY9SסմZWZ2 )ޥ=пCðaS˞]V.Qy#dqVr=̓LQ6N))T3'Zҟ&@ʹ4F!rC9fـ" dl~ C%:JqS\ImrCN^o(-va"(Y:ۈGXQ>hzKմZ_kS3*1w;|| } \/a6W+VίZzQK?zYEwsme'M}律ZkR$O\y,1eQiqS! QorWOP[bֵnS^q:֏f)MI1Nc~ 0EPr\eO##__ӟ8 P7\zwkaijByvD$F|/?wP57 Chc4 @?MϨ.(4`*03,e/HڋVp"sA~sI*֑E{z7Y/,/no3SP/wT(Fe4B! <}RAnB91Ppc&Ϭ7_||5`Oh^kWJ;mV~rg9J1 O<lObSZ\Yf}*Іb/[nFWAž@gi5!V|Mv|VrςMcwgvHwE@ N ZJ}zBI6peאf4c5KP̯b}4fSkC'|]t;{ )֔* '2ktyxk?=15Qr- G~3*t,W+\ȩmϪ x^o(]s_j @%% HF\\JkS${t>s_Mkv\-VZs#0w_z 8>7GT5ҫDa k8;W๣jmT?oRs?@.>As\@.sV) 7rc5/U?ωCixר{?р-Pc{j=l_|J˚>$ )T_AWhDAvU#5l+Ϣ@d{yG{~ |n֮`lxZfTiնO6kto=S 8$kZk_5s:_ hngOϵ[&|T?Ɵ{~& v8' xVQc5e>H`n`ߕ0@)Gr"os|7m/09އͼE>[៛!df}<5Z+c=$+a\_EϻC`8u %s s]Woјg|*sy)=8+&N4wTG1֖ޥĉ!||ugP?y)%ΐ8\cj# $]DOsw2#?OŻ0ZlEuO+zR8CG zUBk̔gfkfî=]j>=dn(p o}8Xo>_Ef}3Yي ̶2ݖ }x`\.ktƫ83SfR\JWg23uTSnPs 7$?4=TZi,> Y}s[WFވ~7xRegL@7ߨԙ;`y! d7:<ݛ~ϤNC8|Uz[͆nUnrm >o׭6?h_967QQOأ(OwntF qt^ u._-_m"Pwm/RYu{g֍vxwrَցz}4];^%*D۽Lފ,[}/hHu.^o=ZD [k1^c+ aTFΧx>ʰAps? o'?6߫0uC<2@`7gP}Q^f9kTkuX,Q m:O(?N{7K5Ϫ;;2W\%}u|V}SZM TROk&޼꺯$ ݙLh/hh\wLaO.QK3QWfF N˴!޽rk|/PRߧ,!޻Ba TT(+ie$^+ppV!޷'ŷj?8#RG?FMZ)lݘxghu{<. d_m&m 穓WOJXriRϴQMᯉ35T$q_{>лO`~̹MoMU-ďEo?\|3>*a;8.hۘs7!%OgZ~qo{_b-[z-菠Gs\4rc\зonsur2z\|? oڮ;|&˜KcoP*C؆+goڄn|A)wu{-3aWmVS蟾o5S?}Oz| ZQ-^}7%>} ]JDǰ>\"gL4_o< _ >/D}5Q;;ŷޢHy FMiw0q5sgιxͦؔ? $'ƶzO9 |[RMaBߚ`ظީ_#wb."Et>,`%޷/}q'/;Ю@% ~Q'te?"{T 'ԉzO W Հ[N/cQ prM=]nҲ̜ul*kԌo8g.i# XODo,ww1i~ڸIt,[cSp xX T4h#}IZ/=]ɉEAҳg$YY!#Uϔ6Q3&W*At`3pP:Ϡg Z gg3NG4K) /-wYV.pHS!#uJ؅`[Hٻ5lb[%(ǁs9hTwf>NyX(޲\S)ML)N䔦&& Nwy#g:kmj9X3M. 3~Fz^6Kv%, %?ܰ*sD,=,i\ӑ+2lWc@oaYP`}!' ͂n/CA!RGo$nwRuS teyZ=gN1k(շVr{PNe!AGoVf#e64:~`5B" f ~v)F`;!Jr#H,,4]n i4z>eIQ9vJfWʣ2Rh)e!/%E8=N< EvoBH~X 7&}'@{~/艂zk6F|')Gnm ,qWO#Egegj FTE| *$ݠѠ|}7֠[ K8oeA 2Me /s.p,>_i)(gxgh?ŊydZCGPtY(dA.s;_ܩRvjv쵒+ЕZ*p0 9/{8p 29SP>~q3Tx3D;hi>>L{O7c&`Mƃc<8ƃc11MfQp(G 8JQbr(G!8 Qhr(49 QB 78pnpp ɑ lpd#G68mrd#& .p29\p .8pp8p3'q'q88& p ~``9`9hAA X`LapT`0o%x+MJS&8<pxɱkkL5X5Xcr1w2 8s?t|:k`itƤSI-&֚^zФS(ϤwQIQI'SgeμH` 43tf$9X멭6k5evBjOuYݭ**wqiGQ> ,"5Cmy.ͅm\9!`3 h+0L6-8Ίܶ6#@^ZzXD9Қ;+.?i=ly@Hf\EҁD%H8ơ!{;oβl /sl yɦ2Ne\e@wY?rʂoA]lʜ @2D TNR5%9[$9[:g*54JhYVYc3`? B=>qU R+XŹ*d.pXD~[#εO,͹9ayhl2烮 vNjx9998eD3ۜ( zZ>lb'=N3ҵKȗZkKH;O,7#Bx ~hvZk-YKx-\zn-s wp;rTYe3n$ab: n}ڱnmsOrQ1Oh7ַEf ۓͣ*bz F}*OD= mDzx^vb,yyg趡mBZvp[Iy,֧ȳ!ؓ#nn,΃c|iOf"ߖ#\fT#f#T#4]HbE.a ̂Ndi40ufANfVi|5Kj K+YuIj?Ox<'xlʛLzǑK;J2uHpyaG :tgr\[~Er[}١IW*ʿFa"QWۂk$䶢QWYW1B Ԯ~ZέpI\bqH6BNC&[r;I $3@R։q;@!Z$2u4͓g`P{lh8$&^tkmrDn><{%J:#Qu$q[ ch$L -ui|Fb0<6>gXg~WyRؿL*oO],615UT?u4D`Aꂆ ֤i&OE춵tKiYMʜX-'Ch全zfkD 38s"3gaj_@'U?~blLfd_ꅧT:'aEia\e>fEX kB]uLU8}i Ş-Q&#O&eOh={=ۀGiJG=ST[N:$+tY$ -W}Pk8= |.S͕(Gi!doo <$*噾|S3 mdrgJ[aZb==N"/R{e7jBvJiBYrDw[haG)֌u6_ߧ4^WUʃu o[Jk},l{UQW={О&H3WiD44L}P,X$STjFk'j`DvNz9J'kXW6-d縍'҇2)2D6I0gB6cO3WY/UJcB gz9.0kF`gxO>/yPzUn&o˟*(sZc罇|/AwP~uDVp mG|&Ƿo?GYR6}Os z@aXK:Fd|S-nst)3nPXIXg0c`AnUV;ZFB?tJjKwJʗkYF1F1_CK^Ƴx3[Y]Hi=7E.5ȧ{>as0~A=f,r@٠lU^QM $4Kh=N{ʢ\^DbejbiįGױ hE0QE'5F>`aXGfJwyow9[SMvums]~V-[5m$qY ꧧ$'% bc"#BCAvb蚪Y;{1C1jA'WT aOf'#Cc615̺7Op@|T-nOL۲I6 NL QfSJior򂎾}QH#;+#swKҰ2m}lؾgL#T}}%N6ծ)]#n`/c%9\ddd粅4~;Y}ҡ`[,*XVQ T0uhݚ81A; ٯwGDBɪ糐Ж-[If*2ooQyEnkCul .̈́&6cMCF$ƧVٶw3K =s_ ɌdQ^#(,Wq8Bs[Eq+"FnT#21`40E XcOr'zzI,0Hp0G3uЖ:UO:ndirC%CS4͑#¡Sw˂89l*άb1lJ5{MZ<~WŪ>u7x58{ +NkMʨ,Wuㆧ#tր2 )mmci,)RF7[PIÐ51iD,5\QT⎍ocUXcs-\TY;Hո"ˌt[TT,Un?2I 7vpaXolU̅]գ`v@m󻟅4ί37f6Ds| &m5r {.e I5h;I>o.[v-B\l`o$&Jca2j==5k[\]U']`舻]ltdH0YΈ<;bsONJ ]ᩌx\xun7ۘMaͅu'f7r7*lTh|4ZHw5n'*MT.d„\ eį-QozY|TR+-a-bdR+ ?.eqA.}a9 \hkd$PZ%4k.9=-*xHK^»qqCY0;zYמϸa@Y65y[!7oL5m:xWwg(U۽w=ݘ!,]65A"> vH<|E(nQw<41+|vq1DM!}bmvvO= J!cq-Ӗ[`CHKsƤn3Xh`$CH3%3gP]?f g 9m6I wyW='0xLGl۳(sYead;J=\SSlM^^Zz^鷵w`]X'6Y}-O_lr8Ϣ= Omfww+ nw^U^/us9bdm(rh-VGv\KQ!FN1FܜHڢbn{+voMUjLd 8._Qms?q&!YwfwR}bsǥ\N) ν.Q#{Ś~/]/m;΁[tln"f[ ͤH6)rd &4INjwژskrKf5m8$}zF %E4S;0 '1BXbaN)ʗsH3uKAqp04xKo޼ifhj|ZW&&lD&ťz:4O.zqWᆎMVe勋g䭘 bNf ׭^^D2" mX {Lhv nbmw}]\WMm&kQf1n̰؂\Q9E cf%*Q ,~t/ XpAxm1[曳 nb:2*rTzb,MBt1XzDXx"b,{>h;4=qGU?.~^ǧWg{_qS+OwCb&^EšőDŽ?'==;>>OM k"khNŶ16Uh^d^trWL1CEni+苡AM"&&!BL& db%7/I(XH"`OĂbآ>5L+3$4|f&f&@fږpӣVTMPEtcvKy~)iy>}nxyŠq_y1i,u"]:dN3dmXn_X4v+bu=u׫,=۷b߲}d9bMn\/ q B0֤AQ|ZTăC˜\4DxWIifC?gRw0&4{HhD-5ŪQ"kj! V' C`!b"~1<]?m;!7ha;Rܶ\C0d .A˪.@H.ң6cAb[O 2ج> )JDAnbѺ|Oab]iĘh„NhjȢ=YV.|z7^ԋ ?c:}9٭So/'J`Lz;kد[;(1/vY_.՟UQqݱN) ] Vb.k-ؒq<.(~0`=1Q"DL68,7ƃ"a÷~kVSrUP{=9ǑJa-}#>Gj|q.J܄ZS:rș~?D9MHdOܰ_? zg+w D9h%#0`\k$4xq1^N#JXƉUf؋ # L'ݻ{k{Sڽ:+ߩ>pW 9 xC4㡩ɌB6xɾS鈝VAmRtT8MN=JC /F,)뵁;TN>OE֡:'/lνკ9\\;ˑ3]iԎm1~0mI.I#Kܤ5rq r]]mv7W/p+^ҔfͲIF,OfzyXȋ"r%{ ]0jLNlK7k*Jie/ު1Xqj_Ϥ3H3[:Ӗ`ՙXnG-Ϧ-8ح2^q.:vTM,y c.bJl'鲞.'PRaR A؁pl6M0,,s8kRפ8I}ɸIMf̣բNm`ЪYܢcPzϵ,3o0Y7Xs1|*(/Ŧ46_> jH-j#J,^[Ƭ؜4<:wqCaRQX<֗ UܕW.ȵЍ_=M[ӭ=PpÊNKwX3m֑vOBMHZhؗz\?kD4}7Z@䕆YUtޒ,!%E5]"L|JD$(.Yi zs) @$L~,ͅ+DY8DKh5*ZLiT4ӴrQyyQE >rjh'Ў[zL$eB"8_ Uz5ʄ֤YV%_̊&6G-rSl |vwkn+_C` endstream endobj 14 0 obj 19996 endobj 18 0 obj << /Length 19 0 R /Filter [/FlateDecode] /Length1 65788 >> stream x|TE?~fn߻lz& ,[P ؅() l"K5AEb `C3swCy̙3g]:w̲g@ch1Dž?ѻ7@R\yO1̬;}߰ޝ'xKC99ǏXF1 <;:OC1Z/- ;xe b+m0y1Cd{1^7vuV qw >qX_khzoGU[zBsQTVF:_ٿ ﰃe1G4dž?/e+f!x rYP2{&aY.UZ*ec &އa4\.]iH7výx ѱ4IVt%Js 0 ,#`kQ_\6jWqWGBDC4pjW4Z 5k]+tꉜCۡ?W ^+xW ^+xW ^+xtY`Y+QPg*b=NjBdBp[f;.GwzǤ:" 0FC7 w$t 0^D5rV2@n˱M#EhARXa0Y#V +M,EHI>;,Qr쐛eC42iT[I)$/O1wG#Q(vxȱű㲣Lqz M|gXέK.q_9}#9߯y~Y>ⓋO>9,縉O@_ޓ'N(8{"D'Ꝩu"D‰gX{:o8^pӎwO>9ɞ:Ne3ReW[3$KOȥL1MNLmG42^7siFjuvX"Wf&'ZJ!{QoέjseHot ]fMmCy #QE108TPYO>x5XSp);)B@D"UF&KR \ "`eY +* щ&, ѐ@"I$II4"Q|\>!.Oɧ/3Y r|L>!q=\+aJD*QJ*qJ$)ɊCq*.%E#(=T?ֿ_gsW7_WZnzzzZa5l`#6*i[(5J-%]ɐz*+(Site2SV(sy|Q1ePY<< >QRV{5ٳreRYVSO38'c\yAyQyIYU)(W O٨lR6+[z z'ݩ=UOݺGԖj+5_-P DVmW;NjgUvW{=^joH-V}~juZ"> ^GgogGBuX}J}Z].UQ+lMIL.KGrD~&+N *F Rm-R*PJT UF-թh vFi$ui&4Hh2u6mRdTMӨzh Z֢4Co7ԏ'%GuMк4֣iͦ hCڈ6VQALR0}NtAgCazT=~~~~WO'Si zV=~~~~WW/?KOeEgKv)L^¥Z!EJQRhDR I)iE5+X R"ڨɒCi!ZfKJR0-\"(-Zb8-^K$-YshNͥh6YskVSkZm)MrkuZVOeiZHk5rG5r۴ZZh-VZV??k66Ŧ4Ŧ۬Z[^u:i.ZW]zi"b ٵbvWh%@m6X Նiwhõem6Jj]m6IΧ8]H't }>MХ>K=W7wFY__?0U.f DŽE“Y , Va/ map^ _o EG#L/_+Mj"HM~MWz^i5@A$ՔjKͤ\-|Pj#:Iݤ^R!Iäҝ]B ~iT*= i4G'=*-JOTZ&dH˥'mIiuޕK u)Kt^(,*] )hчar#$9ѾOd\SNkuzBC9Kn 7=Ss[*ȅrkVn';NrgU&w{=^roH.`F}s?E\"#Vjk5m&[SkMk5[X;XX{X}%!֑I[-|NNS4 XZh,Ebf Z0K%I$g+oU~X?Տo;z^6&:G~4 "`3l=^xހB'܉vUWcx'B/P$tzX*, Z':%uAnq2qݮYY[Xߧs` \7XH1҂M' "ru͖dK9lN˖bK6-ݖamck˴ճշuuueٲmlmlm]$W߮;]n C]=H}~@?')z~A/Yz~EFY eC)8RPKC(.RWR4A{%w=tgi4 Xi4^!j 87y1gLsqL28GuLP_(_+(KP(Ndy$J(yp^=Jy V8oNK_Hgp.QgDT(ד q쨃s+&Ւj Fe7^nƥ0F $+fѭP{XxDdTtLl\|BbRJIMs{jԬQNz4lԸINf5h*uwةsݺ٫wQq?d ?y*xF< h< hg43M&xF< hg4WhTG?BUЇ$]v-[ -gy1}O)D."1ѝ1vtQ0Ve\K`b9W_9Ơy̷ Y̳X^ Oc2aˑbz~̇8F2r[Cx//Xf; BD{L%b&ه}jG S,m?i(…I_ ;fb{Fϕ}gml_X48TҶZ ml(E: J *Im褲c.m̏1..ehqˋӤW ~ud7LAF,20z`uf @ú.xq\a]د/`8.Ѭ=X&9wҫ"Ӟ4}0<da,_WߠGF*"Xrr2" Qq1 QSdyۋ'& ier>Y/_Q~Xl0Ŷl =L*)=%PJ % ŨӰ.z 2򑎫"G7\uY ЀVLeʁTwȏ~\Are2 L?u4b)^@:7 tT5Vꔯ-1;c:9g*е(L>yG;lG=0B%yF7Y!/a\S zZ+Q)\Ouo&o)Uwԁ+s% ϗ7 () B O|RΧ&O^>z10H B׆m-p| qQ A9f@ڋ0 e:30NW?`<^_}\o姛a@URBs1#МA~_|R&˝MöƳ<8è#,-o l2-_CT7*|m*,5󊇠-Rݑ Ъs%ܨwe 8w !߮*ŽOvQOnQ\Dzҏ1 WZ0\waQ`߮ðmfqu-b$Dz~so }!}ӌ>w#v"O4Sd/9f&;w:N-e-,ruS2a˔Ga lM?v_ysu/t`1U S q-C瘷mpb>0ysrͯ~N q8}1/@y\-/ &= *sBoxec&p7⽘Bxa=slћ~ ʠ?Û5^F?FbG6X8v}?|$A3SLfM~7k (+(CMSj|혶90KӺ*{[pe 3ic5&B!}xNu%i kXi~{2x-\Mf`i 6c2Q~]+ qR/_wG~ 1I-ؚ!4Bۊss}Yvp 򥋰fװj6N{q `}M~4 qpw0Ӄew]$Brv5FƏwb{{: p?|( Xb2P_E9#!po/a~3~{ Axg;ay5Dha:;%- !1~:eٹKii PhrbQ.0ɷ+aḚ!Xu2^@9Jatԑ}p4JW)j]p{bE3 cwgE q t'_YoL?m5n*0q!a1Aq{5 ɴeuC+6&[~[ؾh̞U.}-vs_j'rYO~E=Ez7Vj>Sƭ帥3[=/CYe6r!+Qx "?5قs{"ABL&J3fyy6o\ρ9f {5o&*i@OkNk{io0BC6f r.--9n)-AؗE&Pc?I!+c _S_% :4\F|Ǟհ4S!^k亐C?9Ⱦs+{o[FwBu<NvkI_A-no ߯xfܰ|pg=acӛfULuk,vu{&d8ӹ{^.h&.;I*;$.3R ;ژ_CF_xyNuS!Ɨ @vk/hjM{E(ع8^Tkq^1=>lB͞XǑB-8BMIB !iS3LHڢ2݉ ]d }  q!INX i#$ {Bå*T! @gcc!cSxWٴ0i.'Gށo?ܻؤ4~3nK֨mpwV)[B4v2>PB+Ѡ!(Nl3+oNd؅*}pB z^0c!aY+Zg`bBgӌxC@BF\D4~N$jP9d"+ vz$̝8v8Cg~MpS㜬ܑw8~GLUF?{-(4J!C]Q&n(_nvf8VЇ`?8]%q]u J +>J'=xq !.لՔÛ<--!b;Gr.}H{7%;yHH31^olN w-ba{&"1Bhʦ!p,d@A7Utx=Piz¹CKnG<桋EiQ9ŢB08;+(;&L؂0h$p1.+yOޗ޽/k%K0]/(3vu1) ʄ,,i?bLd"L(|{PT=`_)*G[-H( 0I~̉Y&XRy1feTrlbFFR9!^z mzF+F߰xFqPXOFzoK~k;lf2x ??A- pa[1mo Mboa L>\)XO:/Bcw8Rj q]xǸ:`4~>1N@$,SdXK)|B?w` \pApXPĒVXs؃ PN%5:!K]`~_JK-g "WC2R-:#$AJV)KJA$ԇڗ0WW:W,4ZBqmx $t&h-:.k!04~hs:Tq3,AlS'@!ȗ@g'ė0:&+ 'q$G7AGыpa/%~ĩ iMEQŞ+~5al{ç9gDtn=L`-G-.IWZ*KUIw]F?.)BPتlâ|ΒK+5:MlU5k]O~*fU,Tp q W.~ ~Fx/F+.rfIƓ{Rod'rcrluiCڒvO:Gcl!B?EЅP!JHZ D>a>Wk1DSD!R_]l32Gj+]J?1eZ~kUƐ (p sy :RT̢-4MWnFNpI  m&t$Iw~]rI\wbaV2^o ]L8Eq-$\/ ]P %6%,W!J ,Wy(ǝZ =HM0 RX( \y< "C;Q&"ΊZҝrEA_fg$R$L#E)LâN `W%3!㍇>Hn4j,хt jӶ.G=B!(9P.zXQO(A#pF-v=h!:ݠ",1;PLA,q ` ^í8;HThԡs觴;]|"$ϫi.9yQa 4Xb/!h 㰿 nΰ^P$d`(fLV@><\"&mճG o^r5iҸa2֩^f ;-5t$'%&DGEFCClVݢ,%P DOj6u?u  PsbPi|ysJ/V-LLI\ȭSYOu>]=??{wragA|8 |wSPm-R[ ԩ -::utbRm$1 wИ)6l/>5Zt-*OpVSYJ< V>Wzsk3J2CR [:2|_gcoxp4fVMĎp293]ƺؽ]X2Llόh^\#ӱJ' ?ttԖ,n6{!9GQ˗Z<0?qc$v83:7Ln ;qœ3Wn%EmQ |NlIQ* ms7dx#2§*coY~䶧:(9d?DvdrR)jp22|LDV8߰Nhj8; v`qLdxnWڵ;aP&fMKX@LTOS^5ʧz*BÛH?D5wOm`N{3T]VEBhcM 9=EV? 2EE!Y賗1Tf\b8L_ӌn<K%ZsXnCQ3+l'(w9['L7N Cqϋ,kA~M bt֩]nΜTgᜒ9ˌAN{Mq%)3& ֪d8iBˍdV׍^2{vE(JZoLøN/,2y=Nn*O PcE05F`p50aab:Uçdq^ |c@,1v@6Q%=bq?@H[)Њxgn2Q=!5䌉fn- " " " " " " " " " " " " (?d \anS}+UpOrS4,4w)ĕR\tlJ~ Bz <W`ϼڲ'%DfC7 ^[XQ]DY&+%,PfZ\ a>WfbӞD!6 {jew Vk m BXYqJ^Jqz9%!6l)m'\ˋ!a9~/0YV6j8^Oɜ(>Aǫ V r!nf Zfu_)! ry3slWZ!aĖ0Jo KbC0&z\Fwxt(u:s2?:!@ɪ_/a#Ny^-49#hHބE=sj0cʼI.yOݟ[{ ?;şKoݥA${]~ݸ\< *R G8>bWe@b|dbb/' d{}~s0VFbkfBI.eOkg\L׋AvЇ vk ۚGбt i9Myl\.//36B^ܼ g!u3BAJ4#;iԨQYѨQvVtT$Jʵ4ҋk<2=?7WM^Eݓ6jѲ9?n}ڝ92Q2ȖmB,T@0u=./6VZ[54b(&JjRm8N;mŇ} <'/~~^,65%[6&;A=>2rH$}3ls"g'`HN n z S}4DyýRfCp6đ8:3MgH*I & <\l9DM t&" *+ݪlUpe=嫍SFbh\Z$ɲ q^ T^J(-':{íNݺS@$b!^ur*,+C *TYzc!/X|ˍw6~fJu32P̬)S?9a993{3S2)J\{޽/k-b*Xbr~h$ .!%xjȊ@ߧE̪OɏK S? Ί|ڇ,~X+(_advqjS S{KMq}4UkDkBl$-6]5-"<9=V-HLJFN;pI5̨9bW6+VfCeW^7!peV\rH&Urw4w47+-XYiV +$+_2%s'R';0Wp9[ٴh,܊Ѭol/:s;qGSј׍E &~=-a9L:Y3a* %WyR6jܜԳ X7U,"=ܤ]GW'c{ZiyC]cgK ¢ul;Օɨnit!ŭ$J1};e `bR)LKZKu >8sRXHxRXR. KOt:ZzE7\@’ktMѐx{=^D qrS̱"BB=$;bCq:U+k8B!yÝJ5C=9Ԙ$8IpcqpK@ォYTj< 4W$;&[ oN {$뵺HHPTYTQX*uA!EC&H%jOaҏI|LtLtxT$EywX u}&ONHr~AǧFwZ_TaP=/UT<0k}߾կ엯נn`6YJV( *)E Wa\[ϫsZSOz, ~Fv ~TZ+űF9E*__tu0gvnEKjj Cݸ'9&9Dp%!,əu5)ȉ%TixᬧK _óYFgYgYgYi!>-|g v fwY%X3QԄĸDAz(ãEO;֖&p*K.E-Ys MG7{=rd]CwM?:FKq@D 8L@}I„= _DBȇ兇z\QMcģD\!U;VlC9,>4퐝a (*fLfFu[*:\Qqp߷ cȳoVpTʭ>WZq4 ✩l CFEoukrhHĚ:"<қ.ţ21ʍ Η6Q갞x62g?qU cZ?[1L޹Mō\aԲŽPby`~O-6fGdޔSlLWẆr06(c:Ɓ 6k ͥfnL;{fsx|6hI54O1I3{ۢ.7qL]ڽ!N }rhY7!_q j mYi1q1u*pp Qd&'=!d6ɸVmpkVl?gڸ4!-%KH,X.!~ Bl_@w6ֿ3g&摉{&<7m7JתoעzCsBM›bP178鍏 K Gxs)"*_HqST.EaL7خUtΞ?aǚ=;yg:_Uwz깊zRyw[v,ɝiRxRڼ&r}g0Img|#&͡&4k5gOeKOϱ5j4mz?[%fZL˶3Ÿ5'p>Gd6oln\GlF9bNbڽaꈌ3~k ̴1Y֢3CB YbH+B6\ B*!V& !LU3aMpS~"SM!)$$Q)k\ĞLLTPPÒ(rG|ie헹CD\Ie?of7> S-ksv6#ke8n>x,x6`ӰA 9eM1QQ1AVBP} &rlag m]0k}I;̞]Iٙ3hؾYcF _IڳpNw ŧ-wֹx|ս5!L٦ηf Mv>@$khP*;}q_&v8YO JBHäϒ~[Q!L!!QV%*1D  ىͅ;NW/KuA||3=Eɦdf!lq-QTٙcgn6I"d$M̀ (4ԊD@ТAZ@[^zE~ʅ^E5Xr)sفk!9{ob0LhD&,`d 5:-dx3ގb.tb4tMUPcz-Rláazy8 =خ4ܼd/E+#ʁb\ݨh4F76@GZ֊\d8/vy[3+?_<._@oL;?ͳs:Po1>{X(Bb40";0| k2v 3Mp2?0&LP \ uHPRv{dّ1cQ[c_Nf![,Uת/(=nE +)2l }vvjΚ^|rYf:KrKMkLKQ@VLv9ZـgU,e\c1vsCTG3"dA @pu"p B`BN m# NtܑqT<B䢁+t4$ƶw(%lFO~(K8&KkvCr}ϼu}ޣK/cfݶ-E[\Et(AgpjVͫT_ՔNeN[ ~͚K;|hN&s1jĨu"I^Fna)D*\64x uY01:%F{4R}~54KAP 1c7.Q0I0S;eX+~Lh QUNg>,e&3#m !.B%{B3H1]QfihEҋ vb54*KDl.2ESÎ]p;'F*^^?{~0qLӫ7Q4xJbiB?p"I1s؂ Α| d%wfQ"AZwOs1nbJ3%fW%&V+CsQF"3Kl8m7댮s$̏*,{ɂ~]j,Iveku/ 8~Q5%.pg'Stz"/0ddDLD.`H* Uid7*(nد[8~mC3S;U/ṑ{qP =v  D|SiXG#m^jOꏩuvl:N,𫬢%$brVcy$m59 :\hɌ(n!y u߷kF:uҍbvoX" N0'l}>tj=uoN&k^1+o_#3"0Q%~Y_֧\[j{I.S+B +6-5kHGӿHY/,޴NFOެ+I \Nυ*}~ZbPI<)ʇl"Ig.9|iĥ)Dd )ZvA$RI*Ql7A-62%z%\!ћ%ӛP:!1Q| y fM z <l{u =ApX)=`1QHέA򞗡)p9ñ&`7HWHSv~ʆJ }s#>c|Dz\OI?_~R \AUm}~~C_ְi[Er'ZRTF+k)zFCz Z_Sg-} a53U ]S:Νs.ʊg(g\tA'r)3N>kXzPg#NcdfU:ժLZQs\% N0@\[n*34,\qI{mMp)?zk8/A:G6ٶS{U+=qcyv厅:ꣿ_N,^0lM.|mYT'*RqܪyLiH)/=A$ ꚼHQ2km+YŜ&ʚFi^$׍)xHO' kHY. JSVxDQnD_J=ThXE]-RtEgΔ8V`ыԩ0I1ƠE5k[o^ }dra~#=9ղй {OiO{$w$FA$?+J(JeX H,3 IdP;#qv|k}Hb?31X(b3oc4zVc 䥝~PB]$l?\Mqm_e4&H2Hp`ByyWjr4#h&v3O3n==:5Qs16(Ԙބ[ua?¼kO⧤>k7qӒit*+4J2rTxĨHe9uqVg(b}K k*.IatXd,-DQX*($,ħ) ؼZ]%Ƒf: ~-hl07~$\q@7b %*=膃r"i.ߍB c4M $&ƶ)YdCS4C ( mky(' &iۭp}uf:&syd}x ĸD߂rRHePF!GA%xjqd *VUT铿gbQ H(J]]?}G(azh)ۣ33=ر%G{4K1wR3b;1v%\"/<4huKZ'G<'sd2#W^/*׭Z,:mgJ endstream endobj 19 0 obj 24851 endobj 3 0 obj << /Type /Pages /Kids [6 0 R] /Count 1 /Resources 4 0 R >> endobj 4 0 obj << /Font <> >> endobj 5 0 obj << /CVPage2 [6 0 R /XYZ null 793 null] /CVPage2:0 [6 0 R /XYZ null 792 null] /CVPage2:1 [6 0 R /XYZ null 264 null] >> endobj 10 0 obj << /Type /Font /Subtype /TrueType /BaseFont /QWMWFL+Arial,Bold /Name /Rx05 /FirstChar 32 /LastChar 255 /Widths 11 0 R /Encoding /WinAnsiEncoding /FontDescriptor 12 0 R >> endobj 11 0 obj [278 333 474 556 556 889 722 238 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 333 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 750 556 750 278 556 500 1000 556 556 333 1000 667 333 1000 750 611 750 750 278 278 500 500 350 556 1000 333 1000 556 333 944 750 500 667 278 333 556 556 556 556 280 556 333 737 370 556 584 333 737 552 400 549 333 333 333 576 556 333 333 333 365 556 834 834 834 611 722 722 722 722 722 722 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 556 556 556 556 556 889 556 556 556 556 556 278 278 278 278 611 611 611 611 611 611 611 549 611 611 611 611 611 556 611 556] endobj 12 0 obj << /Type /FontDescriptor /FontName /QWMWFL+Arial,Bold /FontBBox [-628 -376 2000 1018] /Flags 32 /Ascent 905 /Descent -212 /Leading 117 /CapHeight 716 /XHeight 519 /AvgWidth 565 /MaxWidth 1000 /MissingWidth 750 /ItalicAngle 0 /StemV 130 /StemH 130 /FontFile2 13 0 R >> endobj 15 0 obj << /Type /Font /Subtype /TrueType /BaseFont /QWMWFP+Arial /Name /Rx07 /FirstChar 32 /LastChar 255 /Widths 16 0 R /Encoding /WinAnsiEncoding /FontDescriptor 17 0 R >> endobj 16 0 obj [278 278 355 556 556 889 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 750 556 750 222 556 333 1000 556 556 333 1000 667 333 1000 750 611 750 750 222 222 333 333 350 556 1000 333 1000 500 333 944 750 500 667 278 333 556 556 556 556 260 556 333 737 370 556 584 333 737 552 400 549 333 333 333 576 537 333 333 333 365 556 834 834 834 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278 278 278 556 556 556 556 556 556 556 549 611 556 556 556 556 500 556 500] endobj 17 0 obj << /Type /FontDescriptor /FontName /QWMWFP+Arial /FontBBox [-665 -325 2000 1006] /Flags 32 /Ascent 905 /Descent -212 /Leading 117 /CapHeight 716 /XHeight 519 /AvgWidth 545 /MaxWidth 1015 /MissingWidth 750 /ItalicAngle 0 /StemV 95 /StemH 95 /FontFile2 18 0 R >> endobj xref 0 20 0000000000 65535 f 0000000018 00000 n 0000000203 00000 n 0000055709 00000 n 0000055791 00000 n 0000055853 00000 n 0000000272 00000 n 0000000385 00000 n 0000000470 00000 n 0000010586 00000 n 0000055993 00000 n 0000056193 00000 n 0000057140 00000 n 0000010610 00000 n 0000030707 00000 n 0000057444 00000 n 0000057639 00000 n 0000058587 00000 n 0000030732 00000 n 0000055684 00000 n trailer << /ID [<4f8f12bf82e1d4602df2cad672b5d276> <4f8f12bf82e1d4602df2cad672b5d276>] /Size 20 /Root 2 0 R /Info 1 0 R >> startxref 58884 %%EOF qtl/vignettes/vignette.bib0000644000176000001440000000543012113233445015415 0ustar ripleyusers \begin{thebibliography} @article{Kiefer, author = "J. Kiefer", title = "Sequential minimax search for a maximum", year = "1953", journal = "Proceedings of the American Mathmatical Society", volume = "4", pages = "502--506"} @article{Lander, author = "E. S. Lander and D. Botstein", title = "Mapping {M}endelian factors underlying quantitative traits using {RFLP} linkage maps", year = "1989", journal = "Genetics", volume = "121", pages = "185--199"} @article{Broman, author = "K. W. Broman and H. Wu and S. Sen and G. A. Churchill", title = "R/qtl: {QTL} mapping in experimental crosses", year = "2003", journal = "Bioinformatics", volume = "19", pages = "889--890"} @book{bromanbook, author = "K. W. Broman and S. Sen", title = "A guide to QTL mapping with R/qtl", year = "2009", publisher = "Springer" } @article{jiang, author = "C. Jiang and Z. B. Zeng", title = "Mapping quantitative trait loci with dominant and missing markers in various crosses from two inbred lines", year = "1997", journal = "Gentica", volume = "101", pages = "47--58"} @book{Bulmer, author = "M. G. Bulmer", title = "The Mathmatical Theory of Quantitative Genetics", year = "1985", publisher = "Oxford University Press" } @article{Tanks, author = "S. D. Tanksley and J. C. Nelson", title = "Advanced backcross {QTL} analysis: a method for the simultaneous discovery and transfer of valuable {QTLs} from unadapted germplasm into elite breeding lines", year = "1996", journal= "Theoretical and Applied Genetics", volume= "92", pages="191--203"} @article{Sib, author = "C. Xie and D. D. G. Gessler and S. Xu", title = "Sib mating designs for quantitative trait loci", year = "1998", journal="Genetica", volume="104", pages="9--19"} @article{Darvasi, author = "A. Darvasi and M. Soller", title = "Advanced intercrossing lines, an experimental population for fine genetic mapping", year = "1995", journal="Genetics", volume="141", pages="1199--1207"} @article{fly, author = "E. G. King and S. J. Macdonald and A. D. Long", title = "Properties and power of the {D}rosophilia {S}ynthetic {P}opulation {R}esource for the routine dissection of complex traits", year = "2012", journal="Genetics", volume ="191", pages="935--949"} @article{Collard, author = "B. C. Y. Collard and M. Z. Z. Jahufer and J. B. Brouwer and E. C. K. Pang", title = "An introduction to markers, quantitative trait loci ({QTL}) mapping and marker-assisted selection for crop improvement: the basic concepts", year = "2005", journal="Euphytica", volume="142", pages="169--196"} \end{thebibliography} qtl/vignettes/recombinationcount.pdf0000644000176000001440000010060112113233445017503 0ustar ripleyusers%PDF-1.3 %흮 1 0 obj << /Creator (CANVAS X \251 ACD Systems of America, Inc.) /Producer (Deneba PDF Filter 1.3.10.011 \050Win\051) /Author (Laura) /CreationDate (D:20120627123513) >> endobj 2 0 obj << /Pages 3 0 R /Dests 5 0 R /Type /Catalog >> endobj 6 0 obj << /Type /Page /Resources 7 0 R /Parent 3 0 R /Contents 8 0 R /MediaBox [0 0 792 324] >> endobj 7 0 obj << /ProcSet [/PDF /Text] /Font <> >> endobj 8 0 obj << /Length 9 0 R /Filter [/FlateDecode] >> stream x]K |?>x]c>ϔ]l FekW7"$#V0Čd N>Z;C&ڝփQw~&(_ёJ /5EB~Nj#7O8L߿* 2ziX/. YC>XTp"A` bTB}k#6!ڸTn}6YutMA(  A4}>?vN⻏(}@l3 m`ֻq׿ϿBaWDh3eI9x =jF?-j).MC ş3t2?g "ˆg;:+_)vN6(61< i @8؆DBlAT BD'PX-e (BsJ;cW$#DVrI>]o/bTjH۾O]SOq`kyĊ`u ZAv}m:<a%A4(kϞ=ևϻ']|EnO_qr6C/S0W6לZneRn +p^,"{FҸuX[o<9XFIcSoZfƨuXRnRC M{`VHd<<vaJfofɭ3pkųז=|yʭ㿵AEaR fƘ8nz0sKC: 75!D`b7Dod֮*گ. &ȖK{5cPiXf#8iTC?;LPជ7Rru4FhsX(jK `fuT(gAkӮZCQ#רӛ_LG383<,4Hki]|T''Eƫ09M"^ՔKc);3d.Y8xensy_C;vstnR;27-qhS&;6&{ іrB觭z`LyT1}B 9\Sу9I+sR s:v|ZUJ>F:).Td_=c{n+aC켂 ?άV2=x,3BerbW)urɲJHm|U]r占eeegXGr͓(^5LF;ͪ@F3טQ,7%i|о_G7c_3~ؖԠCo%Wv}#!Ǚ 3ͰnҊBTwRD<$z􊓯+7 T](L@a%@q9vA^!Z̪CIKU:kj}P_Bt}ӵȩWH%0%ga'rzc%zzny68m?o5YߚlSd-3gi:c޸9kXr蜪R =c|k$Ƴ{_YQ/v&zXĒCPTM]*$WxGȼʶl!4`{XɓbbnAskXsKotFư"s\c\uGQM5i}m cWmFA2 OяUؕ;_7=5 H-ƑA{9GRz2"dBW|A2*c ze.dW}1Zm*T Xr_J[ZT L*L-c& <0s28Uʮ.F)*$P_6c{f)%v/]UHzǕ^?Ϊuk*Л +5G]Iny(7$2h毦i ev%t-}:==w|q(嫸8N?i*|e&6c9!)@DPiWwѲҪtĔtdż܆1r*J)ncIi!j! J (6?Zvɷ}%{b:Of]fr $Ҝ\gOL\IUgl IqkiIJocsn̹^LUJdD8>}f}aA;n`k|(eㄢz8^ʠl;c zN_mC6-eFgX(giZe+P۳g+hdl$[c/JR2؟.u._-4y<:dHZ0?(mhyfɩXv&Fg1鶃97sODRiz KX/B]ۤהx]S-[a1gB[z6uW[YAg2)< `yms&̞%e>dׅb'vmBgŮ/λM/ӻsů8_&RщBY:,_d?ie76Ǜ%uL"?Z*q>Ѭ%(6j`yx̳ʞAUJPjPb%t0a%Ns2I{L3ۘVFM=M,˞+SIcQ/4pwZ`OQiM>:/FDmBvfo2zX-ٺיB~2{nk&1sKeWFodKXM^Sۂ7ZN'MW:sxLplZOV1s-9nJ7^l^=hYjP`Ԩ W2R-O kAF5=ek (~H5fP5YԨ&3( qGY*33 <&X4)V4Tb|j"ti[X y(,wRV2UPaoMk7mC/&lW L홭Fɛ+Fp-#ua[xs7@r(w+ү'<"wrhW .$]n:_L홭FRUMFUŖ-O HC{SRaXN״C[`f<,^;AEoƂbBEbF TZClv>6Ǔ' t!x\q,aDØ!\؊L`uH ZO3S 6iS ˊ*L"p-tom-O t 9^9#~0>a`Qױ0D"B``"҆Ώ3[ <&X6)V4UEb F[|c[ɼȾAy0E2J{iϋx7WH5G6~`ˋP jeM짾 C$FKNotH-2LM!`nb-|6{isif[90YO>gs< om}G},4$@ 0e;sX2?u>|}IPM*ffڸEtPiȑV@µ6AyBKzZ] HG# endstream endobj 9 0 obj 5533 endobj 13 0 obj << /Length 14 0 R /Filter [/FlateDecode] /Length1 65820 >> stream x|TE?~fn߻lzݴ HޤQzAQTlTYBxAP@E 6DP $wfny}wgz9s̙w7@ @Q?tO 鮡Nq@'rGsjZF>dI}~²~@4IX~ SFr*hP%\▙{Ok=yq:nd B{,5L0A/#a*`D{+ d/Uf"4Ġ.G7 Bwa0U. 5hKaRt@^" r';]O06᭄C c*O?g;gWggN >1I%g+ؕr\-]ٮ\\3\Ov.'JaQIz$ޕ8+uI4IN N MHMr&JJK4$ix2M''B*MSSSSSR6JJZ:+u^ԥkR7Nݗ^OSvg=6|PX:W/W^ך\˺Zk׶^qV?_Hn\gO>)D:*=)ƒ,c obCޗ. 9({|G %Kp9Nsϝ?;JweVrn rnkǹH&N9s!ȹ$sI8\ù[:uC%!>A5p\~IȹW]#5Cysص*o9(d3ir !t?íͧ b+AcK⥮fo"".]|vzA`]P. zg#gg|}?Ak?dg> pf̙Ζ]8U]X~fݙe^{zY3Q'=3N9T֩SMNejp֩SqO?pۓO~rrOOtrv'ۜl}2dēs+X9Ht|VyFY0*'}fP6w ^; fI LڍXfn5DmQ_Ρ,;V5Ka2IJos/d<ݮ*9 tMnQxlc ݡ/KX`e5́`<ECu&,,a!p .*p&xfPpޅ0|#8 ë#(.|*z,G| 0 &.@e=[!xkfS$ӄDkp,'+J CBT0ȳ9 #ɇ#Q}X.V$H$IHII??'gI|Z>#ooq/_/?c |FNꡊ] QB0%\P"(%ZQx%Aq(Nť$*IzG~N?kzw?׬׭ aQ%YIQRRCRj+iRG)#ʣLe2[U)"ePY<,V(+O(K'Q'rejgP=RWV+k ʋ)|'4| +/)/+(eI٬lQVX٦(h=Fx=AwNݥ'Izn^S|B\T۪j;5Gm/NQ;NjgUvW{=^joWWs.WW+ggmMI e9E~&+*N 4r\'夂A[ ( TBUQ Kuj6DPFI=A#I}ҀFhCci Ah-D#4$4dJݴIk4Mo7OKe'Cz>m@tAƴ m҇40NgB}ΤlC漢#Q}Cz\=~~~~TO3Y K+z^ZFV^^TT/՟ԟmm_+U7wO:ΗRzM.JajZ!KRhDR I)iE5+XqR<ڨɩٴ -XK.)QJ-T µ-RҢ-V͡95%i6YKZ VKiu)Uk Z5kMZ3-Sk.Z -KCk JщNIS]EWu\tuE!#֣g.›(%t͖`s؜6-іdKRmn[ [M[-[G['[g[[m[-ݖagjfn!ONLߥozaz=Mг %;P{K}Sp BJPi4C2?Xʗ<,uޖ'L(HSqNL&JBMPC4aqvٱg !MsqPO/4 Bet#J>ՉRǠ䏕 ?F9o%΅Z8#jHrrC!8;h!gwHZBcpw9򍗛q1(ɊYt-(pSR5j֪Vn g4jܤi-hӺMv9;tԹKn{ջO~s9p]C 1r1cǍgI LxiOQȣ3g͞3w =xO,}eO/_}n׬}ŗ^~e M_ZdJw}<{}>GO| ~vhg43ߟN<g43M&pF8 hg43M͐ek0ҏ."Od. `qLƴiˋ" !̏iwXDV0@uQ-*tur&GonC4gc?V!Et| |nMY1"d ,4 //yXf'DgL b.9ZG 3, &c2`D"&4v#oqF>W k_asU`B$Lʩ0+ 0C!24 qu]g{#"Ʊ`ٸ~ȀQw&,ˏep k1"Y"".g>`~,'!#kc5E x{Z1!@b۸̚}XӜ3k|ezM0ևDV&/Lf-[e9dO|r#'JsOYDS6l>,}aҕ(3̲) 5>U A*$d}yQIGXf|7An2d ð?K/@/u/dXvGjt9rb?7"?sIq$'NrPHs_huf UuF{a``sB@ \~ňBDm5,WǒR/e+ Kh*@=sJ_aB(aC2iX=3XH'Vd,_^S}2D*;9"~E92:1ǔWJ</!]jr:|Zeuy?ӏL13iEt1Çao^' oor\bBur:?AH++\·f8uTʀ>}"7?Ó|ۧ[`t u ojD~bNJ#ሁ'|,ٺD)3[L$ ,oǶa2¤Vb_Ե{a+6T'CCq= [yW\c/v45<B}xG[0)G@/nO\祾}qE:,%ח)-l6_Ʌf`wFP[O!fC]if4: MptavDpb 0S|F ]hs7\axKa!aPSbKжdG 9 0KU>SϊhSZlYf?sG۱X/@2ۙٯvf+5@]un%W`ŽѱZ8'WȀ D?Q\qۃzWџW׭ѱY_> )nvk߬U߿tc1TKb;;?W;c5﯎W== 6SoCy\9|~Q@=PӷE}5xæ!] ߎu"a,d;6(a6ׇarsn"ϸ\-f{HS8U0xw9ʷ[W?=ɾ%Ax\-/g mtg}vV9\w|:1l8;E\~LO!F09v6O?pރseP\ʟ/|froD+l̷=;f߀qN E\XKÍH'w3`߳q!g7 F5uMSx}ʃq_걟)Uh;#U^ŃC R hE]c 5f _ClC@r#R)Ϟ~ wp ߳\ tI='L7e*tƗkI Xjl #qUۇzڋq݌Ձy_hjucmSt׎ wWw&W'C:Www|N Ovt Vp[~[C)J_>tK4 6>3x.6z@AKzڈ~f],o.n_囑SڬtodJ_mXz#}EG{H{@v[H_Esv1XY7)DkuCЅܣ7U> q}cA6C6n`:\/hƊgA߆< laQb 69UgB0R; =g'RKp]_Kx#_ƶ^9)= {[yİ1if<3fKf}=}O:.[W=?eɷl7/&4  qȇ 8WbٻJp}<E7e}2ZvJ9ػ?& VQ01m>ݗ5dLy qg6Z\'%L"M ; X,ڴ- e>X_u04X_%&*1o˯{߱ _hӏƣ7 C5[3&h[wn/N#5aCU^ i?,~߿ϗƢ? Nwz QHQ.zbڞr|q04xq/4PNAD{H%K Mx&<&dFu `yNI@Bewv8F"XF@oI2d Ԇhc}ķ`vQrXC{>*mPW*GYȒ3R+)ulŊ'7Ͼs!B{{OF H_w 6ڜkUa&D{#chTk/AiDZ=Tr`7ʳWF;mL| f56پhʞU}-Ns_j'*ϟ1?|V{wϋnn?|Rݍ۽q[g.{^l\W 8D0 ~>jk܃vߙ(;'ur <C<7SKh=XX|{納/ӵL5ۍ47Øn!^7u9Ls66r7)m@ؗ&` IA+e _S_%:4~\A|Ϟհ4S!OSOr]!Ϳbd߃-7Vvv/F_=${rߍW:`N8F}R}_簱s&: e\w:P=_;$tAϿ5ZEa$B ;I|]e" eFa1]sk ~D0ϩ?eb|=)B~M1ri030Nc'jnsG;-Ԃ**NKpj -R!y[hDzp뺸.O@lA,80܎BgǺ#β!A/v9k17`! .! 6L#dL@@A\1! l{TNνCLAܻI4ivG3Ys3YFfp6&QǤ酌Zl{[G HlD 'F‹8-ŝT!k+b[Hzk 5%ECGzь?ߺ %~_ z# ".!dz?gsH0#Z!#GA\B(s)3w+n'['L?Cg3lڱ⦙;#L9|RaP8(Q$h BRqjCg]5YJJsn5~##p!z 2N" V#2.z4@x=*})Gm#z;Gs.}ӃHH'10i}RBFq^ 1!=4x3 2sbӗa 1N- @ޞw=e7cOܳ>.vs]6]0]]x+^Kl},q!C.݇\Dz"k3ŵk#Vzjvݤ)\K RE "i0:H"͐Sr7M ͤIa*)L!.SJ;fpҎm٤CzGK>492:aޏ" `"W8hҶڭLZwoaƷpނ3-`B FE\BS'a{0#Z!#f .!dޜK |MVGO~i'oOwǓ`0)DF5ێlfƾʏ.$8Kb.g4ZG(u$$i3(2q$0[p\;ğs~_Jm.ǮR;cΏ;/U1d )s;97Ip>96G 7#*@'=ˎ)2w8[2S5fyv8`Lgmllx^iطi)婣,SrJ%]$*N%ASPծVբ*UA /5zoY3SvGLB' imHgޡnjRb9+%!йOoΥ4WqgVBP/WJOn)1X8ohܝ@HEq֜(/#m*eHfN-n{ڍ+&wwY޹ yt0:{v I~&e$?1ShI~n׋ -:~<O%'NŅ0ӭ4ӥb~L4HR5 K ]֔&I 7ěilgilg1Mڿ{ oF:v# -:4E;2ܛ<<;49۵[Dd-v}r .ni.yHv޶=5u5qz7EtSݞՔՔӞ\{nUM^ہ&Fu k~\b^HĖ\x[$FO+Ckeiy^kr 궮ۚEbQA싊"1(;$)S Bt_^4e*cyO+ y=C t۪ܭK0]oWj5a`s( YX 4_¿TmfA!ݵxd  ^G>UAׁrЖbCAvfg?L|fNRgIŘVɱ)iiIe(Xlcsom|#@`3 aI.ծPʆga< sqY!~$ %P¶c0 D -\IzXDSa gBSDRhO/gQ:P6~>1NA]3 m;xBLL #?pApiXpDiB[,kT0FJ(#I{( 4!K]Ű?/XƋe:SG^V T 21f}Lޠ$.y B_l+k~AI/m 86 _XRt'h-:&560^F1AQ&'T5pD <oE ȣ3KIq2{}E~#I$42IG@$!Mh,d yl\a ~ _Q@>KˤuFMlU5/.?]*UW_@!e(q["bImҒtA &c$r?rrYI^mF.}L.am4mL{OAt!Xj ApaL _ W1DD&SU77@]lsR'jZ*= eCHgᵪ?cH cp sy0 RṬ"/-H7,*m!t%Io~]rI\wcߎ`V2^PLⷅb.|&!NE.W([J(< ð\Sw#P/!w@3JQS+ c'p%n[j/`^hXr "͈,~ !!C FԜf7Pwh';L44&2hf             _JH_*!!x# uGk)[0LD,Ь0fWcjq4A.B d4Έ(;|09)üw`.Ϥi+6<>>VE 6{ )%Y5yVZ&*fc(l]p4XC:,ʧ TWӘ.-Kv^ys@ͭK- ;s7~qސl3#QH!+R2Ƕ*[F=VW`R+/:jKl6kt P6ebrw}|glʎ }i lkJH[;.ȽqBq1"c+ ".t$*%lLٷwkC6;!F!hJ i qC+uqh`uE)*TIR2RjMmwSX.ѥYq1RFzףW%uJ>Hç Tؼhb jT.dRS/aM#*B4t W|j-k3zaxIha.bikWYFl=ǿ[ZEePok;jcp.fs~:]3U;+*WxKUp`%~]wsY͵J].'E!7XeA,zbpAPMT]th˭X@1 tkd$8Y Ŵ*Gn^XJISM$%7R +K) -P;uQ,:`yRl f6_au5+$ rfzi"`lhfȣgd Iu31!!€iBUI(r IOˏU7d#T4e-ټš}{:eѕwIh+?mw`<^|i(_%@m*D2MHsK;j(R qa⩹`ܒXoi`$@j:<6b'%9mT;ŷ'vGT_Ѣ$ʷ8a~tѾoccHȎv + ScBSgsOE(.65L!r\wИ]>,8t&7ֽyAJW-߲QcP 9;!޿Mɣ/4{]TRo$$.X溼\#nfgĵc|?k%έ<}CuX!Q-V} MtRMGViӂټc7ޙGG ,?P9O+KK$ƞ =/ffV_ ͆`b꫟'jY#xOo_EMGZ#;~@a2MN'[ZEd8G}Dec[^$XF\u<岂#،HN?5ljr(أ4_4Vq &lqOLz4|FI]PJGz"Rxd L)ͭ+A#4<_/" Tih Df/_+Mnihq7X)`HXxy\uR1}gc]TqO+>~f1r^Kz?n3^j-3G<]ξy d7HQf:wu/>a[c&5bsQ'w=5$I*rjJG){$Hۿ]/t1 W,ܲ&?3 13כ 0w+KVA4.K|F8GݰeѴ}4U*Sn\o-l _# ӹ]nr] s$(m֟K|DYy|Z)&{}{Huo',{*~}bK&ZE$MEܦXѭV3b (*,, .4$YKD;%\Z]0\zgDaHRBC*3ȦȲ-ZΟ.;f5;AđN9E1'_m&*M L] 5j;"4ZUis#>ZXvZ >v:!ZsD:zlvV$' r(QVYd.9r8*OVUO+-mgY- +kllOR;\;ʗ$Yt湟 Jk10oPV9۔uvܼn p%m;J d[ssg2Blh2IL7Omɨ(қ{u{`ًb)f:<$}ZXY*93j.5+$rD׎j][X?a|#+C9}(@9z3 mCa"LI(Y K`QxɶS(~I MIHj5CjǻmG%Mx(tAJaEuE.xPC=+53P` bBCNvBbQ|ErTꍙVJ51t ӹA|p4C81W2DbrR 254%#]Rll-K޼+>~f i)RŞ7j% /]{yww~bmťwU|Wq8k=wȒCU+DQ@ٜUyE]:QSi{V(}HTٴs']99hAL6@HX'|~<6W4\>}kp-BahH=z m?9BAb{ %46`1'!w~GhFH/oK(j4hƮ<\?3;sd7MȂ!,D3  AV# Bz*7EV@<^8z}iV8[+XM屔& ɹ<1ɷ;~QoW\r}ilq)MC!'URW#$I* qB,Ax$+:*=NliRUՠ*RU%=#)q~WđdU̬l0jrƭ9O5_54AOZ|}!}P :jQƸ<)uBIIċzuhE:i/7Ƚ13\ÜGcVtnoo͙gsV\1jM=odȌ_읊lmM_'u"_^46|#`e#WS^#>ɚjDq8&(Ll_Q41M,mb~ZŤŵy+궅/d}! PwOv/|b"ɹ ajcB줆*.K#ښf.q|z)sG~Ah\B C90ѣrbےt2Gj(HxuS!1j8SsCtFd3,p fkS&G$(F@h0+D3Q;Zv Bݎ2\\R'HoAr04&&9,1 8NXcp(]pᛡ1okZ4LTWx!Ǐ>^ʥIr8CvII؟7j$EZDg0psnt6"y/VE#f58r ~,_[W=se:njsݻcѻWny7VsE'NƼ6߼g㍍n?qik[}ӧ$\ :~.B}\Nhsr\%%TDoyy#G:?~={)cu}.81%Ena Mĉ RL["[~ ;eZiU^o.(2stUĺfa0AiUSv*J`OBa2ԀBPA N!K"OJ G J@BR،yppDlNM qصڵཁF "%lUs X ]bHCX}2K@wZ*s#sr" hQ ,(#j #=EzWh| tZ ` ` ` WcZ9Y D?(p=(pp @hs4I`tm%0aРbyH#1rlf TgXL34j4Q,̚ NHևObZ;d˓WOiZz8i+Ƿm;Smsѕ F/\s.Mm"dC+F?{s;ͦǢlnzÔ3ؚ8Ҩ ]L)0)hMwt6"{UzGn$Ŧ%J|Z]X\&ߨHߕN'n~t:^hP"# \8Q7kMҢ Txڊh}'gN9."MtvqȦ+Ő6 $sg4@TjDRy&&8śN Eo 00OdlC q64݃߅iĦQ+D1b7TA8!#@W$؆Scdy"kC@&Q<5ypj= }VVG `{.FoԱ{NQew>WtKœ}׬}.pf/y=ʜ_$SL/ Ôj pTᨹ{ G;QPnW*"C-͊HAaUl,e|! EG!BT@"A@pEzQw1V1>D>Ct 58,(9J]tcwΐ@_Y֋ Z$tCɯb~ }P |)兊/D߻>{}ۯں;܋6?>*P9Doܷ;tϾ}TsRKQs~iʎsR$3K+b0JLN:†&n;e_hLO\h2/5'qg鳖FŐ*X{lUmFkCusM<^UAï+^GSz6\}d_6RзB/nZ|%g\s^RBu}}U;r#z`"^%C̒L4IE#N|UQ1Y9xOmuBEPf$(YB;#(= ;W4%7`)K?jlvBqđ#c?DE&/=XSdFp&Hj(DY Pa ٛ-G R݄ND98#I霚Dy߸;KTW^Th&7DbQ2Νk-H}cǘGw.-\|xۿ[V-83v4ؙРr{+'CBJ#G~c7Nh 98p+C/C aC%t =‡iJ ^HBi`cGUoCgv=G,Þfidg,k\k$p`!;`C,@< 3D'ϴ{`aP;Tk0O1pgǎ}esߜ ֳ5SaKi\A +m_HB* I_HWd_P|A0(6_0|Ai` ;3V3] Y${Rہd05)X?K=8p_W duvmQE! PK ym≟$86d6R!Q-)R$Hzr4(2bя9/8Ѐk􂛅,m=%kJYpiDZڮYx}/kǗ]3'/[7u-[R  i3 fΆ91kq#b+%3XLɊU|S2Cg9DbQH"V^_ӕ~ 1$8/"+Y /)t[-zz,bh p =,ڀ{}%y; X:_ t,р'A] 4壒:3ij3HnW G?­KC^<8]C|ᴜ)I 0ɴ?%#уP5/i6оI޼bQ~߉8Ś8z(ʆ98,&R0P\M o:6k&iSIւ2dbY˅uwPT|2fq`qh2mױd"BJ|aH& 7 nz|' x#Wx & $7-k|%N/͓{+rrbY([m4g(I!D)k D-)|9h RXS$UnK9);laa`}$-"V$0Tfb*N-^VӎHS]ݠ)sR B&8bj ރBƈnTgι7y 3' 62kfw `#ՀDP9pyHEꦪRQ>Rg 3ΐLAu"#65h'Uϭ[Ծkum<{p7ƢN`g׳7 uA Iu  nG+(LWm.p=]@ A.Dq`5P[ڌGfL霒*֣֔dPɏ.A?ࢋ_IݝS=];^sK>0fbi2 &q}BS فX9$C4!͈VMU#pa 1烓I*~g)v|x°&nIv'l[O Auz|#Bc^~=sRuCv౗t& FAȬIJ&Bf|כb14x$~J.efޡ0iΉl~ŦCtA9D_cq]Iy v˩FJ3$f/>c)ҭ`7L YڙqrdozA,(  yGBآh--SSYW][OQb)DnOoRs1T\ĄhQS> endobj 4 0 obj << /Font <> >> endobj 5 0 obj << /CVPage1 [6 0 R /XYZ null 325 null] /CVPage1:0 [6 0 R /XYZ null 324 null] /CVPage1:1 [6 0 R /XYZ null 108 null] >> endobj 10 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ZZHJMG+Arial /Name /Rx05 /FirstChar 32 /LastChar 255 /Widths 11 0 R /Encoding /WinAnsiEncoding /FontDescriptor 12 0 R >> endobj 11 0 obj [278 278 355 556 556 889 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 750 556 750 222 556 333 1000 556 556 333 1000 667 333 1000 750 611 750 750 222 222 333 333 350 556 1000 333 1000 500 333 944 750 500 667 278 333 556 556 556 556 260 556 333 737 370 556 584 333 737 552 400 549 333 333 333 576 537 333 333 333 365 556 834 834 834 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278 278 278 556 556 556 556 556 556 556 549 611 556 556 556 556 500 556 500] endobj 12 0 obj << /Type /FontDescriptor /FontName /ZZHJMG+Arial /FontBBox [-665 -325 2000 1006] /Flags 32 /Ascent 905 /Descent -212 /Leading 117 /CapHeight 716 /XHeight 519 /AvgWidth 545 /MaxWidth 1015 /MissingWidth 750 /ItalicAngle 0 /StemV 95 /StemH 95 /FontFile2 13 0 R >> endobj xref 0 15 0000000000 65535 f 0000000018 00000 n 0000000203 00000 n 0000030973 00000 n 0000031055 00000 n 0000031104 00000 n 0000000272 00000 n 0000000385 00000 n 0000000457 00000 n 0000006073 00000 n 0000031244 00000 n 0000031439 00000 n 0000032387 00000 n 0000006096 00000 n 0000030948 00000 n trailer << /ID [<8eba76c57efcb0dc35c52fd20150449a> <8eba76c57efcb0dc35c52fd20150449a>] /Size 15 /Root 2 0 R /Info 1 0 R >> startxref 32684 %%EOF qtl/vignettes/plos.bst0000644000176000001440000006372512113233445014614 0ustar ripleyusers%% %% This is file `PLoS.bst', %% generated with the docstrip utility. %% %% The original source files were: %% %% merlin.mbs (with options: `annote,seq-no,nm-rvx,ed-rev,jnrlst,nmlm,x5,m5,dt-beg,yr-par,xmth,yrp-x,jxper,jttl-rm,vnum-x,pp-last,num-xser,jnm-x,btit-rm,bt-rm,pg-bk,add-pub,pre-pub,doi,in-col,pp,xedn,jabr,xand,eprint,url,url-blk,nfss,') %% ---------------------------------------- %% *** This works for PLoS (as of October. 2008) *** %% **** Updated Oct. 2008 by JZR %% %% Copyright 1994-2004 Patrick W Daly % =============================================================== % IMPORTANT NOTICE: % This bibliographic style (bst) file has been generated from one or % more master bibliographic style (mbs) files, listed above. % % This generated file can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % =============================================================== % Name and version information of the main mbs file: % \ProvidesFile{merlin.mbs}[2004/02/09 4.13 (PWD, AO, DPC)] % For use with BibTeX version 0.99a or later %------------------------------------------------------------------- % This bibliography style file is intended for texts in ENGLISH % This is a numerical citation style, and as such is standard LaTeX. % It requires no extra package to interface to the main text. % The form of the \bibitem entries is % \bibitem{key}... % Usage of \cite is as follows: % \cite{key} ==>> [#] % \cite[chap. 2]{key} ==>> [#, chap. 2] % where # is a number determined by the ordering in the reference list. % The order in the reference list is that by which the works were originally % cited in the text, or that in the database. %--------------------------------------------------------------------- ENTRY { address annote archive author booktitle chapter doi edition editor eid eprint howpublished institution journal key month note number organization pages publisher school series title type url volume year } {} { label } INTEGERS { output.state before.all mid.sentence after.sentence after.block } FUNCTION {init.state.consts} { #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := } STRINGS { s t} FUNCTION {output.nonnull} { 's := output.state mid.sentence = { ", " * write$ } { output.state after.block = { add.period$ write$ newline$ "\newblock " write$ } { output.state before.all = 'write$ { add.period$ " " * write$ } if$ } if$ mid.sentence 'output.state := } if$ s } FUNCTION {output} { duplicate$ empty$ 'pop$ 'output.nonnull if$ } FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ } FUNCTION {fin.entry} { add.period$ write$ newline$ annote missing$ { "\bibAnnoteFile{" cite$ * "}" * write$ newline$ } { "\bibAnnote{" cite$ * "}{" * annote * "}" * write$ newline$ } if$ } FUNCTION {new.block} { output.state before.all = 'skip$ { after.block 'output.state := } if$ } FUNCTION {new.sentence} { output.state after.block = 'skip$ { output.state before.all = 'skip$ { after.sentence 'output.state := } if$ } if$ } FUNCTION {add.blank} { " " * before.all 'output.state := } FUNCTION {date.block} { add.blank } FUNCTION {not} { { #0 } { #1 } if$ } FUNCTION {and} { 'skip$ { pop$ #0 } if$ } FUNCTION {or} { { pop$ #1 } 'skip$ if$ } STRINGS {z} FUNCTION {remove.dots} { 'z := "" { z empty$ not } { z #1 #1 substring$ z #2 global.max$ substring$ 'z := duplicate$ "." = 'pop$ { * } if$ } while$ } FUNCTION {new.block.checka} { empty$ 'skip$ 'new.block if$ } FUNCTION {new.block.checkb} { empty$ swap$ empty$ and 'skip$ 'new.block if$ } FUNCTION {new.sentence.checka} { empty$ 'skip$ 'new.sentence if$ } FUNCTION {new.sentence.checkb} { empty$ swap$ empty$ and 'skip$ 'new.sentence if$ } FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } { "\emph{" swap$ * "}" * } if$ } FUNCTION {tie.or.space.prefix} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ } FUNCTION {capitalize} { "u" change.case$ "t" change.case$ } FUNCTION {space.word} { " " swap$ * " " * } % Here are the language-specific definitions for explicit words. % Each function has a name bbl.xxx where xxx is the English word. % The language selected here is ENGLISH FUNCTION {bbl.and} { "and"} FUNCTION {bbl.etal} { "et~al." } FUNCTION {bbl.editors} { "editors" } FUNCTION {bbl.editor} { "editor" } FUNCTION {bbl.edby} { "edited by" } FUNCTION {bbl.edition} { "edition" } FUNCTION {bbl.volume} { "volume" } FUNCTION {bbl.of} { "of" } FUNCTION {bbl.number} { "number" } FUNCTION {bbl.nr} { "no." } FUNCTION {bbl.in} { "in" } FUNCTION {bbl.pages} { "pp." } FUNCTION {bbl.page} { "p." } FUNCTION {bbl.chapter} { "chapter" } FUNCTION {bbl.techrep} { "Technical Report" } FUNCTION {bbl.mthesis} { "Master's thesis" } FUNCTION {bbl.phdthesis} { "Ph.D. thesis" } MACRO {jan} {"January"} MACRO {feb} {"February"} MACRO {mar} {"March"} MACRO {apr} {"April"} MACRO {may} {"May"} MACRO {jun} {"June"} MACRO {jul} {"July"} MACRO {aug} {"August"} MACRO {sep} {"September"} MACRO {oct} {"October"} MACRO {nov} {"November"} MACRO {dec} {"December"} MACRO {acmcs} {"ACM Comput. Surv."} MACRO {acta} {"Acta Inf."} MACRO {cacm} {"Commun. ACM"} MACRO {ibmjrd} {"IBM J. Res. Dev."} MACRO {ibmsj} {"IBM Syst.~J."} MACRO {ieeese} {"IEEE Trans. Software Eng."} MACRO {ieeetc} {"IEEE Trans. Comput."} MACRO {ieeetcad} {"IEEE Trans. Comput. Aid. Des."} MACRO {ipl} {"Inf. Process. Lett."} MACRO {jacm} {"J.~ACM"} MACRO {jcss} {"J.~Comput. Syst. Sci."} MACRO {scp} {"Sci. Comput. Program."} MACRO {sicomp} {"SIAM J. Comput."} MACRO {tocs} {"ACM Trans. Comput. Syst."} MACRO {tods} {"ACM Trans. Database Syst."} MACRO {tog} {"ACM Trans. Graphic."} MACRO {toms} {"ACM Trans. Math. Software"} MACRO {toois} {"ACM Trans. Office Inf. Syst."} MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."} MACRO {tcs} {"Theor. Comput. Sci."} FUNCTION {bibinfo.check} { swap$ duplicate$ missing$ { pop$ pop$ "" } { duplicate$ empty$ { swap$ pop$ } { swap$ pop$ } if$ } if$ } FUNCTION {bibinfo.warn} { swap$ duplicate$ missing$ { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" } { duplicate$ empty$ { swap$ "empty " swap$ * " in " * cite$ * warning$ } { swap$ pop$ } if$ } if$ } FUNCTION {format.eprint} { eprint duplicate$ empty$ 'skip$ { "\eprint" archive empty$ 'skip$ { "[" * archive * "]" * } if$ "{" * swap$ * "}" * } if$ } FUNCTION {format.url} { url empty$ { "" } { "\urlprefix\url{" url * "}" * } if$ } STRINGS { bibinfo} INTEGERS { nameptr namesleft numnames } FUNCTION {format.names} { 'bibinfo := duplicate$ empty$ 'skip$ { 's := "" 't := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{vv~}{ll}{ f{}}{ jj}" format.name$ remove.dots bibinfo bibinfo.check 't := nameptr #1 > { nameptr #5 #1 + = numnames #5 > and { "others" 't := #1 'namesleft := } 'skip$ if$ namesleft #1 > { ", " * t * } { "," * s nameptr "{ll}" format.name$ duplicate$ "others" = { 't := } { pop$ } if$ t "others" = { " " * bbl.etal * } { " " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } if$ } FUNCTION {format.names.ed} { format.names } FUNCTION {format.authors} { author "author" format.names } FUNCTION {get.bbl.editor} { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } FUNCTION {format.editors} { editor "editor" format.names duplicate$ empty$ 'skip$ { "," * " " * get.bbl.editor * } if$ } FUNCTION {format.book.pages} { pages "pages" bibinfo.check duplicate$ empty$ 'skip$ { " " * bbl.pages * } if$ } FUNCTION {format.doi} { doi "doi" bibinfo.check duplicate$ empty$ 'skip$ { new.block "\doi{" swap$ * "}" * } if$ } FUNCTION {format.note} { note empty$ { "" } { note #1 #1 substring$ duplicate$ "{" = 'skip$ { output.state mid.sentence = { "l" } { "u" } if$ change.case$ } if$ note #2 global.max$ substring$ * "note" bibinfo.check } if$ } FUNCTION {format.title} { title duplicate$ empty$ 'skip$ { "t" change.case$ } if$ "title" bibinfo.check } FUNCTION {output.bibitem} { newline$ "\bibitem{" write$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := } FUNCTION {n.dashify} { 't := "" { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "-" = not %{ "--" * { "-" * t #2 global.max$ substring$ 't := } { { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ } FUNCTION {word.in} { bbl.in capitalize ":" * " " * } FUNCTION {format.date} { "" duplicate$ empty$ year "year" bibinfo.check duplicate$ empty$ { swap$ 'skip$ { "there's a month but no year in " cite$ * warning$ } if$ * } { swap$ 'skip$ { swap$ " " * swap$ } if$ * } if$ duplicate$ empty$ 'skip$ { before.all 'output.state := " (" swap$ * ")" * } if$ } FUNCTION {format.btitle} { title "title" bibinfo.check duplicate$ empty$ 'skip$ { } if$ } FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ } FUNCTION {format.bvolume} { volume empty$ { "" } { bbl.volume volume tie.or.space.prefix "volume" bibinfo.check * * series "series" bibinfo.check duplicate$ empty$ 'pop$ { swap$ bbl.of space.word * swap$ emphasize * } if$ "volume and number" number either.or.check } if$ } FUNCTION {format.number.series} { volume empty$ { number empty$ { series field.or.null } { series empty$ { number "number" bibinfo.check } { output.state mid.sentence = { bbl.number } { bbl.number capitalize } if$ number tie.or.space.prefix "number" bibinfo.check * * bbl.in space.word * series "series" bibinfo.check * } if$ } if$ } { "" } if$ } FUNCTION {format.edition} { edition duplicate$ empty$ 'skip$ { output.state mid.sentence = { "l" } { "t" } if$ change.case$ "edition" bibinfo.check " " * bbl.edition * } if$ } INTEGERS { multiresult } FUNCTION {multi.page.check} { 't := #0 'multiresult := { multiresult not t empty$ not and } { t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { t #2 global.max$ substring$ 't := } if$ } while$ multiresult } FUNCTION {format.pages} { pages duplicate$ empty$ 'skip$ { duplicate$ multi.page.check { bbl.pages swap$ n.dashify } { bbl.page swap$ } if$ tie.or.space.prefix "pages" bibinfo.check * * } if$ } FUNCTION {format.journal.pages} { pages duplicate$ empty$ 'pop$ { swap$ duplicate$ empty$ { pop$ pop$ format.pages } { ": " * swap$ n.dashify "pages" bibinfo.check * } if$ } if$ } FUNCTION {format.journal.eid} { eid "eid" bibinfo.check duplicate$ empty$ 'pop$ { swap$ duplicate$ empty$ 'skip$ { ": " * } if$ swap$ * } if$ } FUNCTION {format.vol.num.pages} { volume field.or.null duplicate$ empty$ 'skip$ { "volume" bibinfo.check } if$ } FUNCTION {format.chapter.pages} { chapter empty$ { "" } { type empty$ { bbl.chapter } { type "l" change.case$ "type" bibinfo.check } if$ chapter tie.or.space.prefix "chapter" bibinfo.check * * } if$ } FUNCTION {format.booktitle} { booktitle "booktitle" bibinfo.check } FUNCTION {format.in.ed.booktitle} { format.booktitle duplicate$ empty$ 'skip$ { editor "editor" format.names.ed duplicate$ empty$ 'pop$ { "," * " " * get.bbl.editor ", " * * swap$ * } if$ word.in swap$ * } if$ } FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and { "all relevant fields are empty in " cite$ * warning$ } 'skip$ if$ } FUNCTION {format.thesis.type} { type duplicate$ empty$ 'pop$ { swap$ pop$ "t" change.case$ "type" bibinfo.check } if$ } FUNCTION {format.tr.number} { number "number" bibinfo.check type duplicate$ empty$ { pop$ bbl.techrep } 'skip$ if$ "type" bibinfo.check swap$ duplicate$ empty$ { pop$ "t" change.case$ } { tie.or.space.prefix * * } if$ } FUNCTION {format.article.crossref} { key duplicate$ empty$ { pop$ journal duplicate$ empty$ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ } { "journal" bibinfo.check emphasize word.in swap$ * } if$ } { word.in swap$ * " " *} if$ " \cite{" * crossref * "}" * } FUNCTION {format.crossref.editor} { editor #1 "{vv~}{ll}" format.name$ "editor" bibinfo.check editor num.names$ duplicate$ #2 > { pop$ "editor" bibinfo.check " " * bbl.etal * } { #2 < 'skip$ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = { "editor" bibinfo.check " " * bbl.etal * } { bbl.and space.word * editor #2 "{vv~}{ll}" format.name$ "editor" bibinfo.check * } if$ } if$ } if$ } FUNCTION {format.book.crossref} { volume duplicate$ empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ pop$ word.in } { bbl.volume capitalize swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * } if$ editor empty$ editor field.or.null author field.or.null = or { key empty$ { series empty$ { "need editor, key, or series for " cite$ * " to crossref " * crossref * warning$ "" * } { series emphasize * } if$ } { key * } if$ } { format.crossref.editor * } if$ " \cite{" * crossref * "}" * } FUNCTION {format.incoll.inproc.crossref} { editor empty$ editor field.or.null author field.or.null = or { key empty$ { format.booktitle duplicate$ empty$ { "need editor, key, or booktitle for " cite$ * " to crossref " * crossref * warning$ } { word.in swap$ * } if$ } { word.in key * " " *} if$ } { word.in format.crossref.editor * " " *} if$ " \cite{" * crossref * "}" * } FUNCTION {format.org.or.pub} { 't := "" address empty$ t empty$ and 'skip$ { address "address" bibinfo.check * t empty$ 'skip$ { address empty$ 'skip$ { ": " * } if$ t * } if$ } if$ } FUNCTION {format.publisher.address} { publisher "publisher" bibinfo.warn format.org.or.pub } FUNCTION {format.organization.address} { organization "organization" bibinfo.check format.org.or.pub } FUNCTION {article} { output.bibitem format.authors "author" output.check format.date "year" output.check date.block format.title "title" output.check new.block crossref missing$ { journal remove.dots "journal" bibinfo.check "journal" output.check add.blank format.vol.num.pages output } { format.article.crossref output.nonnull } if$ eid empty$ { format.journal.pages } { format.journal.eid } if$ % format.doi output % new.block % format.url output % new.block % format.note output % format.eprint output fin.entry } FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ format.date "year" output.check date.block format.btitle "title" output.check crossref missing$ { format.bvolume output new.block format.number.series output new.sentence format.publisher.address output } { new.block format.book.crossref output.nonnull } if$ format.edition output format.book.pages output format.doi output new.block format.url output new.block format.note output format.eprint output fin.entry } FUNCTION {booklet} { output.bibitem format.authors output format.date output date.block format.title "title" output.check new.block howpublished "howpublished" bibinfo.check output address "address" bibinfo.check output format.book.pages output format.doi output new.block format.url output new.block format.note output format.eprint output fin.entry } FUNCTION {inbook} { output.bibitem author empty$ { format.editors "author and editor" output.check } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ format.date "year" output.check date.block format.btitle "title" output.check crossref missing$ { format.publisher.address output format.bvolume output format.chapter.pages "chapter and pages" output.check new.block format.number.series output new.sentence } { format.chapter.pages "chapter and pages" output.check new.block format.book.crossref output.nonnull } if$ format.edition output format.pages "pages" output.check format.doi output new.block format.url output new.block format.note output format.eprint output fin.entry } FUNCTION {incollection} { output.bibitem format.authors "author" output.check format.date "year" output.check date.block format.title "title" output.check new.block crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.publisher.address output format.bvolume output format.number.series output format.chapter.pages output new.sentence format.edition output } { format.incoll.inproc.crossref output.nonnull format.chapter.pages output } if$ format.pages "pages" output.check format.doi output new.block format.url output new.block format.note output format.eprint output fin.entry } FUNCTION {inproceedings} { output.bibitem format.authors "author" output.check format.date "year" output.check date.block format.title "title" output.check new.block crossref missing$ { format.in.ed.booktitle "booktitle" output.check new.sentence publisher empty$ { format.organization.address output } { organization "organization" bibinfo.check output format.publisher.address output } if$ format.bvolume output format.number.series output } { format.incoll.inproc.crossref output.nonnull } if$ format.pages "pages" output.check format.doi output new.block format.url output new.block format.note output format.eprint output fin.entry } FUNCTION {conference} { inproceedings } FUNCTION {manual} { output.bibitem author empty$ { organization "organization" bibinfo.check duplicate$ empty$ 'pop$ { output address "address" bibinfo.check output } if$ } { format.authors output.nonnull } if$ format.date output date.block format.btitle "title" output.check author empty$ { organization empty$ { address new.block.checka address "address" bibinfo.check output } 'skip$ if$ } { organization address new.block.checkb organization "organization" bibinfo.check output address "address" bibinfo.check output } if$ format.edition output format.doi output new.block format.url output new.block format.note output format.eprint output fin.entry } FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check format.date "year" output.check date.block format.btitle "title" output.check new.block bbl.mthesis format.thesis.type output.nonnull school "school" bibinfo.warn output address "address" bibinfo.check output format.doi output new.block format.url output new.block format.note output format.eprint output fin.entry } FUNCTION {misc} { output.bibitem format.authors output format.date output title howpublished new.block.checkb format.title output howpublished new.block.checka howpublished "howpublished" bibinfo.check output format.doi output new.block format.url output new.block format.note output format.eprint output fin.entry empty.misc.check } FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check format.date "year" output.check date.block format.btitle "title" output.check new.block bbl.phdthesis format.thesis.type output.nonnull school "school" bibinfo.warn output address "address" bibinfo.check output format.doi output new.block format.url output new.block format.note output format.eprint output fin.entry } FUNCTION {proceedings} { output.bibitem editor empty$ { organization "organization" bibinfo.check output } { format.editors output.nonnull } if$ format.date "year" output.check date.block format.btitle "title" output.check format.bvolume output format.number.series output editor empty$ { publisher empty$ 'skip$ { new.sentence format.publisher.address output } if$ } { publisher empty$ { new.sentence format.organization.address output } { new.sentence organization "organization" bibinfo.check output format.publisher.address output } if$ } if$ format.doi output new.block format.url output new.block format.note output format.eprint output fin.entry } FUNCTION {techreport} { output.bibitem format.authors "author" output.check format.date "year" output.check date.block format.title "title" output.check new.block format.tr.number output.nonnull institution "institution" bibinfo.warn output address "address" bibinfo.check output format.doi output new.block format.url output new.block format.note output format.eprint output fin.entry } FUNCTION {unpublished} { output.bibitem format.authors "author" output.check format.date output date.block format.title "title" output.check format.doi output new.block format.url output new.block format.note "note" output.check format.eprint output fin.entry } FUNCTION {default.type} { misc } READ STRINGS { longest.label } INTEGERS { number.label longest.label.width } FUNCTION {initialize.longest.label} { "" 'longest.label := #1 'number.label := #0 'longest.label.width := } FUNCTION {longest.label.pass} { number.label int.to.str$ 'label := number.label #1 + 'number.label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ } EXECUTE {initialize.longest.label} ITERATE {longest.label.pass} FUNCTION {begin.bib} { preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ "\begin{thebibliography}{" longest.label * "}" * write$ newline$ "\providecommand{\url}[1]{\texttt{#1}}" write$ newline$ "\providecommand{\urlprefix}{URL }" write$ newline$ "\expandafter\ifx\csname urlstyle\endcsname\relax" write$ newline$ " \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else" write$ newline$ " \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" write$ newline$ "\providecommand{\bibAnnoteFile}[1]{%" write$ newline$ " \IfFileExists{#1}{\begin{quotation}\noindent\textsc{Key:} #1\\" write$ newline$ " \textsc{Annotation:}\ \input{#1}\end{quotation}}{}}" write$ newline$ "\providecommand{\bibAnnote}[2]{%" write$ newline$ " \begin{quotation}\noindent\textsc{Key:} #1\\" write$ newline$ " \textsc{Annotation:}\ #2\end{quotation}}" write$ newline$ "\providecommand{\eprint}[2][]{\url{#2}}" write$ newline$ } EXECUTE {begin.bib} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ } EXECUTE {end.bib} %% End of customized bst file %% %% End of file `PLoS.bst'. qtl/vignettes/goldensectionsearch.pdf0000644000176000001440000071556312113233445017647 0ustar ripleyusers%PDF-1.5 % 1 0 obj <>/OCGs[6 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream application/pdf golden section search 2012-06-27T12:18:14-05:00 2012-06-27T12:18:14-05:00 2012-06-27T12:18:14-05:00 Adobe Illustrator CS5.1 256 116 JPEG /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAdAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4qhtP/ALh/+M0//J58 VROKqb3CBiigySDqib0+ZNAPpOLIQK2t23QJEOoLVc/IgcQPvOKfSPN3ozndrhgfBFUL9zBz+OK8 Q7nehL/y0yfdH/zRivEO4fb+t3oS/wDLTJ90f/NGK8Q7h9v62KafrOoaX5ln0PVr8XVzqc093p9x 9UWCGK2QW8UcLyeooeQvMEWlSx602xQCOoZXzu16xowHUqxBPyUin0cvpxTUe931mn95FInh8POv /Ivn+OK8HcR+PevjuIJDSORWYblQQSPmMUGJHMKN3/f2X/GY/wDJmTFiicVdirsVdirsVdiqGu/7 +y/4zH/kzJiqJxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ksa8peerHzLealZQWVzZXWkssd5Dcvauyuz yRlD9VnueLK0LbPTajCqkHFU8sCBbuTsBNPU/wDPZ8VX/HP3KQ9qEhm+kbgYs/p96qiIihUUKo6K BQYsSbbxQ7FXYq7FUE+m2Vzdm4u7eC4mhcG1kdFd4hSN6KxFV/eIG29jiqNxV2KrZIopABIiuBuA wB/XikSI5JFrmkp+ktJ1IX95axafJM72sDlopQ1vJ/eRFZC3AD4QuKTK+ar5Z8xR+YNDtNZsAHtb yMSLG/GOaOorwkVWmXnvuvIUxT6T5Jp9aRf71Wh93Hw/Swqo+/FeA9N1VWVlDKQyncEbg4sCKbxV 2KuxVDXf9/Zf8Zj/AMmZMVROKuxV2KuxV2KuxV2KuxV2KuxV2KuxV5v+Vy3X+K/O8kkF0lvJfn0J 5oBFBJxnuFb0JlAFzxoOUjHku0dOKKSqzmy/eo0X+61mmaX3PrPRf4n+3FmNhaPxYOxV2KuxV2Ku xVRg9L1bnhXl6g9WvTl6adPbjTFVbFXYq7FUNeANNZgioMzAg9KejJirdhp2n6fbi2sLWK0tlJIh gRYkBPU8UAGKojFVJrWEsWA4OdyyEqSfelK/TizEy1xuk+y6yjwccT/wSin/AAuK3E+X4/HV31pV /vkaL/Kbdf8AghUD6aYrwd26qrKyhlIZTuCNwcWBFIe7/v7L/jMf+TMmKonFXYq7FXYq7FXYq7FX Yq7FXYq7FXYq8j/I/wAvwaHrvmyzt7DTLaKOWGIXWmSyv6xiluYz6kUt7qBh4lfsngQaihpXFWTa P5FuotXtNak1u4urqzl1BK3KI9Y7q7R2RQvBE+CDhUJXfrQBcVtm2KuxV2KuxV2KuxVZGZecvNQq hx6ZHdeK7n/ZVGKr8VdirsVQ13/f2X/GY/8AJmTFUTirsVdirsVdiqk1tCWLKPTc7l0+Ek+Jp9r6 cWQmUl8wjzKs+lR6V6EqS3RS7mnYxyxRGCWskfFJEd1O4UrTse5CpIK/ydp3mHTdFh0/W7mO9mtY 4Yo7wSSyyylYE9Z5nlAJYz+pxp+zx71xYp5irsVdirsVdirsVdirsVdirsVdiryT8qIPKegeZ9W0 zT9KttDuL704TBay6tdpNNavch6XF9a2sAA4uFERPLi38uKvUtP/ALh/+M0//J58VROKuxV2KuxV 2KuxVSh4+pcUcufUHJf5D6a/D92/04qq4q7FXYqhrv8Av7L/AIzH/kzJiqJxV2KuxV2KuxV2Koa7 /v7L/jMf+TMmKonFXYq7FXYq7FXYq7FXYq7FXYq7FXYq88/L3SNMTzP5j1GCCd/r9xHqCz3ek3em lZna4Q0e8CmSRYpOBaJUXj1HJmLKs60/+4f/AIzT/wDJ58VROKuxV2KuxV2KuxVShIMlxSPhSQAt /P8Au1+L+H0Yqq4q7FXYqhrv+/sv+Mx/5MyYqicVdirsVdirsVdiqGu/7+y/4zH/AJMyYqicVdir sVdirsVdirsVdirsVdirsVdirsVQ2n/3D/8AGaf/AJPPiqJxV2KuxV2KuoPv64q7FVOIPzm5OGBc cAP2RwXY/TU4qqYq7FXYqhrv+/sv+Mx/5MyYqicVdirsVdirsVdiqGu/7+y/4zH/AJMyYqicVdir sVdirsVdirsVdirsVdirsVdirsVQ2n/3D/8AGaf/AJPPiqJxV2KuxV2KuxV2KqMHperccK8vUHq1 /m9NOn+xpiqtirsVdiqGu/7+y/4zH/kzJiqJxV2KuxV2KuxV2Koa7/v7L/jMf+TMmKonFXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FUNp/9w/8Axmn/AOTz4qicVdirsVdirsVdiqyMy85eahVDj0yO68V3 P+yqMVX4q7FXYqhrv+/sv+Mx/wCTMmKonFXYq7FXYq7FXYqhrv8Av7L/AIzH/kzJiqJxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxVinknzA3mSzv7iL1LFbW9ktzCkkcwqVSY1LQqVdTNxdN+LAipxVkX1 Sf8A5bZvuh/6p4q76pP/AMts33Q/9U8Vd9Un/wCW2b7of+qeKu+qT/8ALbN90P8A1TxV31Sf/ltm +6H/AKp4q76pP/y2zfdD/wBU8VSTy9rtlrM97Da3d3Fc28j+tDMkAYrHPLaLKvFXXg8lpJxFQ21S oriqd/VJ/wDltm+6H/qnirvqk/8Ay2zfdD/1TxV31Sf/AJbZvuh/6p4qk2qata2Wu6ZpVzcXhnvF kmt50SAxIUZIKSHjyq7XIC0Ujxpiqc/VJ/8Altm+6H/qnirvqk//AC2zfdD/ANU8Vd9Un/5bZvuh /wCqeKu+qT/8ts33Q/8AVPFXfVJ/+W2b7of+qeKu+qT/APLbN90P/VPFUm83as3l3RJNakZrz6nJ EFinkjt4QZ5Bb85ZViYoiCUsxodsVUfJ/niLzLqGp20VvHFFYJaukiXCTuxuIyZEmSMUgkhljeJo 2YtVakAEVVZRirsVdirsVdirsVdirsVdirsVdirsVQMOrwyTXMTQXMZtpfRLNBIVf4FfnGVDAr8d K+IOKqv6Qg/km/5ETf8ANGKu/SEH8k3/ACIm/wCaMVcdStlBJWYAbkmCalP+AxVZBq9jcQR3Fu0k 0EyiSKWOKVkdGFVZWC0II3BGKr/0hB/JN/yIm/5oxV36Qg/km/5ETf8ANGKoHTPMtvfmcfUr61MD 8P8ASbWVOYqRzSgaqmmxxVHfpCD+Sb/kRN/zRirv0hB/JN/yIm/5oxV36Qg/km/5ETf80Yqpx6rF JqCWSwXFXieb6w0LpCODKvBnYCjtzqo7gHwxVG4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FUDDrVnNNdQosxe0l9CU+hKRz4K/wkKaijjfFVX9IQfyTf8iJv+aMVd+kIP5Jv+RE3 /NGKpX5l07S/MOjT6Te/WUtp2jZ2jt2Y/upFlUFZoZY2BKAEMhBGKonSFsNK0my0y2Fw1vYQRW0L SQylykKBFLERgVou+2Kov9IQfyTf8iJv+aMVd+kIP5Jv+RE3/NGKu/SEH8k3/Iib/mjFXfpCD+Sb /kRN/wA0Yqllhp+mWWs6nq0RuWuNVMRuFe2NFMMYjUI4hEvGi/ZZyoNSoFTVVM/0hB/JN/yIm/5o xVA3nmnS7S+trGVbn6xd/wByFtZ2XZgp5ME4puwpypXtU4qjv0hB/JN/yIm/5oxV36Qg/km/5ETf 80Yq79IQfyTf8iJv+aMVd+kIP5Jv+RE3/NGKu/SEH8k3/Iib/mjFXfpCD+Sb/kRN/wA0Yqpfpmz+ vW9kVmE10JGiLQyqn7oAtVioC7NtX9dMVR2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K pHfaDq1x5t0zWodZlttNsYJobrRVUmK5aUfBI7cwoMZoR8BPviqeYq7FXYq7FXYq7FXYq7FXYqxz zz5TuvMum2ttaak+lXNpc/WoruIS8wwhlh2MMtu4I9bl9um1CCCRirIx08ffFXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXnHmj86dP8s+ZNR0zVNKuW06wRaX9qHleSVx bMIxE0ccdKXfVZmYcfiUck5KrLv8+/KVtaG5+o38y+ik4jh+pvIVdwg+AXPIU5fET8KmqEiQFMVQ 8X5+aM+qXunvo17FJYyXaTKz2pl42Ns0837tJX+IsvBN+DVrzqGUKr9Q/P8A8sW80EMFjdzM8umx 3Bb0U9L9KQtcRCgeR3kVENUVevQ0NcVRMX526Fd22pNYafdS3Nhpc+qqsjQGCVYGKmJZ7aS6BYnu qsB0+0CuKqUn58eXLWZrXUNM1C2u44jK5KRpAQlx9UciW4ktzGomDCtwsRopLBdqqqMv/ORPkdDA i2mpSyzwyTiKOGJmQRq78ZP3tEZkQMtT9llPQ1CqcWf5u6BdXsdktjfLcvfRaW0ZFszJdSEhldUn dgsao7NJTgQjcCxFMVZzirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdiq2X0/Sf1P7viefypv0xVB6D+i/wBB6d+iP+OV9Vh/R9OX+8/pr6X2/j+xT7W/ jiq68/RX1+w+t+n9c5yfo71Ptep6Tep6df2vS5dN+Ne1cVRmKuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2Kv8A/9k= uuid:22f90bb7-2a58-8a4a-a22a-60a0ab2e3a75 xmp.did:F77F1174072068118A6DFB8E8855593C uuid:5D20892493BFDB11914A8590D31508C8 proof:pdf uuid:7e89c963-a12b-7448-894a-d72161589059 xmp.did:F77F1174072068118A6DED1BCC1F2C73 uuid:5D20892493BFDB11914A8590D31508C8 proof:pdf saved xmp.iid:F77F1174072068118A6DED1BCC1F2C73 2012-04-03T13:04:30-05:00 Adobe Illustrator CS5.1 / saved xmp.iid:F77F1174072068118A6DFB8E8855593C 2012-06-27T12:17:45-05:00 Adobe Illustrator CS5.1 / Print False False 1 792.000000 612.000000 Points MyriadPro-Regular Myriad Pro Regular Open Type Version 2.062;PS 2.000;hotconv 1.0.57;makeotf.lib2.0.21895 False MyriadPro-Regular.otf Magenta Yellow Black Default Swatch Group 0 White CMYK PROCESS 0.000000 0.000000 0.000000 0.000000 Black CMYK PROCESS 0.000000 0.000000 0.000000 100.000000 CMYK Red CMYK PROCESS 0.000000 100.000000 100.000000 0.000000 CMYK Yellow CMYK PROCESS 0.000000 0.000000 100.000000 0.000000 CMYK Green CMYK PROCESS 100.000000 0.000000 100.000000 0.000000 CMYK Cyan CMYK PROCESS 100.000000 0.000000 0.000000 0.000000 CMYK Blue CMYK PROCESS 100.000000 100.000000 0.000000 0.000000 CMYK Magenta CMYK PROCESS 0.000000 100.000000 0.000000 0.000000 C=15 M=100 Y=90 K=10 CMYK PROCESS 14.999998 100.000000 90.000000 10.000002 C=0 M=90 Y=85 K=0 CMYK PROCESS 0.000000 90.000000 85.000000 0.000000 C=0 M=80 Y=95 K=0 CMYK PROCESS 0.000000 80.000000 95.000000 0.000000 C=0 M=50 Y=100 K=0 CMYK PROCESS 0.000000 50.000000 100.000000 0.000000 C=0 M=35 Y=85 K=0 CMYK PROCESS 0.000000 35.000004 85.000000 0.000000 C=5 M=0 Y=90 K=0 CMYK PROCESS 5.000001 0.000000 90.000000 0.000000 C=20 M=0 Y=100 K=0 CMYK PROCESS 19.999998 0.000000 100.000000 0.000000 C=50 M=0 Y=100 K=0 CMYK PROCESS 50.000000 0.000000 100.000000 0.000000 C=75 M=0 Y=100 K=0 CMYK PROCESS 75.000000 0.000000 100.000000 0.000000 C=85 M=10 Y=100 K=10 CMYK PROCESS 85.000000 10.000002 100.000000 10.000002 C=90 M=30 Y=95 K=30 CMYK PROCESS 90.000000 30.000002 95.000000 30.000002 C=75 M=0 Y=75 K=0 CMYK PROCESS 75.000000 0.000000 75.000000 0.000000 C=80 M=10 Y=45 K=0 CMYK PROCESS 80.000000 10.000002 45.000000 0.000000 C=70 M=15 Y=0 K=0 CMYK PROCESS 70.000000 14.999998 0.000000 0.000000 C=85 M=50 Y=0 K=0 CMYK PROCESS 85.000000 50.000000 0.000000 0.000000 C=100 M=95 Y=5 K=0 CMYK PROCESS 100.000000 95.000000 5.000001 0.000000 C=100 M=100 Y=25 K=25 CMYK PROCESS 100.000000 100.000000 25.000000 25.000000 C=75 M=100 Y=0 K=0 CMYK PROCESS 75.000000 100.000000 0.000000 0.000000 C=50 M=100 Y=0 K=0 CMYK PROCESS 50.000000 100.000000 0.000000 0.000000 C=35 M=100 Y=35 K=10 CMYK PROCESS 35.000004 100.000000 35.000004 10.000002 C=10 M=100 Y=50 K=0 CMYK PROCESS 10.000002 100.000000 50.000000 0.000000 C=0 M=95 Y=20 K=0 CMYK PROCESS 0.000000 95.000000 19.999998 0.000000 C=25 M=25 Y=40 K=0 CMYK PROCESS 25.000000 25.000000 39.999996 0.000000 C=40 M=45 Y=50 K=5 CMYK PROCESS 39.999996 45.000000 50.000000 5.000001 C=50 M=50 Y=60 K=25 CMYK PROCESS 50.000000 50.000000 60.000004 25.000000 C=55 M=60 Y=65 K=40 CMYK PROCESS 55.000000 60.000004 65.000000 39.999996 C=25 M=40 Y=65 K=0 CMYK PROCESS 25.000000 39.999996 65.000000 0.000000 C=30 M=50 Y=75 K=10 CMYK PROCESS 30.000002 50.000000 75.000000 10.000002 C=35 M=60 Y=80 K=25 CMYK PROCESS 35.000004 60.000004 80.000000 25.000000 C=40 M=65 Y=90 K=35 CMYK PROCESS 39.999996 65.000000 90.000000 35.000004 C=40 M=70 Y=100 K=50 CMYK PROCESS 39.999996 70.000000 100.000000 50.000000 C=50 M=70 Y=80 K=70 CMYK PROCESS 50.000000 70.000000 80.000000 70.000000 Grays 1 C=0 M=0 Y=0 K=100 CMYK PROCESS 0.000000 0.000000 0.000000 100.000000 C=0 M=0 Y=0 K=90 CMYK PROCESS 0.000000 0.000000 0.000000 89.999405 C=0 M=0 Y=0 K=80 CMYK PROCESS 0.000000 0.000000 0.000000 79.998795 C=0 M=0 Y=0 K=70 CMYK PROCESS 0.000000 0.000000 0.000000 69.999702 C=0 M=0 Y=0 K=60 CMYK PROCESS 0.000000 0.000000 0.000000 59.999104 C=0 M=0 Y=0 K=50 CMYK PROCESS 0.000000 0.000000 0.000000 50.000000 C=0 M=0 Y=0 K=40 CMYK PROCESS 0.000000 0.000000 0.000000 39.999401 C=0 M=0 Y=0 K=30 CMYK PROCESS 0.000000 0.000000 0.000000 29.998802 C=0 M=0 Y=0 K=20 CMYK PROCESS 0.000000 0.000000 0.000000 19.999701 C=0 M=0 Y=0 K=10 CMYK PROCESS 0.000000 0.000000 0.000000 9.999103 C=0 M=0 Y=0 K=5 CMYK PROCESS 0.000000 0.000000 0.000000 4.998803 Brights 1 C=0 M=100 Y=100 K=0 CMYK PROCESS 0.000000 100.000000 100.000000 0.000000 C=0 M=75 Y=100 K=0 CMYK PROCESS 0.000000 75.000000 100.000000 0.000000 C=0 M=10 Y=95 K=0 CMYK PROCESS 0.000000 10.000002 95.000000 0.000000 C=85 M=10 Y=100 K=0 CMYK PROCESS 85.000000 10.000002 100.000000 0.000000 C=100 M=90 Y=0 K=0 CMYK PROCESS 100.000000 90.000000 0.000000 0.000000 C=60 M=90 Y=0 K=0 CMYK PROCESS 60.000004 90.000000 0.003099 0.003099 Adobe PDF library 9.90 endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/Thumb 12 0 R/TrimBox[0.0 0.0 792.0 612.0]/Type/Page>> endobj 9 0 obj <>stream HWMo6W(Hϐïkܴ@H@AP$u&n{I+y[8s5O9gߝ!؛\pi~17%W#.ސyќ?[x'\3GWNb1ku2׍)Tcc&5L;_n4{_}1#=rLabFl'tD3%0X+%y`_:86B"o 3wd.̢އ)/EC9}:5jOWY]6^AB Hi[hVvQ?<_̸Ž 4 hRK0V\Az9֍ͮrYw!a? c;/wLU 1B ޶/;vѼ|v{ѽ[8Qϗ4Kv\sgݬn?\ݼj{c|j:vsfY.=4HN54MM։UʦJCÀ]Utj9l"4ZlNhDo)PwZ҄D͍/=R`qh,>G9Ne^΁6s{|P}ЉjE87 s$@Mѽ >6*.j- gFFR @TPF!.- :jF &8fy0ܠ"k̺ajn`Ø:E~4# r=I'%-7]T)s;n턼ܑ?pFGvFco(pXCF`-Zʺ Ho4^Jtt/uk+pX-D* pDHK yq;.E/R_NoL<᮫~R#>stream 8;Z\7;6kfs%*W/XbABD'T#9k.XRp3>(/h-^=1;\;K-nbS2V;`TET>&q5ntXD*#ik9 81C0ek_FUl>tdW#G>;)Gc9KI!bk#NCTH(Li1.(/bTQL4Qj&_@tXSh\gF\Lk)b`S_u /"U/8.*as`.7QIlNEE4@UrY>/TVo(8MkGm6,g9Yq8C]CsjN:AZJ/Sd_%c5$Cl8\3A =?R+m95"pOLl1a%W9[:aB/6W4D3'"JLtf6Cg^tNsG*lDX75QY:?"NUuET@Wr$gTG, m`i7k&C[Mo/A=C%HX8gMiJB6Ycj[M-m-c(6*)S_E&URNrZ_0SB1qsW)l:k~> endstream endobj 13 0 obj [/Indexed/DeviceRGB 255 14 0 R] endobj 14 0 obj <>stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn 6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 6 0 obj <> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 5 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <>stream H|yPWǻXX2iJ  D#l<a.!I20 . %/T +N0A00 `b65>v{ڿW^~{87p_f2RJv UĤ'DL K2>b1!۷oYK LJ_lMNbcbӤ֯wq0Y uqvv^n(4Hj"1UJIVE)N ҅R"U0MS$UJʴXJ-(xB.MSExii܃T$rI#&/,LF&rYD''TaGRRO\qpÖ`R0G sŰ-X űa!v`!X vWyx٧f7yμ (?_'oJҍBK)4_ke>^v]+ys!y$Q|KI$E)09łyr|-4B&Of,[fˌPW'bsZd"ѰDo!ZNhFn뀵ˆ]3 |3тLKЌAc56'D~@< Ia=e PpeYX,AIK ^hpoB.!jZqJ4\Ge\zfa/LT eћM}?>AnWb%5Dչ3葺|;);p]zLe 1lxj+sfeޕ!_RB>U(W8Ty\Ur=U+b p}oͲHFj'𝽽z7Y Ҫ9m~{V恍}gj/֊;á XuR|+ֿ;];OJO9E{OsKOt@hW)(6]_\OTЌ+e?L x(\%QCk o@d-kM8Gk{]mgtTg~:[;;_{Õ$PZ{c?~TVQV/\ mwƿ׳}p} WL+3-Tqʏh)@S bģZY\QXW[ڲIbaY7?V%c>1)TWo_}_ôfM?mϴ?%~xM3OWLd[4?9܏yxL6d - endstream endobj 11 0 obj <> endobj 10 0 obj <> endobj 19 0 obj <> endobj 20 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 15.0 %%AI8_CreatorVersion: 15.1.0 %%For: (Doebley Lab) () %%Title: (golden section search.ai) %%CreationDate: 6/27/12 12:18 PM %%Canvassize: 16383 %%BoundingBox: 34 -571 1141 -79 %%HiResBoundingBox: 34.9121 -570.8018 1140.4209 -79.998 %%DocumentProcessColors: Magenta Yellow Black %AI5_FileFormat 11.0 %AI12_BuildNumber: 39 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %AI3_Cropmarks: 0 -612 792 0 %AI3_TemplateBox: 396.5 -306.5 396.5 -306.5 %AI3_TileBox: 0 -612 792 0 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 2 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -85.8013 325.2051 1.25 1595 755 18 0 0 43 135 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:90 -702 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 21 0 obj <>stream %%BoundingBox: 34 -571 1141 -79 %%HiResBoundingBox: 34.9121 -570.8018 1140.4209 -79.998 %AI7_Thumbnail: 128 60 8 %%BeginData: 3920 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD21FFA8FD62FFA8FD0DFFCAFFCAFFCAFFCAFFCAFFCAFFCAFF7D7D %CAFFCAFD0DFFA8FD1BFFA8FD40FFCBFFCAFD0FFF7DA8FFFFCAFFCBFFCAFD %5AFFA8FD09FFA8FD12FFA852FD05FFCAFFA8FFCAFFA8FFFFFFA8FD1BFFA8 %FD52FFA8A8A8FD0BFFCBFFCBA8FD51FFA8FD05FFCAFD27FF52CACAFD19FF %A8FD31FFA8A8FD07FFCBFD29FFA8CBFFFFCAFD48FF5252A8FFA8FFFFFFA8 %FD29FFA8A852FFFFFFA8FFCAFFA8FD11FFA8FD31FFA852FD05FFCAFD19FF %A8FD11FFA87DA8FD07FFCBFD42FF7D52FFFFA8FFCAFD19FFA8FD11FFA8FD %0BFFCAFFCAFD0DFFA8FD31FFA852FFFFFFCAFD3BFFCBFFCBFD3CFF7D52A8 %FFA8FFA8FD19FFA8FD11FFA8FD11FFCAFFA8FD07FFA8FD31FF5252FFFFFF %A8A8FD42FFCAFD36FF527DA8FF527D52FD2BFFA8FD17FFCAFFCAFFA8A852 %FD2FFF7D28FFFFFD04A8FD19FFA8FD2BFFCB7D7D7D7EFD2EFFA87DA8FFA8 %FD1BFFA8FD11FFA8FD1BFF7EA8FD30FF5252FD7EFF7D7DA8FFA8FD1BFFA8 %FD11FFA8FD1BFFA8FD31FFA87DFD7EFF7D7D7DFFA8FD2DFFA8FD1BFFA8FD %31FFA8527DFD1EFFA8FD5EFF7D52A8FFA8FD2DFFA8FD1BFFA8FD31FFA87D %FD7EFF7D7DA8FFA8FD1BFFA8FD11FFA8FD1BFFA8FD31FFA87EFD82FFA8FD %2DFFA8FD1BFFA8FD52FFA8FD62FFA8FD2DFFA8FD1BFFA8FDB5FFA8FD2DFF %A8FD1BFFA8FDB5FFA8FD1BFFA8FD11FFA8FD1BFFA8FD52FFA8FD62FFA8FD %2DFFA8FD1BFFA8FDB5FFA8FD1BFFA8A8FD10FFA8FD1BFFA8FDB5FFA8FD2D %FFA8FD1BFFA8FD36FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD36FF7DA8FFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FD05FFA8FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFA87DA87DFD32FF7D7DFD1AFF7D7DFD0FFFA859A8FD1BFF %527E52FD32FF84A8FD1AFFA8A8A8FD0FFFA8FD1CFFA87DA8FDCEFFA8FD11 %FFA8FD52FF7DFFA8FFA8FFA8FFA8FFA8FFA8FFFFFFA8FFA8FFA8FFA8FFA8 %FFFF7D7DFFA8FFA8FFA8FFFFFFA8FFA8FFA8FFA8A8FD53FFA8FFFFFFA8FF %FFFFA8FFFFFFA87D7DFFA8FFFFFFA8FFFFFFA8FFA8FFA8FFFFFFA8FFA87E %A8FFFFFFA8FFFFFFA8FD60FF52A8FD14FF52FD6AFFA8FD70FFA8FFA8FFA9 %FFA8FFA9FFA8FFA9FFFFFFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8 %FFFFFFA8FFA9FFA8FFA87EA8FFA9FFA8FFA9FFA8FFA8FFAFFFA9FFA8FFA9 %FFA8FFA9FFA8FFA8A8FD35FFA8A8FFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %FFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF7DA8 %A8FFA8FFA8FFA8FFA8FFA8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD46FF %A87DFD27FF7D52FD55FFA852FD27FF7D7DA8FDFCFFFDE0FFA8A8FD10FFA8 %A8FD0BFFA8FD60FF527D7DA87D7E537D527D7DA87D7D52A87DA8FD057DA8 %FD057DA8A8FD60FFA87D5227527DFD05527DFD06527DA852595252285227 %7D527D527DFD77FFA8A8FD05FFA8FDC4FFFF %%EndData endstream endobj 22 0 obj <>stream HWmSۺ:ḡ6l/pgHh{ N";c;pJ~$:-=Zviaz0Ro! n^Wn?D˧A0uGs$/KzMLq$ԏB7EoP(=d('3X& =la~Dl-7<|GcQB7@Зy;9lqsP[^vo]g +1xq^z1(.] `w - Z-wƾ b`!RޡH[ץW}}A1OPɆ˝s> 2ۓW w>am ua2~zS?]$<qzoTqYULIX0"X#<GФEjNػkxcc/`*#G[YWkH6rĄXMj0kh^ w@"Xᵊ״&ٶ#ueypkEe԰n4 S5FLT6.ذ&WhnpSs"fc?L6{X!?%.@$ݻξFo"cɽ OȪ̭UYmX?*?/rzׇ3Vf쬲d'L;1x)dNe \Y}-xAb|smyzw?$현?FLCdeXjӪ@v KM/g o$4;%sȒx E'\~ɂK:| e:yhX}VVaulVV_9}9ϮAP?! =z@ND{cX-yKuD{6rĄXMjBA ZxQVw% Swtt~oH||6cY? .bԋdS=ڃ (ZUo* \3-Iׂagv5 ؟޻#PIi)(uS7Lv8f,);]? 3X<[Oy1Agc UtgyǪyNb䎘?%1BpzՏ&~}Z4!$]'c暢êmFb9Gd΍i.\_4E&iM`ho8" 80u\RSd-XFv,Z\jX6p?Bo2 Y0,sN{2 bEkzƗ>$=Lo{'ɔ;4ppoAϡ' ps'm" LU5=lQ>bbg۳.Lz|w4ޏ;2ޝ׿lTiDB8z7fB;^ Z;nj qMni)4)㲤wBCX n^ l +g{cX5 6`glLBBuAUB$(wò_LCɊGjJ*p[5%haQXHCFyur' ؛Va*~EZehfZd`)vCQF -=`.-U ^`+gy!EJ2ϫZUQ)E1ʠYޅ(PFT3\Jq;.t0:O3:!~>e9jLcѡn`?in)IW4)[m+X[+[;.Qal.Va&f݅Y*rXr .} h02G{M9ړQ)-Ϋ㋴:ٮtfJր+F6STHn+]Vե_TNƬY?ꫵm@`0hm˱$M4ڙEAI5- $&{I(Ytf[ p̀=CrD7=&x| _) w# }i><;Ⱥ%sb;TXi7ERݛe!0}7:}x٥ oSr|!JG, m4s|^/\p1HER밣 vd# ҧ_6f:``/fGS5"78[~\%+u/( C ΏǵC|jx[=>UVwNG3t̙ǣ0χ_7q"Hx|oN \'?^]rXz|:MjP׌sq'l^}'H|vG\"!Ja/ c0ÓK~{ϝ&QsN}sCJ; C,s \hG/%g>1f1"bʿ |$gZ{-TnH FH_Qpu1*̊o52?ٍ3@+@"A;`($bOUJ'Y0y,[$nAe. {};|RbG͕??`jq1Z١q< ?zScZ)&``%QQnq904;˜ ,7: r,|@>["x#Sk GLA2m*Lc49?͚%q>b?Rp&2=S^]Č.Ki;+ T)0B ZYq,vi<θ(8!E{Bkhkm(R6v+?iqPtAP0$IC%5@`7O_O˳I31P^"OqVo~H{%eeZoeRxgi0Cn,R< l,1܊u3Gz0O~+2P$Xg>3w\>C+[8Dr݇D, rG`$2Tc.0sH*)"nόGXMY| X[ BxͰDHi -HݶNɆ&<}8'oVvDZO#'}Y}'Ou]kcf,]k Ltc |ȶB!RD.l[ëB74cw Y9xŜH=/Hxf7A` NC"jzoK57Wi[% d;oeN\pGN?@as'2h7 py݉] 3(]\d(Z $kAcu[ЏZw3*`J*q FsaVB22#е٠8hg1^0wI}=jAk0;VUqa{TN`-X%@d4gX|rV8 z`|\e[FuF+j$(gKp؂a1끋ESCh1 Us)k֙Ta!g 7:쓕_6ۥj2C +VTn9vЌ|ֺ)S+0*S ǁ{hiu0PbLȼjjaVܦGn`{\(pd p\hE&CFmjhc ׬uSMaItfp. -a(zZl* _h}ېN/䊬|>+J@ 3+@tl\N ueȖY9`Uz8k|zƲ"Ka?àmtv9ۄLA1>|_[m.{ :8 ,+L((c2D&䶾>EQjJ??lCZgw?]J4hbvvN;aS֠HIue}ra8/y5Sv%{A/43 %R՚';6ԼkKZy)Z!}:PPYȚ5gfx a[?R/fPo*.v~`EET~!^2Ba?1$Fe$ B'a`oX9wNg[@Mjߑʷ/e<1/qx:; 0!h-}YcL^-qxk=u]߮\mW=ݿ(#ui ܯ%b7W8!˒%ƚÜr{f=VOCܵ$]Ò%#ƏL01X:\ NS[eeJVSP].Hhb0[˙o^T~Awvw;}Bh7}[zlf7 VpS`y;ޒ ]ߑuXi2֛?L/šj_#*ğK7/\C<@HKUJ9B1d{& ^~}6%hg9iGX5M2%{ULXR!:Ipf9T r [SXt3FymITʉ]P-£AZA\pd;@f}2$6=8/4zojTX}B i +P7'ڏ֖f7(x+NB›^~ ޖF5 Xu?TBuDYzYwP}ux~Fn}™CovaśDWtu溺Jг51,wojjKwbiʝԎO7ch`Eux($a +JA2?<4*15[Zqٰ׻tH7O&0|.f._e%fWHO ]qqYOc!ECA^cVyZjeSŘ+dRx1SL1X2ˋtG2摹jXܸn2Ō5$ xprrHsUKx{2(;7KH5(- >6 }0J6{G㷟ݔ?3ũyD*#_es?͘]~M,~{HmT)}GOwԏ1ۍuLJ;I}[("Wl;O2/"K"e5WpdY'-R5'T2!L5  7#yf7?a ɩ ynr5z*2ͧ\Xl&'$oEbQNME=.!/G_ RU-$T~GOuSPUi*dR1 ELdBW=#%z*+8::]2R*Ui(R\O59zJ` =kXPdru#<]ι*~Bu*d1,MtuāYe_)\mث:".rNBϺ jD~8K.+{L{rPftSV~j=?ハ/+:%U0."9M}oowdxZůyAP_#^[jbu_yQ|`9AՊЍ xNfj(s`b{-cX9kb$YyrXTeZ P;ȹ}^ 3!c HlޔkK5`&י}W>az|略FF8 `ktDhUhpt}t>ݚ40DF%ړi@݇ƾ;h(VPhGH'\\bb=(qXw{-fdYY ga"w]kuR {8:O|7TOIu/!+;$~ry|tkG8G[lL_$RNFХDZm`\KA\c aWPN)N+`eb"> 1 &S@8#sPDž AZ)n%t0NN|N";,O7 bU烏ei_L2~rrz[( $tJefX>v"ŝbFW@TBHbVQUD ^`Lr>݇=FvXZ欪9Ϳվ~Kjb1OfMjQ%Z%a1A> ac9L9fNVL0ki*!WU)t7-itfy4OTK-bL-:-[\;)/KkN6n¥2_`am;{$;K;m A6缮} aV3d2=Ơ(zvGR[F&)IGt Vf(`Y^:cOq''hFSjuW~Cl&i`\'/B;b(j凤Qn rZ.pfu (,L--}tBYa~۴yFL1v䎯sZpϒ;PshPL;>^nS =4LJm6hxK_iӬY?d?:är7q~zL,<ruЈ2PfdKάq Rof&>YqMprWhPDh~ά+uO/ם $N};Ǎ9vi;%a!q}9\nT*dAON9긂W:x\[cHY$հ0pb1<#"a*yk /7}ݿa`9Y77&N3C~P=ީ5@%T2RFmH^/v_4Zqrp}eBʨ#LRx6[H7~}<>EnxWtZUa lާS'*4N!Hr_ \PEX5HqyK'MU2a^XHҝBf1LKϯp\LB'lF䈏B0 .\ij~}an rBGA HwF֎qLyC[JS}(:" Ӟwl؝Yy7KH0q8>߈]@rⵞ+?g7,YE$9mOdɕax>hQч_Rtyf .}Rܗ)L95jؔ#G"! C 9NgO=ؕ!!ĊU\2;(W/5dSwp(h;>mXdW:" (3D2Oqe~diIkKnf<~ Stt.؍ry_drs*ӯ;$m_ld-qR oBi0,K`8WQ͸fiKIسM7]M,? ^J*sX_0%KYѓÅ߮<ؽ ǬkX k\mʴ'Yw8a_{{bgQJttw_,hzFӾuׅJ0b Lbe3wM??pNrlZ{Ӳ\ޒw//E EE$wv}>bc7NܗZ&ޝ Uvk\iټre[HIJ̱^FY3o_k'k/?גwT(AyTt~#& c:WO:7S 뽻{ *‽qvEC3Р,$1?{x$&7xJf9FwCP!ke;jh$= wjBh36RO5Rv- /hʳy-U+ 0k%zu1ֿM˕(uy"9vrw</"JíŽg$%c-\002Οv;?`6(v\h[$rɬ+p;^f,D  m$[ҝ:?G, b6(:7iibqw74m >[1l˶O)wmqqJqgɿ' d,{ U? N[Vyjx8d8 !ՖOXtR0IW}?1d{'a,&ov@+=g]VQx-c?_{ Gnu}TEB6IE:R/Q_Z)RTҼіXHl3-71gR`O-~{Mn탞m@Wf+%[~Z.H?(W {[Z#K[K|zp~y,9NJŤ nK!3*krQΧBX0n.`/mG+Z}BtPz$YٮI brMT0W1P+~p^¡ŅC( ~w.; c.XN2UN=/nv"kmeqRQNɥ;-nx_b\Pۣ\1/+v2K˰4 n #( 3-x /CH9Z= ,W?TpMn !f $-8; 6)(iB݁"uel5\q;i(P<0`)|(+WlfF΍JҲD + g ɣI!p F:{(JR^鲾TT5I)xkf_{Kfa11`l Xni.__OHG-{$$j xZ/( ==8zA] #uf~ O.=kv|wQ f ʯ ƇUd*^|ysMNݲ5>1cAlZ0~H w7GIދB'i *G2Xl=U f/CN s+r|Q>6ln~xQ~<b%=X/:Ag@o@]5WO$gBH\#1[AkIӡ! knQ9llݿ`%=ݒ8A9 qE|jm #t;|9趋UsWE1Оvv6܀࿱W=3w<+n;(dۓ!&rz$OZ-tܕ ^_O,yB6~χf",P@1r9:&X;ab ʏcK_&'e:'Cf!3: ѬcgT+T;2& ["Fa-FT`]h E7y*b19޸WKTXGZ*@J[QKz'e*AĮor~ ; *NKz9` |c^JҢ&K?CEwر};c&%XQ|ݒxA=5.}A!IYn_y^dsyssK:WF7wILWzrA陚^ Gj]rHCnj"CS4A܍ORBMe_䩱NEu@_V+d?UI2jʷMx ܈ᖎ!糜 ڂ2yF SMtJxWaޑO&is7;wSo\Cko*EtLiۜe̚WrclAEP9$C~Tqąs9Xt~/J}pS `I܍WdaEt3ϒ$8$wO_X^۸oHHVWV^Ho2N"ƞ 1VOԿ򯏧f`JZ endstream endobj 23 0 obj <>stream HWZL\s@[x,gTAAUO,@! 3Ʉ<>Z5iڲThn2IDʹƻx5yRͼF@5p~UTɘOGW_WR3Pm͗'%`ApPNәt Kd´үdڧ==6mZ&CZKP!BzJ,FYO[Ur+_9~I\+z=3Wt6,23cy/֟&CJu|O7fagsrq.xXȽVM=[,pa sW/peF TTM*RZWڵe!Nӵn.j |?*<9leвb%ru+$Fj*Cw˪ى?v0k%|9sQL 9jS-FXE3T :gRLKpH OF[LLf-tQyd+9!+hD<;6ؗb/朚wl"t9_uX%5pФw sDwX: ѹeT̫X% pIxR4<߱ƀ븎WD5E(ݴEBOVX&ƚ_VoVУ^ˆfh&W `?nZ`qh Y}pɅ|nF n".nۻtŤIEt^P!Pʄ$zTM%hJKݕĤW^w"tmP1;{LՔ.WJ ~OJG{Xc uÑcžx/mSqaYcey"՜ $'`LFޯg0{ltw z -H *kHw6Z T{!aB6o`o|cd b~~O|P/`*_?Laٜ#9Ec'X&$9/8EܞBGЩl,Bۏ[z%r= EDN_I0-5 ݷ̖ 9ugK9NAy/tJAdӳP? Jȋ6Щ6~$ l|ׄN7Ơ: \>%Hu V/w=?rkWssL1Y9~q-0em f b㹩.m"B+cV!u?/h F^D5. ܗ q0,gc/-f''PHeCR$cf{o_|VP^_j\aDz@f dWi83STa;rà#DcM YXhLCxe!f:Mΐ:lS{dlE&9ɮlan䗆m257&`7+wəׂ^Yh3Ib=:]tc#NVzXCPc 0^DS(@îXRt]LE]~/.[bMbR)MU Cr-f5ĭF{1/Wu`y0:4vcHO&{RY4) sxe_Z_UZ_IڈvTtj ^y%C܂Rq~ ^>ȅob. Ƅ2H32Dg-c_|.'2f"3{E5;͗pXn?|vhqKb[2\w.qc/.xpR. !Z )畃,,Gk[+*.$/$*O9J Ȗ*zJv}ŕ; b N()!(ytY(p ^fwsS^6T5xdL,BvJVxaxoʌsQ3Vlpf )INX >€;H+ِ SrY[K)FZ}lܼyw* TJP3wLB9ZAORy.\X{Δ@K0{aB₅ >pxL\nrr<$AQq^uCRK> R+Fy̝t&5Z&O_@(jӄr|$D tB7miqdn/Ue9B 0"IWgjHl/-'ExEIꪠ)^;p , W4(8+:)pYd1lw8cG.1C֌}9NhHD+Фwd4{gVT{Mbbc(Дȶ؄$4Apf^k+[ xAsж` lPl^ 2VU O}~ak2+&a8Զ~f*֗c·Yʏ{)O" [TCl Dj8 H eq0 sK%X"^I/h''vGJvQI|(YSh 8 hըy]K] 0iBD0|CkG+Dc8 ( ]87H4u\''ŃoWbWk'#M@pT_xQ V߼ĒGBFvR82F(2 yW 䭀Ꭳ^Dg$n":4W )C6΁⷟h`.X.CY h1bͭ=>sxs#4Tf_hoFnL4f&o|3>NNmN/4z)o%Q1?ͳ~VM[Uv_Y(IgZޜ7C''{%AT_'O\]5xTPݜ{xMAzDl <uxݚN!i1N3~pEw{ }e9}qq Y$r7Ƹb7 ;S/W0:ߟ:N׻%M8/U_w gnLw=1~f1ei,}Hm>c9}#!۩z1{UX3k/s΋]оx!̏;By:;g"zmrc>Y SXh/VNw5ɔ\h~XGc e%T6M^1eh,+9zFɭoALPd3R3UUvɓ丩BR"KG LE$#+v=lj?[^yLh>k,Ц0e11 w2W~*5UFJ&v5eGoޜ]׆ jxLNVNsAF_O=} v|(GV(F$ըT S|ECg;T85tHi0͝;w4c |G#7]V'e1JP q9ш4GG{Š әeZ_G5y}sxzŸE<.Ǫ;1V̠y֠eQ =MUa35JEȪg;1vru8T"nxyQfU.1|LlCf P^&2o{>cRI$ÿ/(b[pO/A9ޕ{9b(\@B dR/St*q*Jr*ϛoر vpb oyم'5y%.MHTVIF[.ad1᠈DW݂X') W[>+LqSyWm{Zከ6"ʝVݷ#bJ0B򭗎vr J+6ud,AJ+۫p7ҖV)v߂a$A!JkGa=Who˽eؖ6RHap2 i.F0:g! to퉻B_[ü@qobHI$|mř6I#N'Dj6,{R+Dcd($>J@ta pn{VUxy/Fy4ǝ@9 WCΪ-98uf'w6-0T)Д2uǝoBc3Vw\@}!(+vFqTn7u+%a'dߒ1C2L{ 3SͲvE\>xW:&N 2(_ cъ,3v1K٧THX\\h~^pDΌdST͂:J@5$Muv"- CAc8 ; T\Cae}A;S4PWpiP4[ҪXvnnJ7`nnem;}1%(0|a ,CЈU㮎oG:~ cLQ7CkF+S:> WݎgҮ ~ mj'1)CW m/IO59JKKӨ2z%7ħ泀o+Fth0Ƨ9˝^;P8fT>x v4+v؛F ;Qʈi1pedPwi14lB.d5 o>2pw`X&`XrA!B} n0DisˍdT3I+e1%iDX"#TOX,FEP:xžH}z⺒&kK[9fM1LSH£BİVYAa^Fy=l>Ƣp嚤2MA/Qͽ(͔w3*.j:VI{![N#O <6}"awV#:?,ꗖ7?~}Ԫrw=ֺ}|Iޥj1J`8<͗gHT7ו;dR<ބF=PN[ fX{9$wϿz%'C@ !` *ˀr$!ZNU: ^S>l_q.nd[,:p ^NA.:IU.)[S2\@c Y0HNyP֝&-NӋW~R ՜թY2CB|tfˤan~zڬ#"V)GGQ˲[u v29l m5~﵃[! 6tAH=1$XlcT c +8U߾A<&1In1$%[?I)A2[ >Uwc3Vp bn[u|Pj<LWK>JA+*bA\D&:;^l YCMͲ~bj&Q#IKZ5K P)Fd5oAWK 1!]OPQQ&X}Sk ]-Xȫi ;Ô#ePўU/,u8B9'e; *:~ q~ECrHH>ƣc!6$r*6_|=i UH׸h-meAR$;cf_jҖ-$%D9[#,5W5n 6BB2AQ<祍zC )SsA` ɨ; ?=?v!.xm{{{5lv"b ]ƴ8u"(gV}XcX]骄;X<PT*'1v 0XwF?o!B>*E@ t8X0@] wr* SE ^W n@v瓒3oH>ml /J !5y(|g ld](feUO]=۝s($ gsPᛩhdjʥ %y;qnvG3w-P=2`p" 8-b*$.'!\J#TB@+SCHp T !m[\WCW^\ҕ[CwÕ PD(K:lN'd ʹF 8N` հf(X\RSS6Zcv9@Yjs*dJPs0rM.AD] iK¢.r0Ffptq@7N ]hqdOfXM ~LՁؒz!:ӭ;:ME;m 9Үwp՝JhH~+0 zTϚ#V|[q=6F=ݐs?˧PB1G-=r4Pq*N!Ôǐ1 {1dAD9L+qr^jTig2)4=e]P~Þ;YJB%2&͗SFw=w׉pr@^źWMƒz㴙.sP-;[ډ Es+YaGŎ#_UJ!3 / 4 1L -rvj<(y ^a\ <Jc8X{m c6-;} kjݭ yڬ\v~a|౓ļm1W;q mҞ(5'[[`WJSJ8;Ot>l&o <6BM#ESSbN=] t)ʝ^6PtvO;cvt"o+\8+ǎƖN{6V drtn -wX?:8g1^j1q `bmr$;\[f 3 e5GK?Rĺ#bJhh,`,^oO%;bBw%%j@Ϟ^Ґ^ǎQ ~aX]! ( N ⰑG*7(K|M|A1hXeI2y0tߚ;JJ6S11|NN+LSG.e0Iu*LaױJ팝qVrv<V@Dnz RZm+β!gt<[KYNl>VjȰbU'*/p߾:r5{ sgBlqS*z/f|/Y|_3?`nIo!Ŝ?r/ݐRbg-㼕{&?ve5/pߛ3-Saއjh<>ۦ+CGޮ}M/rdr^k vdyퟧ~L-Į{YN#W'>(~~G#ՇM.5x9V_K~g7׍,HwuI|\7am|˱r0_3,+ k@EϷS1Y,Cnʏ`.*׶Kz=eWR!aJ{}.l/^N?*ױe:]->]'lyd|S`2_H#sjv}(+7QD+HkY]NBlNaXgOqU? ^E,bC|Qce֫|/] _A0澡([Vfjg50pKM}4NdƪWBӶHO1ZJ!K{c2^^"JIgΨ$Ad0P{X%II2p=r$TcҦ767Ӆ4aMد ҽ8iD̻e ~; уyg""bx>\ ?,öe]w}&/Qϱ˗ S ='d۟-uSxQaBSDDϾ/- $s]eZy| ^dN8֮٫kダQ*uq_[,iNS_d~8*2|t<|tkmoRޭ-D gGb0QP}n4UE@uZ4S(ȣTk yJܼ)V:@Y'E0AZ7Zǯ<ƺ$A2_UMD.NDϷ!|緜&% u%vN1kT *˅$S/$u$ˆJ5F6cRKRR%qߕzXVT$1$a~l.EX+QԇJ[}E,067+w>w +?ֆX꿲I&BqXK%|ѭ3* 2%'TMa~FBܩ`Uˠ;֭ɫG`o}xs ѓ5.b[c$vj2mlMG_p ؑ "gr߳fG޵b<H(Z7KKd/~]lE)Ĵن˼7&?I;fxXCh\miD@j_L-O# ]xVj_Iu 1oV;q-t6j]KW0a&`F"(*39F68OO=]=l&%XK"3=ip(^e2 3ݠ?zMyx-?* 6Zo*:OJŇA6EeaBD:aèc8DmL IA8r|bq;*0Yc:N"s(+\CsGk(zfgQnه!+$zi~]6&RD\Wg| ȯDTYɖ-kqWf&+ gF.wylpUoWz%ԗ:>fHZ ~O8~00Ăqb\Fb߄`p:tcwb·E+vT7l3|9eMT@Mr.`<xrPz]#o[ɜ*~xG"ARFT!.$̼{ӁQjz8o{V-[.ΥRx)$ iEhߠ s~х̄t'Rp')>\^?rbK}(hȮ^\'.X`D =g(pB,֦?GlRM]z/E=4%|u50Ehp_+25:l_;Up]XM3~oԦxGϬj.ƜUJiNpOY3_bB@,pC˯7Àhg$&fOa +z}|^y~Rp*#]%2ᆲ\5y ٮu M%릖{ j#+)Ɯ]Ndxyj/m_hHG:42C={<; bK(^_6^2qnT2tCk OY#4B ۳P%}ѫH_֞Ma] EOI?E|^ '$Q#Ԃ%DnDߎڭ8DE+Q;,.t=3):|m("a(&F݇Ia&8ݍi[4hck>(.RdOD Y&ye_? H 6T86!Fus  ڗ?˒Jy߻1dM8l X~@he@LՁ -`й)2i]ld A zlXE0^O~M4c>o=v3z/u(|G7 Y:ڗ c•++zWZh*{rwyn}*:u38l|gdK:E-4 D_ ݄pAxJ~T[l> ,Exxt_<wȥ;?pe endstream endobj 24 0 obj <>stream HWZJ~!h%@E?՝Pљ'IW/u l[ɀS^VuvU7WO]NlG:f; ?kOZb(28y;*(_÷@|pw"˶xaII=i]ܼ|Dh$Y4~LP /%~Ӯ*$vkrYGIpÜ|93VooxLBF6d?8>u~a 'VHrR0;g+Xq\^KY=H% ؐG* Ζى3:KN9M)R{&LOž xPgߝsj`yI̊@y#NV1j8CbUGsJ82Qi<蹘MrGW^g l(#z$/LGè[ Eu 4~7|+I {o[ F+}QwCef#/SZO &$W/Қpy wHJ&ALV?}d2\n&g:9 K{zg~&F*F%:]BVBq+hw~ 9XS$Bȫ!4zFQheu"}&(?(l(g4i Չ8q~"Dg}NR{PAIUG"=(IjSAd/μmܫХӉ _sn@=YK+1ؒx}ef9n^jփXL"(-EfvEi p=xxf`TO,- i'ǩ{5׻d@r 粀nAj"FȺt ~<ڀJTm8Ҁ7qqcI=yf<HQ61`?þfls8#c;2d}Y W6 U*mnvXK xՔטbv$.q@ *~u.n=¶4>ri<샽f& ?6^)1oh~tq}QX=^,*m5tv<)[^ ;K Y,Rw!&-stveF^u(y0͵Lj^w%nZ5X̿Œ/Adfue+uf#1< '_Ox_.]Ĕ[Sw>828>_GE( :o17m=V3V?UT7V~[BPXxD^$h;P d^ݵ_/aAh7@xO6C{Bg7hDJj#r&22oVeM+ ?rK&aG>t݌ Vg @}n)}lj^e3,fv+,sw]&)B]Dz+;9Y*JKZ1wUKwP-x X \%+/%cg=fltP[~9#:dyBi-s?\ܠJV¿e 鴙Eid ac: $QVW ?iDD%@N%-Jќ- D+rDi#,J!xqT)/Un׎ah^=~A%^_g<"mH6N n=!zߵAMV^);޵hGW*<"-lg KhK7 ?Bf%!}Ýz&egعc=mP&\t*PHVHAG-T/ TӖcb "}K.W;ecf_r`ɫ9#QCI<+5iM-T ײ)*Եԍwa%.[j5;bv(#wS/c `A m C ~s{=Fi>/>eb3>I(uD "Xګ`փ he @՗OI" HT'0t7MjuKŸOէM\3;{''!(H]Gx8it%FNs }Gzn,'  Ld&2Ȭ ʌzA_oUwgTR]{Wծo5\An44f[X@QMopb\L1yݐ8"4;2-He+!ȸiqwHS@RхYi3f`&.J糩!5<% ;Am|?ԃ/tI% V?)df4dw @Q})@9_sG 9c^Hb${ڌ zO24)1\B3|HIi^ټ^z`HGuQ煁|fG XH"ˊ O=Џ&2O&vh-"O9Ӑ<)ydn}U/U' wo ~4bB4#d 2.Ґ p+ݢSp "]ӹ^&;LiMVxhq6S`#ұ0[h{Sb}g%k]Q[vvw CvE=|HL2\V$ФQ' ]y)M72r(./0zL+jĵ@EFX\֡_xZ>Hp( 6؝:`wxjS^]Zfy=S fYh)ZXr{Irw4'=l<ǠLy)&"PVĪ51q[4`)huƛ$3M& ʪX٭U&##m-2VФG[ͥ'_jXf`ޚTq S.+̅z.\Qߚ}ScI?IK8 ]#Ѕ<,˟Յre3%Yfv>o٫}_.L+W*EB|/t bd,pNzehaQ5cY%M.Ѽ| }}+Zx3w8s^%\ŝ{@%1#EIۦηõZ?,Lv!afZܽb桬>Ziq/I;htEM5GzT;8!~|\9NӰnѐ|VEνmQEddP<,Ǡ2>C5i\`՟$‹6ZݽQi%=1V1Kϕ s܉-IFj$~ ,Y!`fɺaJS!6ޙWl"XLkcfAuCf=zh=`h;iz$ztDFIW'wh' dYM ς;Ex&cWd/v706QJEL^hӯnxije]FlS=膌 @G 7˔e?`In,kw3C]MaloOфwy GəZL究r̦yوK?]B6vk%ws֭z`7G L0H,tc+&7,uA&Ms@Ŧ'Ӓ9$O.BV!(1%ULh6jY6ZK0,8wt|q3ZO535 ҏLQ4<%`3VtչllPT&F^z_KP~sɌ.T0Np|aU1ð aVFJBEԔ MĖjkm:N*|ogb1%A{AK432KQ=f0: Á.~?Aspžuq&rts3 _wa:пq`6*\'1^9s谣w 6X} zGI' VZJ?Dy_ګt$ ?AC *}pȀ`0  8FČofQ% {6EwvV_f}wkK?p řn)._[7eai.gMxv篦x7 ~-t*id^SOx{轇5}/tgz.sp,\9Pmt;pyMSgМ kX\a>v?ڍ;s6_|dCYޗꇱũCyM={F v|fU|}1 7*a78;x^fwouכ}u ;x?:3OQ /5eyph/`]%-e/`O4_/y{}_]i}}]jν}O.MUZv׮:o2n^Ǜuh @5}n#o=ʎ5x:`Ctm 6x:ބ/-moO^#_{y@z rsxɔwH$x^;YdNG[c:ڿ!_ɔ'^<fۍgwm+P,'x.x1r{l^o=gad~̻\zoC+(zN6ͷţSpzPt B,9V-t&<婗ID3^W~l,}`gf."tɟi&3@m:ӯK7'׽ T@<ܢ,?5.eܦ\)xQ(]?N^7et4K'~G:R:fНI 6|PDIh:{6Sk-y,| 2nn')diSNu"%R2uD:nR&і봮JH,$IhZb@WR A14HCMZA@(e&h5WX9$(1ҹ~L'8%R{eˮ@q"xz"=ˈ6 -v0eyxdUcP{7qi |N *"%Bgh|6hhz"ֽ᝱3Qxyy 3htOpL,f^ `(f|c&Z:K,.kRHmʗ¬`%F$w ^X,YGs&sU2Bś$ SeD~sfQ0}3< 3` g:ce 025.QddfSO<!`SJ吡 Bsy|UEHA <[A5B(<_GBMT:@$ ش$R[DbS(w+0Ҧ1{Ig!!(' 0wA4nX!+RV `FKN x=h1IE=kr . EoDV2XfOp4}_܃yq=|3=pEz;QS]ZNʏg#4nh)2O%_ΩVy^t:'1$(iuL1Qfڥ+h fHS0Ba?miaJ` )fZc`8$LcHFi"uyRd,JpfmA`(X/GIaUE5` g.B\|xxǓ|B>R;$Zu*V,]!5ӆieZiGVqniR`U̴2L8ӂӂ 1b Q8)٣H>.FhyuAb J"(" jE!Gr}**GkWv0kIMFUp MmTQ1 4XiOQsC-S; `^Q0Ƹ V:ꅱQz5[k,_ 1P` щ/+9#ЈhN(x$'t#~3z)=wL .3]AQY85U Au-Q8@Gq8_ vइKI]N_ (à[8rG&p>*PaBq¬Q(Eb8Z\_!F`>Ny)>E!E9Eʼne yy%%@b`*g䗃DZ`UU]x ٽ endstream endobj 25 0 obj <>stream HWnܸ~#@ H(k6" =j4D'ާGqF3{ذ%!/WקqSoA]իjh3wu=CgHߟ,XPs]_͙aYYjUw'oۺԍAzsOS4r894f՚#]>;d_8v?0\Ў[C{3tGwYJUEH{ex:ځ&? $,&وC겺't3d۵˜q0$Vd@0̦rB )Hka8wn>5~ܵ6K 3ljnLWëzM׎u^ۻ 1p+oc5h\'UӮeBxZ?=UqK͛G]#3?V}U-2go+W 9:>R\ hx;Xp\gv{-WѹI7Mֳ߳f;D5$\66A-Z[g֞*ӍZdlƚF^otD2#yU'6fy_vl7{z9<zVxƞ~g2&9pa6Z=qYcs7)qu_-μ}nW:|G2 tn>}IlrQ~{)Ue:G6:RF9O҈ *iLҌ`1ƙ|؎pJ,c9+8sq<< Oys^xc</"OxҋK˽§>—~'~g~Nǀ^AQ IYEHC 00 E(8L4<,"G^GAFHFqDiEyT*D("!HD*2BR$e CI!e"S\NLc؋88E,8N4<.'^'A&Q"IIIҔ!blsXQTHx'H pԉE4,PKQCj T5BmwPfF/W͎||`b(~{ 2H.9 `Ig1}Wdɖ_\ߞm֙˛nx>==M'Oө/~~:'^ǘ?f.oYTPjn9 w{\=w[a憩g1^Qrvܺ=Ej-7.s1bp>WxY@:ƎAkH]۲L+:YL$2,)3xbXW,Rj=Ӳh 9l5&΂Mj;Zvӱ?C)…\ڊѥ1݆DKČ!c)lib+:Ϙ0͈3EMf,vİK,`W)$33 k7I6l>kPw5WSsr(2+TXRW̺JJ(IH-%CLq "Ke2R IUJ"d-tY2>񽑙]fY\e'&LV4SII6J&ϤeNM2'ѢE.¦Ǭfo[UK bhވ٣Ih6fAu|5]GcU E}Uۢ$ :NF<voSzZi_e$Cg2ڌ8%u:0? @OM!I1cǀwcǀBFKG["Ӳ88w-8?:jiN/o+yƸ7//hO_Ӊtwo??ק5|Zyc5<{ӏN)ppt]ovu6Ǧ.ʃG?r{Ɵc>u0x '!6-EzMBGtQThnFETR*TRJeaJ=( 37 aIr :]975M54ZhmƲ8v% ,WJ%t$# G˚bdaC,#aפ^5hZ-Nf0 xZWGKM˔VqGfE/*h]\ZMEjBBX] NEVlYĆe!0S9$ SrFlunw!=oκ޵7;aJ)V979.qIcy~\}զg]g)vJXQryn%zg_7zsξ\l0 3TgpK;hvdzqK{!߸r[^7'e>$pJ)D21R0hX5$#& e1GYFh іAdCu`!͈LkpJ 0 z~ 9;܁>}%d?$& P uj8T,vdKvE +a@erCמupS{-POM0u >aꄑmE{!vCa=Ԃ*bŚEQEQKcdqr#Qw?#%He3fFX#]İo-7h^埖1\\|?^;=\z>SnfY g6{^‹.qjۑ6_Џ5x<<+0 Cae9H9EH6{zLAaM갫NU;q%2)l,Z+7Q+׮Wh_zN%q [LJTj(ImkmZ.#@~ASI 1b!z6iCΐ1 1!n 63hA ;o!kj1^zᅻ3N.8<뜳C%#K8a/ 9}8P2=n,%!‚s 3" 5Oj@&Jm)R4NRK=AaJO3orYN=3uZms=Tz.^pV7ޱ{oyթ뵹$Hz5EJ)A\e?\McC'JO;و"OZ4*Jv~rFSpr8N%!I#Ztb,SS= U&c⹧┘h )3z& C"KDdR /D]h`M,T+ fVL2:;'zS3ؘy@iut[քӖo+6tFjӚk"ڽ$eOՕoΟsLj\B'V)uRVʕ=gWίa9ǸL˹T=W毳/_J.N/ )w1Yewv'MWqCEK`=զ7.t =会KjO 6>׷eHi'7ӱbǽ\yp<\m1xׯF1v ^}gϺaz;/߼wo_57s0N>JrWW+f3?Aoշb]ZdK-k+Ur]R|]@]93j>YE4r(. 9ҁ F5G<;ڋHg/J9+XHTTi< +Xt\b䢽 jPX,i爥C5Cq70ܻ:(.,݌HYP+`Fyp8Hnw>]YFE`虸hgU k&j靫A]3`AdH"C(q!q,rt=BbɈ8QKF*!e<o irը"֋ERŌ_0)XT SP8kڣ#3':O,l@c94ݢ1XT"s!O(S%*"o&YUi9 OP뀱ZdƮ.ٟipuL9ۨO,x/1(:' -93E1D)rQMU$DA:Oҫ}ENVEeCX:f`f}ΠB䙠6ʺSu (PÌg"#6S%*|țIV@@oұ+g|]wb?=a}u zʂuNB#S ;@l~6|z u=خ 'Hbctj 0tG`zV /C[5o5ف<\:(V<^Iߊ\nݽW[E{EY"d;5.O6XY95)S1U] Z"G `u]91fsL` 4_ 0cdѮHMU]jxZ7']Mwp2k٥1we] uf*n\7LuIb?;EvhrX^{aBd J.OLG9Mހ=H˒< 6`o vŅXk w ]\v|aO,5R[2Yyex~J`CZ7A0na ~mXr vls1THM2r.OC #6- ֫fc~ #p\)\P"%=(AkЃ?L+z>NM];o=XCQx_^Bio:62ت-؛n}z I;3hqu 圗HKLಿ#3mtZOb4G<$5alߺasBiqG\$6{wIWgg$ᰜݽMF'=[m-X7 4^ HRM_2]Hޭiʘ zyBI gPc (RSL"ta]OiY;kT 6au»UK!&[ mu\ .E`5LiQ7]O Jl:é$[όqhֵ=& 'BF!37m(;aT4ydLFĔsDYkHW [ kVXR$,{2טul|Trɼt_!zZӈji6jr;=QsYXHQau Ⱥ)S?9,rFA fMz*?5Skڔ'wjRv %7/ e5x쓗C#Idp0 &H !tZyxƘRgѫ Dl;9:,^>alo|?ork"o+{'[AZmmq*`6HWGMrJW:w@2P ́.0@xKz+m򐡛uj >/԰wd˵NTӄF_$.EO4w<@٣DD&bz]@~ncwhhjY0td1}) 7ϟܙ$ٙP)P ;PZ^,PHqoOgxQُ!gn#{CUE T-Y6ݯM=-l?o ɜAR"6VuQ49je9F Ca|g6I) 4PQEM_fo**hr<W-,ﳽ*賃@55l"#~рzfL]T[໖[ZcH6J /rF0d1$^7;LgQhXۿ# #v?T}3@N:Jzj)23@fnN-[FD 'jԌTϢRvo %A6.|kbdL>sc #.\ V ;pgG]cD95?_0Tg(鄷+\0'v\odz'oN:U1+s A/%Q3L8ϺS*fgfՉk_!q7$/ f>;ȸvOĊ99Rug -?Ix 6+`5(ZO~gOv/MB=7Li%9ՁX+9yNump zN6HzI3yApQ9e<Èuy%a8bREqF[PȬxNo _B׽0H- 六њ_$z Pڈԣ^)MC8յO Gzt&D.-?fV`6%m"vJ A*% Whb!koN?k2+NUڹ[E>~ gߩݶξKz,Sa0T-I2#X+D -H {sAO v}!"x̟<88ZO @jwTۥo6^ އih/(ɠ} .*r,\H. d$gת0-ڍYM'FBzy {oE5SUV]USg_F72`0UU^2ق$DmeaV/@zCв]v(<4Ѵy>sjZ~XU-6Acc: ^KC[އYA6kɡu>\~A[~mLf+툙z]ve2ࣉmGt PFW góА>XURVΡN=M-rߡ<(es IĽmMyoR8`k<94b̋~Q_9x?a~µѽ἗2k^gKM#sso4 SUN}iS>ٔ`=7`Ra,o(Bn"k{"C*\Q_gэ nm%pAJ4ī5L+U/d^N#3Պ^_]z[ \UVJpZ[ {Pk+bòNѯ0|E? ׮;~v]}$dP]5ޝ Q { nax?*zkYklÖκp\iCg;wL el_>ߟj#/( {2|{ 5I) Rj%l!a@_b8ך4BNt^XSb|84BN n;ƿG+Cu[d%NO_.^kNU`V;b#5VqCcKՄݵ\s0]ծ3hʶ򼳸Ϣ$ʎI!/ mUrgK-SV=Λ{$diI>vQڢN {@6\h_5]ڸU>zH\׈;I*tɟ`C\r3ep%Xby\(wfƏu]7{euK`Ì$20V^ 8t ·K9ЁcCjLU'O^&HZW.Z:ċj"DxE)DB`?o7jo{?=w&5#npt0 h% $q9p!N9 Sw6'UKE{ڃ ?I׻liDͥUӿ~oL}ҹkc T bhg*7񱹤^-*K}u),RA-vb)E4JNDXE7#e;{_x#vRcKMcfRpMN˽S] x^OV=O4IDΎHOb!MXm*rBD?P1sN QT`s&1'm7uA~G綹Oq3(d1Ve7z=cJ@/\Z՝S(!F)HQ~"w.lpYo{sf1 >'dꂑ_ 8vʟօ Al:2{EV C JY&XF6K2:is{M6\*$ֿY ~,2V\;2='OF!CV%^Z8_u}/IX>&Ssb|/q幰?H#l'ƅJ,p4VĹB{ ԧ3dhj]5 98Vl2Vd,qWȞ.Cw3ofXM߮N0 &}m4qpVqWǖX"xo??c{`j: *T9X X./ ™Q 0" /_$30vu3aD Ͻɨ]||jV)<, +Wj,% o$`Zz³]stw%0 P첨_!;-,)Zg?jc%sghVXɪ6w%eTi yZ2=dI:@u, !M3o-~ Um7~iuv»۠$թ^IGFfzK| 5\rn9JZ]DU8/8S';-M0aooWsz>:G/3[Q rdN#4>_:uƃj;vXm¸I<pd1,O? j]Aט3ݖ/mlf MkҨrh|p~a0aXOP'vpb˦Xe.‡9bՎmװTuB8$O;a~X-7w x+ gC\IBRmOمz`;)^#ɼv?$b#نJĶc!p7;xaa WǙKvî|Ia%^g1Y)m^NFtOu@ 6 @@3zU0$'*JQ_ylP- =BXS"K>ʤ]z*OCf_˴)ϪeNê|)VI)MVZM k쁸7,*fh؂We4hت6"_-u7`#逾;*kdJQGq oeqS^2%i@ ubu3v8}{Sc/]/A[FpΘv$ף̛ k!%8ӕTDTZSO9BhQ6L4LYOP5*l_Iov/mɆ¿+e7N-"X$i0.60K|ƄĽ:0,CN<`f s-:n(Gb 8L4舖K' )- k!VɽAg{nIQWD@(OWX0]&"!OY>@_"AK27%3Wp5[k=Ej)Plh!veMN|8Dzi*Yҗ\z[n| dxdfa/=wq'͢YR`gt>A:p9= ~o=3>uAp]#*I3@4 |gA&ʂ/UxRH5H\WUh(q^vv$ i3`gslA}GmPE'j=~2-V>7lWqZ1;yգ "hh}ZT0P}"B*BlDrg匳 }YMpЕ cSS\DoB¢..$dDGL#B\qDӮ=N?_70Gg7[㢗Dc7E; 15`~ ):󦼞 @v %&x.9ĐD2ށkM [`5k{]@oIgJ:m>/0&2)p~j[캁_0p^I ú_& 'lLg <8vL>%a0twKZkI*e /K9`tN8Mo8Ű$>z_p. !Yjn-N;Xinr hfU %='!\t Dɒ)_<m CDFi}|>$z7="}^b{RhY%8|Hzͤ1o ;VXvwQxv[g\>[wcEcqU!+_e]V u808hCrc<U^Gʌ6Z1t;+4GL勔eO{2y ?`g}9ma85)vz񒴛]:G39IrI-UҼD39I+\9)>d%SX.18'&;џ rNsR8%iŒԞfFKiR>W!Nu=3 ,SݧSkys!mkCK:|Kqյ^YMzÅ [vq Q)\(pnvC?ՁܬQAlٵ$LxАEE b.++kIC]a[3h`Bg ǎDkZTX5+3JmMqȓN[Eqf3ޣ$qH&lg?.ͥsgr*&R,iaXNwn|v So/ jdύ8:r4Z 6q^ ǯUt*rYb>VCzd,e1q- P`-`HBl8w)њd]dyZ_ [\e @͡@`?eTFĵ^ʕ8ǩQ_'*bܑ H3$ߒc2Β#ҺvAi`A$lx>& %.1OdžKG4a&#)bLKv;xKUl qlFyU'4Px$s@NO0?%@ITWQZʻnEpn=-uyZFSJWvU[kE{NVWmP1VH! |:Ǭҿ<,ʋm(Fܡ7K6KiE{`*jg=]%W=#;ͫHCl/Z1~qIQЍrh&U4Rˀ%0A B8QaH.|;s|9CឨKOoDEh`TTSl龮uDad4&it 0vN#!l6QKֆ@س/0;F7sv2#~="{jeU4ZwƁ9]zڧUBqOevBpSX]>ȱ$ᏋR:,ٖl@ P {҂ o¶Vҋ\g9$Z孂hi4P11jiepJ{43R`7ug.EI0L]lqq}R38 9sfj= ?Li>^TyP}!Xm8i~*=L08#\]}[2X#2r)0ղ ltO`VAX/s6BA5(bXjO_V\2ٞZW'|#T/a6x/vAr$UB|=Iov"̾<.Nw?ǯ??~|>}߼ 7-ނ߀~۟n->ʷy< ]Lg?v C x&` &ȇ'(t0>|2Z7?ykSJRH/)ı(tSq:6bBԱVdBZZzhd endstream endobj 26 0 obj <>stream HW9e <ܡlE=c9䕩 $|uX &7;UM0U68_b})e  F39\2_BaT mL/ffޠ4לnfБ Cx_1gWصgR[Oan`5&= ۬΢XO~juC5Tǯ q,jnbFFu2&3y^pH͹!|Ȏ ^xҘ%Hs!J[z-n Y&q|+P᳎Cmu|H64WzvAW|U3E_9=nQD͙ #k>̘범.g)'쁕yP#<7(P%t@Zp Ƅf [lշNo`af_:U S>d>@2 lmZ!Jğ$q (}Wy_?ΚSou'[[قr a(&1\(5ƍ~ @)aS7&lRd UFc86#Vz3:]VgͽRżfzzIyUVO[fpڨvf+]P14 5NHLi: dl_9;Cby:+RɛA)]f%,:"^Rn;*,^`ݳ/ݹlWv`)gg1IsX[$.QnrV_0;Ӆ(8k)PJk쇥l'V!jm'JYؤ%`gvڥ-j v S fw,]}V`W6L}O`a /F %f=k.썴mtg&fV{$ ʷ>:e7џ'aerPF?'@&,Xv@> &~ u g-s ͇cWO+Ŵb8* aZpYBNɞ!aG%qf_%BcD$h\)pVYFXMsvbATlN4!!Cg{0{UR#Elz%dȣlzc8"Vkc>Ddi WFDd{:n *ٺzc{ՎJV{sķÛvogvug>$KҊn'-ͼ0IIyLcšI @Zhig Y=ʰr0}nr`6Ax°VV֢Fj7 SFxeկ`kFLaQ+ Z:}Fصͪ9>Oe j\iSh),K>iid7jR{Q%vnjb\Ԓ)`tzbg}+ '2ЈS(-G\J3V\K*o;!8Xuo=yR=)BZ=B˦:^S].d(U]KT1lX CUg*75Y+iwf3^sԗ UOcY߁WS]Nz:N4N? 4asyOҜ|K%Ӊo?Sw񾿼fF7Jߙkt6'a]h \[P5I /k3 𶙲0e 6'<] >؛^C\pBǟ[6`2?`! X]LՇfeZ#SvMTv; Uؠp;Z{1S"wm{2#`it",D9aF4 2XOs\'ryi>RY`\-+>q6L0{cی}3F_˖"h/ǣ,\֌o;٢Av;A "ŭpU8VbY|Vd55 ^Gm3<&,?QǤͿ;nʱdGAj<~Y -[N` \·uUS4J}WQ[,T#ժVUF04 JM Upml QEǸͮKV=|iKt o8f" [߳U1kgQM +[q2(ƣƕgI'Nr۲όNםgC-δGshVm0kbbY$':"G%rpI k|ZR_\kEWBh֖ :m[; {[{mٵ%&'𜍠z`=weS^wtAVA(@_ivZj)fUax 3sh-2`N,jM%͕"i=Zqpw_"gxsp_]S˕K+f  / jMk{*M VWkS0ґ/+JfX}s*8!tw.5jfE2C_͌aױ\`Sebp ЛIJ1AvIR.3\jU5Y̙pIUYa-TަlmLavRsiNB;ٹU]7Umj*H2kmӛqdTX9x__lpŸmU}\fPԍ }W!IrQV5X8,~X;fgZq\J%,&ݵ7,Q=k]X-ݿ>ىЄ8NF'cIwd1z¥.~#h\a^zn~kX[ٙD[lOhsQͽ'ī x-yv.bcV ,F|Fh8jj{}C%w#߹Ɠ5\覊.ى^ZG%kft y!,VX'iK, /]g)|_< ы_{Z&Tx69UF{7H. y)v9[B 8|e֧+6Z4[>Msߨ6U7}P. SC0™ddhz>ߌ>64E M}Դ$0C*( o2zlu(zHW˃&=pf 4NY4`s,ADzJ#@ڟ|5}, %ٵAmZI^;ǨTiXb.6Bo_%د}d򴺮}7D9Oz5 ^@L%5tSNK,$Se JO΃'q^[u?//e(lxtr 9^Z_F3=&ݶ/n98Ph:ݤҎZauWRToAQN_^)Ouq9 l#.d<ͧ#uƒD r)ڹMt-h.P8N uv;=W]ѡwOՠEE%{;<;z;Oz̵4c _Nh| ws" ni`B(޺fʧ^ߠ|mW.=v q n @q5g,NS1B교(w=:"{~ c}s9480R_v O ks XYƅ$M% K Ѭ)TAop.=> wƅYCE>m3q|#<2ǴL@+N GnڳZX/$ 6˵?Me2p@X:+)14!^DS(%o]a1|;^p.gILNmq J01OFStU3@Ru`^z#s4y#ڑG6B-Tle2rnSx:RԻnS{8U<=p5F[ǺjC뷈 ֕QnC_?ǞK廠 `zU13΂/sfa=U * ܧι)L)'~0ή#;Ȁ,jc=&y`"a|HIzrЛJdLc_ ڋ9 bc$u=;eq6+vX^o(֌> "YZ&3 *waN͊lܠV!ᩃ:rx4f[L4B ΰ[>l1cp62Ĩ@E+ X3a6w~^oWYFu8;EEs%8bx; a,EϓU0,KƎwA^1+/&;4&7}sQr&=@)!֭NT>m_NFYw/H6>V=Or%؃v;\} 3B߃y[A[Fx1ZFgϢ/385;lUOpA{/AQRĦvWrvGMH?fnHj2I BZfYĻ8-lIZct?M,/ UHW4JrXgX>Ek)_C)$B{&y"SzX] O}AvHRŅnzn?#Aqcs`_R1XtÄxزrB!(ő).e@t9`5!ī18t t|ٵlSg:q^NwUͅ礯D0>< UE-N۝91%*ʠq7S^TM^robT&#$t(lϖ3 QКc'8M)MS{QDYFLeHa$ E @_2M+X돭22|G0JB|Gva_Q0[2OC&Nz6Xn4 `s^ޓwcTZ UŻ1MÃMZt'\ ªs2]A\FO=4^l'](^A[\ܝeQaiߟ #jAp,e]cd\Ag$0;XVc Ys s"tՙ!~ª7u|sI-`h Hr$JtmR~pm#d6ӄZsDpGxc /q?-v-y~ގ@)#m"7hNɌ t `*3i8Dpaxq 7"vz"XMfY2Vaxňh n]I'HPB!/u}r:ul#>ĽKe!H{Ϫg ߆Mo쨸*n6vq CArh17Hز#5%pv8 taէT۞' _}MXGPY4&W-  ?OESOT_;jK DY{tk]'M=Ha\/Ua8?#hC,hJpzxC;*qpLiIG/Q.& A*$R2F~ n2轪<:V^K-7?wV~O9*X8=AEmx9|udzmkq08T 6Bm R "Eޛ/ԊҠZ;VACNb2Yvě%}g ´ Ra08Nl8l2j$nN:-MSK&|'\M dE|Ur`9b8\HՉ 묓=&QQ8zvIH &'86g%Pi:I vO&T`Oi~IJ 4۝s2˧5i}"[ cr-^]ʤRS˴!e"X<|Iֵdo@prd>O0,tdcX %aQc!L@'Ph{#>Y>S̩x;4`,虶>s;֦3%Rw~ sC^ l+# #QbD H/(d6øSvظNx6/_8L,ʚ5كQpYzƴlb|sJ5%G~`gy1*+]vIO{mqd0kk:|*3TZ&21l N>2d$2\:{RNVE45F&-&5^d6^sX쿿߀^+ppM&dLUIc$д\~q9͠YR쁝81\RhmyMOX?U%~bi 3ƫW4q'~yCKGj),_-@1^"uNJz@xQ&2sxJ~&I_;](8|֓Z5Qox?c'i9H' qw8m+y۪9k~s~b̮gG*U d.>!/;jR{<2#"XGj߽L0EǍrx[5X[OhR-&okfWЅg$f l˚ڶCxӻ h͚lWɕ%7 9LڨkP5|VQD>۩Ueqf?/8=`g1.ْJV(/|eЫ(y\,NfSc@p4U?Yxnuyς7es4G؊~H菖02DBR*&h0㊗P'W=?ORzThw(v> =#()}E  0J|n Lw 0yg]&LQGvYCFoP{$fqb1E^Fr_rK 6wP%M9Cz*PhUW4]z!b5eǷ&ݦ'ㅿ%߬]?[:?}^d]&'U&:NpW30 ܬ]z9,XΜNˏMj<g" —٥9۹XO kc^S;E !կs$f/qv֩ R c|* `#e)ISλZѣn'pOS lIh+R^)8$FwNYitV UG9P}j1iO@q4dp# `kFv(ʫ얓 {D9 LcUJ6Vrw GtnU [xVC W2 Z?`ՐESs%VbD"ڑ,\o"I[ [x=S|A {9us,Xêm2^¸>idϷ&G\ظ`c \Z8.IhzV#瑁ZKղm: ɊZ%x6wH5њ^TSq'Ѡazi@BmIt8yzpP7cqr-yp[dIQnmJNk0ǚ52Ve ׏R (X-Co3Vbߓs&h!L~:Upd.tQ"+=:0ԯ=ySwՙE_?cL`CS- pꟌkb>-u%+_PT4zT5 [zu]WEkmj :XNQ"G'zlր3=1 |U-A1^b˃c N2FUb( MfQE}ȟ䖘$TU lɯ ϖ'z |d蘀*=hhYW'xHfB?KSZ G E ,Y\Ghcecj0^(m<[֐Up'|)DQπ1y06Km`x)ީ\.x5A| WYmTEakbp_'^_zc!J'FKcGոb>4Fp֥}8ETi pr :Ƴbԍ1+R,wT 򖕗u`co}[?(b,-b;u1v\a S}&Ԏ*נHFWM061(Nl)JA\TxV;*ᔾizˀh)wzTvh% 4sS' \qPGuAVGQouKTǭOG*VU?\֚!5jQMw%^!\fANKHUQÖVTŰg㈷m] B^D_og+ǏV[u) e]x]#h:+U2(̇NV"ٛ %4mfkY2!8<ѷZjcq`VB.*-z9,.o'5x.S:O\C,6x8~`b a]sFU1}z6c]p)֥Z5/ iBT̲ az)rv>ڬL:0 F*Jo&R3Yi8s- [NG|tI6/[ݛ?9pW/ ]`+őp%Íw, ɽB!Pg%VftX@SJfleOJϣ \-X26Oe^ y"*<T04+wohFLuHmY,"%~G׋(gדO̊M]#gxUY𗮟`M+^bVBAJNȸ;LafEkcGI;(,eh_ ܥ"6o) *kSn'kY1o?vs3Mīn2|0xNf7l_Sf R9H@cmjGe@`ㆢ="Xj ЎI@\('/ ,8ՙk}f?vt -@K{~E?Z HaN5 DaSvruV~FOc(Xc8V.xx( ?|yp6yzmʌ)׃s6 !7YRɕ h/vOV*}Vīif )UE {zH&!ⱹ;)slwe;-q HCN'1Z@!TsM\g%DYi3-L΍T%zA cm?h !mŜ-`}(XE~-1<=tKcTM-;J+GkOI9CHl9!kn,QhMfN47},kزMo_ǴzXQ0DM :*-KgǢEcj&~ ('F&l wP쯿,[1|T~$WzJ:u[.Aȭ3D^Oʮ WhwCǝ뽕Ezd $Yjjg¦ae$7RHпpklIxđ˛ 9yvj֖K guam]~iHm~Mr7%؇VY3:M-*sZme9 L=G}f(u%g裥ܓ#Biw-+Ҁ7ID$.>wI%gGq> cjfrȶFnF^wI\[U+w MX5 @<'-tpS<0|ysקL0+3[Q}eM!uK%7Vrx^dn=Jbm.>EU+E7 Yv'Zq[/dEȋbo+PϏM{v׆ź`j(^p]֛<#H`pvX3Wa|IR;(fXm13¸\y% }WaW{9]΂.)Z# 0*<*nW^̕@ǔ4.pPyZSazdc?(+w<2no׾Ya.:g[,$sR~>_dbbY Q/7+T|e?6*Kry+Klͥp4ǀ.aO18e\UsKnA P7Lq铓p2Fa,4R@wo]wZ0k4ze dNr6.%{|q,m14̮dc22inAcB qONFe^6,C;SԿ+&*%;f7(gQ#F^C=#@S -}8+"V|ȕHLòWnugPJOxUB#)4C1Ơa:z?tۡ^3yrKWJͳF'ǽSz=54j3#[y] ޴Fv^Z$ Uڙ7NoUA ĪޛBij+=61ͩ0j* P_ Ojr!ߘ>=?NKDbmO9ŢylcdNa 4ҲwK0]˿҂k=sll'seP%V69@vͥ'sBX秫s._6Z U_\DzRkTF0J*4s𘵰=-KFNx~Z0|mյ SBES6+Pj0tgAv,{ECw{ CrEYIM :n; ;m"^Ƿ"aW5]>/5%4Oz9F9I T 1U}IP~ c4v#O7_t?>'Ch(jO\=M26g1S+ص/:WFl؊-DA=;MwU.EԓٮdtEs'=օךb+fZ+`3!?,QG| t[ N9ȩP}I-щWO^] II!nco -/pE~RmWìc~oR.C8^8A0֠`{ϳAm,-y Y?*xCIarAxs\#6W+[sci;)-CpO/{,("}:gp6ۦ+? (^gPf7>TϿ|]mbi Ɠsg_ h.}{:w}KE삂^ Z(7s.ME'(O0?,/A^ >(.nci ȭA>%w52si)!`@wrov'47+'rB?)ܗ*\9 ܜy1MkV_úk+)N@|MQ]u0l+Y;~k^6&-FCQ Nq[af^[<l \0V nc/ၴ["(4McA\a( vm A^</Z[/8,>=VYJxװ| &5 Hh.+lV )wJϸ|A7/_Vքw8P0Fֽ_tmo uMj6 M̀w=VޜvTgcWr/g xNMᰇ(Gkv/w<1~Mũ~rRjtk=KXnZ .ݷĝtA];vwkm `P٠9>XNMQ5>I8]2 !%tVJ )ڬg u`qX/j a\ӁZu SW؂T\;dZ܉dF}~'kQ[X/߻bD;fU‰%-2;{rL,n46e`C,賥콉.G{l$uB X犹;CpNiϥ]90ºn>]vڅ˾Ko_ۋ9vƼRWLsMOs"`X^ ܲ:º[͂Oe'l9xxfJ,S/#ӘW9NO)wnl&ه'ދI\y~: ʾ84zF]s> >H 竼00kS*P[5CWdcfeHr]6jt.69u1Jqgu7Devp6Gw1٤: D ?YTvvzt\r{gS0Fnpb5cXS w'Ҳ*@9T%j`Kv)N~2R37L ? @:k'm!t1][l_b(}R6C˫Xa`Jz/J֪PhT I'[* dQd^)B0pZ}t}/c {:PW"eC!?MJ=16qWN-drQ{ $AFܱ.{!JHW7A,V qd3]_B91p'i=+^B? c$d஭[qkh2kґ܎Y֦#U<]T^q,)=[AP&m+M&8Tb *y\oTxwO̓b> [W6o1 I`, 6ybJXv`_v-Jy:v-cp*k+$+F'pV[>)ߺ^M@ekнVºMM 5B)~ņAd~ێL{_;l?iϮi? J-LVߒ5rM%/B pGUF H{jeo>pp͐ kKpMva+F?͆oX&p0u?B< l׷xoS\ endstream endobj 27 0 obj <>stream H|W٪]%`?]Cף-򐠐0LXgܫ!IWKWװz^-r9uZs^?L|l4pr0PEn٠ՠ< >{"2kX4 pS0m of2T],*xUThLԖ_E>8ⱝf8m|GB7lt`8YN|<ϡQ9\l'Y REyaGnjM-šq8'M $[tZ71&U0 Dr0L?<^WiamMXQi9 \xSWَMrW-, [|Szuo*VwZTm^xP G}u`!' kj6ƺVg0;S = mUh0>iP>gSs\eHsv"v@s(]8w75jm}\]`@ޖuE'ўܠ! vUyYP|7Ou#Ǎ.C;:MSVc+ml{/mj "-?oz4yj BۣjLDżnRyoz==>`H7-BrJD 'opBydt8]`V",Fb \Ko=-4 rW콋,AX!tjD3ࣣqࣤҒB[NOᇧ緷Owo}ݗ?雟w~W}Y?ק_Fz__~:n߅域^6-ޫj5pGт~h*3'pDŃC/0*`;Q1)0+̟H2@4C _`7y7yD@l̡c&8}bMbp dgcf *+6y༦U9`7/̱ŖGQ,&{P*]}4Uiǒ6UW (n> gdz$1 ?jMTn[ F8g &LY2 "UMj y}0b a!u-,##@\=5DT ޔ\]ce+p\ IC5 CF5tvmL倣&auQ{ǁ,=[(GK7 \R Ea.뺘`[E59e@ Q1Xgؕz&ܵe<{Gvb Sb){E3 66[q>Εs~v1uؚk,`H[nfOE۪ vڃKJ/KI5v>Y4}x֝.l}L m#֎)6T`qlEmq=UIK']=χ# Pxɕk95!*{\U=Ps2ھ.ñ6[~`FX`u5zw5S_JbE룷mE"stGm-HFr_Jrv7@v@v(PF̊YB A15Guh"z*[uׂVO׍Z_eͦ "Ƥ 8sؗ] Cω^rB ɣr b40Q4`f={.e^"58ѷCm5yTPyW'ё#}Ktq^b^$`Y|6Oˮ4[mxIr_0ki[<&4u`sQam6{ qQy`马mQ&Ḟ\,bcL8LxtY96s^QЈa~%?kw Q)0]ׅŻ\%5(U!ńi'SbϪI>Xr:77vlƩAl6r[?kx~0t'G6}TlX _Wd{xE42 CvsF%嚖*5޴=%n5J+]`ň WJȚYXj/"vM܀¤2o@bt?>`يARWNIVC*XipoGy'@:?&Ønb5(HL"@`IJ>hP$xc錑rŎ T]kQ%>[$Lt Zbθ3YqXN`Mr$j TNqr\R.6%IiHMC= Pz OPGi|BIa=A2$'iIe&}rt{ܢTFv )t0Ї! uet}dׇ& ъ!8$֚"1_P*z4/ˤ'6䧶7.2rQC$E蝗^}Eo,|X^>GM|sX6SVSdVQu,rW >_","5B)$[  &O, /g\_~})`(y]o eu69>t}|ZNF/> -0|(??V*ČRpeU |Ouݘ?),VW~AFA5+rIO%5R!b$]bL2\0R89U b`Lai ^Lz&JC&B-NZAKцU3Gs Q@66NzbL<2H7S+BqA@T @rK"4vL} ϢLi|/l'g5"-x61*Bڀx `KQ|`RSj*Z+KdvVH!J2%'UrNdOuj1M.AY.EU &2N]\X N2f' GMZ@LUKVIR"1)B6%QnŃm)HP/K7ދdgU h"{Hg1B'i[zV@8|Av@5_`,}YX%+$(xB4"@xJŮUEL1-xkRR"W4ŨG^+_XY]H=tDTh%]OmT3w& zia}[a욨JyjM DSj ;\򴀍 [)Xu\k ΎwP I06zѮADXJ}WT0V)]W$~#?jaǐ);Φ2Yjhd#aР:/Ngz7EJ~S2c&4^Be0QX vK0[IK맘kk%TfGyL> v,m 4F)-ٔeBb`Ko9"5(Y(E*K.Q>)?`EfnP7Y(rF> ƘD9kH"j5N,=1mKHm& $E(((>Do, +ylX-,_ZpV6"ස?/8=׫04Hu.v#w/5?qˋi>8cãw;|bo?}_=.}_h7Ys y;? m䆣 {0\M30FYWWzhVt ?7^ɪoVp&Q~3_9+Ew36mj~c̑ԤJb3l]B7ܮs'nqb٭a.vtC͞ɜt~;iM5uX"n8'f ψ֗] /xLumGCLB^?ˡdlw"M)JMwpLQfR)f џ s!ѻs A \q[BA*h.SU.Am[as^ig}PQPL(,Ydǟd@JF$\BT{lF Za.t'H&"{5y,cZI}(_aksKX[V^n]he,)i>VB>LKK 㿠Hq󯩙zqV"FVG-,3zǣ5m K~U*jX_"=Ϳ`THi,\u~񰖜 K˧V=(hÈRbĶLcJND8ک'|6T lym? J`BfA=OݾE~Q?,YȂ8$t}"r Hw\lxTF2m8p6U5 d]wZ!`\*K&r-N4 F!=:ohg=;:gXrz $".cZI+S K0Xsn0tNmD$bd硘}bhWX f\!p`xs w~d@X.ieSVR+cpPAto8p*+e "6 ݷ *\._(\+X+ =K6.Vv>stream Hn8? tӸ[ԿxchubDYl)RK/%C\kdwDX`&=gxΙˇ ^ȸՋ 4ǣ/ƛ֊͍I$٫]}^*S'F~t<}\,6O,_}ɄO&_#do~BΔ"c,` )1Iˆ8 B5qI y]^{Lyf(8$ ]mQZ˒hBIR h$&"E(~?,"ӡqE#yfg%$@Gʹ/bl0[d 9cS=VKE%'4kQ1'. B Ld8K'k8!2A9%(h <֌wi p<½+33A .dsg^-Kwy|0 w+^ ^{K\3/yRT1\QnA~7@ՖB+EFPx k]}ͬ5nAá> Y[ϸtp{]ĨF *PBr*Nc!*6~I(Xߡ )2d+ ,ԧ9R,N|(`BHRzY 5Q1/b_챵O:cS=VKE}iVעB?cn5y&7naZ )*2f7岆]ٟ` Jp K6 pղR@6` '$gρm놋S= `u2ں1ź `0+˗xZRq)5/ P/B=.u5ZS7J~ucpM 8ػ& ֽ: )2-1)R( 2 j.B`{|!2 K$cv m (\(Ie''@4ʣg< *`Oګɘ*Pw-lLX}uL|& R\ᦊ!QD1FT#*B[ ]9&idM޸@!ɳN\uy⍞(ʔ{g7Nl {'jWT--ߚc7\#8;_go??sx[s>R,*[N"ߨϥ}\>"txBAG.u/_ϾN/Wʺu$snwÙxg g&C $ڟ;FpThrn Gf(㛹:i!Rϵ ]XAؕ c3%}Y 4ג%gc5 ⳪%J4^q ]~es0\"K .0эBwdL@]cN2e[.] ;O5nL3W?R}/ Ѫ\SE*T<ucQ}iDrpqMPCJοQOK#|й|@ElGdzROjA4]bp*Pu5BA KDʅ_#GG}dҗC"+:C+tpk}}(7TDz,tH"6:U.pTf-PQFȪ oQ _شǯ%K_|~Ƈ"B7*~CMIF97m|ychs<}7ǝu4< dăP8*GT]WeM{j{__kP&,LB?Em-^Mξ'5=嶆e Ի*B."C ֺ?WT'Dt`}؞-Q#]t^mNM؆؜]4׀칦= aÅ\^ )VYL=É/{&O{}ڃd7?ķ:NPA\Zx&A^Q, ]VyzIq}VxqOm!Gx|wU~uDY`;,7WcJaj{۶/" dmiK HV Y^#vtW(xGn1IiSAlud}>m׃kW-1 m8(ލsU}50Prn,em ߭n#i1=[}`=y^S9}7 ?67ĦgJj]ڛaO9==KM[Ŷ=iKU﫤)bjۂE\FC+BɝcœM@cǼ%.Pm"8e,seX(~M3Ng߾2u˭ܡU<` JPmOcS,#:9'3n'gJj]DRÕ&H _<ⶣɨmp(*_!GlvbW侭h6UK8>q K$sEܩ#='I8vӿ8MVXXm)G=(3==1-<3_Vc!̆7KLq33zk@T(o{j/35.U{ 탷;1Aݮ|)EW?G8hfq7l`S8٩0c܎ ɆԋpS#*?Ą04<$!V"bE\ ł"BdR ?fq 5&_|@B!Qc!D2"=i_+0H A, &LO-tF~U˙i]q^C] ւsD)օ*) d"O0M Iʳ_ժQzZV_KU\j 1pL kO(Hg ;#ȋы2>{aˏNĒSkrǘFw S,e%5.E_,@gfhD9Cp=P"I0. c@$v$g, Ā_I"ՍGqL(!(@Y0 AQ{㉿/M} endstream endobj 29 0 obj <>stream HW˪d1}TG+I^jeVF\J FȪ>Ӄ[*+32"j-6]}k{toCbl.}mR*[6|=6wּ.ٮf+tV*mefP>,Z宣]}W6x||m~ͯǟ~_?o@6h_m_?÷~#~+.e.c/Uxl6|ߥ!8Sk F5ڐdHWZ#5/#?T4\h1t#/ y |h{ R*+<ĽCm/4ah>Ve=Y>OoiXPY/@*,Q)K"zZ\Ĺ'#&3-ƳPfR: "%!OD(z7DU4!L9>oUCs$v=d>PCqO:8]e$4IJۇD14qC;> ЫeV~a(1կ@|3Ɛ eyVfs/KXK%*I"gBBW9UY4^w`œ`[VF&c똝'f)MEk`\eq( > V3{I!P2PWltHO]-sXwctRw[f续󣠪O4"ٙ xSq1@ 7aMT\ҷ<5,S҆Y@IBD&KmcMrRM_ *.kcL$r?j@U,>A5G` 8I ˃AB 1HDZ"9e&c+68CSt\Fg+VV^@l<.hxVFY3[afs ?H]elM;٬)%D5r"ܔI< %SXެL KȪE)"&FK;emzH}:afhEh/<6V@ jR/kF+KaJΧΝ25Xek*K-Pl 6aD/yf1cc OaqO2$f$K%C ^` K+b#MvyȽ͏XãsZmLd# ژug}tk6@*)!eG_O"VdG,|,EֱFJx`.j HS42).*yt>Kwt=,gP!&`4l |O&G*$܎ܥJyG|jfÔ!fyB1\V:5EIO/rL|{e|9Mtmf-@K]^)Hi9(OB}u9=A/Fe,~4C&fcI9?7&et15F( 짌h/)1 QSJ[S1jhI2gp^9[;ty*^ubд{=S|9;:a8]2{RTdu izD1c!Kr ,VB&IcfǩVc|sk?1N߭zkG|9Gzbp;J­{gFf?y[YLe;Yh_`ۧt|1#9=>c%zO˜& ͧtf Lj'<UЦ-Fҥ9na?!|8Ik da$@ZWrb2_t3}Jn(P@(>9u "4L Z 2lW&yRyIٗ = I)O(e>7Ykp \?*1I.lsV_C@rHz8X*mQ^ghS_˷;Q]R؇|L5}#0UW46fJzXQDf|v=ծ} />qM緫VEEVpn'⽮ [{$iy2VLmWzX}rX1ik9oiQ{T1O=|a /9+ B >POW)B-',rkpGѢB<3aԵf{Xב):lo 17 ģ.p]R{fBF'.80+%u2/+bҍD䯋H$z<0 ?|7³}>\2Eȇ`#cB<d2tWWW[Q%)չH4Ks Ihal~_C=lQ!]Hѭ)U.iUҫft: M&/s64ԢT"6gZ/B])G۲H/? BxP6|UK.u)ey9vڅf"/sib O@[ZBK-^z20v¬>SqʚYny!7>ֱMEj5DD 0#9::dQR'!rόD:nb҄>vrAÎoپg/y|uR?wŪ9L6J迣;>=5~ grൊHc`N,_Rb o*&Ӂn80;6;ӣ=4^8q:[Lw~]gru;اRHj2~7ʽ={q>ku`p)9¤Ph +Rϝ ,=nʾt1]?JqO"iF2+h=z%0@zIF2襇>]D* a-[7?^'|ϗǫey<H{2^eA0jw},CѓL*N4pK9co:-6Ͼ 5rͦߟm8EFΔ*x5;wmNpD &z&$5ǖY!XC D>ttDf<ڽ>gtng>scJ///o.b}ֶhӺkք`10OoB`墚uE)x"¤^ Q֦KaADhu ruZ_eF9ED v5)҇{ N!EWjkjb=.MpZӥ-cӹ]n)G$3jg h{"2EP*Ul~ ѮД^*mNСtL>k_`BJ I.WkjF=,&7>ESѫ lۚiilkznͻ`^Q S*bFK tmA.^ q#JOTl! Iב=-XsU7E\$g܍mCS"8moV$2`at0&ۀ9jǥMSa 6),pR0XZ\"<mCy,y;߼ZrCA5q)E{ a,rһW:W](I1`VDpek2,sЇYYq"-ôn;A *Pkp ¹]Jĸߏi^zƸ/ylya!u8)Vcj>Rl<|QT czM틥ESY&5A57][FgP(IƸZRyDVyn,[dlqqdl;@au85v,N<U8qI*Dq0@6愇2qtn [Nz\oo^;(}19M;'tގSՁvASMI&'s$~o VC$>}7j!M R"vڽZl89>XvF3fy'g.(v:^<^=Yo_-/[)"Ob" KQr,+>Vg~,y dr=s'Udx45u87q~U?9eJd$Fdbȣr dI,@DbG =k;RJ\Wvxp7d:.Iu❴2D^&`#H2B֛/faxss&țB)<"&DjwOl55U%*֞Zjo?V JMHE@ n@(rW1q;KQI /7JL}}Z}HEyPX ,H@f ؤ-ʥ)z#P6xJ8n/ekmnb`}H6f(\c,%U5Xw]]Ub.3G. <FS~$UC %q؟ ?Hf@RoC  r ۖo&PGR!Y=ATxs@9ϩmɮtD&ھ)'7M*8Bg k9`7p+(Avk lߋ Py~zSi[5AGh?9DbeÝLsمMJ__}6.j*iG- Q0|2>%ƮWxSգy^MLޙyQ% A(MKq`DD^ij-A$zRI Sbs;;*qwѰvy"S2 *j j~J>"7 O2pHʞj%tLLG6Chԁ. ) գ 60}X :idUOݻ]WvY;LC/m?۽xW44ZjfWVQCXQoG9&+0,ĊU({2Бߟx#^haelu-?,}pߴ-YK4^eA;]Ktʺ.C)B<˕R 06F -" 5m ÁT"X&^B4QъBbP<e̓Zy_fb{}~'3yۧ~Y#dO pМE"\ $`AxLbfVuaC ײ/D vпyK4{:-\USo ,j܉ oOd{SƋ&XYf"d\N]Qtyvՠ NRء!Fr:S@Cf wfUϗ#~Ue2 z[洑< 2=%ޘ5]5:vgyNT A..!gIJ4~p|iRIƒ b^ ^{j'u']$#:-1PCY5q;/@'Cs[Y"IJ&iݷ5SVLHTVT[k@V(th5ԩ s0+I⼟Re$U8FVK'D^ :.֡ ` i-)n80N[j d{#4?qS+mr,ƼPnmg(wg"'[y/ǨMN4 )1 -p^)e)d(M+{zzhU V(<V K p!T#5${ii1ߥWY2CCs!J|!%!8M}3aj=}QP{ڂkQUI 0 gAs 36 ٕsR ǹ@>-#I?Hq<P #}=}q| $Q- w뚣@֊P[ZEZ55%{jx!e9m@$ b7Ԥ6BNV1QM-yL{fF pqLf+>~N夐S(oz܋:b,]/8v:_[F/#t3Ө 4a(_H\'ɬ/|Ԕ_|1[|I)lHHoa'oc<*?Q8S]/ǿG2>z)w?qQl~$jW^P)3pG5s]&_.̍dYPidX⹲Lqg!t,]}t^QK.I-)Іَe-7iW`cbҼDq!X4~S{z!R!TMo<q+ChO:A1")6r=Μ4d{pj&c \6z  }Sv L٥S~tZDuʅl}()ƹ$ҹaz&+Rh T:輂"}a\WP 2Xzp,kvs43RSl%#[c?i75_a ̛] Ojυ#>8MucƢNU'N"1.%vt,Ke3H_zV$-F<ض/?SmM966[7¹ͤΘ!H\d\qNccmX޿]-)";e/mktu0luwN2Ƽ}\ޙw69>掼ܨOG؊ &k)x - BDOUQӃ*եخ \~1N75 vI `C 3N!蜗r[^(h \MMLW9TĖZ;c1}Tziw_>38!N֗ȋL $S6R1`qZ@iܫ&۰/Mn&x=Sv.Qte N d03i8/e;yQޡ}mS !s K%FI l0^* Im{h&Pu4!:lj"ۈsC(}Xvfwgww-Sr CS;,VcS PѳYFm Cʭpd>L%JuCHz$DB:_dIYsz膁1tlI mzURaA^ϕ@SVsLT1y͂wԭjz(X+Ӆy^z+j|>y7`Cn#$' @#P,Ye = hX~w(?"՟YbDk(.miQ[1mXIEGb"4/2]Oމ`c7xZS:jr<#GrX[^eCZ>u{֫w=rO,^.&X!sd cTC~; #{ho`{orćWOvCw?·u+jAp)2Pqylu r%-<[g׭}<_ 0ʑ{ܰRkNk9R8>4:a|i<:[7&N32㍎YPӰXLVro=@VNGzx]zn~'v]e;b؈1ރR;L;ݫ+j9BpiY  K11zAV `OFmN>{mԑ.W$hg\ywT}1=|c`u'6EtA;Wl9hd|*zs(5Vk%2:%~rucFT 71bE u.m̵1&eKK>ׯq~qtR^)x`R sȟx^mQv~5Tk2?`Zy#hƚo>I!C_d%PaC*kAk!"tr-ZR] (7 LiC߄'a{*vC (|zvmԿ ?{2!/`lJ ]xhW,]^3v`Z;x~7 [UCBɃǤ{^ff"_}ݧ~~/xJPۗ>~o_~O/_^LJ[rn1o6=8g^BS (22/s : !L"'h?)kY|c\d˥kE"o훲uȔ,љ6iŦY]MvL zcb<9eOH7iniVٰ.h!JCր3i=FHkA2|" $+L\6ً^խ6YU]K;KOL,z,y1Z3ʻ^Q z*41W4zgV`>•-|^+p9C"œD%z 닯?rDYL9GzaM )vX;|uEzcJŽ[yS+TZa G3%iÕoY6E=)ǼCfCOP CQFrC'x^meK;RߪA+FC.z6j]RM2E uˮh.f#&+׫D>Toٱ+!o>QhICMQ lY:jA/ ֞][5B/.E4ԃM#2h~1#0n #TV Ԕ ͼ F(.bI?4'øU.I oGk"g4_=)o['9tSɆ+ƴIs> Ⱦīܨ|W:j#EuvQA*5J3Ȅg\yIb[@QYڣGMWk\F ^;I>\B־~BLK bܢg#c "&5={tW U_ rModjEnO)(ﯬ'6q Xds^4@l^7Ds`1ugS-}lvoI=i.d 6z>f'G3iO 8SԁjgnJct@;5-[L{*i*cz?g͊S4cgM̞t͡őn=h5:{| o:5ǰ+uw*M.#ܞy۾H9f= 7:J-Z٨+B+ÎpIwBˁz|X)8}^!B~M|j4zfy  UV3J}ҕ{/ŵ^q-#"3E&3Ի[G>ocF1Bt^lUɷFP=:6*LS}ďɾ= /.vݲQQO =Gȋ|'g/K49ݎ`29L͋K%te$|H95t$kC4 :l #`yV@S9&Au4އ<ܸ&;ev% 'v >s+zIF0贪[W)f(hZ2:qjA_^WboSWM& K{t#^Kq_VPnIXCN0ڎ13yg4-!/GnqO,E_dO7O#&KP5kQ"/+nl]**kQ*jwHAPؾ"4CnC֞0c x~̯Ɗ毟֪4/ k[v\m$n<&XOOmuAgL^w}n!-ZWdBn=v=. rF5q]sinM>@[}asR;j ⶩ'ƣ^ɓQA!ݰ]5Ք*p=2rxQTUasDJ1eEy|Wgճ s޻M]RڝcNڗ 75-%Z_kҙ뷿_~ӚWꍪ(Hi'LJ1 vD%CI[&cePS꫻6c KTi)8wT#*l:zE!FAשg{qPVɍ*‘f~]VyO𷫨 vתѲuW.U$z:?Kι.LWH$r!c) RR'K"ɽ9G~qW^FhkɁX`+V' ,I.OҧWs!>;}\}x.*aٚwA Fa!$^NjdLH.;6QeN4Mb]OhzI3PߌM/SlAsSȩ$.y%1ZB8ltE`Ouh%X Y}^{mhK2%( o9~>:kew(^TMUKd;"RmвMOid>eF"YsKxxwO@8_[RCavMO"2'%zY6y[)2r\_'nf7ΩO$P9#/j|x7Uіwt \9TU=H+.1l0g!jg]NmMKSͩ!ėRsnt6-j{n^r8}4K!ˬ,'qYRZM`G^}ff8B5^:DCM߳˵ɍ-phf\M|30A=1rkӾ>J>:#p5FJFx=ZΦ>QOLx)˹rNxE#MF!Q ABkM{ Ս0U2W|=F8=B4fՄvVRghVk3&`O[ө1+:RFL//7ەAZl8@VZmWsxƎ98UX!Cmۧ.ϸbo3h-o#瓻]@;e,{ƝO-jo=_RY[~ebZ}$vH]t!I]s~0F { C^’IZr 3:_2ap *4oREU>JKjSt0m+֋aԺlVX&<z j8Sj]!)3x͌:@ڢz%1,J+HDrǖ~;UשVM ,`]I]l$Ƥ#672LCgw꺸,FkF;rhtLo-G}QuK({>Of]g=FZ }XhߟqNJ)kD0T &r~mwzpg=x4vcJG:j>:( 7Pw1J9'|(|/E "ON XBš6P۩\GTKx[vnr{A]H5CnB?#dӦ0TO3-χRIl{b1Zءӈ<}߈#r. xy١|e;\YH!jw[{P#:j'𙋫J#ZNl ?.fw:3tW7kً<{t{F)H }wudk>T@(I 5pʁ*RIQkRH"`I_^]]rcj~>WDiKю\FCG %D H4 ?S# b}dt1`/B;AF[MBvjOb/f nBKc XeyjI׵NRוO&޳ 7ַQlb9ȏS/M*%u)89VPl)xRh,:5a2@wH͕cH˫H>)M]Q`ϻ3is+{'wdAbٳ {Ɔ9&fk7Nڳwl(qN.U*MaJ\)fF,HܯB0*J$@K'/ga:Xu\0w1 PJXM@X S7.>P͌0UDh1S`u_ip5G)`klFZ$xJ j5oC<bE/>kЅ4R+iO2Q!~0DoQb$:4o(UA-QZ6XP0Wt-9`$@`L'V\1$׳Z_M).u헛H] Es봗͇/*$%;& {B)3(cQa[>(V+bzrhdX J6K(ЌhguOrW=T5 N<ϧ4, Lkp0&>@U490 3܁*YCRr+720tRD_8%3Ecը:%DO!"ż9Nd?N>w6+Ӂ氺SiDь|i>eai/s,m,> ص} 'YAE"16gIY]Khq+[\c,Z3+{Sᩊ9_oSw|TZ(/h\J}Z25h*]H*IO7<#M%pqkBHjo0i3D=P [ X>dڞW.R؂ \.8o "@ztX񜊹D%̓"_HExTw0)|dje);t'NK ]pr97PZџ?="I>SJWzHE]JTJrjz#Zvjod|ZY ^t6dˑmLq̮]ZwƘ1Zs h)d5EwAV KiUnuA(%W XؔWUSr}{*81ȗ(߷0򘵖j%7 dK.ٺ >徕GP93o퍜q{4K'Ⱦg@5tE~y+b'"v_BSu J0:]rFX D޹c0=%[8whNvjUei"^.1֗ʪ_SGP6 tK=MEsJHbVE #MC4]1e^3a=bdXj.5!UK3:\Ōϑ\/cͼP>'lnyne1g@ _{?eoL 5{XH7#M;nIz0W۴0Y]{4\a,{KY*SQK[H)=\~YGB\dt%k8W)!T\ ,j U:>ɐ.!󧡥|0Je+ߟUwkdMg2޼\h˘^9Rz)N(mɏ!Y^`nnS{=\dt.)獢TuO%0qğ`ڴ<:?No) FK:oK㊨@&MʫnӻQѶ 72$]D+XT0i1CH+8hWtz#:82W=N*M p*.qҾ@, 2.FԱWy[sBGRA6:y)mC6Ӌ܁3 Wޚ޵w2R׉,}(͡ӵFHB-tYgU!A?E_ʻl1U|PnJRIijm9^^cUlaXE~)×5q0nuݿNjV_) c/ŮWJ\PUsoaQ‚P ߫>'Oj~>{#Tϫ=Rt:x.o.&ھ0JNKTf]Q("6ޫRӿSwxzjzcmա^uZ_yw&H.UTZ@W7lg0㍗| zBb(8<(@nPe9f8}֡sA۸qyErgC{/^yfpK^Wb-LYʾeg.Xdup=)JjF$@ y[""{9=>ˑ쎺e™kE ; 9JW!p{8CsYzUZ)T>:Mk͝>J% 3ȶ39c[yʤ*=\L_>!Qm%h"ԽC zXDF] ~yuY[9ƈ\]O9C[L|oBMMr^ZlۭM9ߢgMu)\EABgQL!g)fVyu\n?ϑDt6]+9dM{ jGAv@Xxp$cX#D;(cQ'6/$wMWk=Yg,aS-N2G+ewՊ l^D~%Y|ZQIu%sjpvlLx#PvW-yF,dt*SJ~2`qWXj &.br[b(1pywD=`! |!wDI>BfWn'@j}inV"Dry^1iЁ>9yYJF;c#Ǫ97?75V5 =MPHk̍0p-QS-lYz7nkf7 d#)k0x=[!-[ޚxN34:GCaC: ʌh]c8K2:eaf x9w&_2#h/* ;ݲ}} .S˭Gi 0r0tቄ}#U&ahD͠,!SHE E+]6H;Hv3sE3!wJ/!ϋFLjm`1m9Db@2K"rѝ=%CV%+Zq\3"cuSz5e|][y&j$B6uYmǼ^[C'  ȷ,W?Bje9T< F*-wn://˓ZP7z'Ok%S`FZ|)WpkSN w3JZ ` L"TM=s/ Rկ}؀>!j(A0JGNkv>|+ ,UiwZ1B'*%uKEtBK1P twx_j @jw(V rԖVBoF|_0q\g؊G)R-)bOdԾAI~F]l+2Cvvou0KL8X]fh2EM4͹hіA% !/vz64Cr˟ë7gZt0U'pbN|~u~a(،FqSS|'';,Uš*^&&n->pٞ pBgNa;ыr@RL[h;/83VEj`%s􊃀cw S#<"7>8-~x+JEh׊iwn(u6 T-I;"o>䭆svud:τ|:F7;3^B,x:lCERFGjX*:çRÇm$ ZsjhAw*O *RsW@g!A1p^PSUu`P(TP>GJSrҬ߲1j1܅>JYޟO8$XS\AޣZ3tqU,VbnjH?gz=t_]DW(ʽ[扫z@} \9V|ݎ/ D{oiSU+la>-c"@*2Էdq@;NIMwIl~un?/~+5~_}w`u{gu?XY'jVwVZVwVO?|G~?||/o__2ӟ_M_<ߟ_=O^un|jׯ_޼zoߛK"Ѧ%)OwWG%9G6[R/їmۙlRhʙ VqKr˭S{:T:!B3jq㑿܅h-̥sN ju}Buэ-7qe"CB&z@ˎ^FwL#(AL2 [2g]ǘ(Q${L:U/ >Lwq4,;)b$Ԡ>iFu@=|pRnCJ8j+cx}嫧WRL[FhñQZ/?p(Ŵ#3 ]U?,B:Sh8(7x{** $& <6_2g@u"*$Cyt^Hc xkHM,Vؚ;6jg/ H\WOVsm#lFk(Ь C|N5:D<45KAH+30ՇchLUV+cd|rDә!:2&k@Stm Scb$s9նQ KVkCE;VF?˿vk?Dրeom0ThFt(Feƣ@m?3sB:|ЖVbyӂky>J]ӆ֎:\U5z { LFxնbHÒMLpȩJY~Ұ7q.(c^jY,`hnE# ڣW ʑvJ1Dr|*00D %it$ڐ4{+.ٻTwy9cSu>iϓsyQ/#\4_8+q/9}<%i(&3O<;=l'| ,y'89Bt S(HRw/-eWe[9Ŏզhң0lH\FllB;.~RVvu8vLaEkt"U^ψg+t*ԇRxQ;0HPDwy,[T` ҂.+dbSt t$Z5B h9ԊүĢC-Ua S!}=PՊyiHjQ* T儂SoA:#Ms92s\TQCXO(F*BSy .eӤ<f6PJϚk9ДD@S4RWv!% 5sm4=FT6FF% H؝)o(r,,Vf,"uk6rar4#G)ޯEeոS3;l!f?IZMItY"6B]k&]u\բ*;zF/,۶lxe[p$:ғUkg1smo^엄"P?Kƍ!<(@?]IZӾw;xe%Rin"*Qg̏Θ3#p'xP!y@; /j\;"`EHAe Nw5o*K-PNJx=Kg~9xxY^wulH4㓚ݦ4]?@Z}IHdїL5:CQvMmHV|!U0M-jn6d5Ua#]4ԕDZԦ@4NSeD%eH3v6N%3< qR2 )aO,ׄ0y%>S(Uw:ΚwKhۄB/U @ i;Og.Gu@H tÍɔh|dԕ# -ke;HK.YGWmQ#qc) Ea:T+Dϛ <ɛy_XptۭrouS4B(9tNƴNxXAhJWֈ@%!P†anLx3,)(ů_E3߾c!_=oGx||O>_z}?^?|͛Oo_9틯/緯@]}SGӶXS3IM l?tgO8`~Y&? Eڇ գuQ4cjD 7/pQwK+x9茞}SὉ$䢢*ٞ֡x|# )@sBW^)E'V4N[?݉fu7a#px?ޅÓ L2<G">Bb-`uڝ'49_WSI mb,ޝ(O6!^u6GYW+ hdnwdpyPNLOs*7RP)`4J$$[Z% ϵD`:'28Z^֑0 =LG_ԥlo;v6#G ΄C 8,cugnC@&Z0q4 |\ېg/;ݴ3F1䣝Μ6 LY$ĚQ~א]ȳюOlٿ_ߴќU\֍|`q3+zs1fmjx~f!v1va n]-I/*lsV η37Q'be eʄĺFTWSdӛBѨF$-YI?HN TGl@!VՃ.uzH:9W'w!kΊxl 1Uboz8NH( [-Vw5977 qzqD^'_ PB?Busa0%KUaPg48U:3 D'PVktj]Nꦵjn `{m'^o)+\H!m:]4]d-2]#րI]:RP3(@\v͞Kj0#VE@iPk9Ο4Bj'לxy9Z|~<5+W1`¢ endstream endobj 30 0 obj <>stream HWn^ }& TCr6+[A Uc!Ңos8׍U ذw8!yci.vy"f"ꔋk!&M #z!n㔄u*|4OoN?}\_>\^s3'gKt{oۓ/_^>{ypO?{j[~}}_&;l78Pv"=宖3}owUۻ-oIBɈ&nN*m3v j&"f1U)f}ӛYM馷McV v.^gbOx亷0-35(,ZȡcQH4x/ /3@^X6x6po@fc.@]vJjҳi!ue:Q>0:fTT\aI@\ ~<1 D#JY/Vی /2^*c@E"ό&X $G딀}.ElU}6IiK!|n2P3PSA wicdE!v2_^yd5,3(s3 \H".teNJT^qҢ`)D2=l6Q-c (0e5&5I)3֑z_ >tgpZSᕯ0váza( N2yx al\d!z9mufC0W ݬAiX'$nC#H\CʢEHjq,Q#pL5 "JdjnhH+'[5uբ j%W*`T1n0_EA%daC90zԧ@ CDVRB>2Yb}_ٞ |?x|~xK~zo{s}sum~}F/]oy۞/ޞܽOH*d$+Y&T_| .1; M )m,5JZ [^?N*1NzAR)8A9&#L) [kP.oж?0|Br$bZG07UsFVF(]\ LAcHD AlpFcmЎƩ-†KjN$s0c]C_ªYC6B:(-}`c16 E/( RSԽ:e^غkl ikݬ㻱= %DLcvW81Q$¯&2.<BjHT*p>Ǘk!A;ԲcgV0Wr6?&!bi8%V!؁iq4I`x(GTzIMO1-ɡw 2*&7 r-bv^sv}$ vp@v-&e|*AƟ dsh`50RA@P1Ka$ a{yRd?s*/w |37Y F B&D~d1v ;r ZzFmCiX@!G0 h] $gޕw!S(h}݄s\6;n59jowɀ !15﵉kH5& ,H78љAZTX^VF*༏xrZ!ck#{CR&UΒ JQ?9.TD1VYHm(tnԫ;59 |Q7Y{Yvx-j ~oX+v@C>621Ujq-6Ԑ]%AĒUq,Q%E*ZFk'];$t)TMܝ@zlhsQ1+(1vx ̘GuQŖQrJ2 qY!X x#~yBR?ua>/*(xTzID:5c"3LJtM;9\)LoLa;LrQ:9DqU!4YhhRlČrɑ+ׁ @7RS{>T4`C֨ҕO0J jnVR.GQPm =UЛc PD-v%.,&7;~WIJG!NuJ" Q42뎀b\yw}7у5LD۹\Xĸ06K95y- t6Q5KỔ5M@1/Ρ$Jo:Iuh+qӌG1*m&<=v+cSmKdgjAِ5S~,-(MlTf@| JWHAW$֓S@Jn( :ܽQ2ܪU-{gGU&UdG6d~( A2Sd#Kk_lyVe L14͟hAErH>ʭǩP%@m1=G PmݗR'S8>]tѫٯ*O;*t "M]y5TftW_o J){8CZ?=nƇbuNck=L+Lس8M#zZ)Rk"#e# ̗Ͷs ;fVJVBy{ z +*ԣ\-(hGnf 4 `12k_3=o;{<0]j~X*D;:y} icZ#VBШ,PodOw!gcx~OnesAtuǪrFךɇ;7V9Z7w9J {j3Һ5Z-PK6)+@ !}rg[C$7#Hq#.ՠLC[=S"O4-* iMn:4јeMjuRFx9 pT dKPUe,Oƺ|DduݪochqAJ 6'l_@!d1<␰Ŏ-UR,xNxXdKy{ KK{U~bX ځzt5l&T#-AN#jO7Y|4 .!G،T&}]bd8}xcz|d3 sLzpۑDOӚMmK|L  P+v-U3 5Àu\B j0m= gR R&  v?O_f\ fg=KIGq+glݚµL J06f;cC; o:u<~ąr)[X??_pb3L$J]ҡ+JR 0 z("%C[(꡹pVCu>c- ĭXU @:/V7C=ȡ_s&\Kq1E4x@Uկ ٮLN*`tBDiAj$;gCuZz!7.t\#K߱ 7Z2qG~GJ:2C@?䄁㒑QADSjJk$O8 EJ@LggYֹg%vx4Mr؀c qrbGޙ:ngCӜTH) V ή7=֤.k+)YVvCE dJ/K]/5c)Víq uWtz"1Q- F7o:P݀K`T:ϲI)B5[[ os^VjzNxrU-KOsnt[MMa;"Ocdqe.1 O%=O+m]kD5oB50aB</v td_7 LyFC㤳7 Mc۹[y})nQ=,f{RWɲP[ZJԬ>l\UF*<܇>|K X՗\r@i+-v;s 4o 24*,J<ƳJŎYBxm5|˫)rw`Bʡ=樯fb1ϋ:"uHB\md@ECUu}ZnUsv]U|R ]2{Wn$ݯ~f3-hym`;OނMTG3dp37yy~Uq9Ԃ&Hz+ Rva}*K^WTO>a[~puJ |oz~n#\*fl-p|?wJV7k%*$\Օex<^naJԱs,*m_؞hP#3Wi,a[R,P21cdizQeKW^|Q*ưT1L"n*b۫FiOu~ɩw<](T`@zO’zZ]5Q JٓsMNmyP:f-R@MN +c|օf ضuS2֬vx; !c[tNtb_-+r}8_S΂(%,KܧR1P 5K !ubz/"jס;v>d5-# cdvϣ/IdxR9v_E]Ԍ)=L;OMm슶$RӽreTU-(51ɧ*Qb">uTuAڟ}a.>WE${h;Mf)=;6]0:ۈ+[DjWvRjm?iR $IEÇo$PD(֯\('/ߚeK _Y 蜭rxܺ%ly sΗF[pku]ILHx0ythH hPtc>@ؽ3-5֯X^~hf",p[Ip/qp"h{VOv+_|F%Ew`EP2 C$UXvKC1nvbM)F7*,8U,/1< bcHz54fP6L i~;oێhȶxolZᯙM4#!9sM,>iP8A`"p4xZ8+ֽ/Z("YzTW9GrHf9GV\]bP`87o+$n䙾H50?7d/=a;TC$>tO֋fV f5j ]3hS45O3Wn̗WQPN?Ŝ= k4Dd`5g ,~tb=CŴ5]\:1W`kDfAWl97s 2 TE9 ϻo4_Azus9~Gv]CQdmL/V${@QY* y$OqƼ>02\azj|WPK++\=PI+#A62 8l38jĊz~|az.ޣ)>4 ?\ƺ~AVku93w[v: 辶KױpMAlϠ^ħ'ZQ=0ИY63=3V%\&omG2:(!ocֲ# ͯ"&R=J疠LO,g OER je_ %ڔw]^1E١KB:gAo *V.@ CT|-hڴjIgZ|KL^#vip@fix;:*4FQ߱uC_4jr&hVd8.,DWbm^-rXpz؎)Xm%Q[gE-!AU+Wh:=53QmJm/Y7:͑ N yo#5Iim:4&<G\$N$tho/,)r\ՄYzDjSTl\ H0!AzӿmS&}Q}PU0[#A׋D̜GT%h znt2fH1/ Ay% yC8uYФFg Y A_wLͩӦL5ЧGFȝm07STSxLJר+2Tx/qNd=B\t\G)Y;DeK7t"}y9*5Ѣ`XsJ)ӑ_M㿄.2*F[Zt uh^u1&8]5sK🹇JbJ6J[hFN;wuS !fx 69)[ z+TIU@3té1Kw7&<<;t M ^4Av%-på)M\WϹ,% a^mlt{Gv5K'F5=t5_*.&XdZF[V"M2C!O|!+h5BCiR);|*H;N[z 1v \A+?c|ѵt ́]a^k踦[ ZY-hxXmc'xD )3 |C-~A >5(p~I61u!>kl ~#d0G2Վ6D 4zL}VP1kVٸh;P|} #CۃEL6%0h 4."U#VlbE?ҟb w_i>vZ(Gr+{+;Rؙ3Ӱ꼊A:gStKθvj7p"tZhIM[s}˸Zpno;M1Q7(TJVӻ~M];O+u5+3lv{hSPq7 $}2QInߙ©Bn(IB7>F>(ZgP61yZε a$Df@dԙ"yiU !!l3Ԍ|e W9>1wcokҀF-2W'6~y]G:'-'@O(s}z27CRd۳Jl#o$U)J ?Cl8Ĥ j GBSi"XE2@* Gcr>X":i#fX`{62`Jv {fZXuofYځ2y t|>'gk[@6WtjgJ*>@W87[J lhAj4G}xFʅ`<&1F`;Σ壜KAVв횦`uRz]@1:+Q;x(A%i}/$2A׻Ζȼ&ѸYA] ^whM*rM .Yx-1g[ ])kMrc ].BZ3x(fdBkMV]/5s7#\Z뻇*TK yAֲܶIW9H%Dt[JK 7Eg!A5a nGBFhfKzAy}0uM7a*1Pi=2Yh 1&L8u^Pw6hb8CT`PI%VM`1h:N:ͥq #1jq'.Y@b;bn~¢nXT|wb[6YyqȶA*^USO&O鮭d,^W۔? ]85{É┑3}5]Tst$Q{4r#ōۍV"۝[|;iMuow0"'fdv~P1Q ~uEqGu#By2슱ҁBRx/ʃzֻlk}=%\ rgRfjB=tܗ1qD^5=n'Uga;^e),}j{ߵԲ'xO;ܧ'r_PDCҐ$ŏ'e>椼hN tv{LT0Webjze+ wॹ*2ݱ:]4C'C'P60{0+:4.^4󕷔RgE[=j?V9>e!FY?/ uF$lnr'֍'!_I?:?OI0n5'غ_D9,qk!wi55~E^M:RH`R"~f+E@ӵ@l` i?\ZMw,Zmv9i|YUV*Lj:3488K+;FOI-]a^i{EӂmceK%9٘#^`@:#Ow 1c2Gr9[.] D~_=2j.D7fiɴ;+ӹK& ˲d;6$6Q0KoߒUQ+IUQ+%8<'$|r4`:H #E`n%^ʾF g>hM9;FU/ѵ/Zj$ʄ&JM)ÆiJjXx+CphfO wUV5@ɒ:y=ʡuw7nƃm&oA.@ Ҧ8\lk;S(TWT{)#~A ]FRBpBbHsC"f8Cn4eh K}@ L?5ַJ]X ]-` JlK[oBiVڄe^`:[[S%"dAw/4yP\]SK(lݖi)9 u1OOe mlCC]'=ɗ8 0\A&3U<N`k 4Tۏl36gƧkc З0 UͿ)dIVn듄?ڻhT,ܧĜ:;M[,/P"SgHU\5R |7Cn|Bq `XFɊdQToԚo.w'dЉ?T{U! Q EAr;(@V cfKI)65r3bSF협]~51]LHyF{6t=j?:gRG+żk)8%zfe׬N - ζY_A͙88/]xa\V.?(g"tc꺫JGC@;t|{k:_,4MvWտj_֥=jUuSO vcߧhP8a5bk0wvk jP zFCxM#TvǁdR?zۍP !Bw*TŚ )eEBhCZ`u{)@Ug0OjƤRPmגM!A gR-\RJ;էC{tMGSrcf3-ZOslq׉erC}>>[BWo>|?;kVy͂@2lJC=kCJ)5;de]өԆ^ ۧ,/PDOI-ԣL~#kݞ(MgPv}6ٓ?i$mWfXDه &P2Bz5_#Lp(wES w^MJÌUrI2b#凚9<vB!^#lrV AA=UjW%uAƔ<;@c#FWwsx$!J."xhа_c5CdDJtxӹu;6yoU~vK=űhDi=yѓ,n' y5N]*#%PhyD2m|AND!2]Fĕ-}lU a"\g44"έUٚze6`h%BA{Av|X$f{u|lQ w$OEE&a2Rz~e\ 7ge@5Դ1[w38[I"lCe"'CvFh] 6 WC7hEan#t\!Hr4ee %{1 .GڲIaW _c!u[`h¦T} Xg ȸAld$'1{cFbwt>m!Uu1O{ 8ZNƐh[XEz_/ }CZrJ#uP!=m A 967I$&+[|sd 4N'|].B[?##vzDl (kӶ ~^y2C+扩S=oyo$1]bΔȪ[5If/F͛@b)}HJw6"1^5PB+kg MU u7L+'=w>nĺ2vF_w'Nkxֈe+"am%^epfXYRqs4eXթ243i8nM5Tv*c[ !JއCiv@hڒ_!;:W:p\ ꨒŹ%z[` }j;f [6>r)Ih̠%GUy* G#=ţ摲'+1aţy;^U21 Iek75]b!);%C-&ʪdDmHmIi@"!Q5ڛ]; ~wrRi0 l Ma)W 2$P Eȼ0o 0|/Ү?~|Uݯ_h?w99*yE>)XB-y:KN9^qUSKky?O sF9ٙ*NBמ❙Vt U[&6o"0F !q2p nfE$Rkp9 m\-Vd^B_COxUXڡ#tS#VN Y%nŹؠBLf7/ki nH혔DcbHݮ015eGf,4hQgq8:ū7eGخ΂ZOVa\#׉rjx}~ǽyI\RT|rV*݆y*귬(  |S:վgÕY㞉7~B0:*1.x~tѪ,YYP`h'}y '\4KUT|pEQb xz@_=}LTTLǮؾhPusX{wzkFԷa2G*nsH'.fd#[H*]lJՖ Z4YWqf zj)ݧr;0AVY~*串x{ٗ0ryv@d y]%hvT"ҡ9uƶK [[ yh&j3oLgZZx Q22`„7wއgCyѰpEs2_%נcĜ:v!gs,C&:N.-Y7s8>n7D9uk6p8P:x㨨g47zxOPgL[@Ɣrds* !q".ØhdHWc61.-$ ZL>RIXPi1ʕLJ`dc]R;KzC"u61*ʳ[VepЦ꾘ĕ80knǑbR=%>sߪ9;!? ҒT q>˫O9Use[ ^p'' 9tݮNX8iy FTcryɦkۧuk) G]aM +^Ԧ7%3*pSW=k)g8Mw M]F;U]5hd a; yT]p(E ˛-. q6ԖxlY(Es5srP3 핖A|}!;cl l&MTlo9ȣf,L5XI7z>+ʝw+`QRϣ# [/ bcDElAwȬ8%g6E)4wHS+ :"uv8-֡䫊g>o Q8-v@}]jA #i"eRYd$][Y'"ۍdRJő<=  tgF8%Vxǧ)^\2itOss3+1pv,v'tg6*: <Җwd/-,:K$ ],l)bF=cv*͖2-RmW)i9f[n9wP4e^Kav$fu I%7_*2VV,6~Sjs1$Wqأed&ZH_nHm1`f1}Y`gҥQz:\D}(*1Gnk)4]A_OD9͇Vq4le!vid7D+SK_B8^sz_qVS'!*qEֆlxfDD: eB(E<[~z ݤ]KBb_M7d9&D%DtQs]zN) 'w)P!fL,"PXhtcUPޓ7hXƨ1ƮR_PLYj+k~~^>~~[o~#{/߽{租>|o_]ta\rsئjOZT͢Xj5ũ"ݞJB0'm3V-EBE'!p)l,DWsnSDm9;M4dNL-@Ob/ܺ.712H4otN8B$gnɈ]:<ľup]ezAB *4;@@Q)kžc/ FX Z\h{bS`!Xnr42XϻP.y(żXfD ]*)2#T:akIbB;A)j庎E}W&k!I _Ľܦn;+3݋܎:H1hh6`1},,6iәa<7[u$ I0wr' ي;N9iO'#V DQ|-RPdpXua+uEcqV+b$EM%F-8uިbh hS")aOM/糓j>eP*kn-(%zU8H\Bhkqűct +ԭ8_Irc+hn)w@Yb \>(0tdN@Sq P(S(ڱA[in>L7i:rg b5/%𵱵wB\bvr!FӡVt *YJ&:HԠZjܐ]êP5E &4̠RH:afh>cI18f Ѣ"E4KE, S*V $+}prY5Z+3|9PܷfQ$:œǖ*EЮ⥴֎nbwc($&hvtws>qJiW>uXWrGŅؤꎊL:!!i{J%%vjdոo1~J3Rk6K $3|T*azsK0RYr}\*R>Y>G!dNYq"cDiuf%b=”ﯤ+؏2X3Eg'^5A6q2bjKC;0sgq$%gJ'R ^aـFc,4f`Rcәj,s]͝M9w8}WɁD%Z4:@wP£*KHt7Ne }ո>,IQ|>uRby #TŬ0 V Tr4zXӚEG)χ~a}^>~~[%UdWכ_||z|ӟ~A}u}/Cq=ʊ. .r46|J$z9=e]O챙p=$g&z!:či.fBS u9ELs2w57dsIh([D4h+kқBїghU6{\NVHx&VX$#JUP,"(kg~e@.D`;w(%1.jdn$ERB!L (͜J)n,e`'Pl]=5&BB2|ӏKnoH@M߻l  wCQa^\UA9=ӗs` 4 pV 5ݝ*g}h6OIRTғcZWa S +&\_ .(. *+sʘ[Xh}!QtY"F.qx] $set1,.< Y! Ha{@ʩn[8j'e[h9kF ve\tOPX%:HzMS2%>zx̚XsOM"X.*7[) 7%A3E6aBtU/ | Bsŋae%RTap[BP?ڈFx`5 *+UlFRpC1Z ZQi-(186UPGkml`5tGr,;!T1pspK`L|}Ri&fÈ=h(J&n1smi Yq|/W%^.!Kś/ ֍rrse| 9aԐ]͡l l7h:!]pH+s\ œ1ssu`v啬]S):\/G$Z]إ⍦vJȻG"Ț]}9gsSec#&bhC>f,_0U6\UHqBMGrx粼L_ӑ2;Tڪ#O֨يQnct%o,c@mOcwb r=TK=r1QcNu_hH'MzIbݍ}5V>]uq}-5on e-_Pk7!5SJ_q˩֒&7 5*.<羲MeS_ QS)#NHS٫j3sӠڔܑDIpU!arōPku7*ĥ f$y̔ e@3+DfE]{#eT[n5G*+C<-tU 5l3PClMG-a\QDȞr.#=XχqP6idFh2mSʢ$"DZz웊Pʪv~u{q%C;bmFNfN "ɥ8 ȧD TM׈j  vGp͹_L7&%#8Je(P&Ґ}9̀ qٛyTXX#Eh1}W(<'b@tgQ&ȶ;HSך 7sM^LjɼGʙi$ΒYBi )R8QX)!h2y%[8ld8܇~#Y$"`LN;jESL>8feݷt-zYX\g*M,>O;]p&I7G_>ExuU$gXxؔ89:FXEma%GO=ʓݹuJ9$ur$.<6]~#kP֠T6X&Bq[buܺGCQ}R^LEKM8K{b]w )I=裦rgj8Gd\NϴdfK+di]ޭ}<~zsЫs..OoxsݻOz12&g:y}y'mگvb9嫇w_=}߾|~|n~7>:?Oz}w}?}|ӷӛw˧>|y~wvN?~8WO?Coz`mNM"iD&Z= \sf?Is2WL:WH92ct£Ai8Ua&:p yB Yi)  >NbcdH8aJ*q AW3%4FfI7|0$[))d=0 `T2̴j c1]4ELix9KpA!agRpy,aenT ;b#KO]ڵDmL&#Pc&Ϊl24`ҮEkH\tō6RzzdTDkO4!0 '3i!O5ՀFiW@aōkT(] 1HE!Tcí As05.aMcgmՙG*EH 輾f6at2%M3)+8Π}{Ƹ#KBU_@Ҷ`*qH4х!j*^~KR:vge5qeiSp $0WQ(fS*̸i T+Zn"DMjtr p7EЍ͡gR\E_bpA |9PH!o9CV BW5ǁ7o\ Q-\ !ez2*gT>f=XxVr%ʾ}ܗˍA E# Y%5=BHuW˾>7zTg7boruYC|X'cf޸7L>v˯q=Rd(6v#KfŒHh;ߤMeٛOhI kVug23cű>J\cN[ U?|A(mZ'V E5 U.qc!9 '0l2/SzvDG{Te#k"tY(f $Q3|*^W3,b ENW:&V)=md7,~WUb !oZH'^CY5g!b\:w_))!ރbu|~o@%tèmo@L2d& ]G#Kʽگ+#O%\tM3es*JC@Hjly[>stream H͎m7aOn$Ύ*W0JBd")|{c:.\?k-ەnz[~sa{˰zM&3e򙵦-9{;NےsԍŘ56ɰݏaNbXng9=RѼWx2$_-¯od6M&k֚{ɰG؎_"8~-{hɾ׊{ ߑf Yw!1;'wɰG9m!%=/Yr) g)Hq,҈بUɒe6IeZB1;Sw'q} r&Y*ȴjکK9iߢZznST}+έ:OsFzxi/gV(Zy;E5S5 TwOVWZ"Yait,8a=󚺔ur=6T$5d^rWbrF6)0NCbRo АaP{s)}ȇ;VޝVeخZ0.M0[^y;`L>J¦m nbCP1_m÷R}Hʉfؘˮ{m64?ʋd/F0 Gel}4!߼gk84O"YtV :wٿy NY+3QwjEcfdUфmBd9 @]o'>I0 @B8Rm~` ?Pv/iLnVm 0)tifZɤ{}ƃwv>;PmQ5m詘_˯~>~O7>PWPYϟׇ_~O/_]-_\ G͡y۰cMr(ɥz% Z~d=#N͑31\ hvh.&jY)5Iy f&|B3AN`GL#5>NF?dnv9~8E=ϑ['qYRKQxCtcpl'ׇ> Ϊ/}!3ΈD) )5xP8b4k};"@9O2uB-g( -OT2 ra4TT "c q znBq>2ZH1 UWOp~ "NW[ oTc *`Ek d L=7 yAc 1+G =|Gr?* V]Ǯ1E PT1Va7t!.&-Sƅ„x/5/?MYefw JM-2v%{:;/sÚȒşrt *+ . `${>a8;yH̭6yp1B9㗂~CH{#[km4{%<%dE]~f },bh+-HVx&<d_ٞ*p.AN XuЕ${Y^,B[<6k rYJӽx:Ab^~bjxڇ (HQq܀o/9\Q ˌ.֐z=f=uIʉ@D:TlQxuQW#(aXÔ ZRvw]%a$D 6]]DcXzpZyNrCLqZtt :(OeE2H=4L)ڰZGq(b߫}bJbhu΋I\]S14jym9˺UbA)T;:&pHDVd[x#\zLs$J] i %ؖD~(8$Z)xsMx}1mȀ?)(|wZlH#yr9ːأ$oN.җJ͡,]0|Z t/U1HAK)[B;qAW<`W8RPD9=5_꾄.BL9^z)&M8E ]2~A0b>myѐLq֋݋x'qbPKΉ)^qE/ʠW`T"i)98n{K׹w8%Lo$U*NϚ..p%Ykx4A@3`IKs T4uyqA1b۔{QbiN<.7.oޜ] if"df6d1zyxӑ'uP3MT֬.Y4Huc5 eԟZ퓷u.ս F%Q+ZTPMObQ^BupWnv- 쎬^$S*S|vHPq-NZKV#k;3Jz FQy-+)|7kL̳*}_qFԴ\cX&E=?VM}g;񾑤*/ڣ#Qf|1&b u\i`˗B'֮|qsŭlu^!sgžeAjnKUʤdVe2V U~QWZ@@[ޭuo7Floпn˙$;l*1 }Pvm4.ݷ6B?]cƷ eOy't";8WRn~؛ WXAvz"ոRGD8O4d.êzk]_j-\EXCC56HسTz\YV-5KՌ#\zsPnG[v\ݺ(;yۈ>Zʥn~6ge6~Ɍ]gqƌ|VliKUT\\U𯲂ۉ{o{G"i3x<:㫛Ьtt3E1؍$f+kdgתxt*·j?q[&`*G6U#+#G֦j]%Z/(o6YeR5iå#vA-D-+`ǔǏT]wQgqUנKa^??>`ᏩT_Ĩ>jPu"5>}HH\>?xL^EF3} ߁o $'B-we0{X]%bBjv@O38H~qu w.ٕ~ 0^`#$ 4nF:ې4I{$Q-R+ƌPD<[jJiА7fT#̂i,}3O(q܈IC~\쏆];t;^h ЋG\8t{B CLd]j!gMp7)ɤijA`'ɢa7d8ȕ1/n#N$GDCW"jw6IuwۿS}筙΃5i^чO8󻹉}`# ~<-M7yʽ#,X맞ZGAREn>X-w};꟫IV&e1cADandj|5՗N2CD .b릨"pa\ΓN[B gtw%!2Bή9}`提krzN%ڙM<]!Srd#i"%(Hk,&{T?4/t)µu7-$%eb ӆܧx(]eT HȠE"kySA,inӿOp&gBmѱ۩A~S!j"Cyzfz}N G!%-,:F&@L*պ-o$k@ &JV5$zxJ.定cU@5lQ+ 2JۼYf4GK,EQrynט5i*-,7cU-)ǣީ$SGZf&󖌅"Y SvgA7K.mKr59rj@Qw$t~"i>98[w40Z&lu1S*MDWSj7IIZ薷(tIR=I0( cu *:竚c%B6VFsm$NUsUn2ko&u>t+gPksi岣u'wd_3d%',"M"5j?&"bf gU}y†5k>H}nu!*_wchYhl϶b> 5c2|Ԯ,Ln2 qB<ۗYN+PϺPGXNapkK>ɩuҡ;,xjLaض+㫑"ۨ肧ӨkxFݍD Й4y7^vef;akChx>_sbOMm <|Tn\愈1r[PE{q==ﶍrH. %2',C`b{GN'iX&}|77~")(}u7gO;} ~|ӝ gOMO<_yzNv|xwn_]dw?=E?_^Ocy:}7/sNۋqzӯ=C|z:n;4i겶B~_ix(}ѳ`i?3d5R(u>|W,gnaK=c Hj55w cFƳ\WI]PEUe] RseRة>6ڒv%? $)g 6Z$}E.=;myOI|z'7Bh1II^ȵ/J*?|Hr]Y~:M(9[P_Yb+ɀ-` k Lľ=`dJ&38e6d6&[7\$⬖&a2 e;f ;eC8*3(@lK^4֤CSfS]HGS%X6Q7u<1zS Fv#aQk49&%DK<'L"wcTB[MPI @q7mGJqř薸D d>^q(L-V;EFcu}]D {f]n-s`@)/, 8"Ma(p™5: kq̶>-\ILXsa%io:~ YVi; I#̢/xC% ]‡qjg]@t$ATrD1{KȱZ;0rȢ&TM'O 畠՛ 0}TIRa,lakE.t5a(~,j3<&V!Y)ʐRhd̼T Lxj uT38w -T9ڲ -B,ף=Z7rљ M[! X?afA{q7נ:59To:<%&_2PP+iՒ%/F}1wg 8 > N>t.F`n)) \Q~DaوG#%KTlF#¸T%VoK؊n)\qٯ2_'ӥ<.Eqg[dejJrᒇ,[duEg)ӔdB)Z!hTlw1zf} cCW-aD/FuT;Gin",Bu0[iA&ːgJ1*ܦ0Bs=)#6"hrXT Z\ja{aCiuXo?6wf-kǺCg@#6OxJi~ο8\-G6E2{KJWE5 *jSef{ѝSC-O]\˞?xtP`Rd+\hmI/7,4F$,EMX[a8"JZηJ^7},LgMʹJ=sLĊ;VQ ;+$_b5 Xg:>晲0M| T3[՘b>'%Iv)=Whي++>pP|ᤂkIJmwjgE@!hRVH,[ zBwNRu 2JeFMh@*2񔋧!{(gX"Ynxꞥ9ZJprBYGV(+8JxQU|mf6GrT\Y_WMoG+>r<ӣRK1l𓞟{JH)G3;]]]E@/5j"Zd-\S,hbAq#%Q 'Mz*ϡp6*O-D/%  cCGDnm;` No ("X8@Cr%1ੲMNR<E'*}2^do=8&}6i L=D?.1T_| ϖxf@~zGŧk_g] z7~x]?>/ۏ׻xz}Շ/}߾/g_.|p|x[pdF8ПUbt-m Erg9d=,9~S/:X)X6τRfZv ԬЈ 6M`> `ͦJ/rIKn{xI.HC~WlS3IXɥfRbNHJő98hi#1x0#8wjyлC`뎔F7P ?k`\i G#(5.(7f$-_:$CA+('A 1N)Y|b[g UT24#㎣i)2K D8sM[B}KC2`g~@,} ܃\jZ+.b\(J 'N0A x[ \1S\%GM vJuM :~&V |H9OCfvkmTQ ,>X8[Y@Iæ U1߭;̣W< -M2~.sv[ ~c۰CF}Bh3:3"V{UEVl-_ v";7~$/2) '$qӲӢN 6Ux&0<7Q2 i "cFSh *.dJ,XM̢4rEV\H$2yV+x.0#SmB^ƈ@Oʶ$Oޗ66N:*yel$ҧ+L$ch+QVSe} MT& y F]@4?ImZm![jl*BYJ 8+рL=~^6L@0gT7XJ! eKQيꫠZNۺ_Y_TT1,y@$s>@ + /ÔP.387^j8W/1 q8{-zS `e@^ԩ5+t2FQhA35Xԩ8HFO8#hh4e@!S_ s͘Sem-VH򷱣Gd_J#,S#VƤ$ A1ﯩ㼜ʩݞ8ŭe|U.+y]ASՄ|ϠtZ'ꋍ"(FDUZ1H{%+M`1J`@(9R'N0t$W^If\?g,b n4<~ĉبX>:.AX#OΌnB7ڐst׶34~6cX!R4[g,ᗨ O۩Vl$'>z&b5=;LKyNhQgG j1]}ŶCFZu~ѯk]O~Aޕ YQ3F(e@iTM0S$zsjZFFnj*r9ˌ0[LA0%9VaPsL cqԏ?zIHTh yB,˃s8ϊ V-.uqcG6DxvKylR& \7ѼRgNu4;a|frbZpy_8 a[)&CCd})4w >*l1!]lq !箺^1U 8$$lf(nD>%EpU6m&lT/{ޖ/J}Aurnwƾ~+>;p K@^&Zeĕq/W_Wx2T #uXG,VxzA 7J)w\;j04kהj ]HSWy;l~ (+d 'fO7PI{w报/bGN2qs\ mB)h7x[;|)&a&'AH,l.A!phQpbS@_c=/>m=2n'[69~>q|tzwOQpE?ջ_oY6p150Ts%P`V!ӕ#|SvM2Akjrd汝I6Z\AE?G:-f3,$f7.S~ ;(ftB3+ }(+vqJl\NuɭgyfNa<*pԋGP 1,N*ͅ7 ϴH1}:RBR@xkBtJȺCp-J)g86\B4``mt4<'dבR?z5Uj0Ꮆiz @M$˦P.KwDE24O" hKǍΐkdu!MʚVNE.WvTf9ېCK1,R\H{A3ZBw*X-1(ghBLj]%aڍML:$U7dyM]3\/VH/e˜YF2\#z `أ5֔YfNhL~`Bk3!Vu).O7YnMn9m>?W*(yJ\v(S7܋辡ŞbQ0Oa P:#ݿgl၆cܩTi]+wO=! rlRJ͚J|zPC27&'UOt\]EkiDZu8a\*Y3Ŕw D7Xi +Tۣ>`هUyje wJ&lsػJPDX8*‘ B矒zPoVa7zF"R y5Lc-û:-V#d缅R_Ѻsc4V\V6i!xuL [WkI~xЪD" gy! *53e#{.$\ꧣAS=ƩNEr !JϲJ1:bV~iΨE}~UKՀ4{SGYԜ_hT'-H :@,XP91j;dϟ=zSYh6c-i17Tjx[!hj8<+y9Bth24z5?=N~5=CE5?Dh2 R Q?@= iuwJ/3ҖW0AXj0OEQ^E q}zXB5%;~7j$o,3J;m3hNƯDsSvK@+m4N*vTnpwe2c=MFKO'Z7M#4m{ڟr/?Wpv'kѯ*>Q-u#k!Td6 A ?`0n>rB=nBGf;)'%M,8 >d6铑_ P*U4(ựXjI˝wWTQ `~t MnZ [[4z@@csGebOz]v/9l ^f@cֱ=IJd1 _%=zw*AgCZ'4=c0#=3 [G2EB=}Nj };LDž 4 *er7tǁhC'0 9 ȕw掮ȟ$-(y HXy σh8DzkSt*MEގ6 tÓ$x[Zp6ugvDn_:+Bۭi'G<~xH?}vpʚ䖞VTmQ1`)Mdڒq j_lH&/O2Y#)c !T)X۹#bH}QQ` h%qܶjy[zx>K)K7nmOзSN QL>H!ha$i(Xiμ9Ȇj̻OL<޳:ou|;^yg? KVZ4ad5l+A#L0h2B-C,4ٔ {̘38iE{jO,$]M`m`+{=WZ9rR5$aZծ/#+JXE fC$q>x2ck8v< Mp`{Am7(@2/A`\;h@'.`]7}\{;9is3rtGmc5S5DI%2F60Qx&α!yH6ӻlW1 "A,6Z1RCDk4&|#YrJϢ6n ^bz4,*[ӭOrC~Ts@MbqD}V;ڞScjjȢ'IʈN"S`IWL=y>0}.JuNP-?4g}D۶au''dc%5lJ+| 2gƒ߁ޚd6'P_aǮI՜lYN/'QnCdLf) n$]L1K`EOc, tX$k%52$fI]ǏyiN,yeStIX\\A41+),L__hʙT1Nq /u)d@6!)ޥ1Seww&b0f@vSfPuKky*:T?Sp׵R6SQˠ]v Aky]J!/[՗v›;eS% qe# !MD[ d)8~QcTtU> /M֩nu'H)]-ety &7eK$g@Q8b^B8X FGЃ'5.T a i'5EGGƾY ,\y2_K u!>hd䱊0L7{}S=skS9^_\>vmF&Y˔+EB& a:Tmze00%3Yh'"%[}rqD]r]S) *8)ZӸd{+h\1T?1t$9MJI!-dBdgZ")i 8ҘS 6V=HjTwܧh@5!-1dT%+71(<2Vb_ɐNlݿ[g-d>^>c$adفEm^lrUfxG|rtΊs.!ԽۨK*R3 l!K)|}z͢}wf 3xtBvKVa#*zύ($͍Xs#0!/|#̰SyAawiWSgqhENNX>4<3:&M!]$I(oivw0f.F:[@r bԴD -d/aHѕCUHU]@?)OOiҶ)ҡHlz>Mm-dd^2#1Plvy|$~}=ݙ͊^TS.%O>z[ڛq:s`d-5@0tp@jUAyZ[PY7K h"[i"_NN뗥Di/h28=ؑHD.S2m1Y޼A†$M׶|liUDU)(V-S+5ʯ4TfXJ t?̾2a|ujV޲-\`C:MЩc{ne&הWa*G3 =U c8=|h,1Z"ͬ }Q?OK#ZVI.)QQ1oJB|K>Cs̅T;)[M/!FJ 6$"t:{m; 3a-@y1>>3Sp{r0{jV<<ǫ0Pae4TKSqF$l8*ԣAE"!+;%q^ZSsR[r>+ A<֖z*cgs(کx*gHHj x/JJ!HOo h`aecdi ؟,4e @u&ȚjY=eOʛniW٦`e4)<̳HzRK4yN|PӰ3x`\<3&>@>Hg&.IN:vΌ1'sZ*F %q`]B ptHuhk qncQѠ$"E (hВ`#DǟH?o Av&G7Aa4&Z sfbq1=V_@&j{k7 .X877١LltQ7Tm 30=j$ H)^:E~n dY4#*.mAT8Db kߛq)3~a:_C`7x"j䉅rk:y!Xn})f^g$QXؼIk.E"]Ҙ&!1ͱy2xh󞘃ZFY dwR5ո7 oBMGf1 xL;<@) RR5j-B_j1]E]w⌛*30=X@Iv$,=iu ˦ dUU9(pW˰@blf}dD+'1[Dbc)&[t{JveUCCCT}Ӡs(LC[".4 <aQ 20KC JN&sa<$>l"KRDNlẊ]CP4 [a#n-&3} b*ORf2#IqZfumF!<Hׯѩ =s!κzRW??߾\b`o_}zxۧ;o?󗷿>oon{9͋?woݾ_zxyCO޼_ s QNa3yڢi[a$6@ۀhLD˱q!9%mygg8-u_ABߥ4,w@; BHP"2;ԅ\0:IlP "f/r*ӎjPhh _ b o nNQ"\T4ɞRŠ[A41^:PkH/Ԭ0ՙƬ-p1~ߍ9{O$/<} -RK\`&(c8 =i0+Bg!IRP\t};n7+. \>嗪*b;<!8RgGNbL$QNJH`ݐur [?_k|XÁ q;\ijj7 }qc.;8=$0B/o/UƯE#<"BlS|'N nĞ0)@;obu XCOZuZ%/`9)ȱ=qA{hM$u =U>$Ly\ uz9|-L߬:(橩*U}&%J"EdA#ܺ Ի|~xgm6[M@W Gnj8k< 䱲{ ` 5gb1G%cT0\_bH܌-őu,UPNYI#uT˭`ɰ"2{i H;X;4nsxz+B\d̈j%~=,<7+\ s(g>%ѿXqS;~ '-QܚzTт~vIFeB ?ʝ1A%Kr(Ta`FbbkkA7Q SHvս2r#XVSe W1r Ro;->#9zDᣛ0fDy֣AXQ&(QL l&&C}m);_PRMt'pCm~~v@2*k#CO҄]g">ˢ8i g=ZB熡ׄJۂH ;BhvoqHzDS}zJ[a9<\bYj.n p n7 nX *Z d㿲 zŹf,I;:נQA9}޹ (~{݉ dwxf/"[0VJWrΉԴ)Zu @W.k&#ZB69T2* t Dځwx&%89oyf=Fȹ. TAu_p@Lt;LǴй+se<֍ԥeV7Ǹw1po)1,QomMi;F`!7moT;\{G o3)BW!Rߝִً%u+x.=j*+y&9_]6W `e}Ϝzy9\;[|g=28t[qkB|slޭ_ x{;S[K߅%.m%p&mlΡϽTrqN,'{ѵ@8DPK忠K#\JQg @Yɛ]UL"]ubmN~TO%.j3kT. m3dyCYL{bGV/ǽ ! ctŷR6)b%yȊB}!+Buܦ52, ]rk(E.}@86><5BFmo':9)/^+­=i RR 0vW lWhy装gnT^3aV'GZPwrUE2@Z/㤔6bܔB ny)?MܿhIuj҆"xU*nهkNL } y=%2B\Qqf\د O5E|.訖8䭁(48_Z@P&D5M`.U ՎǺR;f w5%]5mDϩSWJ-:nuO\#a5!#jQ-YtٝLHa.3|%D!)y٠KE 17 q;/F Z1ڣ*ģ؜"BL=rk 4Bsr^nv6MYìP=ʮWd-ZuqP27%fHoBqgW2l!!Ӫ~}(Sڞ|P[r]Vj[I? PMBe= hDB1%0T90z^7+^{z1 ;Lg 37UI@1˝0kY8\`aۄK8HePF-7+x"#,Ue`Ljo;7mՐG(cb|1.`oԺj8MՑ*|Z%8Mk 3֕%FYa*fnwI5djaiT 978g6Cz\@'w 0fU3Z'~Cdv_FhM-I#pZ\lGFO:ծ@Wof.( yDzA@g$@X:OhF{2 d1V="Y*DHS@v 3ː nQF%)uNR1#G9%wC@QӋse#Tk2,[H% SǶ=WOzҭ2"U6a#܋ W圫]BMMZ ʄƯRsxLS|nIA[+ji pO# jfpty83[V"M$ӄDts)ʐ:J$C7woO&c QN=}可_зėGv˧'_s>WMɋY0O R=BA$-\ݳ?^=o>}Sz{D>B>>`a#UѦS -Ov+>l)2!cB]QHE/u޳F'X 资)IA0Ñ}TmOEٖlaoY $xxdw1Jw!%PU7mZFӵG>$R{X-)Pm\p+K@)Ƅw$( rW3FϭtK6nY%4|9U~J\Am nYPKd'bgKmv?CqZ5rdWZV<# ԅ ^]bbk'7PQ4XM i].⳵ӣ35>C(YA/! T:'gelliՃ-89́rzpOS#Sk >eki;$vt M|d%>/ \pF0pa.a=,wGȤYi?z7'iv5UF=. HME)"Vii.壍lZ/MBEbE1a1԰h+Y3M=(=SYA ˒@ ^eN^r.7]>xx`EFhͲmoA$6n "_I d4dP8FXˍZҳh8Zb|rb9'.hVZ|0 +tBj~2C0+يYCdckNg6GJYKg}fˤDhu_3rS0U}&HP]~:tɒ覡!9& ~.uO8H/E$˚m _NCjx0U AARܑJs2)(PBwl\5*l_G0D;%ets ɼtImf)] m H{?`.=ܸtu-}qCr-e|z[uV:2ٞ؋g8U]..6|)̈́cOI\S Vr_+멸M8Ng[Y-o؟/ϓ΄Wza1G)U˾Jy.y_ wNANS/ejB aeu{%v]h@g8cHh/*PEO/eP]O@ e{U~V/5_a9. endstream endobj 32 0 obj <>stream HWn }'t7!3r HkP$5UC{guue#UQݥ~r͒䵕ⲪYKcmcԱ%XOwKkS&bEF_[x5I:~sMǻZsFNϫО4VqbkGI:Jzc- KUTMG8g V*g e0ka@jPpBkպjm!76$)cCZЛZ.^s<-t|FQHrD ^(h΋jMddRiټV04VwtA>rkkaL[#DF6l 'gHZ-޽%T~YաhЯr$&&0D T4j}dG@Y"ܝ#¦'  B`PhZT2>w-Fw='S`ۢM1)#gEӥp !L``4{0 بcl9ׅ0zeX)u8:y@Ng5zLi;?6&!k| /DdBPMyrz7R!a(Fe:]M&er5v!+78[< ԥsZPBBC>m2pf'cex)0N-Q8,h.( &2`apE8 Rg a5:35Dk^NS *K˦FSX4% jyÈFx785$@ڑ6 $ym 췐̠V>DIb׮tp94b0e) 2ja1u9+ FonTFU8X wJkW( G8S2Ajd6ԕXн1).@ы $ƻs*NP kFSS:lBɜ)$ ڍt.{`+'"r8؊0 ^sc-R -&sFu̓r*䓡s6ƸiLß8j(ҭbxq:b<OHtw|1N'bwo;ij_^]?oޝ9ғ>cJ|}yWnoߗɫEzytMX‡> {-? ?GO9P~Hp߿og.a寸vt߀<6d>oqfW $Ckqq% W6wzŁ k6{h-<>n°Ck*7\ðOw`M DޮX{Fu/P=|x`Aٻ/ތO[X x뻎u'@1zZisBEw ~OBU\7U.1Ǜa4&h¯nOwMS|oL[IN3w)z+<`R .8fwq@K|k*Iԁ[  D O?jTRu#3h@0߬5DKȃ IjB.LV}{fb"ʳrZ9` ? T-#ˣU^: h@W@w8["5m\$TiA+e_L2+T>k oYr"@+BM?n+ a ڳ7N< .*6G bt}'1O d 2m H*{ )MYS9QЉhCTբ參kU[JCJ[ms[N6>|uU@ %Hƛ&Gf`nLިGk4Iǣm-B>o+4NPqK_yjeu-!TaR둙2{mqU([AkLOm_hIq4@IW\|>2wǽ̃p`HLg tܖ *YfefƘow0hʃZsC+iΘ{GhjK PzdU&:iAIQ!g(RⳕP92/(){kwLrb2SVҖRM0!~ >#X[#A%"Am1q0}hw0*PFjP򑀤'`(8ȕ*j-qHo9.[`[Y, SoBqTR޿'E2cf@}?`9(2U(ý'-kw @݆ԓyg 2ްA FA*ÝGjd*X]$)T@*:|EMFcЊ5G!{̟;"}7vlm|Ze8*,$>WGKODme|Sa0U#T:4Ry:,Ϫ=Mt-q 6$hK2ڧ O> ⺛ID.Aʗj?> 'gܜ,`9 k8$ڄ_?4iihPKSS>Hi$Ha҄FsMСC*vlm.CLc(=*4~ zJ>ڞqtD 4]1Pot2hDVe1quAe\M+jjvbcJFvIyzSGZPwhB'pu *FHb(NS>¸q?OH .'t|~nl–¼S4zܗ;,YL]A9`O#R$̥'\˕gTRCF.D~WU }'~ppV>!['h9(DB}}{y)(lB:oroyXGp ,kUN7t;\voމHې.ψ7栗.j*}.x3b Fއ\k䖔z~O߿~w-1x YȎok5AD}s,AWJ* !Rͯl\6,j{+ J7cR2s 4@}cm;< {4ɳ8B{Y8vTAcg:>!:ԟAMݲRvRkVz+bʼ|7"S Ya "n1EhqdYK'0Qֹ;(*clB8Fֹ~AvIE1GAV*JBvkP]6낖0< к{M HU4ҠxuBu` WB}T1L}_"tc-FU/Ȏl1àDEp.gGj@.^zȧ^51+^-(bjLpgv4h P- \mJ{?@Y!aeT1.`UwcHf,vd "gew[1T6N:ٳ[VkYfٟBʵPw ZqnUQT܅v uT(7)d5WB{}V&ZnYƚ*eZYnN=G A&F1⻺B>\ 5.+(s['1ǸӅ.q5N.;(k TЧ+AR=Z%yl]@WE%x*χ>%GE߆+D_RRH$*@Jn/ NJ>I_(yu/?ei$M dBviC~jVI0M\ I|BV>PՌk̩#s3t^c248/=>H{'.?qۇ?}Ɠ.ۏ^J<,=W&43xؚ@!\NeB^EPsؚu]5!3Xѹo@5Y0) 9dbSvnBz0T{gBEl+1`ȚXܹBswIױچ\Ybb7v؟@ h 5 YuK68}ӑ] 4FgeA*u56t(MwzA|<]V3S?86VuI1\zCO)i:4߿n25#!e^ъtȱ+\ϔ:yLpkNMk(+S!T@n| Zu2,11$< {LnҭK\75iE^_CqYWj+!Ľު[[ -kXei=Րj~aCnP`alm1yRВNB[a^Le8R5QVUUeB ݛw k*pK!$];e Ptz}u(cz52\GUѻּbs,V)юи<1{Z tZLq!PAF進qP6{xP1^=qB#ּ6Tj k6w+~ άO. \BWbC~6;bY*G>E}Aov98ܹlx!4>Qt )e / CqM'_~%sIHʾd~?ɿ~|^G/x{+~}B'}Dz! m¸2-:Truh[ѕrT L`iAdG1uDF#଺n%-dRnWLUjB$6r 4[ jΰ+bn%Z)nFfA9@$&a"ɝZ j^CJM1`1-e*ސ({B,CX A}-}l#E{HB!O>uH%]),u gwf2dhaCXdH"4Xݻ.Uaak\Ը2 y|CosS_aUS4O 87`w*sk\o(2ngէ7B*bĺ߈k&Q8g4T7nY,!'#S5Kkl~Q)"rɘ8ڠy?̜Is-#6`#8j.rUrb6_8dRb38lt*F5_tm^MtRڂ\)͡ˍ.;?Ůf5~Y3U%ȽO-[]|~8$i[@b[ub限.d'SخKe\%ˁJ,@Wf~֘mK2*j)rhY%@2Y:E3%?Pi+ |)-r ^ђݒ4^$bҊj[%p9T-C'cʽDΎDL3>TשvrsTs2em\WdX_Ϣx~Vt\~-^.6ZS#Jf+}*84!7E2gP7Ju 8z)!..SOҷtCH.Eh'T80F9zQe' 1Ha]i)> r1nd3@ 2d]VP|iI yC #Bu2םRi%6t3*B,Z9aIPۍB% ]tK%>MMcVH $Z@U YW9ԹV1u ņ66鼉^i)}}b*>4N1j•sJT*z2J_\rYӢ'݅EI)2Rf*|CbuHrݠiE܉[EY[Bnmx%eRА:,@Eg6)Ec{4εe3z,x k| )(=]|iN2yKXuaBe$, DΌaZD3cka6sC\&0%#qqHǬn-@WTϧZ^ P* æ"g(I׻=I'ٌ2D3p'.r F]@jtQ( f}d-By,poY2T%M%&ZEm mq}\slh.A-ǍWf^. /'[q.f>!bB jz]| j `]9 LD +$ lnl`2{̈́/Cu#BA2:SMZ՟yG2Aխvj(oձt<"xSFD_-sqKuX&FxZ\a:ګ+MeOx=@PzȾ[|ylyއ/+,9wsrnmlk>Л /PS$)NH/^4.?$'W3gQYX;/ՔJc@'ڨd,<1`r>5Mc`srɖ\dgnqr[Sl4MRc?xK[cu?@[5^gkYɥe6+ ?V欴ҷ eZhødl+KԩFl JNm/?`~@ʚ?9Ӛ̢ (+X1#KptgNԛ؉Hk?xcO3B wvY0:1Ah\ўz.HiqhyCջoC\|41\K˛˫7w}pWoo]|{s__UgxogR곻/~{3|g7e6';g6o_vzۦl"P,qȁl'۷ߡrd']^ 8r}?pfbc2ϮǃIb˦k>LoqFβ(Ύ7ϑb4L,fn&g!?=&/A/6W*$Iy˟iTUT,0<- a Hʳ{]R}z&7%sIFY$뎊T‰8[xdZ:_Ń{E i9IUʐ=gȥٱI t]2x=8_ ^>..Os7L)cdgq|Dkikm|򭹻41r-)ۊ\skv)oHYM>v|×p2 't>߀*dV1'e|N65 :dV*̲sٕڬ7 1XA$]՝h1g¤i&B`#?̗Yy)3eE`D8'?x|Q7ǤS;p&g;;g tÔ" g"/p\ CH]$ly6Y6[LM]#^,f 2`_~wޓ'PWl%'E\m ;Q+KS|g4T*fPONH=^660X%Ι*(m9+X `[F!~$.ظQ0fyPmVUsMQ b \kk VkmNaMT 6nY]&|J- 84Xg &%\)u% TkfkuQQQ9U sQ[qNK 6kߥzz 6T@3~J*DmWQT҄~ BqY^ 8qyc;vkZX3Ba `klEo@@r`T1#\PUzm9ɬ.ѭB*R)1^r xgݽ?BTbJBhqZ-bRT5+USȫjS9j >4߹JTyr6[S``3:Cd3{vG/-RDR)Z])8 @]f^\r 4r.פԂ׬zgY&=*]e%(K endstream endobj 7 0 obj [6 0 R] endobj 33 0 obj <> endobj xref 0 34 0000000000 65535 f 0000000016 00000 n 0000000144 00000 n 0000045151 00000 n 0000000000 00000 f 0000047989 00000 n 0000047803 00000 n 0000235363 00000 n 0000045202 00000 n 0000045576 00000 n 0000051485 00000 n 0000051372 00000 n 0000046577 00000 n 0000047242 00000 n 0000047290 00000 n 0000047873 00000 n 0000047904 00000 n 0000048388 00000 n 0000048744 00000 n 0000051559 00000 n 0000051971 00000 n 0000052990 00000 n 0000057112 00000 n 0000070811 00000 n 0000084596 00000 n 0000092568 00000 n 0000111865 00000 n 0000133097 00000 n 0000140645 00000 n 0000144695 00000 n 0000170906 00000 n 0000197297 00000 n 0000222687 00000 n 0000235386 00000 n trailer <<00EF4935F8244CEEA506B9266CD8846B>]>> startxref 235573 %%EOF qtl/vignettes/genotypeprobabilities.pdf0000644000176000001440000010435012113233445020211 0ustar ripleyusers%PDF-1.3 %흮 1 0 obj << /Creator (CANVAS X \251 ACD Systems of America, Inc.) /Producer (Deneba PDF Filter 1.3.10.011 \050Win\051) /Author (Laura) /CreationDate (D:20120627123100) >> endobj 2 0 obj << /Pages 3 0 R /Dests 5 0 R /Type /Catalog >> endobj 6 0 obj << /Type /Page /Resources 7 0 R /Parent 3 0 R /Contents 8 0 R /MediaBox [0 0 792 324] >> endobj 7 0 obj << /ProcSet [/PDF /Text] /Font <> >> endobj 8 0 obj << /Length 9 0 R /Filter [/FlateDecode] >> stream x]K8r7!o]|?{ y&=Z"ke=E2ԙ]3>tWRֆ |VEz1F: i:;^wr7|t=U+H' ބ&Z> dV NoUtWt,j𩇣uv*dVA^kV!`"dVPM s*r-n`N:\[x Tt}˨DSYQ2jL@ hh +zPҍ cJqx<ٞ7ǸK4 t>î݆q:A9D+ꍰQƾ&0a~[lT@k0ovK[ #hE_ik%0qQmj^|G>%Z)L#,Uq&G7 <}\0St>m p>ȥi߃x羔Z\U4/\N #)5`q认+3bSRobQ{G8E2љ^#<8ab$595b%9Ӌ clreo'h%_߶x.m[\OV+{PZ`^Tс> N)`IFS>hJSJ 0-0G%Eʾm\)Գcra H:NtO.& <~LSրާ_L1҆=dȥUpbk2B57û;zYn F-1󫒊prQ9,TdqҡzFG74N>[U8̵aRs8n>gX}?]K:!8Va!sdV47)6@u!T-l3w|i}@cs=:rMԙu@EQYt A_ vS/*\wy! ]?Ui%tyФEތB^9;wtJŮіpV!x,tӬֲuP9w.XFG>mlWAרp'؇+Z LUg`u {Z|V5Yat-vOY+Fㅨq \+%`a%a(ͧ#][آnh(JTyTP%"0b6s,XO_B\=߷Hfc{s^dOYc~~K|۶Ki 0Ix oq Z-(\,!' `:dGq^W1@쩨""&KФ" @Sbr9ےxR@k\N;t} \nKP6nhhA#hF6q)Ɇѷ=^7WeQi-e2EK&  1'T\ vƄLΦ|8dʮ:6r]7ה%4Ir7knO xKdzŸGh#2#ړ-ؙXt#["ʵ?jJީ^B֥!7鼗@ZZ邕mח3όWͅ>M-Md{˚cE^?{~>@<̯)(Jߙ>蹏()~~;Tn0F;dlTL!~%@);@o($CF_*jqKOv OCY=X? Q?!A_?>~cc~51|&5 7h--q[!n}_2d-]CUMz-.bSO: $\b.TL iN&Zȁ.1s2v0Ç< RbӼeR68y(VjNweBNlʤn(Mv6~)B1cE1bTevȱc ? M=G7r2a!ACMb@9QqD.  D -$ᦦ4ZMw,( 쫬, Xy*Dʒ&kސ*OF }s ?cwksG)RFkzԠuiPcK9ٜqЈ*C痛Tt~~ʯo*3}4PsQ,D:-Sah0][!ɕŠ2/(0F !ILaCO ŏB ߳ӇLa,ITtmCsrWe P}E-HyhvL!.V+zlDtmCК4e \" ӵRSiU*H%ArtE]/'mTW/銺_'` R]rzc>]Q]i õa7Fda+P(JiQ [ cF 4RW:6Lďdg7o} 7\i%0¼k3nT@nI7^RGX ξ@cC6PJ`*`iZ_5o;O: fqs([;$9~B^1ycJ(Z武5KEa6UzUaڌmy( sP lȧ7;2[A F% |= $PƑ[=zrS=o>umjJ(A@41xD-1Z+9{A(̀r 1 `r㔣uNưZIOL/b\z'a !\b$K7A !Kǯ_}߸lo\[D$_Rfh.[c00:zF)u{|E !\EFrOڹH/Oz)߰hZ0WC[-WQ@ظf5%=$PիECb1}K %%V#)[hV{z(΋.ީ+ƍ͍{7f@7ݘWQx#nF͋EvW[F܂QJ Ş5⒚v„0C,Zƭrz%ؼVI*ЧijqKѡ-5ȐS!:\Q-iu{|Em.R. `!.zA?d(KMЈk?mj9o{=.&L2dqSQfl#Z#qlXU9Kƴ!ch;qo? m_d3\ۅI]څ&}^I]m]%k6~Y҅ev͠oi,k_.}څ|G%Kނ"v2Cu@ؾvʖi%%{KXyK-;,ab4/ly1g[_u&ҼԂ4_̂FjX|; y.J?GlhؑZa4 ߞM`Ԩ7:RO[?|*pk旯Z# a+twxWjFxk ^Wl)ò;`MQ no`}=MV^sL$+d8|Bea1fCOWDQ8CH |(^#hm 4f[G-N2|WuY ~ a-tw4bmb Ώ'\`El$󇦽aGjk(DBň&QbH=W/*01Τ0ټJ9["GQx`!MoƊ;AU 5 fAlއqKxvƉ17 A@;|E0qɦѦ;$!1n6*KD$\v>hؑZa4*J X0fCl'W>_ƤǙ8ø7za5*mb_fܨS~8upȧW;2[+|ʰ&XD0jTX>c#ܿӸ؜?t1f pu ޖ[),_Wz-_ ;>!# _=$ɛ,GDv(.XQi4ƛ*I8*f3EI8iv1ۃ~|J9ϋFGo{Xmq_TMҞK(r^ FX`ҺD;gq,>]]*7v!fiR"vT}ܶLk4usynx>o Ǘ6- |`vF_E20c#nF Mp1FeE endstream endobj 9 0 obj 5686 endobj 13 0 obj << /Length 14 0 R /Filter [/FlateDecode] /Length1 68554 >> stream x|TE?~fֽɦMjB DX  *`Qzņ*Kh( ("X@@Ŋ*RrgfwC(/{{3g,@[מu2pL-2fиЧHtא&V|װqwy%jbG?8l_%7|S{mh8B" 3၁ hAC`b|A l+0uϠ1Ce{1c[@G:.x7ի߰vY16*,y?087-Nʯ;l~4lt,5gڬ Õ W&ATc)xryPޙxd36,&/8/e0P$?aZWV.p˼&-Nf 4Ml=M9 >f5X*>! a Q 1 quh BC\h m"I\B7='ȹ+6>O>O>O>O>O>O>X`Y+QP1 JR" ğEC/L!2|aV)]Vx_6ewĠ==q{~@>vH F  =`( 14D^{Gc[}1a 1,uecD6yl;.K6&'K S"8ũ4QRLuLȄQ o%L0S99~vp&8[;;;:w:8vnvuup^p^r]I4W]W}WW+ukkivD91,1*1)1-vb^w%NO|&qUMRB"bIII% MTHT{jxjtj|jJj9SSNTu;RwM}/Hꧩߤ夹Z I6*ml15jҫ \mvܫ~ռ6z\V\~ͼƟ| S}nlĦ#c/RMߗ/*9[ F'M(w9Nsέ}ϝ8/teWpn$rnkǹH:'L9s!ȹ$sIs\ -H]ss TpnhH\AȹWg_%W6Fιѫ׮us CD:B}P Ӯ]yo(O .H:H8v.\999~N=ϱsg gbՙm?fygJ< pz8w諚g; O-<\S𺧣N?5cuOOeJ9d9'O6%ub߉'8 CoxĆO.Q{U^if\*yx](vDl om-Pk^Ϣ-^m _cKNWJ$)[{1_vU9RX.2],ze'_VcQ ^0  \xVK`d4x .0لI` %X a0 Ppޅ| 8kh'#p&zA|,0ơ.Bc=;x&< a#B,pEd1YBPN LNI 8 _cJ2WWSW(O(O*O)O+( gErXY()Ke reRyQyIyYyEyU)RV)5Ze^yM٠xJI,([6LٮPv*ו7M_[^me_yG9TUS)#5T.2D2%YY5Y-||U)ǕOOϔIsrZ9|||UVQUC}A9W~")0BUajFQjƩjPKMT0#܈0 K+7e?ZXZY[˭ lFd5EMUjju5]fȩF u:KQKԹ.R{-2uB]gpNJ]QתkգnTKMfumFo$iD#H6RT#ͨfTZJVZZk&hZIuѺjݴZKjyZOS j3FQ0jFq8o32,m@{B{R{J{Z{F[=-kK紥 6fl28rLN_ȯL~'?Ak:)'5J(JT UFuj!AFh0Jh8M#h$C(Mch,4:}y{$z$&,BSiFtZf qh5i-Z֡ui=Ih}ڀ6wt}N)t*-G4:ҙtvH;>>ԎjiǴ'ڧg vJ;ѾоԾj_khji?hOvIM].hWkr]p9B4STctK+k[tC'ǣꐝM҃u$9YC0=\#(=Zc8=^OSwzlST=MWz^SNSZzm^WgYz}Po7ֳ&r\Mow[o[zkVogSmMYlͪ;NzgUw{=^zoWϳlA`]w]@@ևP}~>\a\G}>N߫}t>}>N')4}.4~Et1]BKt}A߸lnaI4^1^6^5V5Zce\? 6`6=ΞbϰyVl=6-l;{f!z}O 5gg ^wXΖ׌ Uq(7L+?z^i950(cL?2Y.ה9r3ٍ[ʹrA"SK,Gj$y\,?Ly\"ϓOOH^"/e2yJ^'{VyS-{w#|TX>!bosWwlNHE>X Q”(vNQp_B>IIQҔJ R[(J}1ReZiU)JGYtU)ݕJO[U|il46,`V/JR WF[ԪX- k5kuXiֺ֚ۚkmgdfeͳX í#Sh[ "R7-`!ja"[j,b1,Vd -!PK%|EJߥ??+Uqx8j|d3zx6B)-Q&a lװ 6^c< o,w=pG&c~֛a}YzY- % fHt4va7BG[?s`1$i>yζ.ner?gl7v;]nc&OߡA.}>~HS4=C_үY5~~vOܛ9%$!r<M2?P.t;ɝQroPzߓɇQ Dԉ8y<ƪtVu!y0ԎYsQ[ Vu VfuX]Ve,Ve|GJ>RPFRFsď(-P[ޜD]HG!Q*PCRQ;jN4Ur;t95` ٯr/7R yc3$+[ -(pSRӪUOQV:uefoаQ&Mshݢemڶkߡc]vޣg} C {FgMx<8OZȣӦϘ9k?'|g>hXXK/kֲu_Xiʶع7vy8{y>Gǎ ~vNhg43ߟN<g43M&pF8 hg43M͠5 xpTj/<2 50%[Zb5ot{#N#r}ΈA9wҧ<˞290=J$c[>9\yJ,3zcCșۉA(Dm׈Q&>b<͹l @ِ#qlBfĻWgV$*`M/\fq,ms2BG ' '| BQBf#]r<,rpYq&*K~ת|L9*}8eo(GQ&cXF#fzռR!esYENGUOkUJڂݯ898n#v_*TA9vup_t0w_Tژ*U,\dbl@ŚgtZMÿY0g^xZ}teL⼣ ]A'{T<_>b,GLG<s&g|- x,Esc? pM唧}ar2hk@!+~|<|`"Nzj,,\ uGp^C@Eex{+D7a lSŸ8/Ƚ/ V(Q"`2ǂbz ܉5ml9 俟yy:#B\<%=WY\H2̀Z(it y!S|H{)Idvx,{ #0BnԒ>@]c0P:Ie0ǥ0[31}l6rHW b~T3w7Z1No1>q]HA$"K˻~Xgx2w _TAq-5mG0\ 8n b&M|_A[BCN1mb]^e~n^r\k䒹jysC쯡te2 Ut֫P@ ۍ韀|@od%Է6co;1@'I}q(xyDzCYUUvq V_*Ih!5q4PƼ^ A e_JWASp"~mmЖ.݌5DE~hQ 9_o~Ru~p|n0G4iOV۪i~[r2Utߵ'DGUD?9?\G[rC~iz#l>p7 ߋǼ0}~e m|ֿK W FbgW?G&EX7鿼b>.hD @Z 9?}:ߥ q:U6mhսoG+T^>K<>Sʐzѧr?c_p?3_W+ę,ӛŸ|FeJ.2磣̟ymO0o7zA>^Gp Ƶn7ߐxk߶fMߎkf0 .ݏ>稺_FW^q: 29T_?6iǫ%xU%X@OҖ UB|qQ@;PݷD{5|Ӧh S[߂uW`_\uv`}3Q?fΐg|WJms_A=?"KT Z+H]LU r|!oAUzF{1_6`>v|#]@x9~6K?PGA]AeWDfJODs0?;f܀yV %\\IHgg1<%4o<sR/?A{Q+7 }G~6WLhWVmT7ʫmMƢm]<]`ƾ( mR9)'0Ο~ wyϧAgC9{N 'xØ [mW*˙_"ҧPH˰8Q R_ԱѪ*.u9M _zlU`:-[bWwiUi vӓa|;;>T8Tw:O-߇{uH?#|/qa?{_s1fK|< WoR1B@-|HߩD|OmɈ%{S7ʗ{Q܀=i(\to\<6 W%h3 pWxt6Mk8aU 2!CK7p.ʅ6'}Q!FJ@.ۊ~q[؇x.ms}6:#ijJL?;yfY6 Ŏe¥oqa7fy@\WC0I8c0 +2Go]_"5x}uC7Y#UW+B2ĘqI7 @tϜV{t/:^u` ˕x 0OPOir ,~ʟw[! bx;6bߕ wFPq|ox98J}c,Yu7tPW`2zʝ/aS} Bն3U~F/ړf+ߏ֧0c:>rB71_Hdo>3z/xy寣tVs qUS}R O 0ҧ;:$u!]JSx 9}G_}+>?^=ӛ{ӻ|4⽜ܠgw3X?3T2srxT('\I87-DZBsV+/|8JN!=Q~.WyEhPx!T`-TP28 >49|oW߿M9|q7+CVIޱ})z7X{Om \Jo°}>w?muR!hC5_'Mh#OE_}M˽"^+^+B{zoo{xW!F_nӏv_ϛ h }+e)^ؐ/تJ߯ ;9||i`x:qBrv7?`=8>0NZlG'#b8i0"qWQN`y0R2*PKI3#_P]:CM|o7O,%>f}A69ҵޟ7 z$ޥ'{[^]~ P }>>(}O2$x8*Gn\zm8{唿e bUskFYuKM~^4Y.i!ϷhPvf]g*UݸݻWyre(Gnney O}}C^m3P'=D9C'gzۃ0M-g59T~6R-"w [w7ܦ5ۍ47ܶEym9&sɖ8Ɩ0)-AYx/Oy&yml3\*zk),%Y O=5bXxQ``n/|˵UN?_諳W}np- k~HVĻ߈J;> ?. lT9|n{zYG@/:-e\w;>Ɖ=E%8$tnϿ5J%v7Bu;IbUix,eFi\;!֐/>@8=)!Η I>еN+ 8N"zҢbpAYziFs;J:e,yShDfpZ#.El@fnTD1bb7}Z.X 3<%Rޢ1T(0 }(5 ""GPD921qQYTY8ҹl9:SDy覾^ڹk-V7vK/VKCS392dx8qx%t/NXAQ)n)%-hB(R[Hf 5EG'zޛCo |E%l@F0%~_Tz/ v# . z{ H0 #"^@F\@sIps'j'N5~g83@F_ De?QpQv$hY,4Epѯ62[E Ad{\n8:ň vD8unD7F/nҴ0QCAߣ}-RZXǎԎM)NEz8xhx4섃9i)|/+RH; _Қ܁!z!.(=$%m< KڤG0/i!~I Cx)˶Ts6:ZK#G.O5cK5;H.R܃$CIR)!w ROMwȊb|S4MTRB]& ZpCzG3>4926a7^ Lsc!WpӤM5{㵛dmюix N#$PF1qa",\\Z11q\@P1:Aw1~H x{{<;HW頍 2-ضnw-th;}gYT"<JɆ41x8p>X-4s ⵶:?>bΏ]e)uÔ[qSaʮ2dKع(f,)uNdQ"c7"=9a{"lsy]oVg]B7X/:Mv{7*#5ՅjUmf5Dթ&qjٵ ͪY4MS4Ihew-pEgܕ hnFxXGڱgKѳgt\\F,y:jiѱL5{xetHcꡳ+#&O m 1?3Ct}ͣ6 n{Kq}S8c<Ϛ|O& =OtN~![n'?s5#Ye(.3CYpa9x˥b}, uHRu]/(uƔQ&ELQrX&5U,b^L"xQB(ObE>7SQd艑eelgelgLƿ2#lj?ɭ [Ex78:h z{/oR|y(,"߆og?&L|ޚXϒgVF&dd4/_E>wL~#x>(`'#`=k;lR O,\a_ӟ&1f+pa[l_; DTb`$h`,'̉NKӠt{`)6'͗pc^ba~?ɟ'xiK1|%lD̻+8D Ag8D l}(|Kd [y{T< v-MC}<.R؊2x>#Vyb& V~ ٘3ހ>I&oұUΔ$#zG*N_Pb6fKB< o$!]INe^аz-E)JU%3&᝺Hy'_Vt }~ɞVK10$4&ɝd8Lf'brO-h/:^`x="iDW+FLh̑q#Z($_qp>~t֪ ]IIdWAefd=d;Wɸ~)3w̍󴙇[ *dv~yٽJ) ZoL.H<'G#,( P,r% C4͟F`Hi$o[1zUF-z50 qu56A<\>`U %ldk#q@;3THoQEA\u? h4 IX:`Z_@@@@@@@@@@@@@/% d_!!x! 5s-UpI{O!,ꎦ9`9a,L -ҊEjСCtoi|oͮf5A6oeȗ$6U2FLO^t<Vd %=/9t[C eRDX<7/f7on '>lތL>e[mMj78#r}dxaDۃ3m%s^YdBgXmAJ_UNmFDH;KCuô8?š8hkUQ_T( F ͞FN/mԊ.#Kc1{F^P<铎B>|Rƀ |,׋v!,^YA˂ҁƅ%Q$7B(FA|pQlv>3jꆕgu 5f1/|s=pp԰GwML^<yttזw\Zc{{ h6m;X+u?6E0ኸ^s.0犸^.& b4o:g&*⪋wYͳ.ʝX' ETb0  &l' r$,-RM-g}x I2mSI`ʕj.(`V^n *#|`n\jc. 9!|gΐtO#͒je3)!!7€eVm-mue[# $+$+"9tSm.o@̶^r 4e\WAt!pR aDQ<&Pqe~F( g1T\h1߼웭v mg/8""CfK#D@^8" ,_\Z*u}/ZndC",cL(IXj[qT#u\PZ{%"4,`PpxPXxP ͍;<#oPۂ%r"\^!|x!cS%mJ0*4oTBwLAk\Vyqɼ @i㫏ÀZೳ2%H>d<~ ĈD"U zx;׷uM^2w%]Gҟו׿(=-Jg\e(xR j~1JDD\0rpOݒXoi`$ #qnЋ6@#e*JhQb{Kml 8o;VQ1$WuGrbj625A?C\(2Du \x(Qd<+ٕ3B((3c_c&|-~%+BRBh/n㾯}AMlaa:H;yQS(\u"Hhʦw,z罋X̐M>9EVJឃiBQJ=$7 $Gi{0mgϯ7X{_ZФ5RϠu;m!Xr~ H&o׵/[h \"WA{mDTt\&xq+lwڍbg$4)"+~ū%:"#M\չ$ K_teՅG]GdE0Vܷ޵k&:#88Udsu3ؿx&_əia#DB#n|w(糳+ ((ށg?O5wObՉwza_o~pҨA$Il>ue.y& x^DۤPBI3G֙Q MBQI-W)1.+8X^Tߌ8f͈0:wл!W(_(d]hk ۃipy- L00DyaenwDL)"3(¿wE#hĂzkXāƥ{ =*ڀ{[:EIKkP߷;π)alNeDF=?3k~O?-Ϙ3M/ȪN}ť/ˇ=^s]&7Iӧ 2k5󂮯?fiP_ax2? U)4"$Bhϸ|[Cp瘭׈My/OxtWIt8ktQD4/)o7nޥpF-H8o&+DRuHe$Q5UT\_G(eIַ8u:0|9 BHlFRk;UןZi^q߫BM[?D6AN[èr}xuOSU+S[";mE#zh_U&Av e/PXdqck[g>e|҇v7<_~ %daeIڂ4EUJSVj ,Oi%Yñe͡0sYwSBbY4ܡV UYnHD*#mtQO[+=X=ҩjJէ-VY?sb7?S ̪-zY{%{) BGѳѽ_f)i"nຐO$,YX"Kf}@>_{Iϒw\iCv~dB=G 2c;H8S$I<,H+#b'"cu+CiJ`ı\.H0m%{-vL{`L8U㼍ZB-tQk#Ǹ_81_;OPg#Q\0RɄΙ3;U<1 ?v)']^GedIqoedQ BlCC&eE9G8c*Nթ:5!Um-:@XX(AtpՉT(OE$jkXUHA}@7F~ubwF׿1z?YˢM/]vx;oyC>83l$lq:頃i3;W$ Tmڇ[+QΉy'5 ɸ Ɔ/O9G~r|^a 9-$&/[h͋fACh2bop<"o6<4@.iPCztt}i fiWpYl= ~͑MuU(e<sݝܺ(# ܌􋻗ۦɛ~e'^x ^`.DqRqP<G7esMX\ہ j = zA  6`,RGpw *JX^o(Xztt۪>N?<) J6noۘvni˹K/t͸ov/vf܈`\T+v u # A}{a|AA.L]#CXpe bAvg(pDX0 F06s!Zp v4`k£!ܱB4o\_@/~,$wZeP-obIؔ,c;`04O_8[gvmS8 K^Ђz7~cxsؖ8 ' <3p>/||D.um9EOͼhpPeWr|;s*^0V#[놾D\ztV:GuV'jcH2hǿDe*QRH*})Qވj0V-9BpP Bp)rKN [0B9U!rJR "NPtj&I^ŴJ2l1ld'L1G|cˆi@)=Mvl ȗv@Ipo')!qC"+O̕ J3k=W?]}#U\䟺o}šF6uͷtx4›y޻bŔ$<zr 寧ʟ1^bxyV ֫q xtI.h][Ih8 pT#jrP,Bq#[ }DWWq8Exŀ2a:vLHت .imG;C`7XOݕnE)všZ-%,-F_% T}-1U+k4xE삝»Bm 06J0"UQb럹֧̂1KeSdb{ݵ-9BXOc;)~ d˘G$4cϲl9F=E&=4mH]^Y]><|}ͳ/j|,# n/ј/^!#m<a(R^8i &\CD27X@ q\;:4V %Xs\- u@_-) |:h Bq+PC7Z+|}XpAtVVEY|('U,7?BU~t⡽ۻo\^wcE߾;ƖaPQ3c$Ge9'NH&r]dI|s֨6ƩBls%n[ ɋ|hߋlVFv<[>s ;rarAA bd ;톽eg`q a׊;6l6 :[vtЖ!o-]1w?zIy%NK$t$q:)6^C>:){w$PJ$y|`((0%_q˝N}zM]W첥ڸ~2uޟ(\}`BcUf9o~GBs]hAg6Of>^r\9:;24;=tPk+>s\&˥7H6C#7N_0\yʥj)Kߥߍ4xMRO6ܭ.7ň=$f]U(AAAmo><nYqg.q+}XI@ /.M.+{%n2U]RH)R:#jT:&Yydk/7;){i]߽FۆOBpyw?5a待PHfQcge,/*6&:r#Rvr ^m5˄ !PJR)_AA/掚}?63sY9z5X[{(#׉Vdou\챁feڄd@Q2a48:,\b3b{ ;0[? juz]h;LZ vpnADOyҎv:\*JOwL`gwm;W*?eg~9ȯ*}7g7?"uC{{q}oCqn@̮wMMcߣM}ӫ8^0k S Jh"Nug}QYoڜP7"W5Q(,zly,Ywaᵉg w> endobj 4 0 obj << /Font <> >> endobj 5 0 obj << /CVPage1 [6 0 R /XYZ null 325 null] /CVPage1:0 [6 0 R /XYZ null 324 null] /CVPage1:1 [6 0 R /XYZ null 108 null] >> endobj 10 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ZZFYEH+Arial /Name /Rx05 /FirstChar 32 /LastChar 255 /Widths 11 0 R /Encoding /WinAnsiEncoding /FontDescriptor 12 0 R >> endobj 11 0 obj [278 278 355 556 556 889 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 750 556 750 222 556 333 1000 556 556 333 1000 667 333 1000 750 611 750 750 222 222 333 333 350 556 1000 333 1000 500 333 944 750 500 667 278 333 556 556 556 556 260 556 333 737 370 556 584 333 737 552 400 549 333 333 333 576 537 333 333 333 365 556 834 834 834 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278 278 278 556 556 556 556 556 556 556 549 611 556 556 556 556 500 556 500] endobj 12 0 obj << /Type /FontDescriptor /FontName /ZZFYEH+Arial /FontBBox [-665 -325 2000 1006] /Flags 32 /Ascent 905 /Descent -212 /Leading 117 /CapHeight 716 /XHeight 519 /AvgWidth 545 /MaxWidth 1015 /MissingWidth 750 /ItalicAngle 0 /StemV 95 /StemH 95 /FontFile2 13 0 R >> endobj xref 0 15 0000000000 65535 f 0000000018 00000 n 0000000203 00000 n 0000032868 00000 n 0000032950 00000 n 0000032999 00000 n 0000000272 00000 n 0000000385 00000 n 0000000457 00000 n 0000006226 00000 n 0000033139 00000 n 0000033334 00000 n 0000034282 00000 n 0000006249 00000 n 0000032843 00000 n trailer << /ID [<7da40ceee5f65e90361978c861c87d21> <7da40ceee5f65e90361978c861c87d21>] /Size 15 /Root 2 0 R /Info 1 0 R >> startxref 34579 %%EOF qtl/vignettes/fancyheadings.sty0000644000176000001440000002210612113233445016455 0ustar ripleyusers% fancyheadings.sty version 1.98 % Fancy headers and footers. % Piet van Oostrum, Dept of Computer Science, University of Utrecht % Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands % Telephone: +31 30 2531806. Email: piet@cs.ruu.nl % Sep 16, 1994 % version 1.4: Correction for use with \reversemargin % Sep 29, 1994: % version 1.5: Added the \iftopfloat, \ifbotfloat and \iffloatpage commands % Oct 4, 1994: % version 1.6: Reset single spacing in headers/footers for use with % setspace.sty or doublespace.sty % Oct 4, 1994: % version 1.7: changed \let\@mkboth\markboth to % \def\@mkboth{\protect\markboth} to make it more robust % Dec 5, 1994: % version 1.8: corrections for amsbook/amsart: define \@chapapp and (more % importantly) use the \chapter/sectionmark definitions from ps@headings if % they exist (which should be true for all standard classes). % May 31, 1995: % version 1.9: The proposed \renewcommand{\headrulewidth}{\iffloatpage... % construction in the doc did not work properly with the fancyplain style. % June 1, 1995: % version 1.91: The definition of \@mkboth wasn't restored on subsequent % \pagestyle{fancy}'s. % June 1, 1995: % version 1.92: The sequence \pagestyle{fancyplain} \pagestyle{plain} % \pagestyle{fancy} would erroneously select the plain version. % June 1, 1995: % version 1.93: \fancypagestyle command added. % Dec 11, 1995: % version 1.94: suggested by Conrad Hughes % CJCH, Dec 11, 1995: added \footruleskip to allow control over footrule % position (old hardcoded value of .3\normalbaselineskip is far too high % when used with very small footer fonts). % Jan 31, 1996: % version 1.95: call \@normalsize in the reset code if that is defined, % otherwise \normalsize. % this is to solve a problem with ucthesis.cls, as this doesn't % define \@currsize. Unfortunately for latex209 calling \normalsize doesn't % work as this is optimized to do very little, so there \@normalsize should % be called. Hopefully this code works for all versions of LaTeX known to % mankind. % April 25, 1996: % version 1.96: initialize \headwidth to a magic (negative) value to catch % most common cases that people change it before calling \pagestyle{fancy}. % Note it can't be initialized when reading in this file, because % \textwidth could be changed afterwards. This is quite probable. % We also switch to \MakeUppercase rather than \uppercase and introduce a % \nouppercase command for use in headers. and footers. % May 3, 1996: % version 1.97: Two changes: % 1. Undo the change in version 1.8 (using the pagestyle{headings} defaults % for the chapter and section marks. The current version of amsbook and % amsart classes don't seem to need them anymore. Moreover the standard % latex classes don't use \markboth if twoside isn't selected, and this is % confusing as \leftmark doesn't work as expected. % 2. include a call to \ps@empty in ps@@fancy. This is to solve a problem % in the amsbook and amsart classes, that make global changes to \topskip, % which are reset in \ps@empty. Hopefully this doesn't break other things. % May 7, 1996: % version 1.98: % Added % after the line \def\nouppercase % BY THE WAY, THIS IS THE LAST RELEASE OF VERSION 1. \let\fancy@def\gdef \def\lhead{\@ifnextchar[{\@xlhead}{\@ylhead}} \def\@xlhead[#1]#2{\fancy@def\@elhead{#1}\fancy@def\@olhead{#2}} \def\@ylhead#1{\fancy@def\@elhead{#1}\fancy@def\@olhead{#1}} \def\chead{\@ifnextchar[{\@xchead}{\@ychead}} \def\@xchead[#1]#2{\fancy@def\@echead{#1}\fancy@def\@ochead{#2}} \def\@ychead#1{\fancy@def\@echead{#1}\fancy@def\@ochead{#1}} \def\rhead{\@ifnextchar[{\@xrhead}{\@yrhead}} \def\@xrhead[#1]#2{\fancy@def\@erhead{#1}\fancy@def\@orhead{#2}} \def\@yrhead#1{\fancy@def\@erhead{#1}\fancy@def\@orhead{#1}} \def\lfoot{\@ifnextchar[{\@xlfoot}{\@ylfoot}} \def\@xlfoot[#1]#2{\fancy@def\@elfoot{#1}\fancy@def\@olfoot{#2}} \def\@ylfoot#1{\fancy@def\@elfoot{#1}\fancy@def\@olfoot{#1}} \def\cfoot{\@ifnextchar[{\@xcfoot}{\@ycfoot}} \def\@xcfoot[#1]#2{\fancy@def\@ecfoot{#1}\fancy@def\@ocfoot{#2}} \def\@ycfoot#1{\fancy@def\@ecfoot{#1}\fancy@def\@ocfoot{#1}} \def\rfoot{\@ifnextchar[{\@xrfoot}{\@yrfoot}} \def\@xrfoot[#1]#2{\fancy@def\@erfoot{#1}\fancy@def\@orfoot{#2}} \def\@yrfoot#1{\fancy@def\@erfoot{#1}\fancy@def\@orfoot{#1}} \newdimen\headrulewidth \newdimen\footrulewidth \newdimen\plainheadrulewidth \newdimen\plainfootrulewidth \newdimen\headwidth \newdimen\footruleskip \newif\if@fancyplain \@fancyplainfalse \def\fancyplain#1#2{\if@fancyplain#1\else#2\fi} \headwidth=-123456789sp %magic constant % Command to reset various things in the headers: % a.o. single spacing (taken from setspace.sty) % and the catcode of ^^M (so that epsf files in the header work if a % verbatim crosses a page boundary) % It also defines a \nouppercase command that disables \uppercase and % \Makeuppercase. It can only be used in the headers and footers. \def\fancy@reset{\restorecr \def\baselinestretch{1}% \def\nouppercase##1{{\let\uppercase\relax\let\MakeUppercase\relax##1}}% \ifx\undefined\@newbaseline% NFSS not present; 2.09 or 2e \ifx\@normalsize\undefined \normalsize % for ucthesis.cls \else \@normalsize \fi \else% NFSS (2.09) present \@newbaseline% \fi} % Initialization of the head and foot text. \headrulewidth 0.4pt \footrulewidth\z@ \plainheadrulewidth\z@ \plainfootrulewidth\z@ \footruleskip .3\normalbaselineskip \lhead[\fancyplain{}{\sl\rightmark}]{\fancyplain{}{\sl\leftmark}} % i.e. empty on ``plain'' pages, \rightmark on even, \leftmark on odd pages \chead{} \rhead[\fancyplain{}{\sl\leftmark}]{\fancyplain{}{\sl\rightmark}} % i.e. empty on ``plain'' pages, \leftmark on even, \rightmark on odd pages \lfoot{} \cfoot{\rm\thepage} % page number \rfoot{} % Put together a header or footer given the left, center and % right text, fillers at left and right and a rule. % The \lap commands put the text into an hbox of zero size, % so overlapping text does not generate an errormessage. \def\@fancyhead#1#2#3#4#5{#1\hbox to\headwidth{\fancy@reset\vbox{\hbox {\rlap{\parbox[b]{\headwidth}{\raggedright#2\strut}}\hfill \parbox[b]{\headwidth}{\centering#3\strut}\hfill \llap{\parbox[b]{\headwidth}{\raggedleft#4\strut}}}\headrule}}#5} \def\@fancyfoot#1#2#3#4#5{#1\hbox to\headwidth{\fancy@reset\vbox{\footrule \hbox{\rlap{\parbox[t]{\headwidth}{\raggedright#2\strut}}\hfill \parbox[t]{\headwidth}{\centering#3\strut}\hfill \llap{\parbox[t]{\headwidth}{\raggedleft#4\strut}}}}}#5} \def\headrule{{\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi \hrule\@height\headrulewidth\@width\headwidth \vskip-\headrulewidth}} \def\footrule{{\if@fancyplain\let\footrulewidth\plainfootrulewidth\fi \vskip-\footruleskip\vskip-\footrulewidth \hrule\@width\headwidth\@height\footrulewidth\vskip\footruleskip}} \def\ps@fancy{% \@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}%for amsbook % Define \MakeUppercase for old LaTeXen. % Note: we used \def rather than \let, so that \let\uppercase\relax (from % the original documentation) will still work. \@ifundefined{MakeUppercase}{\def\MakeUppercase{\uppercase}}{} \@ifundefined{chapter}{\def\sectionmark##1{\markboth {\MakeUppercase{\ifnum \c@secnumdepth>\z@ \thesection\hskip 1em\relax \fi ##1}}{}}% \def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne \thesubsection\hskip 1em\relax \fi ##1}}}% {\def\chaptermark##1{\markboth {\MakeUppercase{\ifnum \c@secnumdepth>\m@ne \@chapapp\ \thechapter. \ \fi ##1}}{}} \def\sectionmark##1{\markright{\MakeUppercase{\ifnum \c@secnumdepth >\z@ \thesection. \ \fi ##1}}}}% %\csname ps@headings\endcsname % use \ps@headings defaults if they exist \ps@@fancy \gdef\ps@fancy{\@fancyplainfalse\ps@@fancy}% % Initialize \headwidth if the user didn't \ifdim\headwidth<0sp % This catches the case that \headwidth hasn't been initialized and the % case that the user added something to \headwidth in the expectation that % it was initialized to \textwidth. We compensate this now. This loses if % the user intended to multiply it by a factor. But that case is more % likely done by saying something like \headwidth=1.2\textwidth The doc % says you have to change \headwidth after the first call to, % \pagestyle{fancy}. This code is just to catch the most common cases were % that requirement is violated. \advance\headwidth123456789sp\advance\headwidth\textwidth\fi} \def\ps@fancyplain{\ps@fancy \let\ps@plain\ps@plain@fancy} \def\ps@plain@fancy{\@fancyplaintrue\ps@@fancy} \def\ps@@fancy{% \ps@empty % This is for amsbook/amsart, which do strange things with \topskip \def\@mkboth{\protect\markboth}% \def\@oddhead{\@fancyhead\@lodd\@olhead\@ochead\@orhead\@rodd}% \def\@oddfoot{\@fancyfoot\@lodd\@olfoot\@ocfoot\@orfoot\@rodd}% \def\@evenhead{\@fancyhead\@rodd\@elhead\@echead\@erhead\@lodd}% \def\@evenfoot{\@fancyfoot\@rodd\@elfoot\@ecfoot\@erfoot\@lodd}% } \def\@lodd{\if@reversemargin\hss\else\relax\fi} \def\@rodd{\if@reversemargin\relax\else\hss\fi} \let\latex@makecol\@makecol \def\@makecol{\let\topfloat\@toplist\let\botfloat\@botlist\latex@makecol} \def\iftopfloat#1#2{\ifx\topfloat\empty #2\else #1\fi} \def\ifbotfloat#1#2{\ifx\botfloat\empty #2\else #1\fi} \def\iffloatpage#1#2{\if@fcolmade #1\else #2\fi} \newcommand{\fancypagestyle}[2]{% \@namedef{ps@#1}{\let\fancy@def\def#2\relax\ps@fancy}} qtl/vignettes/bcsft.Rnw0000644000176000001440000010137312113233445014706 0ustar ripleyusers\documentclass[12pt,fullpage]{article} %\VignetteIndexEntry{Users Guide for New $BC_sF_t$ Tools for R/qtl} \usepackage{fullpage} \marginparwidth 0pt \oddsidemargin 0pt \evensidemargin 0pt \topmargin 0pt \textwidth 16cm \textheight 21cm \usepackage{fancyheadings} \usepackage{amsmath} \usepackage{graphicx} \raggedbottom \lhead{\bf R/qtl bcsft vignette} \usepackage{cite} \bibliographystyle{plos} \chead{} \rhead{} \lfoot{} \cfoot{} \rfoot{} \setlength{\parindent}{0cm} \addtolength{\parskip}{\baselineskip} \setlength{\footrulewidth}{\headrulewidth} \usepackage{Sweave} \begin{document} \title{Users Guide for New $BC_sF_t$ Tools for R/qtl} \author{Laura M. Shannon \and Brian S. Yandell \and Karl Broman} \date{29 January 2013} \maketitle \section*{Introduction} Historically QTL mapping studies have employed a variety of crossing schemes including: backcrosses \cite{Tanks}, sib-mating \cite{Sib}, selfing \cite{Collard}, RI lines \cite{fly}, and generations of random mating within mapping populations \cite{Darvasi}. Different cross designs offer different advantages. Backcrossing allows for the isolation of limited regions of the donor parent genome in an otherwise recurrent parent background. Selfing and sib-mating in an intercross provide the opportunity to examine all genotype combinations and observe dominance. RI lines allow for multiple phenotype measures on a single line. Random mating increases recombination frequency. In order to use a combination of these cross types and access their various benefits, a more flexible analysis approach is needed. \begin{figure} \includegraphics{why_we_need_a_new_program.pdf} \caption{An illustration of QTL geneotype inference in populations created through different crossing structures. All images are of a chromosome section including 2 markers (A and B) and a putative QTL (Q). Chromosomal segments are pink when they share a genotype with the lower case parent and black when they share a genotype with the capital parent. Regions where the genotype cannot be observed are dashed. Regions where the genotype is unknown are gray.} \label{Crossovers} \end{figure} This guide develops methods to analyze advanced backcrosses and lines created by repeated selfing by extending features of R/qtl \cite{Broman}. Interval mapping requires estimating the probable genotype of a putative QTL based on the neighboring markers \cite{Lander}. The probability that a loci between two genotyped markers is of a given genotype depends on the recombination history of the population, which depends on the type of cross. In Figure \ref{Crossovers} we have two markers, A and B, each with two possible allele genotypes, capital or lower case. Let us assume that markers A and B are spaced such that double crossovers in a single generation are unlikely. Let Q be the position of the putative QTL between A and B. When the observed genotypes at A and B are both homozygous capital in an $F_2$ or $BC_1$ the genotype at Q is most likely homozygous capital (Figure \ref{Crossovers} part B). However, in an $F_3$, Q might be heterozygous or homozygous for either parent (Figure \ref{Crossovers} part C). Similarly, in a $BC_2$, Q might be homozygous capital or heterozygous, when the observered genotype is AB/AB. Each generation brings an additional opportunity for crossing over within the interval, increasing the likelihood that Q will not share a genotype with A and B. This has real consequences when determining genotype probabilities (Figure \ref{Probs}). \begin{figure} \includegraphics{genotypeprobabilities.pdf} \caption{ The probability that a pair of loci is of a given genotype based on the transition probabilities from the known genotype of marker one (As) to the unknown genotype of the putative QTL (Bs).} \label{Probs} \end{figure} Genetic map creation is also based on recombination history. Assuming an $F_2$ or $BC_1$ and sufficiently close markers to make double crossovers in a single generation improbable, individuals which are homozygous for the recurrent parent allele at two adjacent markers exhibit no recombination events between those two markers (figure \ref{Crossovers} part B). However, in an $F_3$ the state of being homozygous for the recurrent parent allele at neighboring markers can be accomplished with 0, 1, or 4 recombination events (figure \ref{Crossovers} part C). If an $F_3$ is treated as an $F_2$, an individual with 2 adjacent markers homozygous for the same parent will be counted as having undergone 0 recombination events. However, the actual expected number of recombination events for the described individual is: \[r^4+\frac{r(1-r)}{8}\approx r/8~,\] where $r$ is the recombination frequency. Therefore, treating an $F_3$ as an $F_2$ would artificially shorten the map length (Figure \ref{recomb}). The number of recombination events between two markers depends on the recombination frequency and cross history, and the number of recombination events in agregate determines the map length. \begin{figure} \includegraphics{recombinationcount.pdf} \caption{Estimated recombination counts between pairs of markers with observed genotypes.} \label{recomb} \end{figure} In this guide we present our method for analyzing mapping populations with advanced cross histories while avoiding the pitfalls described above. Specifically, we address populations resulting from repeated backcrossing ($BC_s$), repeated selfing ($F_t$), and backcrossing followed by selfing ($BC_sF_t$). The first section is a tutorial on how to use the new tools. The second section lays out the way we derived the equations for probabilities and recombination counts, which allow for the analysis of advanced cross histories. The third section contains a technical description of the modifications to the code of the previous release of R/qtl \cite{Broman}. \section*{Tutorial} These changes to R/qtl are mostly internal. The one thing that does change for the user is reading in the data. Data can be read in using {\em read.cross()} as for all other crosses. We will use the listeria sample data from R/qtl below. <<>>= library(qtl) listeria.bc2s3<-read.cross(format="csv", file=system.file(file.path("sampledata", "listeria.csv"), package = "qtl"), BC.gen=2, F.gen=3) @ Here's another way to convert a cross. Suppose the R/qtl hyper data was really a $BC_3$ (or $BC_3F_0$). You can convert it as follows: <<>>= data(hyper) hyper3 <- convert2bcsft(hyper, BC.gen = 3) @ We will briefly highlight the difference in results between crosses analyzed using the traditional program and those analyzed using our new tools. However, we do not discuss the entire process of QTL mapping. Please refer to the tutorials available through rqtl.org or A Guide to QTL Mapping with R/qtl by Karl Broman \cite{bromanbook} for guidence on complete analysis. First we compare the maps for the listeria data set (figure \ref{lismap}). % est.map(listeria.bc2s3) takes time <<>>= listeria.f2<-read.cross(format="csv", file=system.file(file.path("sampledata", "listeria.csv"), package = "qtl")) map.bc2s3 <- est.map(listeria.bc2s3) map.f2<-est.map(listeria.f2) @ Now, we will compare the maps for the hyper data (figure \ref{hypmap}). <<>>= map.bc1 <- est.map(hyper) map.bc3<-est.map(hyper3) @ \begin{figure} <>= plot(map.f2, map.bc2s3, label=FALSE, main="") @ \caption{A comaprison of genetic maps of the listeria data set analyzed as though it were a $F_2$ (left) and as though it were a $BC_2F_3$ (right).} \label{lismap} \end{figure} \begin{figure} <>= plot(map.bc1, map.bc3, label=FALSE, main="") @ \caption{ A comparison of genetic maps of the hyper data set analyzed as though it were a $BC_1$ (left) and as though it were a $BC_3$(right).} \label{hypmap} \end{figure} % calc.genoprob takes time. In both cases the map length is smaller when the cross is analyzed as a $BC_sF_t$ because the same number of recombination events are attributed to multiple generations. In order to demonstrate that the cross history makes a real difference in outcome of a QTL analysis, we asign the same map to both cross objects regardless of cross history for direct comparisson. Comparing identical data sets with identical maps using the {\em scanone} command illustraits that position-wise LOD score also depends on cross history (figures \ref{lisscan} and \ref{hypscan}) . <<>>= listeria.bc2s3<-replace.map(listeria.bc2s3, map.f2) listeria.f2<-replace.map(listeria.f2, map.f2) listeria.f2<-calc.genoprob(listeria.f2, step=1 ) one.f2<-scanone(listeria.f2, method="em",pheno.col=1) listeria.bc2s3<-calc.genoprob(listeria.bc2s3, step=1 ) one.bc2s3<-scanone(listeria.bc2s3, method="em",pheno.col=1) @ \begin{figure} <>= plot(one.f2, one.bc2s3, col=c("red", "purple")) @ \caption{LOD plots for simple interval mapping with the listeria data set. The red curves are from analysis as though the population were a $F_2$. The purple curves are from analysis as though the population were a $BC_2F_3$. Both were analyzed using the same map distances to facilitate comparison} \label{lisscan} \end{figure} <<>>= hyper3<-replace.map(hyper3, map.bc1) hyper<-replace.map(hyper, map.bc1) hyper<-calc.genoprob(hyper, step=1 ) one.hyp<-scanone(hyper, method="em",pheno.col=1) hyper3<-calc.genoprob(hyper3, step=1 ) one.hyp3<-scanone(hyper3, method="em",pheno.col=1) @ \begin{figure} <>= plot(one.hyp, one.hyp3, col=c("red", "purple")) @ \caption{LOD plots for simple interval mapping with the hyper data set. The red curves are from analysis as though the population were a $BC_1$. The purple curves are from analysis as though the population were a $BC_3$. Both were analyzed using the same map distances to facilitate comparison} \label{hypscan} \end{figure} \section*{Calculations} Allowing for the analysis of $BC_SF_T$ crosses in R/qtl required two new sets of calculations: genotype probabilities for different cross histories and recombination counts for these cross histories. The genotype probabilities were derived based on Jiang and Zeng's \cite{jiang} calculations and the recombination counts are estimated using a golden section search. \subsection*{Genotype Probabilities} Jiang and Zeng \cite{jiang} provide a guide for calculating genotype frequencies resulting from several types of crosses of inbred lines. Although they examine many cases ($F_2$, selfed $F_t$, random mating $F_t$, backcross from selfed $F_t$, and $BC_s$) they do not address all possible cross structures. Most notably, they do not discuss $BC_sF_t$ crosses. In this section we derive the equations for calculating genotype probabilities for a $BC_sF_t$ cross. The equations we arrived at are heavily based on those of Jiang and Zeng. However they have been modified both to address $BC_sF_t$ cross histories and to function within the context of the existing R/qtl program. We include all the implemented equations, both new and modified, below. QTL mapping requires estimating the putative QTL genotype based on the observed genotypes of flanking markers. In all cases there are 2 parental inbred lines. Line 1 will be indicated by capital letters, while line 2 will be indicated by lower case letters. A particular descendant of these lines has a known genotype at locus A (indicated with $A$ or $a$), however the genotype at locus B (indicated with $B$ or $b$), the putative QTL, has not been observed. The genotype at locus B is dependent on the genotype at locus A, the recombination rate between locus A and locus B ($r$), and the cross history. \subsubsection*{Backcross $BC_S$} The simplest case is a $BC_1$ with line 1 as the reccurrent parent. Let $q$ be a vector of the frequency of all possible genotypes of loci A and B \[q = \left[\begin{array}{cccc}freq(\frac{AB}{AB}) & freq(\frac{Ab}{AB}) & freq(\frac{aB}{AB}) & freq(\frac{ab}{AB})\end{array}\right] = \left[\begin{array}{cccc}\frac{w}{2} & \frac{r}{2} & \frac{r}{2} & \frac{w}{2}\end{array}\right] \] where $w=1-r$. After a subsequent generation of backcrossing the genotype frequencies will change based on the probability that a pair of loci with a particular genotype will produce offspring of each genotype when backcrossed to the recurrent parent. We will call this the transition probability. In order to calculate $q$ for a $BC_2$ we will need transition probabilities for all possible genotype combinations. Let $M$ be the matrix of transition probabilities. \[M=\left[\begin{array}{llll} P \left( \frac{AB}{AB}| \frac{AB}{AB}\right) & P \left(\frac{AB}{AB}|\frac{AB}{Ab}\right) & P \left( \frac{AB}{AB} |\frac{AB}{aB}\right) & P \left( \frac{AB}{AB}|\frac{AB}{ab}\right)\\[5pt] P \left(\frac{AB}{Ab} |\frac{AB}{AB} \right) & P \left((\frac{AB}{Ab} | \frac{AB}{Ab}\right) & P \left( \frac{AB}{Ab} |\frac{AB}{aB}\right) & P \left( \frac{AB}{Ab} |\frac{AB}{ab}\right)\\[5pt] P \left( \frac{AB}{aB}|\frac{AB}{AB} \right) & P \left( \frac{AB}{aB}|\frac{AB}{Ab}\right) & P \left( \frac{AB}{aB}| \frac{AB}{aB}\right) & P \left( \frac{AB}{aB}|\frac{AB}{ab}\right)\\[5pt] P \left( \frac{AB}{ab}| \frac{AB}{AB}\right) & P \left( \frac{AB}{ab}| \frac{AB}{Ab}\right) & P \left( \frac{AB}{ab}| \frac{AB}{aB}\right) & P \left( \frac{AB}{ab}| \frac{AB}{ab}\right)\end{array} \right] = \left[\begin{array}{cccc} \frac{w}{2} & \frac{r}{2} & \frac{r}{2} & \frac {w}{2}\\[5pt] 0 & \frac{1}{2} & 0 & \frac{1}{2}\\[5pt] 0 & 0 & \frac{1}{2} & \frac{1}{2}\\[5pt] 0 & 0 & 0 & 1 \end{array}\right] \] The frequency vector from the $BC_1$ can then be multiplied by the transition matrix to arrive at a frequency vector for a $BC_2$: \[q_{BC_2} = qM~. \] With each subsequent generation of backcrossing it is necessary to multiply by the transtion matrix again. The equation for determining genotype frequencies based on any number of backcross generations ($s$) is: \[q_{BC_s}=qM^{s-1}~.\] This can be further simplified \cite{Bulmer}. $P(s,0)$ is a set of probabilities for all genotype combinations at two loci in a $BC_s$ population. It is equivalent to $q_{BC_s}$, but organized differently to make it easier to read. \[P(s,0) =\begin{array}{ccc} & BB & Bb\\[5pt] AA & A_{11} & A_{12}\\[5pt] Aa & A_{12} & A_{22} \end{array} \] When $s=1$ \[A_{11}=A_{12}=\frac{w}{2}\] \[A_{12} = \frac{r}{2} \] For any value of $s$ \[A_{11}= \frac{2^s-2+w^s}{2^s} \] \[A_{12} = \frac{1-w^s}{2^s} \] \[A_{22}= \frac{w^s}{2^s} \] Note the symmetry on the diagonal of recombinant alleles (Ab/AB and aB/AB) but not on the diagonal with only non-recombinant alleles (AB/AB and ab/AB). This asymmetry is due to the fact that $ab$ alleles are only introduced in the $F_1$ and therefore all such alleles remaining in the population have never recombined where as $AB$ alleles are introduced every generation. Genotype frequencies can be calculated for all types of crosses using a vector of initial frequencies and a transition matrix. \subsubsection*{Repeated Selfing $F_t$} Next, we will discuss the calculations for genotype frequencies from an $F_t$ population resulting from repeated selfing. This crossing structure is also sometimes refered to as an $S_t$, but we are using $F_t$ to be consistant with the notation used by R/qtl. The major difference between the calculations for an $F_t$ and a $BC_s$ is that while in a backcross one allele is always AB, so there are only 4 genotype possibilities, in an $F_t$ there are 10 genotype possibilities. \[q_{F_1}=\left[\begin{array}{cccccccccc}\frac{AB}{AB} & \frac{AB}{Ab} & \frac{Ab}{Ab} & \frac{AB}{aB} & \frac{AB}{ab} & \frac{Ab}{aB} & \frac{Ab}{ab} & \frac{aB}{aB} & \frac{aB}{ab} & \frac{ab}{ab}\end{array}\right] =\left[\begin{array}{cccccccccc}0&0&0&0&1&0&0&0&0&0\end{array}\right] \] The transition matrix for an $F_t$ is the same as Jiang and Zeng \cite{jiang}: \[N=\left[\begin{array}{cccccccccc} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\[5pt] \frac{1}{4} & \frac{1}{2} & \frac{1}{4} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\[5pt] 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\[5pt] \frac{1}{4} & 0 & 0 & \frac{1}{2} & 0 & 0 & 0 & \frac{1}{4} & 0 & 0 \\[5pt] \frac{w^2}{4} & \frac{rw}{2} & \frac{r^2}{4} & \frac{rw}{2}& \frac{w^2}{2} & \frac{r^2}{2} & \frac{rw}{2} & \frac{r^2}{4} & \frac{rw}{2} & \frac{w^2}{4}\\[5pt] \frac{r^2}{4} & \frac{rw}{2} & \frac{w^2}{4} & \frac{rw}{2}& \frac{r^2}{2} & \frac{w^2}{2} & \frac{rw}{2} & \frac{w^2}{4} & \frac{rw}{2} & \frac{r^2}{4}\\[5pt] 0 & 0 & \frac{1}{4} & 0 & 0 & 0 & \frac{1}{2} & 0 & 0 & \frac{1}{4} \\[5pt] 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\[5pt] 0 & 0 & 0 & 0 & 0 & 0 & 0 & \frac{1}{4} & \frac{1}{2} & \frac{1}{4} \\[5pt] 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1\end{array} \right] \] Again, these can be multiplied to arrive at the probability of all genotypes in the $F_t$. \[q_{F_t}=q_{F_1}N^{t-1}\] This can be simplified. $P(0,t)$ contains the probabilities for all genotype combinations for two loci in an $F_t$ population (once again it is equivalent to $q_{F_t}$ reorganizes). \[P(0,t) = \begin{array}{ccccc} & BB & Bb & bB & bb\\[5pt] AA & B_{11} & B_{12} & B_{12} & B_{14}\\[5pt] Aa & B_{12} & B_{22} & B_{23} & B_{12}\\[5pt] aA & B_{12} & B_{23} & B_{22} & B_{12}\\[5pt] aa & B_{14} & B_{12} & B_{12} & B_{11} \end{array} \] The probabilities $B_{ij}$ of ending up in a particular genotype after $t$ generations can be modeled in terms of generations spent in the double heterozygous stage (at least 1, as $F_1$ is a double heterozygote), the probability of moving from that genotype to either one of the intermediate stages or to a double homozygote, the time spent at an intermediate stage (could be 0), and the probability of moving from an intermediate stage to a double homozygote. There are four transient states (double heterozygotes), 8 intermediate states (single heterozygotes) and 4 absorbing states (double heterozygotes). The only genotypes which can produce all other genotypes are the transient double heterozygotes ($B_{22}$ and $B_{23}$). Therefore with each generation there is an exponential decay in the probability of remaining in the double heterozygous state. In order to remain in the double heterozygous state there either has to be no recombination ($w^2$) or a double recombination event ($r^2$) in every generation. In order to model this we reparameterize $w^2$ and $r^2$ as $\beta$ and $\gamma$, specifically $\beta+\gamma=w^2$ while $\beta-\gamma = r^2$. $\beta$ is also the probability of remaining in a double heterozygous state given that the line started in one of the two double heterozygous states in a single generation. \[B_{22}= \frac{\beta^{t-1}+\gamma^{t-1}}{2} \] \[B_{23}= \frac{\beta^{t-1}-\gamma^{t-1}}{2} \] \[ \beta=\frac{w^2+r^2}{2} \] \[\gamma= \frac{w^2 - r^2}{2}\] The 8 intermediate states, with one locus homozygous and one heterozygous. During one of the previous generations, one locus was fixed while the other remained heterozygous. There are two exponential decays, with the transition point unknown. After some simplification, this can be expressed as$B_{12}$: \[B_{12}=\frac{rw\left(\frac{1}{2^{t-1}}-\beta^{t-1}\right)}{1-2\beta} \] Finally, the four absorbing states, heterozygous at both loci, can be reached from a number of paths, involving simultaneous or separate fixation of both loci. The calculations are more involved, but simplify ty $B_{11}$ or $B_{14}$: \[B_{11}= f(w,r)= \frac{1}{8} \left[ w^2 \left(g \left(\beta, t \right) + g \left( \gamma, t \right) \right) + r^2 \left(g \left( \beta, t \right) - g \left( \gamma, t \right) \right) \right] + \frac{rw}{5} \left[g \left( \beta ,t \right) + g \left(2\beta , t-1 \right) \right] \] \[B_{14}=f(r,w) \] With: \[g\left( \beta, t \right) = (1-\beta^{t-1}) / (1-\beta)~.\] Unlike P(s,0), P(0,t) is symmetric on both diagonals because both parental alleles are equally present in the $F_1$ and never introgressed again. One major difference between working with a backcross and an $F_t$ is that while in a backcross phase is always known, in an $F_t$ phase cannot be observed. When dealing with phase unknown data the two heterozygote cases can be collapsed as follows: \[ \begin{array}{cccc} & BB & Bb & bb\\[5pt] AA & B_{11} & 2B_{12} & B_{14}\\[5pt] Aa & 2B_{12} & 2\left(B_{22}+ B_{23}\right) & 2B_{12}\\[5pt] aa & B_{14} & 2B_{12} & B_{11} \end{array} \] Since we cannot distinguish between the two heterozygote classes we add them and report the frequency of both. The final difference between backcross and $F_t$ calculations is that for $F_t$ populations it is possible to have partially informative markers. Partially informative markers can only be interpreted as not belonging to a particular homozygous class. For instance if a marker were measured using the presence or absence of a band on a gel, heterozygotes would be indistinguishable from the homozygous present class. We will refer to partially informative markers as either "not AA" or "not aa". In order to calculate the probability of partially informative markers we add the probabilities of the genotypes we cannot distinguish between, much like the phase unknown case above. For example, $not\; AA/BB$ could be $Aa/BB$, $aA/BB$, or $aa/BB$ so we sum all of those probabilties to get $2B_{12}+B_{14}$. All other genotypes with partially informative markers can be calculated similarly. \subsubsection*{Backcrossing followed by selfing $BC_sF_t$} The described equations for the $BC_s$ and the $F_t$ form the basis for the $BC_sF_t$. The two types of crosses can be thought of sequentially. The $BC_s$ that forms the first steps of the $BC_SF_t$ is exactly the same as the $BC_S$ on it's own. The difference between calculating an $F_t$ which follows several genetations of backcrossing and one which follows an $F_1$ is the vector of starting genotype frequencies. In this case the starting genotype frequencies can be supplied by $q_{BC_S}=qM^{s-1}$. The six genotypes not represented all have starting frequency 0. \[q_{BC_SF_0} =\left[\begin{array}{cccccccccc} \frac{2^s-2+w^s}{2^s} & \frac{1-w^s}{2^s} & 0 & \frac{1-w^s}{2^s} & \frac{w^s}{2^s} & 0 & 0 & 0 & 0 & 0\end{array}\right] \] The $q$ resulting from this modification of $q_{BC_S}$ can be multiplied by the $F_t$ transition matrix. Much like in the previous cases this can be simplified. $P(s,t)$ contains the probabilities of all possible genotype combinations at two loci for a $BC_sF_t$. Below, we explicitly identify the parts of the equations from the backcross (A) and selfing (B) probablities. \[P(s,t) = \begin{array}{ccccc} & BB & Bb & bB & bb\\[5pt] AA & C_{11} & C_{12} & C_{12} & C_{14}\\[5pt] Aa & C_{12} & C_{22} & C_{23} & C_{24}\\[5pt] aA & C_{12} & C_{23} & C_{22} & C_{24}\\[5pt] aa & C_{14} & C_{24} & C_{24} & C_{44} \end{array} \] Where: \[C_{22}= A_{22}(s)B_{22}(t) \] \[C_{23}= A_{22}(s)B_{23}(t) \] \[C_{12}= A_{22}(s)B_{12}(t) + A_{12}(s)\left(\frac{1}{2}\right)^t \] \[C_{24}=A_{22}(s)B_{12}(t) \] \[C_{11}= A_{22}(s)B_{11}(t)+A_{12}(s)\left(1-\left(\frac{1}{2}\right)^t\right)+A_{11}(s) \] \[C_{14}= A_{22}(s)B_{11}(t)+A_{12}(s)\left(1-\left(\frac{1}{2}\right)^t\right) \] \[C_{44}=A_{22}(s)B_{11}(t) \] Because these probabilities depend on the backcross probabilities there is only symmetry on one diagonal when $s>0$. Partially informative markers and phase unknown data can be treated the same way as an $F_t$. \subsection*{Recombination Counts} In the previous implementation of R/qtl recombination counts were calculated, however for advanced crossing schemes there is no direct analytic solution. Instead we implemented a hill climbing algorithm using a golden section search \cite{Kiefer} which determines the most probable recombination frequency, rather than calculating an actual value. The search space starts between 0 and 0.5 (all possible recombination frequencies). The golden section search relies on comparing three points (figure \ref{search}). To start with the points are $r=0$, $r=0.5$, and $r=r_1$, where the value of $r_1$ is determined so that the ratio of a to a+b is equal to the ratio of a to b. Then a new point ($r=r_2$) is added in the larger interval so that the ratio of d to a is equal to the ratio of c to d. The set of 3 $r$ values containing the highest maximum likelihood (as compared to the null model of unlinked markers $r=0.5$) are kept, and the remaining value is dropped (in this case $r=0.5$). The search algorithm starts again with 0, $r_1$, and $r_2$ as the three points. This process repeats until tolerance for the minimum improvement in likelihood is reached, then the $r$ value with the highest likelihood is reported as the maximum likelihodd estimate used in the map. This provides an accurate estimate of recombination frequency. \begin{figure} \includegraphics{goldensectionsearch.pdf} \caption{An illustration of the golden section search} \label{search} \end{figure} \subsection*{A Note on Intercrosses and Random Matings} These equations are accurate for $BC_sF_t$ when $F_t$ refers to any number of selfed generations. We have not implemented code to address advanced intercross lines resulting from sib mating or random mating within an advanced cross. Below we sketch ideas to develop these algorithms. In an $F_2$, selfing and sib-mating are interchangeable in terms of calculations because the entire population has an identical $F_1$ genotype. However after the $F_2$, calculations get more complicated for sib-mated populations. Each $F_2$ is sib-mated to create an $F_3$. Sib-mating brings the added complication that we need to think about families instead of individuals. There are 10 possible $F_2$ genotypes leading to 55 possible combinations of cross parents and their next generation families. A transition matrix ($L$) analagous to the one for selfing ($N$) would have to be 55 x 55 and account for the probability that a family that resulted from a cross between a particular set of parents in the $F_{t-2}$ would yield a cross between another set of parents in the $F_{t-1}$. This would be multiplied by a vector of 55 starting probabilities for the $F_1$ ($q_{F_1}^*$), these being probabilities of genotypes for specific crosses rather than for individuals. Of course, for the $F_1$, there is only one type of cross $AB/ab X AB/ab$ which can be the parents of the $F_2$, and the probability of the other 54 types of crosses is 0. Multiplying these successively will result in the probabilities of the crosses that produce the $F_t$, since our actual question is the probability of the genotypes of the $F_t$ where one individual is selected from each family, we will need a second matrix, K. This matrix will give the probability for each of the 10 possible genotypes results based on the 55 possible crosses. The final result will be the probability of the 10 genotypes ($q_{F_t}$). The equation for the genotype probabilities after t generations of intercrossing, then is: \[q_{F_t}=(q_{F_1}L^{t-2})K~.\] Note that the selfed $F_t$ is a special case with only the 10 selfings of the 55 possible crosses being non-zero. In general, this formal equation can be simplified substantially by using symmetry arguments, and implemented in a similar manner to the selfing case. Transient and absorbing states can be handled in an analogous but somewhat more complicated manner to the selfed case. However, the devil is in the details! We consider the case of random mating after $s$ generations of backcross and $t$ generations of selfing. We begin with the $q_{BC_s F_t}$ 10-vector of phase-known genotype frequencies, and multiply by a 10$\times$4 matrix ($J$) to convert these frequencies into the four possible two-locus alleles ($u$). These allele frequencies are cross multiplied ($u_Tu$) to create a 4$\times$4 matrix of random mating frequencis of genotypes, which are then reduced to the 10-vector format of phase-known genotype frequencies ($q_{BC_s F_t R}$). Eight of the rows of the matrix $J$ are simple (0, 0.5 or 1 values), while the middle two involve the possible recombinants and non-recombinants: \[J= \begin{array}{ccccc} & AB & Ab & aB & ab \\[5pt] \frac{AB}{AB} & 1 & 0 & 0 & 0\\[5pt] \frac{AB}{Ab} & \frac{1}{2} & \frac{1}{2} & 0 & 0\\[5pt] \frac{Ab}{Ab} & 0 & 1 & 0 & 0 \\[5pt] \frac{AB}{aB} & \frac{1}{2} & 0 & \frac{1}{2} & 0 \\[5pt] \frac{AB}{ab} & \frac{w}{2} & \frac{r}{2} & \frac{r}{2} & \frac{w}{2} \\[5pt] \frac{aB}{Ab} & \frac{r}{2} & \frac{w}{2} & \frac{w}{2} & \frac{r}{2}\\[5pt] \frac{ab}{Ab} & 0 & \frac{1}{2} & 0 & \frac{1}{2} \\[5pt] \frac{aB}{aB} & 0 & 0 & 1 & 0 \\[5pt] \frac{ab}{aB} & 0 & 0 & \frac{1}{2} & \frac{1}{2} \\[5pt] \frac{ab}{ab} & 0 & 0 & 0 & 1 \end{array} \] Extension to sib-mating instead of selfing follows directly. Extension to selfing or sib-mating after random mating follows as for the $F_t$ approach outlined earlier. Again, the devil is in the details. \section*{Code modifications in R/qtl} Our goal was to make R/qtl fully functional for a wider variety of cross types. Ideally these changes will be minimally visible to the user after inputing the cross type. In order to create an identical user experience we had to modify all R routines so that they would recognize the \texttt{bcsft} cross type. Cross objects in R/qtl all have the attribute "class" consisting of 2 parts: one which identifies it as a cross object and one which specifies the cross type (\texttt{bc}, \texttt{f2}, \texttt{riself}, \texttt{risib}, etc.). We added an additional option, \texttt{bcsft}. A major difference between the previous cross types and \texttt{bcsft}, all other cross types are specific. In that there are no options for types of backcrosses, it's just a backcross. With the $BC_sF_t$ we intentionally created a more flexible cross type, where the generation number can be set by the user. This means that we don't have to go back and add a cross type every time we want to analyze a population with a different history. The way we have created this flexibity is by adding the attribute \texttt{cross.scheme} to cross objects. The \texttt{cross.scheme} consists of two numbers, the first is the generations of backcrossing (s), the second is the generations of selfing (t). The addition of a cross type and an attribute allow all R routines to recognize all types of $BC_sF_t$ crosses. The previous sections detailed the way genotype probabilities and recombination counts are calculated for $BC_sF_t$ crosses. These calculations are contained within the specific \texttt{init}, \texttt{emit}, and \texttt{step} functions for \texttt{bcsft} within the C code. All three of these functions are used in the Hidden Markov Model (HMM). The \texttt{init} function determines the probability of true genotypes. The \texttt{emit} function determines the probability of observed genotypes given the true genotypes, while the \texttt{step} function determines the probability of a genotype at a particular locus given the genotype at a linked locus as described in the previous section. We created $BC_sF_t$ versions of all of these functions which follow the same format and work the same way as the existing versions, except for when they are called by \texttt{ est.map}. We did not find a closed form solution for calculating the number of recombination events between pairs of markers in a $BC_sF_t$ and so we implemented a golden section search as part of \texttt{est.map} instead. There is a second difference between the way the HMM is implemented for $BC_sF_t$ and all other types of crosses, leading to an improvement in efficiency with no effect on the estimates. Previously the probabilities for each pair of markers for each individual were calculated independently given the recombination rate between those markers in the entire data set. For the $BC_sF_t$ the entire set of probabilities is calculated once for a set of markers given the recombination rate and then applied to all individuals. In a population with 100 lines, this is the difference between 10 calculations (1 for each possible genotype combination) and 100 calculations. This method could be readily expanded to analyze populations with mixed cross histories (where some lines have undergone more generations of selfing or backcrossing than others). Recombination rates could be calculated across all individuals and then probabilities would be calculated separately for each cross history and applied to pairs of markers in an individual according to cross history. However, record keeping about cross histories for each individual line would need to be implemented in the package. Genotype probabilities differ for the autosomes and sex chromosomes. While this is not an issue for selfed populations it could be an issue in an advanced backcross or advanced intercross populations. We have arranged for proper handling of the X chromosome. Basically in an $F_t$ the X chromosome is treated as though it were the product of a $BC_t$. The only real change here is that we created the capacity to keep track of $t$. All changes to the program have been unit tested and that code is included in the package. %\section*{References} % The bibtex filename \bibliography{vignette} \end{document} qtl/tests/0000755000176000001440000000000011752247251012252 5ustar ripleyusersqtl/tests/testaugmentation.R0000644000176000001440000000132011562004334015754 0ustar ripleyusers# Test augmentation with MQM # # Note: the full version of this test has moved to ./contrib/bin/rtest, # as it takes a long time to run. The full version can be run with: # # cd contrib/bin # rm CMakeCache.txt ; cmake -DTEST_R=TRUE # make testR library(qtl) set.seed(1000) version = mqm_version() cat("R/qtl=",version$RQTL) cat("R-MQM=",version$RMQM) cat("MQM=",version$MQM) testaugmentation <- function(cross, ...){ crossML <- mqmaugment(cross, ...) res1 <- mqmscan(crossML,logtransform=TRUE) list(res1) } data(listeria) r <- testaugmentation(listeria) if(!round(r[[1]][3,3],3)==0.307) stop("Listeria ML dataaugmentation error") cat("testaugmentation.R, tests succesfully run!") qtl/tests/test_qtl.R0000644000176000001440000000531211752247251014235 0ustar ripleyusers###################################################################### # # test_qtl.R # # copyright (c) 2009, Karl W Broman, Pjotr Prins # first written July 2009 # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License, # version 3, as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but without any warranty; without even the implied warranty of # merchantability or fitness for a particular purpose. See the GNU # General Public License, version 3, for more details. # # A copy of the GNU General Public License, version 3, is available # at http://www.r-project.org/Licenses/GPL-3 # # Some basic regression/integration testing for some of the QTL mapping routines # # You can run it with: # # R --no-save --no-restore --no-readline --slave < ./tests/test_qtl.R ###################################################################### library(qtl) version = mqm_version() cat("R/qtl=",version$RQTL) cat("R-MQM=",version$RMQM) cat("MQM=",version$MQM) data(listeria) if (nind(listeria)!=120) stop("Number of individuals incorrect") # ---- a quick test of standard R/qtl scanone mr = scanone(listeria, method='mr') test = round(mr[15,]$lod*1000) cat(mr[15,]$lod,test) if (test != 966) stop("scanone_mr gives an incorrect result") # ---- a quick test of MQM for R/qtl augmentedcross <- mqmaugment(listeria, minprob=1.0, verbose=TRUE) nind = nind(augmentedcross) if (nind!=120) stop("Number of individuals incorrect: ",nind) result <- mqmscan(augmentedcross, logtransform=TRUE, outputmarkers = FALSE,off.end=0) test1 = round(result[5,5]*1000) test2 = round(max(result[,5]*1000)) cat("test1 = ",test1,"\n") cat("test2 = ",test2,"\n") if (test1 != 76) stop("MQM gives an unexpected result (1)") if (test2 != 5384) stop("MQM gives an unexpected result (2)") # ---- Test for negative markerlocations data(hyper) hyper <- fill.geno(hyper) #Mess up the markers by shifting temp <- shiftmap(hyper, offset=10^7) out.temp <- mqmscan(temp,verb=TRUE,off.end=10) if(!(rownames(out.temp)[3]=="D1Mit296")) stop("MQM something wrong with positive shifts in location") #Mess up the dataset by moving 1 marker infront of the chromosome hyper$geno[[1]]$map[1] <- -10 res <- mqmscan(hyper,verbose=T,off.end=100) if(any(is.na(res[,3]))) stop("MQM failed to handle negative locations correctly") if(!(rownames(res)[2]=="c1.loc-95")) stop("MQM something wrong with negative locations") #to -15 because off.end defaults to 10 cat("Version information:\n") cat("R/qtl = ",version$RQTL,"\n") cat("R-MQM = ",version$RMQM,"\n") cat("MQM = ",version$MQM,"\n\n") cat("test_qtl.R tests succesfully run!") qtl/tests/test_io.Rout.save0000644000176000001440000000722611752247251015537 0ustar ripleyusers R version 2.11.0 (2010-04-22) Copyright (C) 2010 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > ###################################################################### > # > # TestIO/input.R > # > # copyright (c) 2002, Karl W Broman > # last modified Feb, 2002 > # first written Feb, 2002 > # > # This program is free software; you can redistribute it and/or > # modify it under the terms of the GNU General Public License, > # version 3, as published by the Free Software Foundation. > # > # This program is distributed in the hope that it will be useful, > # but without any warranty; without even the implied warranty of > # merchantability or fitness for a particular purpose. See the GNU > # General Public License, version 3, for more details. > # > # A copy of the GNU General Public License, version 3, is available > # at http://www.r-project.org/Licenses/GPL-3 > # > # This file contains code for testing the cross IO in R/qtl. > # > # Needed input files: > # > # gen.txt, map.txt, phe.txt [Karl's format] > # listeria.raw, listeria.map [mapmaker format] > # listeria.raw, listeria2.map [mapmaker format; no marker pos] > # listeria.csv [csv format] > # listeria2.csv [csv format; no marker pos] > # > ###################################################################### > > library(qtl) > > ############################## > # Reading > ############################## > # Read CSV format > csv <- read.cross("csv", "", "listeria.csv") --Read the following data: 120 individuals 133 markers 1 phenotypes --Cross type: f2 Warning message: In fixXgeno.f2(cross, alleles) : --Assuming that all individuals are female. > csv2 <- read.cross("csv", "", "listeria2.csv", estimate=FALSE) --Read the following data: 120 individuals 133 markers 1 phenotypes --Cross type: f2 Warning message: In fixXgeno.f2(cross, alleles) : --Assuming that all individuals are female. > > # Read mapmaker format > mm <- read.cross("mm", "", "listeria.raw", "listeria.map") --Read the following data: Type of cross: f2 Number of individuals: 120 Number of markers: 133 Number of phenotypes: 1 --Cross type: f2 Warning message: In fixXgeno.f2(cross, alleles) : --Assuming that all individuals are female. > mm2 <- read.cross("mm", "", "listeria.raw", "listeria2.map", estimate=FALSE) --Read the following data: Type of cross: f2 Number of individuals: 120 Number of markers: 133 Number of phenotypes: 1 --Cross type: f2 Warning message: In fixXgeno.f2(cross, alleles) : --Assuming that all individuals are female. > > ############################## > # Writing > ############################## > # Write in CSV format > write.cross(csv, "csv", filestem="junk1") > csv3 <- read.cross("csv", "", "junk1.csv", genotypes=c("AA","AB","BB","not BB","not AA")) --Read the following data: 120 individuals 133 markers 3 phenotypes --Cross type: f2 > comparecrosses(csv, csv3) Crosses are identical. > > # Write in mapmaker format > write.cross(csv, "mm", filestem="junk2") > > # Cleanup > unlink("junk1.csv") > unlink("junk2.raw") > unlink("junk2.prep") > qtl/tests/test_io.R0000644000176000001440000000370211562004334014035 0ustar ripleyusers###################################################################### # # TestIO/input.R # # copyright (c) 2002, Karl W Broman # last modified Feb, 2002 # first written Feb, 2002 # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License, # version 3, as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but without any warranty; without even the implied warranty of # merchantability or fitness for a particular purpose. See the GNU # General Public License, version 3, for more details. # # A copy of the GNU General Public License, version 3, is available # at http://www.r-project.org/Licenses/GPL-3 # # This file contains code for testing the cross IO in R/qtl. # # Needed input files: # # gen.txt, map.txt, phe.txt [Karl's format] # listeria.raw, listeria.map [mapmaker format] # listeria.raw, listeria2.map [mapmaker format; no marker pos] # listeria.csv [csv format] # listeria2.csv [csv format; no marker pos] # ###################################################################### library(qtl) ############################## # Reading ############################## # Read CSV format csv <- read.cross("csv", "", "listeria.csv") csv2 <- read.cross("csv", "", "listeria2.csv", estimate=FALSE) # Read mapmaker format mm <- read.cross("mm", "", "listeria.raw", "listeria.map") mm2 <- read.cross("mm", "", "listeria.raw", "listeria2.map", estimate=FALSE) ############################## # Writing ############################## # Write in CSV format write.cross(csv, "csv", filestem="junk1") csv3 <- read.cross("csv", "", "junk1.csv", genotypes=c("AA","AB","BB","not BB","not AA")) comparecrosses(csv, csv3) # Write in mapmaker format write.cross(csv, "mm", filestem="junk2") # Cleanup unlink("junk1.csv") unlink("junk2.raw") unlink("junk2.prep") qtl/tests/phe.txt0000644000176000001440000000131611562004334013560 0ustar ripleyusersT264 118.317 264 194.917 264 145.417 177.233 264 76.667 90.75 76.167 104.083 194.5 75.917 75.833 90.25 103.667 128.4 122.25 264 72.6 264 264 264 81.717 264 264 116.483 87.467 264 - 74.417 264 264 174.567 88.583 264 95 264 86.05 71.517 112.767 264 264 117.817 185.3 85.367 264 70.883 98.45 85.1 216.367 94.65 111.817 90.9 264 170.517 111.717 264 75.383 84.35 97.667 97.783 264 90.433 264 90.05 90.083 90.117 264 71.967 264 - 264 264 74.267 - - 264 264 264 109.867 264 264 96.017 136.417 168.25 120.7 114.55 94.033 67.683 93.833 93.867 139.867 117.933 77.8 117.833 264 77.733 93.183 77.633 77.55 264 117.433 93.067 99.867 82.333 163.75 82.017 264 264 91.283 140.767 81.733 75.667 76.483 116.467 116.517 139.55 264 116.2 qtl/tests/map.txt0000644000176000001440000000345411562004334013566 0ustar ripleyusers20 13 0.0100 0.2219 0.1508 0.0947 0.0280 0.1665 0.0069 0.0969 0.0077 0.0353 0.0769 0.0096 D10M44 D1M3 D1M75 D1M215 D1M309 D1M218 D1M451 D1M504 D1M113 D1M355 D1M291 D1M209 D1M155 6 0.2536 0.1828 0.1913 0.1000 0.1314 D2M365 D2M37 D2M396 D2M493 D2M226 D2M148 6 0.2857 0.1126 0.1333 0.0557 0.0759 D3M265 D3M51 D3M106 D3M257 D3M147 D3M19 4 0.1827 0.1562 0.2877 D4M2 D4M178 D4M187 D4M251f 13 0.0574 0.1154 0.0033 0.0400 0.0175 0.0513 0.0000 0.0197 0.0490 0.0562 0.0650 0.0979 D5M148 D5M232 D5M257 D5M83 D5M307 D5M357 D5M205 D5M398 D5M91 D5M338 D5M188 D5M29 D5M168 13 0.0755 0.0537 0.0672 0.0963 0.0324 0.0233 0.0358 0.0040 0.0352 0.0357 0.0036 0.0137 D6M233 D6M188 D6M284 D6M39 D6M254 D6M194 D6M290 D6M25 D6M339 D6M59_ D6M201 D6M15 D6M294 6 0.1795 0.1559 0.0609 0.1821 0.1175 D7M246 D7M145 D7M62 D7M126 D7M105 D7M259 6 0.0134 0.0995 0.1522 0.0582 0.1715 D8M94 D8M339 D8M178 D8M242 D8M213 D8M156 7 0.0421 0.1035 0.1235 0.0561 0.1213 0.0712 D9M247 D9M328 D9M106 D9M269 D9M346 D9M55 D9M18 5 0.1952 0.1366 0.0741 0.1093 D10M298 D10M294 D10M42_ D10M10 D10M233 6 0.1471 0.1108 0.1187 0.0363 0.2083 D11M78 D11M20 D11M242 D11M356 D11M327 D11M333 6 0.0615 0.1493 0.0745 0.1244 0.1240 D12M105 D12M46 D12M34 D12M5 D12M99 D12M150 12 0.0029 0.0912 0.0262 0.0000 0.0552 0.0206 0.0372 0.0126 0.0218 0.0000 0.0705 D13M59 D13M88 D13M21 D13M39 D13M167 D13M99 D13M233 D13M106 D13M147 D13M226 D13M290 D13M151 4 0.2224 0.0879 0.1249 D14M14 D14M115 D14M265 D14M266 8 0.1315 0.0531 0.0057 0.0454 0.0121 0.0612 0.1149 D15M226 D15M100 D15M209 D15M144 D15M68 D15M239 D15M241 D15M34 4 0.1617 0.0935 0.1508 D16M154 D16M4 D16M139 D16M86 4 0.1152 0.0558 0.2028 D17M260 D17M66 D17M88 D17M129 4 0.0068 0.1391 0.0377 D18M94 D18M58 D18M106 D18M186 4 0.1580 0.1589 0.1146 D19M68 D19M117 D19M65 D19M10 2 0.3447 DXM186 DXM64 qtl/tests/listeria2.map0000644000176000001440000000241211562004334014636 0ustar ripleyusers1 D10M44 1 D1M3 1 D1M75 1 D1M215 1 D1M309 1 D1M218 1 D1M451 1 D1M504 1 D1M113 1 D1M355 1 D1M291 1 D1M209 1 D1M155 2 D2M365 2 D2M37 2 D2M396 2 D2M493 2 D2M226 2 D2M148 3 D3M265 3 D3M51 3 D3M106 3 D3M257 3 D3M147 3 D3M19 4 D4M2 4 D4M178 4 D4M187 4 D4M251 5 D5M148 5 D5M232 5 D5M257 5 D5M83 5 D5M307 5 D5M357 5 D5M205 5 D5M398 5 D5M91 5 D5M338 5 D5M188 5 D5M29 5 D5M168 6 D6M223 6 D6M188 6 D6M284 6 D6M39 6 D6M254 6 D6M194 6 D6M290 6 D6M25 6 D6M339 6 D6M59_ 6 D6M201 6 D6M15 6 D6M294 7 D7M246 7 D7M145 7 D7M62 7 D7M126 7 D7M105 7 D7M259 8 D8M94 8 D8M339 8 D8M178 8 D8M242 8 D8M213 8 D8M156 9 D9M247 9 D9M328 9 D9M106 9 D9M269 9 D9M346 9 D9M55 9 D9M18 10 D10M298 10 D10M294 10 D10M42_ 10 D10M10 10 D10M233 11 D11M78 11 D11M20 11 D11M242 11 D11M356 11 D11M327 11 D11M333 12 D12M105 12 D12M46 12 D12M34 12 D12M5 12 D12M99 12 D12M150 13 D13M59 13 D13M88 13 D13M21 13 D13M39 13 D13M167 13 D13M99 13 D13M233 13 D13M106 13 D13M147 13 D13M226 13 D13M290 13 D13M151 14 D14M14 14 D14M115 14 D14M265 14 D14M266 15 D15M226 15 D15M100 15 D15M209 15 D15M144 15 D15M68 15 D15M239 15 D15M241 15 D15M34 16 D16M154 16 D16M4 16 D16M139 16 D16M86 17 D17M260 17 D17M66 17 D17M88 17 D17M129 18 D18M94 18 D18M58 18 D18M106 18 D18M186 19 D19M68 19 D19M117 19 D19M65 19 D19M10 X DXM186 X DXM64 qtl/tests/listeria2.csv0000644000176000001440000010216511562004334014662 0ustar ripleyusersT264,D10M44,D1M3,D1M75,D1M215,D1M309,D1M218,D1M451,D1M504,D1M113,D1M355,D1M291,D1M209,D1M155,D2M365,D2M37,D2M396,D2M493,D2M226,D2M148,D3M265,D3M51,D3M106,D3M257,D3M147,D3M19,D4M2,D4M178,D4M187,D4M251,D5M148,D5M232,D5M257,D5M83,D5M307,D5M357,D5M205,D5M398,D5M91,D5M338,D5M188,D5M29,D5M168,D6M223,D6M188,D6M284,D6M39,D6M254,D6M194,D6M290,D6M25,D6M339,D6M59_,D6M201,D6M15,D6M294,D7M246,D7M145,D7M62,D7M126,D7M105,D7M259,D8M94,D8M339,D8M178,D8M242,D8M213,D8M156,D9M247,D9M328,D9M106,D9M269,D9M346,D9M55,D9M18,D10M298,D10M294,D10M42_,D10M10,D10M233,D11M78,D11M20,D11M242,D11M356,D11M327,D11M333,D12M105,D12M46,D12M34,D12M5,D12M99,D12M150,D13M59,D13M88,D13M21,D13M39,D13M167,D13M99,D13M233,D13M106,D13M147,D13M226,D13M290,D13M151,D14M14,D14M115,D14M265,D14M266,D15M226,D15M100,D15M209,D15M144,D15M68,D15M239,D15M241,D15M34,D16M154,D16M4,D16M139,D16M86,D17M260,D17M66,D17M88,D17M129,D18M94,D18M58,D18M106,D18M186,D19M68,D19M117,D19M65,D19M10,DXM186,DXM64 ,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,8,8,8,8,8,8,9,9,9,9,9,9,9,10,10,10,10,10,11,11,11,11,11,11,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,15,15,15,15,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,X,X 118.317,B,B,B,H,H,H,B,B,H,H,H,H,H,H,A,A,-,A,A,B,B,B,B,B,B,A,H,A,H,A,A,H,H,H,H,H,-,H,H,H,B,B,A,A,H,H,H,H,H,H,H,B,B,B,B,B,B,H,H,H,H,H,H,H,H,B,B,B,B,H,H,H,H,H,H,H,B,B,B,H,H,H,A,A,H,B,B,B,B,B,B,C,-,H,H,H,A,A,A,A,A,A,A,B,B,H,H,A,H,H,H,H,H,H,H,A,A,A,A,H,H,H,H,B,B,B,B,H,H,H,C,H,H 264,-,B,B,B,H,H,H,H,H,H,H,H,H,B,B,H,-,H,A,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,H,H,B,B,B,A,A,A,A,A,A,A,A,A,H,H,H,H,H,B,B,B,B,B,H,H,H,B,B,B,H,A,A,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,H,B,B,H,A,A,H,H,H,H,-,H,H,H,H,H,A,B,B,B,B,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,B,B,H,H,A,H,H,C,H,H 194.917,-,H,H,H,H,H,H,H,B,B,B,B,B,H,H,H,-,-,H,H,H,H,H,B,B,A,A,H,H,A,A,A,A,H,H,H,-,H,H,H,H,A,H,H,H,H,B,B,B,B,B,B,B,B,B,A,A,A,A,A,A,H,H,H,B,H,H,B,B,B,B,B,B,B,H,A,A,A,A,H,H,H,H,H,H,B,B,H,H,H,B,A,A,A,A,A,A,A,H,H,H,H,H,B,B,B,H,B,B,B,B,B,B,B,B,B,B,B,B,A,A,A,A,H,H,B,B,H,H,A,A,H,H 264,B,B,H,H,H,H,B,B,B,B,B,B,B,A,-,A,-,H,H,B,H,H,H,H,H,H,H,H,H,-,H,A,A,A,A,A,-,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,B,H,B,B,B,B,B,H,H,H,H,H,H,H,H,A,H,B,H,H,B,B,B,B,B,H,A,A,H,A,A,A,C,H,H,H,H,H,H,H,H,H,H,H,H,A,A,H,H,B,H,H,H,H,A,A,A,H,H,B,A,H,H,B,A,A,A,A,B,H,H,C,H,A 145.417,H,H,H,H,B,H,H,H,H,H,H,H,H,B,H,H,-,-,H,B,A,A,A,A,A,A,A,A,H,-,A,A,A,A,A,-,-,H,H,H,H,H,A,A,A,A,A,A,-,H,H,H,H,H,H,B,H,A,A,H,H,A,A,A,A,A,H,B,B,B,H,H,H,H,A,H,H,H,H,B,B,B,B,B,H,A,A,A,A,A,A,C,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,B,B,B,A,A,A,H,A,A,A,A,H,A,A,C,A,A 177.233,H,H,B,B,B,B,B,B,B,B,B,B,B,H,A,A,A,-,A,B,B,B,B,B,B,H,H,H,H,A,A,A,A,A,A,H,-,H,H,H,-,H,A,A,A,H,B,B,B,B,B,B,B,B,B,A,A,A,A,A,A,H,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,H,H,H,H,C,H,-,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,B,B,B,B,B,B,H,H,H,H,H,H,H,B,H,H,H,H,A,A,A,C,A,H 264,H,H,H,H,A,A,A,A,H,H,H,H,H,B,B,B,B,-,H,B,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,A,-,A,A,A,-,H,H,H,H,H,H,H,H,B,B,B,B,B,B,A,A,A,H,H,H,B,B,B,B,B,B,B,B,B,A,A,A,A,H,H,H,H,H,A,A,A,H,H,B,B,H,A,A,A,A,C,H,B,B,B,B,B,B,B,B,B,B,A,H,H,H,A,A,A,A,A,A,A,-,B,H,H,H,H,A,A,H,H,H,B,B,B,B,A,A,H,H 76.667,H,H,H,H,A,A,A,A,H,H,H,H,H,H,H,A,-,A,A,H,B,H,H,H,H,H,-,H,B,B,B,B,B,B,B,B,-,B,B,H,H,H,A,A,A,A,H,H,-,B,B,B,B,B,B,H,H,H,H,H,B,A,A,H,H,H,H,B,B,B,B,B,B,H,A,A,-,A,A,H,B,H,B,B,H,A,H,H,H,H,H,C,H,H,A,A,A,-,A,A,-,A,H,H,B,H,H,B,B,B,B,H,H,H,H,B,B,B,B,H,H,H,H,A,A,-,H,H,H,H,C,A,- 90.75,A,A,H,B,B,B,H,H,H,H,H,-,H,A,H,H,H,H,B,A,H,H,A,A,A,H,H,H,B,H,H,H,H,A,A,A,-,A,A,A,-,H,H,H,H,H,B,B,B,H,H,H,H,H,H,B,B,B,B,B,H,B,B,-,B,B,A,H,H,H,A,A,A,A,H,B,B,B,B,B,B,H,H,H,H,A,A,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,B,B,B,B,H,A,A,A,A,A,A,A,H,B,B,B,A,A,H,H,B,B,-,B,H,H,H,A,A,H 76.167,B,B,H,H,A,A,A,A,A,A,A,A,A,A,A,H,H,H,H,A,H,H,H,H,A,B,H,H,H,H,H,H,H,H,H,H,-,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,H,A,A,A,H,H,B,B,B,H,H,H,B,B,B,B,B,H,A,A,H,H,H,H,A,H,H,H,H,B,A,-,A,A,A,A,C,H,H,H,H,H,H,H,H,H,H,H,A,H,B,H,H,H,H,H,H,H,H,H,B,B,B,H,A,A,A,A,A,A,A,A,H,B,B,C,H,A 104.083,A,H,H,H,H,H,H,H,H,H,H,-,H,A,A,B,B,B,B,H,A,A,H,H,H,H,H,H,B,H,H,H,H,H,H,H,-,H,H,H,B,B,H,H,H,H,H,H,A,A,A,A,A,A,A,H,A,H,H,H,-,A,A,A,A,A,A,H,H,B,B,B,B,B,A,H,H,H,A,A,H,H,H,H,H,A,A,A,H,H,B,C,H,H,H,H,H,H,H,H,H,H,H,B,H,H,H,A,A,A,A,A,A,A,H,B,B,B,H,H,B,B,B,A,A,A,A,B,H,H,C,A,H 194.5,A,A,H,H,H,H,H,H,H,H,H,H,H,B,B,H,H,H,H,A,H,B,H,H,H,H,H,B,B,B,B,B,B,B,B,B,-,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,H,H,H,H,H,B,B,H,A,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B,H,H,A,A,A,A,H,A,-,A,A,A,A,A,H,H,-,H,H,B,B,B,B,H,H,H,H,H,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,A,A,H,C,H,H 75.917,A,A,H,H,H,H,B,B,B,B,B,-,B,H,H,H,H,H,H,A,A,A,A,A,A,H,H,H,A,H,H,H,H,H,H,H,-,H,H,H,-,H,B,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,A,H,H,H,A,A,A,A,A,H,A,A,A,-,A,H,C,H,A,A,A,A,A,A,A,H,H,H,B,B,B,B,A,A,A,A,A,H,H,H,B,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H 75.833,H,H,A,A,A,A,A,A,A,A,A,A,A,H,B,B,H,-,H,B,H,H,H,B,H,H,H,H,H,B,B,B,B,B,B,B,-,B,B,B,-,H,H,B,B,B,B,B,B,B,B,B,B,B,B,B,B,H,-,H,H,A,A,A,A,A,H,B,B,B,B,B,B,H,B,H,H,H,H,B,H,H,H,H,A,H,H,H,H,H,B,C,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,B,B,B,B,B,B,B,H,A,A,A,B,B,B,B,A,A,-,H,H,B,-,C,A,H 90.25,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,H,H,B,B,B,B,B,B,H,H,B,B,A,A,H,H,H,H,H,-,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,H,H,H,B,H,H,H,H,A,A,A,H,H,A,A,A,A,A,H,A,A,A,B,H,A,A,H,A,A,H,H,H,H,H,H,C,H,A,A,A,A,A,A,A,H,H,H,A,A,H,H,-,-,A,A,A,A,A,-,H,H,H,H,H,H,H,H,B,B,B,B,H,H,H,A,A,A 103.667,H,H,B,B,B,B,H,H,H,H,H,A,A,B,B,H,H,A,A,H,-,H,H,H,H,B,B,B,B,H,B,B,B,B,B,B,-,B,B,B,B,H,H,H,H,H,H,B,-,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,B,B,H,H,B,H,H,B,H,H,H,H,H,H,A,A,A,A,A,H,H,H,H,H,H,H,B,A,A,H,-,A,A,A,A,A,A,A,B,B,B,H,B,B,H,H,B,-,-,B,B,B,B,C,A,A 128.4,A,A,A,A,A,A,H,H,H,H,H,H,H,H,B,H,-,H,H,B,-,A,A,A,A,B,H,H,H,H,H,H,H,B,B,B,-,B,B,B,B,B,H,H,B,B,B,B,B,B,B,H,H,H,H,A,H,H,H,B,H,B,B,B,B,B,H,B,B,H,H,H,A,A,A,A,A,A,H,A,A,A,A,A,B,A,A,A,A,A,A,C,B,B,B,B,B,B,B,B,B,B,B,A,A,A,H,H,A,A,A,A,A,A,-,B,H,H,A,A,A,A,A,A,-,-,A,H,-,A,A,A,H 122.25,B,B,H,H,-,H,H,H,H,H,H,B,B,B,B,H,H,H,B,A,A,A,H,H,H,A,H,H,H,H,H,H,H,H,H,H,-,H,H,H,H,H,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,H,A,A,A,-,A,A,A,A,H,H,B,B,B,B,A,A,A,H,H,-,H,H,H,A,A,A,H,H,H,C,B,B,B,B,B,B,B,B,-,B,B,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,H,H,H,H,H,-,B,H,-,H,A,A,A 264,H,H,A,H,H,H,B,B,B,B,B,-,B,H,H,A,A,A,H,A,A,H,A,H,A,A,-,H,A,A,A,A,A,A,A,A,-,A,A,A,-,A,H,H,A,H,H,H,H,H,H,H,B,B,B,H,H,H,H,A,A,B,B,B,H,H,A,A,A,A,H,H,H,H,H,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,A,C,B,B,B,B,B,B,H,H,H,H,H,A,H,H,B,H,A,A,A,A,A,A,-,H,B,B,B,B,B,-,H,H,H,-,H,B,B,B,-,A,H 72.6,H,H,H,H,A,A,A,A,A,A,-,H,H,H,H,H,A,A,A,A,A,A,A,-,A,A,H,H,H,B,H,H,H,H,H,H,-,H,A,A,A,A,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,B,B,H,H,B,B,B,H,H,-,H,H,H,H,H,A,A,H,B,B,B,H,H,B,B,B,B,B,B,B,B,B,H,-,C,H,H,H,H,A,A,A,A,A,A,A,B,H,A,A,B,B,B,B,B,B,H,H,H,H,A,A,H,H,H,B,A,A,-,A,B,B,B,C,A,H 264,H,H,H,A,A,A,A,A,H,H,H,H,H,H,H,A,A,A,B,B,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,-,A,A,A,-,A,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,H,A,A,A,H,H,B,H,H,H,A,A,A,A,H,H,H,H,H,A,A,H,H,H,H,A,A,A,A,B,B,C,H,H,H,H,H,H,H,H,H,H,H,B,H,A,A,B,B,B,B,H,H,H,H,H,H,A,A,B,B,B,H,H,H,-,H,H,H,H,C,H,A 264,B,B,H,H,H,H,H,H,H,H,H,-,H,H,H,H,H,A,A,H,B,B,B,H,H,B,B,B,B,A,A,H,H,H,H,H,-,H,H,H,-,B,H,H,H,H,B,B,B,B,B,B,B,B,B,H,H,H,A,A,A,H,H,B,B,B,B,A,A,A,H,B,B,B,A,A,A,A,A,H,H,B,B,B,B,B,B,H,H,H,H,C,H,-,H,H,H,H,H,H,H,H,A,H,A,A,H,H,H,H,H,H,H,H,H,A,A,H,H,H,H,H,-,H,-,-,H,A,A,A,A,H,A 264,A,A,A,A,A,A,H,H,B,B,B,B,B,-,A,A,A,A,H,A,H,H,A,A,A,B,B,B,H,A,A,A,A,A,A,A,-,A,H,H,H,A,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,B,B,B,H,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,A,H,H,H,H,H,H,A,A,A,A,H,H,C,-,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,A,A,A,A,A,A,A,A,A,A,H,H,H,H,H,A,A,-,A,A,A,H,C,A,A 81.717,H,H,H,-,H,H,H,H,H,H,H,H,A,H,H,B,B,B,A,H,H,H,H,B,B,H,H,A,B,-,B,B,B,B,B,B,-,B,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,B,H,H,-,H,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,B,B,B,B,B,B,B,H,H,H,H,H,H,C,-,H,H,H,A,A,A,A,A,A,A,H,H,H,H,B,B,B,B,B,B,B,B,A,A,A,A,H,H,H,B,A,A,-,A,H,H,H,C,H,H 264,-,H,H,H,H,H,B,B,B,B,B,B,B,H,A,A,-,H,H,A,A,A,A,A,A,H,H,H,H,B,-,B,B,H,H,H,H,H,A,A,A,A,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,-,A,A,A,A,H,B,H,H,H,H,H,H,H,A,A,A,H,H,H,H,H,B,B,H,H,H,H,H,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,H,H,B,B,H,H,H,B,H,H,-,B,H,B,H,C,A,A 264,-,H,B,H,H,H,H,H,H,H,H,H,H,A,B,B,-,H,A,H,H,H,H,H,H,H,H,B,B,B,B,H,H,H,H,H,H,H,H,H,H,A,B,B,H,H,H,H,-,H,H,H,-,H,H,H,A,B,B,H,-,H,H,H,A,A,H,H,H,H,H,H,H,H,B,B,B,H,H,H,H,H,H,H,H,A,A,A,H,H,H,B,B,B,B,B,H,H,H,H,H,H,H,B,H,H,H,A,H,H,H,H,H,H,H,B,B,B,B,H,H,B,H,H,H,-,H,B,B,H,C,-,H 116.483,-,H,H,H,H,H,H,H,H,H,H,A,A,H,H,H,-,H,H,A,H,H,H,H,H,A,-,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,-,H,H,H,H,H,H,H,H,H,H,H,B,H,B,B,B,B,H,A,A,A,A,A,A,A,H,H,H,H,H,H,A,A,A,A,A,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,B,B,B,H,H,H,B,B,B,B,B,B,B,H,A,A,A,A,A,A,A,A,A,H,-,H,H,H,B,C,A,A 87.467,-,H,H,A,A,A,A,A,A,A,A,A,A,H,H,B,-,A,A,H,A,A,A,A,H,H,B,H,H,B,B,B,B,B,B,B,B,B,B,B,B,B,A,A,A,A,H,H,-,H,H,H,H,H,H,B,H,H,H,A,-,B,B,B,B,B,B,H,B,B,B,B,B,H,A,A,H,H,H,H,B,B,B,B,B,A,A,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,H,H,H,H,B,B,B,B,B,B,B,H,B,B,B,B,B,B,H,A,A,-,A,B,H,H,C,H,A 264,H,H,H,A,-,H,H,H,H,H,H,H,H,-,A,H,H,H,B,B,B,B,H,H,H,A,H,H,A,A,A,A,A,A,A,A,A,A,A,H,-,H,H,H,H,B,B,B,-,B,B,B,B,B,B,B,B,B,B,H,H,B,B,B,B,B,H,H,H,H,H,H,H,H,A,H,H,H,B,H,B,B,B,H,H,H,A,A,A,H,H,H,H,H,H,H,H,-,H,H,H,H,H,H,H,H,H,B,H,H,H,H,H,H,B,H,H,H,H,H,H,H,A,A,A,-,A,H,H,H,C,A,H NA,A,A,A,H,H,B,H,H,H,H,H,H,H,-,H,H,H,-,H,H,B,B,H,H,H,B,H,B,H,-,H,H,H,H,H,H,H,H,H,A,-,H,A,H,H,H,H,H,-,H,H,H,H,H,H,H,A,A,A,H,H,A,A,H,H,B,B,B,H,H,-,H,H,B,A,H,H,H,A,H,H,H,H,H,H,B,H,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,B,B,A,A,A,H,H,H,H,B,H,H,-,H,H,H,H,C,H,H 74.417,A,A,H,H,H,H,A,A,A,A,A,H,H,B,B,B,H,H,A,H,A,A,H,H,H,H,H,B,H,H,H,A,A,A,A,A,A,A,A,A,-,A,B,H,H,H,H,H,-,H,H,H,H,-,H,B,B,B,B,B,B,H,H,H,H,H,H,A,A,A,A,H,H,B,H,H,A,A,A,A,A,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,B,H,H,H,H,H,H,H,H,H,H,H,H,A,H,B,B,H,H,H,B,A,A,-,A,H,H,H,C,H,H 264,A,A,H,H,B,B,H,H,H,H,A,A,A,-,H,B,B,B,H,H,H,H,H,H,H,H,A,A,H,A,A,A,A,A,A,A,A,A,A,H,H,H,H,H,H,H,H,H,-,B,B,B,B,B,B,A,A,A,A,H,-,B,B,B,H,H,-,H,H,H,A,A,A,A,B,H,H,H,B,A,-,H,H,A,A,B,B,B,B,A,A,B,B,-,H,H,H,-,H,H,A,H,A,H,B,B,H,A,A,H,H,H,H,B,H,H,H,H,H,A,A,H,H,A,A,-,A,H,H,H,C,H,H 264,B,B,H,A,A,A,A,A,H,H,H,H,H,B,B,B,B,H,H,B,H,H,A,A,A,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,H,H,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,A,H,-,H,H,H,H,B,B,B,B,H,H,B,B,B,B,A,A,A,A,A,A,A,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,B,B,-,H,H,H,H,C,H,H 174.567,B,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,A,A,H,A,H,H,H,H,H,B,-,H,B,H,H,H,H,H,H,B,H,B,B,B,B,B,H,H,H,H,H,H,-,H,H,A,A,H,H,H,H,A,A,A,-,H,H,H,H,H,-,H,B,B,B,B,B,B,A,A,A,H,H,H,H,H,H,H,B,H,H,H,H,H,H,H,H,-,H,H,H,H,H,H,H,H,H,H,H,B,B,A,A,A,A,A,A,A,A,A,A,A,A,H,A,H,H,H,H,-,H,B,H,H,C,H,H 88.583,B,B,B,B,B,B,B,B,B,B,B,H,-,H,H,H,H,A,H,H,A,H,H,B,B,H,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,B,B,-,B,B,B,H,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,A,A,B,B,H,A,H,H,A,A,A,A,A,A,A,A,A,-,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,B,B,B,B,B,B,-,B,H,A,A,C,A,H 264,H,H,B,B,B,B,B,B,B,B,B,H,-,A,H,H,B,B,B,H,H,H,H,H,H,H,B,B,H,H,H,H,H,H,H,H,H,H,H,A,A,A,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,H,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,-,H,H,H,H,H,B,B,B,B,-,B,B,H,H,H,H,B,H,H,H,H,H,H,A,H,H,H,H,A,A,A,A,H,H,-,H,H,H,A,A,A,A 95,H,H,H,H,H,H,H,A,A,A,A,A,-,B,H,H,A,A,A,H,H,H,A,-,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B,B,-,B,A,A,A,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,H,H,H,A,A,H,H,B,B,B,B,B,H,H,H,H,H,B,B,H,H,H,H,H,H,H,H,H,H,A,A,-,A,A,A,A,A,A,-,A,A,A,A,A,A,H,H,A,A,A,A,A,A,A,H,B,B,H,H,H,H,H,H,-,A,H,H,H,A,A,H 264,B,B,B,B,B,B,H,H,H,H,H,H,-,A,B,B,-,B,B,A,A,A,A,-,H,H,H,H,B,A,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,B,B,A,A,H,H,H,H,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,H,H,H,H,B,B,-,B,H,H,H,C,A,A 86.05,B,B,H,H,A,A,A,A,A,A,A,A,-,H,H,B,B,B,H,H,H,H,H,-,A,H,H,H,H,A,A,B,B,B,B,B,B,B,B,B,B,B,A,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,B,B,B,A,H,H,H,B,A,A,A,H,H,H,H,H,H,H,B,B,B,B,H,H,H,H,H,H,H,-,A,A,A,A,A,H,-,B,B,B,B,B,B,H,H,H,H,H,B,B,B,B,H,-,-,H,A,A,B,C,H,H 71.517,H,B,B,B,B,B,B,B,B,B,B,B,B,A,A,A,A,H,H,A,-,H,H,H,H,H,H,B,H,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,A,A,A,A,A,A,A,A,H,B,B,A,A,A,A,A,A,H,H,H,B,B,B,H,H,H,H,H,A,A,A,A,H,H,H,H,H,H,A,A,H,H,H,B,A,A,A,A,A,A,A,A,A,-,A,A,H,A,A,A,-,B,B,B,B,B,B,B,A,A,A,A,H,H,H,H,A,A,-,A,H,A,A,A,A,H 112.767,B,B,B,B,B,B,H,H,H,H,H,-,H,H,A,A,A,-,A,A,H,H,H,H,H,H,B,B,H,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,H,H,H,H,A,A,H,A,A,A,A,H,H,B,H,A,A,A,A,H,B,B,B,B,B,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B,B,H,H,-,H,H,H,H,H,H,-,H,H,-,A,A,A,H,A,A,A,A,A,A,-,H,B,-,H,C,A,H 264,A,A,A,A,A,A,A,A,A,A,H,H,H,A,A,H,H,H,H,A,A,H,H,H,H,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,A,A,B,B,B,B,B,B,B,H,H,H,H,H,H,H,A,A,A,A,H,A,A,H,H,H,H,B,B,B,B,H,H,H,H,H,H,H,H,H,H,-,H,H,H,H,A,A,A,A,A,B,B,-,-,H,H,H,H,H,-,H,H,A,A,A,B,H,-,A,A,A,A,A,A,H,H,H,H,B,B,B,B,B,B,-,B,B,-,B,C,A,A 264,B,B,B,A,A,A,H,H,A,A,A,A,A,-,H,H,-,B,B,B,H,A,A,A,A,H,-,A,H,A,A,H,H,H,H,H,H,H,H,H,-,B,H,H,H,H,H,H,-,-,H,H,H,H,H,A,A,A,A,A,-,H,H,H,H,H,-,H,H,B,-,B,A,A,H,H,A,A,A,B,B,B,B,B,B,B,B,H,H,H,-,H,H,B,B,B,B,B,B,B,B,B,B,H,-,B,B,H,-,H,H,H,H,H,B,B,B,B,H,H,H,H,H,B,B,-,B,B,B,B,C,A,H 117.817,H,H,H,B,B,B,B,B,B,B,B,H,H,H,H,H,A,A,A,H,A,A,A,A,H,H,A,H,B,H,H,H,H,H,A,A,A,A,A,A,A,A,B,B,B,B,H,H,A,A,A,A,A,A,A,H,A,A,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,B,A,A,H,H,H,H,H,B,B,B,B,H,-,B,B,H,H,H,H,-,H,H,H,H,H,H,H,H,B,H,A,H,H,A,-,A,A,H,H,H,B,B,B,B,B,H,H,H,-,A,A,-,H,A,A,A,A,H,H 185.3,A,A,A,H,H,B,B,B,B,B,B,-,B,A,A,-,-,A,A,A,A,A,H,H,B,H,H,H,H,B,B,H,H,H,H,H,H,H,H,A,-,A,A,A,A,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,-,B,B,B,B,H,-,H,H,H,A,A,A,A,H,A,A,A,H,H,H,H,H,H,A,A,A,H,A,A,A,H,H,-,H,H,H,H,H,H,H,H,H,H,-,B,B,A,-,A,A,A,A,H,H,A,A,A,A,A,H,-,H,A,-,-,A,A,A,H,C,H,H 85.367,H,H,A,A,A,A,H,H,H,H,H,H,H,A,H,A,-,B,B,H,H,H,H,H,H,H,-,A,A,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,-,H,H,H,H,H,H,H,H,H,H,B,-,H,H,H,H,H,-,B,B,B,-,B,H,H,A,A,H,H,B,H,A,A,A,A,H,B,B,H,H,H,H,H,H,-,A,A,A,A,H,H,-,H,H,-,-,H,H,A,-,A,A,A,A,A,-,A,A,A,H,H,A,A,A,B,B,-,B,H,A,A,A,A,A 264,H,H,H,B,B,B,B,B,B,B,B,-,B,H,A,B,-,A,H,A,H,H,B,B,B,H,H,H,H,-,A,A,A,A,A,A,A,A,A,A,-,A,H,H,H,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,B,B,B,A,A,A,B,B,B,-,B,B,B,H,H,H,H,H,H,A,A,A,A,H,H,H,H,B,H,-,H,H,H,H,H,H,H,H,B,H,H,H,B,-,A,H,B,-,H,H,-,H,H,H,B,B,B,B,H,H,-,H,B,B,-,B,H,H,H,C,A,- 70.883,H,H,A,A,A,A,A,A,A,A,H,H,H,H,H,H,-,B,B,H,H,A,A,A,A,A,H,H,H,-,A,H,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,-,A,A,H,H,H,A,A,A,B,B,B,B,B,H,H,H,H,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,A,H,-,A,A,H,-,H,H,B,B,-,B,H,H,H,H,A,A,A,H,B,B,-,H,H,H,-,C,H,- 98.45,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,-,H,H,H,A,A,A,A,A,H,H,H,A,B,B,B,B,B,B,-,-,B,B,B,B,B,H,H,H,H,B,H,-,H,H,H,H,H,H,A,-,A,-,A,A,B,B,B,B,H,-,A,A,H,H,-,H,H,A,A,-,A,A,A,A,A,H,H,H,A,A,A,A,A,A,C,A,H,H,H,B,B,B,B,B,B,B,A,H,H,H,H,H,H,H,H,H,A,A,H,B,B,B,A,A,A,A,H,H,A,A,H,A,A,A,A,H 85.1,-,H,H,A,A,A,A,A,A,A,A,H,H,A,H,H,-,A,A,H,H,H,H,H,H,B,-,H,H,H,H,H,H,H,H,-,-,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,B,B,B,-,B,B,B,B,B,B,H,H,A,A,-,A,A,B,B,H,A,A,A,A,A,B,B,B,A,A,A,A,A,A,C,B,B,B,B,B,B,B,B,B,B,B,H,H,A,A,H,H,H,H,H,H,A,A,A,A,A,A,B,B,B,H,H,H,H,H,B,B,H,C,A,A 216.367,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,-,A,H,H,H,H,H,H,B,H,-,B,B,B,B,B,B,B,B,B,B,B,B,B,-,H,H,H,H,H,H,H,-,B,B,B,B,B,B,B,B,B,B,A,A,H,H,H,A,A,A,A,A,A,A,-,H,H,B,B,H,H,A,A,-,A,A,A,H,B,-,H,H,H,B,C,B,B,-,B,B,B,H,H,H,H,H,B,B,B,B,A,A,H,H,H,H,H,B,A,A,H,H,H,H,H,H,H,H,H,H,A,A,H,C,A,A 94.65,-,B,B,B,B,B,H,H,H,H,H,H,H,A,A,H,-,B,B,A,H,H,H,H,B,B,H,A,A,H,H,H,H,-,H,H,H,H,H,A,A,A,H,H,H,H,H,H,-,H,H,H,H,H,H,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,B,-,B,H,H,H,H,A,H,H,H,H,A,A,H,A,A,A,A,A,A,A,A,-,A,A,A,A,A,A,A,A,A,B,B,H,H,H,B,B,B,B,B,B,-,H,H,H,A,H,H,B,B,H,H,B,B,H,H,A,A,H,H 111.817,A,-,H,A,A,A,A,A,A,A,A,A,A,B,A,A,-,H,H,H,B,B,B,B,B,H,-,B,B,B,B,B,B,H,H,H,H,H,H,H,A,A,A,A,A,A,H,H,-,H,H,H,B,B,B,A,H,H,H,A,A,A,A,H,H,H,-,H,H,H,H,-,B,B,B,B,B,B,H,H,B,B,B,B,B,H,A,A,A,H,H,C,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,A,H,H,H,H,H,H,B,B,B,H,H,H,H,H,H,A,A,H,B,A,A,A,A,H,A 90.9,B,B,B,B,B,B,B,B,B,B,B,B,B,A,H,H,H,H,A,B,H,A,H,H,H,H,H,B,B,-,B,B,B,B,B,B,B,B,B,B,-,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,A,A,A,A,A,A,H,H,H,H,-,H,H,H,H,H,H,H,A,H,H,B,B,B,A,A,A,A,A,A,C,H,A,A,A,A,-,A,A,A,A,A,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,H,H,H,H,H,H,H,H,H,C,A,H 264,A,-,H,H,B,B,B,B,B,B,B,B,B,-,B,B,B,B,H,H,H,H,H,H,H,H,H,A,H,H,H,A,A,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,-,B,B,B,B,B,B,H,H,H,A,A,A,H,H,A,A,A,-,H,A,A,A,-,H,H,H,H,B,B,B,H,-,A,A,A,A,A,A,A,A,A,A,C,H,H,H,H,H,-,H,H,H,H,A,B,B,B,H,H,H,H,H,H,H,H,B,B,B,H,H,A,A,A,A,H,H,B,H,H,H,A,A,A,A 170.517,H,H,B,H,H,H,B,B,B,B,B,B,B,A,H,A,-,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,-,B,B,H,H,H,-,A,A,A,A,A,H,H,A,H,-,H,B,H,H,H,H,A,A,H,H,-,H,B,B,C,H,-,H,H,H,A,A,A,A,A,A,H,A,A,A,A,A,A,A,A,A,A,A,H,H,H,A,B,H,H,H,B,B,B,B,H,H,H,C,H,H 111.717,H,-,H,H,A,A,H,H,B,B,B,B,B,H,A,A,H,B,B,H,H,H,H,A,A,H,H,H,H,A,H,H,H,H,H,H,H,H,H,B,B,B,H,H,H,B,B,B,B,B,B,B,B,B,B,H,H,H,H,B,B,H,H,A,A,A,A,H,A,H,H,-,H,H,H,H,B,B,H,H,H,H,H,H,A,A,A,A,H,H,H,C,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,A,A,A,A,A,A,A,H,-,H,H,A,A,A,A,A,A,A,A,B,H,H,C,H,H 264,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,H,H,H,A,A,H,H,H,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,H,H,H,B,B,B,H,H,A,A,-,A,A,H,H,H,H,H,A,H,B,H,H,A,A,A,A,A,A,A,A,A,-,A,A,A,-,A,H,-,H,H,B,H,H,H,H,H,H,H,H,H,H,H,B,H,H,B,B,B,B,H,H,H,H,H,A,A,A,A,A,H 75.383,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,B,B,B,H,H,A,A,A,A,H,A,A,A,A,A,A,A,H,H,B,B,B,B,B,B,B,H,H,H,H,H,B,B,B,B,H,H,H,H,B,B,H,-,H,H,H,H,H,B,B,B,B,B,B,H,-,A,A,A,H,H,H,H,A,H,H,H,H,H,B,H,H,H,H,-,A,A,A,A,A,A,-,A,A,-,A,H,B,B,H,H,H,H,B,B,B,B,B,B,B,H,H,H,H,B,B,B,B,B,A,A,H,H,H,C,A,A 84.35,H,H,H,H,A,A,A,A,A,A,A,A,A,H,H,H,H,-,H,A,H,B,B,B,B,H,H,B,B,A,A,A,A,A,H,H,H,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,-,H,H,H,H,H,H,H,H,A,A,H,-,-,H,H,A,A,A,A,A,B,B,H,H,H,A,A,A,A,A,A,H,A,A,-,A,A,A,A,A,A,-,A,H,A,B,B,B,B,B,B,B,B,B,B,-,H,H,H,H,H,B,B,B,B,B,H,H,A,H,H,C,A,A 97.667,B,B,B,B,B,B,B,B,H,H,H,H,H,H,B,H,H,H,H,H,H,B,B,B,B,H,H,H,B,H,H,H,H,A,A,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,H,B,B,B,B,B,H,H,H,H,-,B,B,H,H,B,B,B,B,B,B,B,B,A,H,H,A,A,A,A,C,H,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,A,A,B,H,H,C,A,A 97.783,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,H,H,H,H,H,H,H,H,H,-,B,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,H,H,B,-,A,A,H,-,-,A,A,A,A,A,H,H,B,B,B,B,B,A,B,B,H,H,H,H,A,A,-,H,H,H,-,H,H,H,H,H,A,A,A,A,B,B,B,B,B,B,B,H,H,H,H,A,B,B,H,H,H,H,H,H,A,A,A,A,A,- 264,H,H,H,H,B,B,B,B,B,B,H,H,H,B,B,B,B,B,B,H,H,B,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,A,-,A,A,A,A,A,A,B,B,B,B,H,A,H,H,H,H,H,A,A,A,A,A,-,A,A,B,B,B,H,H,H,H,H,H,H,H,H,A,A,A,A,H,C,B,B,B,B,B,B,B,H,-,H,H,H,H,H,A,-,H,H,H,H,H,H,B,B,B,B,B,H,H,H,A,H,H,H,H,B,A,A,A,H,H 90.433,H,H,H,H,H,H,A,A,A,A,H,H,H,A,A,A,A,A,A,H,H,A,A,A,A,B,B,H,H,B,B,B,B,B,B,B,B,B,B,B,B,B,H,A,A,H,H,H,H,H,H,H,H,H,H,B,H,H,H,H,H,A,A,H,H,H,B,A,A,A,A,A,A,A,H,H,H,H,H,H,B,B,B,B,B,B,B,H,A,A,A,C,A,-,B,B,B,B,B,B,B,B,B,A,A,A,H,-,B,B,B,B,B,H,-,A,H,H,B,H,H,H,H,H,H,H,H,B,B,B,C,H,H 264,A,A,H,H,H,H,H,H,A,A,A,A,A,-,A,H,H,H,H,A,H,H,H,H,H,B,-,H,H,-,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,H,H,H,H,H,H,H,A,H,H,H,H,H,H,H,H,H,H,-,B,B,B,-,-,H,H,A,A,H,H,B,A,A,A,H,H,H,H,A,H,H,H,B,C,B,B,B,B,B,B,B,B,B,B,B,H,H,A,H,H,-,A,A,A,A,A,A,A,A,A,H,H,H,H,B,B,B,-,B,H,H,A,A,H,H 90.05,H,H,H,B,B,B,B,B,H,H,H,H,H,B,B,B,B,-,B,A,A,A,B,B,B,H,H,H,B,H,H,H,H,-,H,H,H,H,H,H,H,H,B,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,H,H,A,A,A,A,A,A,B,B,B,H,-,H,H,A,H,H,H,H,A,A,-,A,A,A,B,B,B,B,B,B,A,A,-,A,A,A,A,A,A,-,H,H,H,H,H,H,H,-,H,H,B,B,B,B,A,A,H,H,H,H,A,A,H,H,-,H,B,H,H,C,A,A 90.083,H,H,H,H,H,H,H,H,H,H,-,H,H,B,H,H,-,H,H,B,H,H,H,H,H,B,-,B,B,H,B,B,B,B,B,B,B,B,H,H,-,H,B,H,H,H,H,H,H,H,H,H,A,A,A,H,H,H,-,B,-,H,H,H,H,H,-,B,B,B,B,-,B,B,A,A,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,C,H,A,A,A,A,A,A,A,A,A,A,H,H,B,B,H,-,B,B,B,H,H,B,B,H,H,H,A,H,H,H,B,B,B,B,H,A,H,C,A,A 90.117,H,H,A,A,A,A,H,H,H,B,B,B,B,H,H,H,H,B,B,H,B,B,B,B,B,H,B,B,B,B,B,B,B,B,B,B,B,H,H,H,-,H,H,A,A,A,A,A,A,A,A,A,H,H,H,H,A,A,A,A,-,H,H,H,B,B,B,B,B,H,H,-,A,A,A,A,H,H,B,B,B,B,H,H,H,H,H,H,H,H,B,A,A,A,A,A,A,A,A,A,A,A,A,H,-,B,B,H,-,H,H,A,A,A,A,H,B,B,B,B,B,B,B,A,A,A,A,A,A,A,A,H,H 264,A,A,A,A,A,A,H,H,B,B,B,B,B,H,B,B,-,H,H,B,H,H,B,B,B,A,A,H,B,A,H,A,A,A,A,A,A,A,A,A,-,A,A,A,A,H,B,B,B,B,B,B,B,B,B,H,H,H,-,H,-,B,B,B,H,A,A,H,H,B,B,-,H,H,H,H,H,H,H,B,B,B,B,B,B,H,H,H,B,B,B,C,H,H,H,H,H,H,H,H,-,H,B,H,-,H,H,H,-,H,H,H,H,A,A,B,B,B,B,B,H,H,A,H,H,H,H,A,A,A,C,H,H 71.967,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,H,H,H,H,H,H,A,A,A,B,-,H,A,A,A,A,H,H,H,B,B,-,H,B,B,H,H,H,H,H,H,H,H,H,H,H,A,A,H,-,H,-,H,H,H,H,H,-,H,H,H,H,-,H,H,H,B,B,B,B,A,H,H,H,H,H,A,A,H,H,H,H,A,A,A,A,A,A,A,A,A,-,A,A,A,-,H,H,B,-,B,B,B,B,-,-,H,H,H,H,H,H,H,H,A,A,A,A,H,H,B,C,H,A 264,H,H,H,H,H,H,H,H,H,H,H,-,H,H,H,B,-,H,H,H,B,B,B,H,H,B,H,H,H,A,H,A,A,A,A,A,A,A,A,H,-,H,B,B,B,B,B,B,B,B,B,B,B,B,B,A,-,B,-,B,H,B,B,B,B,B,B,H,H,H,H,-,B,B,H,H,H,A,H,B,H,A,A,A,A,B,B,-,B,B,B,C,H,A,A,A,A,A,A,A,A,A,A,B,B,H,H,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,C,H,A NA,B,B,B,B,B,B,H,H,A,A,A,A,A,H,A,A,A,A,A,H,H,H,H,H,H,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,-,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,B,B,B,B,B,H,H,H,H,B,H,H,-,A,A,A,A,A,-,A,H,H,B,B,B,B,H,H,H,A,A,A,C,B,B,B,B,B,H,H,H,H,H,H,B,B,B,H,A,H,-,H,H,H,-,-,A,H,H,H,H,B,B,B,A,A,H,H,H,H,H,C,H,H 264,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,H,-,H,H,H,A,A,A,A,H,A,B,B,H,H,B,B,B,B,B,B,-,B,B,B,B,B,H,H,H,H,H,H,-,H,H,B,B,B,B,H,H,H,H,B,B,H,H,H,H,H,-,A,A,H,-,H,H,H,H,H,B,H,H,H,H,H,B,B,B,B,B,B,B,B,B,C,B,B,B,B,B,B,B,B,B,B,B,-,H,H,A,A,H,H,A,A,A,A,A,H,B,-,H,H,H,H,B,H,H,H,H,B,B,H,C,A,H 264,-,H,-,H,H,H,H,H,H,H,H,H,H,B,H,H,-,H,H,A,A,H,H,H,B,A,A,H,B,H,H,H,H,H,H,H,H,H,H,H,H,A,B,B,B,B,B,B,-,B,B,B,B,B,B,B,B,H,-,A,A,A,A,A,A,A,A,H,H,H,H,H,A,A,A,A,A,A,A,H,H,H,H,H,B,H,H,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,A,A,H,H,H,H,A,H,H,-,A,H,B,B,C,H,H 74.267,B,B,H,H,H,H,A,A,A,A,A,A,A,H,A,A,-,H,H,A,A,H,H,H,H,B,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,H,H,H,H,H,H,H,-,A,A,A,A,A,A,B,H,H,H,B,H,H,H,-,H,H,H,A,A,H,H,H,H,H,H,H,A,A,A,H,H,H,H,H,B,B,B,B,B,H,H,A,A,A,A,A,A,A,A,A,A,A,A,H,B,B,B,H,H,H,H,H,H,H,H,B,B,H,H,H,H,H,H,A,A,A,A,A,A,A,C,H,H NA,-,H,A,A,H,H,H,H,H,H,H,H,H,B,B,B,-,A,A,A,A,A,A,A,A,H,H,B,H,-,H,A,A,A,A,A,A,A,A,A,H,H,H,H,H,H,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,B,B,-,A,A,A,A,A,A,A,H,B,B,H,H,H,H,H,B,B,H,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,H,H,B,B,B,B,B,B,B,B,B,H,A,A,H,H,H,A,H,H,H,H,A,H,B,C,A,H NA,H,H,H,H,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,H,H,H,H,B,B,B,H,A,A,A,A,A,H,H,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,H,H,A,B,B,B,B,B,H,H,H,A,A,A,A,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,A,A,H,H,H,H,H,H,A,A,A,H,B,H,H,H,H,H,H,B,H,H,A,A,A,A 264,-,H,H,B,B,B,B,B,B,B,B,B,B,H,H,-,A,H,H,H,A,A,A,H,H,A,A,H,B,-,A,A,A,A,A,A,A,A,A,A,A,A,H,H,H,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,B,B,H,A,A,A,H,H,H,B,B,B,H,B,B,B,B,B,B,B,B,B,H,A,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,A,H,H,H,B,B,B,H,H,H,A,A,H,H,H,C,H,A 264,A,A,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,H,H,-,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,B,H,H,H,B,H,H,H,H,B,H,A,H,H,H,B,B,C,H,B,B,B,H,H,H,H,H,H,H,A,H,H,B,A,A,A,A,A,A,A,-,H,A,A,H,H,B,B,B,B,B,A,A,A,A,A,A,H,H 264,A,A,A,H,H,H,H,H,A,A,A,A,A,B,H,H,H,H,H,B,B,B,H,H,H,H,-,B,H,B,H,A,A,A,A,A,A,A,A,A,A,A,H,H,H,B,B,B,B,B,B,B,B,B,B,A,H,H,-,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,H,H,H,B,B,H,H,H,H,H,H,H,H,H,H,C,H,A,A,A,A,-,A,A,A,A,A,H,H,H,A,H,B,B,B,B,B,B,B,H,H,H,A,A,A,A,H,B,B,B,B,B,B,B,C,H,H 109.867,H,H,B,-,H,B,B,B,B,B,B,B,B,A,H,H,H,H,H,H,B,B,B,H,H,H,H,H,B,B,B,B,B,B,B,B,B,B,H,H,H,H,-,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,H,H,H,B,H,H,H,B,H,H,H,-,H,H,H,B,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,H,-,H,H,H,H,H,H,A,A,A,H,H,H,H,H,H,H,B,B,H,H,B,B,B,B,H,A,A,A,A,H,H,H,C,H,A 264,B,B,A,A,A,A,A,A,A,A,A,A,A,H,A,A,H,H,H,A,A,A,A,A,A,A,A,A,A,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,B,A,H,H,-,B,H,H,H,H,H,H,H,A,A,A,A,A,A,H,H,H,H,H,H,B,B,B,-,B,B,H,H,A,A,A,A,C,H,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,A,A,B,H,H,A,A,A,A,H,H,H,H,A,H,H 264,H,H,H,H,H,H,H,H,B,B,B,B,B,H,H,H,B,B,B,H,A,A,H,H,H,B,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,B,B,B,H,H,H,A,A,A,A,A,A,A,A,B,B,H,H,A,A,H,H,H,H,H,A,A,A,A,H,H,H,A,A,H,H,H,H,H,A,A,A,A,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,H,A,A,A,B,H,H,H,H,H,H,A,B,B,B,H,B,B,H,H,A,A,A,A,A,H,B,C,A,A 96.017,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,H,H,H,B,B,H,A,H,H,H,H,H,H,H,H,H,H,H,-,H,H,B,B,B,B,B,B,B,B,B,H,H,H,H,A,A,-,H,H,H,H,H,H,B,B,H,H,H,H,B,B,B,A,H,H,H,H,A,H,H,B,B,H,B,B,H,H,H,A,A,A,A,A,A,A,-,A,A,-,A,A,H,H,H,A,B,-,B,B,B,B,-,H,A,H,H,H,A,B,B,B,H,H,H,H,B,B,B,C,A,A 136.417,H,H,H,H,H,H,B,B,H,H,H,H,H,B,B,B,A,A,A,H,A,A,A,A,H,H,-,H,H,B,B,B,B,B,B,B,B,B,B,B,B,B,A,A,A,A,A,A,A,A,A,A,A,A,H,B,B,H,A,A,A,H,H,-,H,A,-,A,A,A,A,A,A,A,A,A,A,A,A,H,H,B,B,B,B,H,H,H,H,H,H,C,H,H,H,H,H,H,H,H,H,H,H,A,H,H,H,B,B,B,B,B,B,H,H,H,B,H,H,H,H,H,B,H,H,H,H,A,A,A,A,A,A 168.25,H,H,B,B,B,B,B,B,B,B,B,H,H,B,A,A,A,A,A,H,A,H,H,H,H,H,H,H,H,B,H,A,A,A,A,A,A,A,A,A,-,A,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,-,H,H,H,H,A,A,A,A,H,H,H,B,B,B,B,H,H,H,H,H,B,A,A,A,A,A,B,B,H,H,H,B,C,B,-,A,B,A,-,A,A,-,A,A,A,A,A,A,A,A,A,A,A,A,A,A,H,H,H,H,B,B,B,B,H,H,H,H,A,B,B,C,A,A 120.7,A,A,A,H,A,H,B,B,B,B,B,B,B,H,B,H,H,A,A,H,H,H,B,H,H,A,A,A,B,H,H,B,B,B,B,B,B,B,B,B,B,B,A,A,A,A,A,A,A,A,A,A,A,A,H,A,A,H,-,H,B,A,A,A,A,A,H,H,H,H,H,H,H,B,H,A,A,A,A,H,H,H,A,A,H,B,B,B,B,B,B,C,-,H,H,H,H,H,H,H,-,H,H,H,H,H,H,-,-,H,H,H,H,H,H,B,B,A,A,A,A,A,A,A,A,A,A,H,H,B,C,A,H 114.55,B,B,B,B,B,B,H,H,H,H,H,H,B,H,H,H,H,A,A,H,A,A,A,A,H,B,-,B,H,H,H,H,H,H,H,H,H,H,H,H,-,B,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,-,H,H,A,A,A,A,A,H,B,B,B,H,H,H,H,A,A,H,B,B,A,A,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,A,H,H,A,A,-,-,B,B,B,B,-,B,B,B,B,H,A,B,B,B,H,B,B,B,H,H,H,C,H,A 94.033,A,A,H,A,H,H,B,B,B,B,B,B,B,H,H,H,A,A,A,H,H,A,A,A,A,B,B,B,A,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,-,H,H,H,H,H,A,A,H,H,H,H,H,H,H,H,A,A,A,A,A,H,H,A,A,A,A,A,A,A,A,H,B,A,-,A,A,A,A,A,A,A,A,A,A,A,A,A,A,H,-,H,H,H,H,H,A,A,A,A,A,B,H,H,H,A,A,H,H,A,A,A,C,A,A 67.683,H,H,H,H,H,H,H,A,A,A,A,H,H,H,H,H,H,H,H,H,H,A,A,A,A,B,B,B,H,A,H,H,H,H,H,B,B,B,B,B,-,B,B,H,H,H,A,A,A,A,A,A,A,A,H,B,-,H,-,H,H,H,H,H,B,B,-,B,B,H,H,H,A,A,A,A,A,A,A,H,H,A,A,A,H,H,H,B,B,H,H,C,H,H,H,-,H,H,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B,H,H,A,A,A,A,B,B,B,H,H,H,H,B,H,A,H,C,A,H 93.833,A,A,-,H,H,H,A,A,A,A,A,A,H,H,H,H,H,H,H,A,-,-,A,A,-,-,-,-,B,H,H,H,H,H,H,H,-,H,H,H,-,H,H,-,H,H,H,-,-,H,H,-,H,H,H,-,B,B,B,B,-,H,H,H,-,H,H,A,A,H,-,H,-,-,H,-,A,A,A,-,H,-,-,A,H,-,-,A,A,-,A,C,H,H,-,-,H,H,A,A,-,A,-,-,A,A,-,A,A,H,-,H,H,H,-,-,A,-,-,-,-,-,B,-,H,A,A,-,-,-,-,A,A 93.867,H,H,-,H,H,H,H,H,H,H,H,A,A,H,H,B,B,H,H,B,-,-,A,A,-,-,-,-,A,H,H,H,H,H,H,H,-,H,H,H,-,H,H,-,H,H,H,-,-,H,H,-,H,H,H,-,A,A,A,A,-,A,A,A,-,H,B,A,A,A,-,A,-,-,H,-,B,B,B,-,B,-,-,H,H,-,-,H,H,-,H,C,H,H,-,-,H,H,H,H,H,H,A,-,H,H,-,B,B,B,-,B,B,B,-,-,H,-,-,-,-,-,B,-,B,H,H,-,-,-,-,A,H 139.867,-,H,-,H,H,H,H,H,H,H,H,B,B,H,A,A,A,A,H,H,-,-,H,H,-,-,-,-,H,H,H,H,H,H,H,H,-,H,H,H,-,B,H,-,H,H,H,-,-,H,H,-,A,A,A,-,B,H,-,H,-,B,B,H,-,H,H,H,-,H,-,H,-,-,H,-,H,H,H,-,H,H,-,H,A,-,-,B,B,-,H,A,A,A,-,-,A,A,A,A,A,A,A,-,B,B,-,A,A,A,-,A,A,H,-,-,B,-,-,-,-,-,H,-,A,A,A,-,-,-,-,A,A 117.933,-,H,-,H,A,A,A,A,A,A,A,-,A,H,A,H,H,H,H,H,-,-,H,H,-,-,-,-,H,A,A,A,A,A,A,B,-,B,B,B,-,B,A,-,A,A,H,-,-,H,H,-,H,H,H,-,H,H,H,H,-,H,H,H,-,-,H,H,H,H,-,A,-,-,H,-,H,H,H,-,B,B,-,B,B,-,-,H,H,-,H,C,H,H,-,-,H,H,H,H,H,H,B,-,H,H,-,A,A,A,-,A,A,A,-,-,A,-,-,-,-,B,B,-,H,B,B,-,-,-,-,A,A 77.8,-,H,-,B,B,B,B,B,B,H,H,H,H,H,H,A,H,H,B,H,-,-,H,H,-,-,-,-,A,B,B,B,B,B,B,B,-,H,H,H,-,A,A,-,H,H,A,-,-,A,A,-,A,A,A,-,B,H,H,H,-,A,A,H,-,H,A,B,-,B,-,B,-,-,A,-,H,H,H,-,B,B,-,B,B,-,-,H,H,-,H,A,A,A,-,-,A,A,A,A,A,A,A,-,B,B,-,H,H,H,-,A,A,A,-,-,A,-,-,-,-,-,A,-,H,H,H,-,-,-,-,A,H 117.833,H,H,-,H,H,-,H,H,H,H,-,H,H,B,B,H,B,B,H,H,-,-,A,A,-,-,-,-,H,A,H,H,H,H,H,H,-,H,H,H,-,H,H,-,B,B,B,-,-,H,H,-,H,H,H,-,A,-,A,A,-,B,B,B,-,B,B,H,-,A,-,H,-,-,B,-,H,H,H,-,H,H,-,A,A,-,-,H,-,-,H,A,A,A,-,-,A,A,A,A,A,A,H,-,H,H,-,H,H,H,-,H,H,H,-,-,H,-,-,-,-,-,A,-,-,B,B,-,-,-,-,A,H 264,-,A,-,H,H,-,H,H,H,H,H,B,B,H,B,B,B,B,B,H,-,-,H,H,-,-,-,-,B,H,H,H,H,H,H,H,-,H,A,A,-,A,H,-,H,H,H,-,-,H,H,-,H,H,H,-,H,H,H,A,-,B,B,B,-,B,B,A,H,H,-,B,-,-,B,-,A,H,H,-,H,-,-,H,H,-,-,B,B,-,B,A,A,H,-,-,H,H,H,H,H,-,H,-,A,A,-,H,H,H,-,H,H,H,-,-,H,-,-,-,-,-,B,-,A,H,H,-,-,-,-,H,H 77.733,-,H,-,H,H,H,H,H,H,H,H,H,H,A,A,H,H,H,H,H,-,-,H,H,-,-,-,-,H,B,B,B,B,B,B,B,-,B,B,B,-,A,H,-,H,H,H,-,-,H,H,-,H,H,H,-,H,H,-,H,-,B,B,B,-,H,H,H,H,H,-,B,-,-,H,-,H,B,H,-,A,A,-,A,-,-,-,H,H,-,A,C,H,H,-,-,A,A,A,A,-,A,H,-,H,H,-,H,H,H,-,H,H,H,-,-,B,-,-,-,-,A,H,-,A,A,A,-,-,-,-,H,- 93.183,-,B,-,H,A,A,H,H,H,H,H,H,H,H,A,A,H,H,H,A,-,-,H,H,-,-,-,-,B,B,-,B,B,B,B,H,-,H,H,H,-,B,B,-,B,B,B,-,-,B,B,-,H,H,H,-,H,B,B,H,-,H,H,B,-,-,B,A,-,H,-,H,-,-,H,-,B,A,A,-,A,A,-,A,H,-,-,H,B,-,H,A,A,A,-,-,A,A,A,A,-,A,A,-,B,-,-,H,H,H,-,H,H,H,-,-,A,-,-,-,-,-,B,-,A,A,A,-,-,-,-,H,A 77.633,B,B,-,A,A,A,A,A,A,A,-,A,A,H,H,H,H,H,H,A,-,-,A,A,-,-,-,-,H,H,-,H,H,H,H,H,-,H,H,H,-,H,A,-,A,A,A,-,-,A,A,-,H,H,H,-,A,A,A,H,-,A,-,A,-,A,A,B,B,B,-,B,-,-,B,-,H,H,B,-,H,H,-,H,H,-,-,H,H,-,A,C,H,H,-,-,H,H,H,H,H,H,A,-,A,-,-,B,B,B,-,B,B,B,-,-,A,-,-,-,-,A,A,-,H,H,H,-,-,-,-,A,A 77.55,A,A,-,H,H,H,A,A,A,A,A,A,A,H,B,B,H,H,H,H,-,-,H,H,-,-,-,-,H,H,H,H,H,H,H,H,-,H,H,H,-,A,B,-,B,H,H,-,-,H,H,-,H,H,H,-,H,H,B,B,-,B,B,B,-,B,B,H,-,H,-,H,-,-,H,-,H,H,H,-,B,-,-,H,A,-,-,H,H,-,H,C,H,H,-,-,A,A,A,A,A,A,A,-,H,H,-,H,H,A,-,A,A,A,-,-,A,-,-,-,-,H,H,-,H,H,B,-,-,-,-,A,A 264,A,A,-,H,H,H,H,H,B,B,B,-,H,H,H,A,A,A,A,A,-,-,H,H,-,-,-,-,H,H,-,A,A,A,A,A,-,A,H,H,-,H,B,-,H,A,A,-,-,-,A,-,A,A,A,-,B,A,-,A,-,B,B,B,-,B,A,A,-,A,-,H,-,-,H,-,A,-,A,-,H,B,-,B,-,-,-,B,-,-,A,C,H,H,-,-,B,B,B,B,B,B,B,-,H,H,-,H,A,A,-,A,A,A,-,-,H,-,-,-,-,-,H,-,H,-,H,-,-,-,-,A,A 117.433,-,B,B,B,B,H,H,H,H,H,A,A,A,A,H,H,B,B,B,H,-,-,B,B,-,-,-,-,A,H,H,H,H,A,A,A,-,A,A,A,-,H,A,-,A,A,A,-,-,H,H,-,H,H,H,-,H,A,A,A,-,H,H,H,-,H,H,A,A,A,-,A,-,-,B,-,B,B,B,-,H,H,-,A,H,-,-,A,A,-,A,C,H,H,-,-,H,H,H,H,H,H,H,-,H,-,-,H,H,H,-,H,H,A,-,-,A,-,-,-,-,H,A,-,B,H,H,-,-,-,-,A,A 93.067,B,B,B,H,H,H,B,B,H,H,H,H,H,H,H,H,A,A,A,H,-,-,A,H,-,-,-,-,A,B,B,B,B,H,H,H,-,H,H,H,-,H,A,-,H,H,H,-,-,H,H,-,H,H,H,-,B,H,H,H,-,H,H,B,-,B,B,B,A,H,-,H,-,-,H,-,A,-,A,-,H,H,-,H,B,-,-,A,A,-,H,C,H,H,-,-,H,B,B,B,-,B,B,-,H,H,-,H,B,B,-,B,B,B,-,-,H,-,-,-,-,-,B,-,B,B,B,-,-,-,-,A,H 99.867,-,H,-,H,H,H,A,A,A,A,A,A,A,B,B,B,B,B,A,A,-,-,B,B,-,-,-,-,A,A,A,A,H,H,H,H,-,H,H,H,-,H,A,-,H,H,H,-,-,H,H,-,H,H,H,-,A,A,A,A,-,A,A,H,-,B,B,B,B,B,-,B,-,-,H,-,A,A,A,-,H,H,-,H,A,-,-,A,A,-,H,C,H,A,-,-,A,A,A,A,-,A,A,-,B,B,-,A,A,A,-,H,H,H,-,-,B,-,-,-,-,H,H,-,H,H,H,-,-,-,-,H,H 82.333,A,H,-,B,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,A,-,-,A,A,-,-,-,-,B,B,B,B,B,B,B,B,-,B,B,B,-,B,H,-,H,H,H,-,-,A,A,-,A,A,A,-,B,H,A,A,-,H,-,H,-,A,A,H,H,H,-,H,-,-,A,-,H,B,H,-,H,-,-,H,A,-,-,H,H,-,H,C,H,A,-,-,A,A,A,A,-,A,A,-,H,H,-,B,B,B,-,B,B,B,-,-,H,-,-,-,-,H,H,-,H,B,B,-,-,-,-,H,H 163.75,B,B,B,B,H,H,A,A,H,H,H,H,H,B,H,H,H,H,H,H,-,-,H,H,-,-,-,-,H,A,A,A,A,A,A,A,-,A,A,A,-,A,A,-,A,A,A,-,-,A,A,-,A,A,A,-,H,H,-,H,-,B,B,B,-,B,H,H,B,B,-,B,-,-,B,-,H,H,H,-,H,H,-,H,H,-,-,H,H,-,B,C,H,H,-,-,A,A,A,A,A,A,A,-,B,H,-,H,H,H,-,-,H,H,-,-,B,-,-,-,-,A,A,-,B,B,B,-,-,-,-,A,H 82.017,B,B,B,H,H,B,B,B,B,B,B,B,B,H,H,H,A,A,A,A,-,-,-,H,-,-,-,-,H,H,-,B,B,B,B,B,-,B,B,B,-,B,H,-,H,H,H,-,-,B,B,-,B,B,B,-,H,A,A,A,-,A,A,A,-,H,H,H,H,B,-,B,-,-,B,-,A,A,H,-,H,H,-,A,A,-,-,A,A,-,H,A,A,A,-,-,A,H,H,H,H,H,H,-,A,A,-,A,H,H,-,H,H,H,-,-,H,-,-,-,-,B,A,-,H,H,H,-,-,-,-,A,A 264,H,H,B,B,B,B,H,H,H,H,H,H,H,H,B,B,B,H,H,B,-,-,H,H,-,-,-,-,A,B,B,A,A,A,A,A,-,A,A,A,-,H,B,-,B,B,H,-,-,H,H,-,A,A,A,-,H,H,B,B,-,A,A,A,-,A,H,H,H,B,-,B,-,-,A,-,B,B,B,-,B,B,-,B,B,-,-,B,B,-,B,C,H,H,-,-,H,H,H,H,H,H,H,-,A,A,-,B,B,B,-,B,B,B,-,-,H,-,-,-,-,H,-,-,B,H,H,-,-,-,-,A,A 264,A,A,-,H,B,B,B,B,B,B,-,B,B,B,B,B,B,B,B,A,-,-,H,H,-,-,-,-,H,A,A,A,A,A,A,A,-,A,H,H,-,H,B,-,H,H,H,-,-,H,H,-,H,H,H,-,H,H,H,H,-,B,B,H,-,H,H,H,-,H,-,A,-,-,H,-,H,-,H,-,H,H,-,H,H,-,-,H,-,-,B,C,H,H,-,-,B,B,B,B,B,B,B,-,H,-,-,H,H,H,-,H,H,H,-,-,H,-,-,-,-,-,H,-,H,H,H,-,-,-,-,A,A 91.283,B,B,-,-,A,A,A,A,A,A,H,H,H,H,A,A,H,H,H,H,-,-,H,H,-,-,-,-,B,H,H,H,H,H,H,H,-,H,H,H,-,H,B,-,B,B,B,-,-,B,B,-,B,B,B,-,H,-,A,H,-,H,H,H,-,A,H,H,H,H,-,A,-,-,H,-,H,H,H,-,H,H,-,H,H,-,-,B,-,-,B,C,H,H,-,-,A,A,A,A,A,A,A,-,A,A,-,A,A,H,-,H,H,H,-,-,B,-,-,-,-,H,A,-,B,B,B,-,-,-,-,H,H 140.767,H,H,-,H,H,H,H,H,H,H,H,B,B,B,B,H,A,A,A,H,-,-,H,H,-,-,-,-,A,H,H,H,H,H,H,H,-,H,H,H,-,B,A,-,A,A,H,-,-,H,H,-,H,H,H,-,A,A,A,A,-,B,B,B,-,B,B,-,B,B,-,B,-,-,H,-,H,H,H,-,B,B,-,B,-,-,-,H,H,-,H,C,H,H,-,-,H,H,H,H,H,H,H,-,H,H,-,B,B,B,-,B,H,H,-,-,B,-,-,-,-,A,H,-,-,H,H,-,-,-,-,H,H 81.733,A,A,-,A,A,A,A,A,A,A,A,A,A,A,H,H,H,H,B,H,-,-,H,H,-,-,-,-,H,B,B,B,B,B,B,-,-,H,H,A,-,A,B,-,H,H,H,-,-,H,H,-,H,H,B,-,H,H,H,H,-,H,H,H,-,H,H,A,A,H,-,H,-,-,A,-,B,-,B,-,H,-,-,H,A,-,-,B,B,-,H,C,H,H,-,-,H,H,H,H,H,H,H,-,H,H,-,B,B,B,-,H,H,H,-,-,H,-,-,-,-,H,H,-,A,H,A,-,-,-,-,A,A 75.667,H,H,-,A,A,A,A,A,A,A,A,-,A,A,H,H,B,B,H,H,-,-,-,A,-,-,-,-,A,H,-,H,H,-,B,B,-,B,B,B,-,B,A,-,A,A,H,-,-,-,H,-,H,H,H,-,H,-,B,B,-,A,A,-,-,B,B,H,H,H,-,H,-,-,H,-,H,-,H,-,H,H,-,H,H,-,-,A,A,-,H,C,H,H,-,-,H,H,H,A,-,A,H,-,H,H,-,B,H,H,-,H,H,H,-,-,A,-,-,-,-,A,H,-,H,A,A,-,-,-,-,A,H 76.483,B,B,B,B,B,H,H,H,H,H,H,H,H,B,B,H,H,H,A,H,-,-,A,A,-,-,-,-,A,B,-,H,H,H,H,H,-,H,H,H,-,H,A,-,H,H,H,-,-,-,B,-,B,B,B,-,B,B,-,H,-,A,A,A,-,A,A,B,-,B,-,B,-,-,B,-,A,-,H,-,A,H,-,B,B,-,-,H,H,-,B,A,A,A,-,-,A,A,A,A,H,H,B,-,H,H,-,B,B,B,-,B,B,B,-,-,A,-,-,-,-,A,A,-,H,H,H,-,-,-,-,A,A 116.467,H,H,-,B,B,B,B,B,B,B,H,H,H,H,H,B,B,B,H,H,-,-,H,-,-,-,-,-,B,H,H,A,A,A,A,A,-,A,A,A,-,H,A,-,A,A,A,-,-,H,H,-,H,H,H,-,H,H,H,B,-,A,A,A,-,A,H,B,-,B,-,B,-,-,B,-,H,H,H,-,H,H,-,B,B,-,-,H,H,-,A,A,A,A,-,-,A,A,H,H,H,H,H,-,A,H,-,A,A,A,-,A,A,A,-,-,H,-,-,-,-,-,H,-,B,B,B,-,-,-,-,A,A 116.517,A,A,-,B,B,B,B,B,B,B,B,H,H,H,H,B,H,H,H,H,-,-,H,H,-,-,-,-,A,B,B,B,B,B,B,B,-,B,H,H,-,H,B,-,B,H,H,-,-,H,H,-,H,H,H,-,A,A,-,H,-,B,B,H,-,H,H,A,-,A,-,A,-,-,A,-,H,-,H,-,H,H,-,B,B,-,-,H,H,-,H,C,H,H,-,-,H,-,H,H,-,H,H,-,A,A,-,H,A,A,-,A,A,A,-,-,H,-,-,-,-,-,H,-,H,A,A,-,-,-,-,A,H 139.55,H,H,B,B,B,B,B,B,H,H,H,H,H,A,A,A,H,H,H,H,-,-,H,H,-,-,-,-,H,H,H,H,H,-,H,H,-,H,H,B,-,B,H,-,H,A,H,-,-,H,H,-,H,H,H,-,H,H,H,H,-,H,H,H,-,H,H,H,H,H,-,A,-,-,H,-,H,H,H,-,H,H,-,B,H,-,-,H,-,-,A,C,H,A,-,-,A,A,H,H,H,H,H,-,H,H,-,A,A,A,-,A,A,A,-,-,H,-,-,-,-,B,H,-,H,H,B,-,-,-,-,H,H 264,A,A,-,A,A,A,A,A,A,A,A,A,A,B,B,H,H,H,H,B,-,-,H,H,-,-,-,-,H,B,B,H,H,H,H,H,-,H,H,H,-,H,B,-,B,B,B,-,-,B,B,-,H,H,H,-,A,B,B,B,-,H,H,A,-,H,H,B,B,B,-,B,-,-,H,-,B,-,B,-,H,H,-,H,H,-,-,B,B,-,H,C,H,H,-,-,H,H,H,H,H,H,H,-,H,H,-,H,H,H,-,H,H,H,-,-,H,-,-,-,-,B,B,-,H,H,H,-,-,-,-,H,A 116.2,A,A,-,H,H,H,H,H,H,H,H,A,A,A,H,H,H,A,A,H,-,-,H,B,-,-,-,-,H,H,H,H,H,H,H,H,-,B,B,-,-,B,H,-,H,H,A,-,-,A,A,-,A,A,A,-,A,H,H,H,-,H,H,A,-,H,H,A,A,A,-,A,-,-,H,-,H,-,H,-,H,B,-,B,B,-,-,H,H,-,B,C,H,H,-,-,H,H,H,H,H,H,H,-,B,B,-,H,H,H,-,B,B,B,-,-,H,-,-,-,-,H,B,-,H,H,H,-,-,-,-,A,A qtl/tests/listeria.raw0000644000176000001440000004600711562004334014600 0ustar ripleyusersdata type f2 intercross 120 133 1 symbols a=A h=H b=B c=C *D10M44 b--bhhhhabaaahahabhhhbah----haaabbbhhbbhbabhahhhh-b-abahhbhh bhhhahhhahhbh-b-h-aahbhhhhabahah---h---baa-b-abbhabhahbhahaa *D1M3 bbhbhhhhabhaahahabhhhbahhhhhhaaabbbhhbbbbabhahhhhhbb-b-h-bhh bhhhahhhahhbhhbhhhaahbhhhhabahahhhhhahbbaabbhhbbhabhahbhahaa *D1M75 bbhhhbhhhhhhhahbahahhhahhbhhhahhhbbbhbhbbabhaahahhbbhbhbhbhh bhhhhhhaahhbh-hahhhabahhhbabhh------------bb--bbb-----b--b-- *D1M215 hbhhhbhhbhhhhahbahhhaha-hhhaahhhabbbhbhbbaabhabahabbabhhhbhh bhhhhbhaahhbhhhahbbh-ahhhbhbahhhhhbhhhhahhbhhbbhbh-haabbbbah *D1M309 hhhhbbaabahhhahba-haahahhhha-hhbabbbhbabbaabhabahabbabbhabha bhbhhbhaahhbhhhhbbbhhahhhbabhhhhhabhhhaahhbhhahhbbahaabbbbah *D1M218 hhhhhbaabahhhahbahhaahahhhhahbhbabbbhbabbaabbabahabbabbhabha bhbhhbhaahhbhhhhbbbhbahhhbhbhhhhhab--haahhhhhahbbbahaahbbbah *D1M451 bhhbhbaahahhbahhhhbaahhhbhhahhahabbbhhabhahbbhbahabhabbbhhha bhbahbhhhhhhhhahbbhhbahhbbbhbhahhabhhhhaahhbaaabhbahaahbbbah *D1M504 bhhbhbaahahhbahhhhbaahhhbhhahhahabbbahabhahbbhbahabhabbbhhha bhbahbhhhhhhhhahbbhhbahhbbbhbaahhabhhhhaahhbaaabhbahaahbbbah *D1M113 hhbbhbhhhahhbahhhhbahhbhbhhahhahhbbbahabhaabbhbahabhabbbbhha hhbaahhhbhhahhahhbhababhhbbhbaahhabhhhhaabhhaahbhbahaahbbhah *D1M355 hhbbhbhhhahhbahhhhbahhbhbhhahhahhbbbahabhaabbhbahabhabbbbhha hhbaahhbbhhahhahhbhababhhbbhbaahhahhhhhaabhhaahbhbahaahbbhah *D1M291 hhbbhbhhhahhbahhhhb-hhbhbhhahhaahbbbahabhhabbhbhhabhabbbbhha hhhhah-bbhhahhahhbhababhhbbhbaahhah-hhh-abahaahbh-hhaahhbhah *D1M209 hhbbhbhh-a-h-ahahb-hh-bhbhaahhhahbhhahab-hah-h-hhhbhabbbbhha hhhhahhbbh-ahhahhbhababhhhbhbhaab-hhbhhaa-ahaahbhbhba-hhhhaa *D1M155 hhbbhbhhhahhbahahbbhhhbabhaahhhahb-----bhhahbhbhhhbhabbbbhha hhhhahhbbhhahhahhbhababhhhbbbhhabahhbhhaahahaahbhbhbaahhhhaa *D2M365 hbhabhbhaaabhhhbhbhhhh-hhahh--b-bbhabahaha-haahhaahaba-ahhhh hhba-bbhhhhhbbhbhhhbahhhbbhhhhhhhhhbhahhhhahbbbhhbhbaabhhaba *D2M37 abh-habhhaabhbhbbbhhhhahabhhahbhbhhhhbhaaahhahahhhhaahbhahhh babaabhhbahabhabhhhhhahhbabhhhhhaahbbaahbhhhbbhhbbabhhbhhabh *D2M396 ahhahabahhbhhbahhhahahababhbhhbbbhhhhbbaahhh-abhhhhhahbaah-h hhbahbhhbabahhabh-hhhahhbahhhhhbahahbhahbahhbbhhbbahhhhbbahh *D2M493 -----ab-hhbhhhah-haaahab----hhhbbahba-baah-a---------hb-habh hhbahb-h-a-a----hahhhhbhaahhahhbahhbbhhhhababbhabbhahbhbhhhh *D2M226 ah-h---ahhbhh-hahhaaaaabhhhah-hbhaababbh-hbaababhaabhhbabhb- hhbah-hbhahahhhahhhhhhbhaaaaahhhahhbbhhhhababbhahbhahbhbhhha *D2M148 aahhhahabhbhhhhahbhabahahahabhahhhhbabhhahbaabhbhahbhahabhbh hhbahbhbhahahhhahhbhhhbhaaaaahhhhhbhbhhhhabaabhahbhabhahhhha *D3M265 bbhbbbbhaahaabbhbaaabhahahahbhhhbahhhahaaabhahahhhhahbhhhhha hhhhaabhbhhhhaaahhhbhahbhhhhhhabhhhhhhaahahhaahabahhhhhhhhbh *D3M51 bbhhabhbhhahahb--aaahbhhahhabbahhhahhah-hahaahhhahhhbhhhhhhh hhhhhahbhhbhaaaabahbbaabaahahh------------------------------ *D3M106 bbhhabhhhhabahbhaahahbhhahhabbahhhhhhahhhhaaahhaahhhbahhhhab bhbahahbhhbhahhahahbbaabahhaaa------------------------------ *D3M257 bhhhabhhahhhahbhahaahbahahhahhhhahhhaahhhhaahhbaahhhbhhhhhab bhhahbhbbhbhahhahahhbahhahbaaaaahhhahhhahhbabah-hhhhh-ahhhhh *D3M147 bhbhabhhahhhabbhahh-hhabahhahhhhahbh---hhhaahhbaahhhbhhhahab bhhahbhbbhhhahhahhhhhahhahhaaaaahhhahhhahhbhbahhhhhhhaa-hhhb *D3M19 bhbhabhhaahhahbhahaahhabahhhhhhhahbhahahhhahbhbaahbbbhhhaaab bhhahbhbbhhhhbhahhhhhahhhhhhaa------------------------------ *D4M2 ahahahhhhbhhhhhbbaaahbbhhhahabhhhbhhahhhhbhhhhhahbhbhhhhhahh hhbbbhbhaabbaabhbahhhabbhhabbb------------------------------ *D4M178 hhahahh-hhhhhhhbhh-hhbbhhh-bhhhab-bbahhhbb-ah-hhh--h-hhhhhah hhbb-h-baahbbahhbah-hahb-ha-bb------------------------------ *D4M187 ahhhahhhhhhbhhbbhhhhhbbahbhhhbbabhbbahhbbbahhahhhhbabbahhhab hhbhhhbbhahbbhhbbhhbhahhhhabbb------------------------------ *D4M251 hhhhhhhbbhbbahbbhhahhbhbhbhhahhhbbbhabhhhbhbhahhahbabbhhhhab bahhhbbbbbhbhbhhhbhhbahahhbhahbahhahbhbhhhaaabhhahbahaabahhh *D5M148 aha--ahbhhhbhbahhhabhaa-bbhba-hahhbhbaabbhahbb--bhbhb-hhaaaa hahb-hhba-abhhh-a-hbbbahbbhhbahhhabahbbhhhhbabahbahhbhbhbhbh *D5M232 ahahaaabhhhbhbabhhahhaab-bhbahhahhbhbhabbhahbbaabhbhbbhhhaaa hahbhhbbhhhbbhhhaahhbbahbhhhbhhhhabhhb--h-hbaba-bahhb--hbhbh *D5M257 hhaaaaabhhhbhbhbhhahahabbhhbahaahhhhbhbbbhhhhbahbhbhbbahhaaa hhhbhhbbaaahbhhaaahabbahbabhbhhhhabhhbbhhahbababaahhbhhabhhh *D5M83 hhaaaaabhhhbhbhbhhahahabbhhbahaahhhhbhbbbhhhhbahbhbhbbahhaaa hhhbhhbbaaahbhhaaahabbahbabhbhhhhabhhbbhhahbhbabaahhbhhabhhh *D5M307 hhhaaaabahhbhbhbbhahahabhhhbahaahhhhbhbbbhhhhbahbhb-hbahhaha ahhbh-bbaaahbhhaaahabbahbabhbhhhhabhhbbhhaahhbabaahhb-hab-hh *D5M357 hhhaaaabahhbhbhbbhahahabhhhbahaahhhhbhbbbhhahbahbhbhhbahhahh ahhbhhbbaaahbhhahahabhahbabhbhhhhabhhbbhhaahhbabaahhbbhabhhh *D5M205 hhha-habahhbhbhbbhahahabhhhbahaahbhhbhbbbhhahbah--bhhbahhbbh ahhbhhbbahahbhaahahabhahbabhbbhhhbbhhbhhhaahhbabaahh-bhabhhh *D5M398 ------------------------hhhbahaahhhhbhbbbhhahbah--bhhbahhbbh ahhbhhbbahah-haahahabhahbabhbb------------------------------ *D5M91 hhhahhabahhbhbhbbhahahabhhhbahaahbhhbhbbbhhahbahbhbhhbahhbbb ahhbhhbhahahbhaahahabhahbabhbbhhhbhhhbhhhaahhbabaahhhbhabhhb *D5M338 hhhahhabahhbhbhbbhaaahhhahhbahaahbhhbhbbbhhahbahbbbhhbahhbbb ahhbhhhhabahbhaahahahhahbabhbbhhhbhhabhhhhahhbabahhhhbhahhhb *D5M188 hbhahhahahhbhbhbbhaaahhhahhbhaahhbhabhbbbhhaabahbbbahbahbbbb ahhbhhhhabhhbhhabahahhahbabhbbhhhbhhabhhhhahhbabahhhabhahbh- *D5M29 bbhah--h-hbb--hbbh-a--hhahhb---hhbha-hbbba-a-b-abb-aa-ahbbbb h-hbhh------bhhhbahahha-b-b-b------------------------------- *D5M168 bbaahhhhhhbbhhhhbhaaabahaahbhhahbbhabhbbbabaabaabhhaahahbbbh hbhbhhhhahhhbahhbaaahhbhbabbbbhhbbahaabhahhhhbabhhhbabhhhbhb *D6M223 aahhaahahhhhbhhhhahbbhhabbaahabhbhhbahahhbhbahhahhhhahbhhbhh haahabbhabbhhbhhhhhh-hbhahahhbhhhaahhhbabbaaahahbbbabaaabhbh *D6M188 aahhaahahhhhhbhhhahbhhhabbaahhhhbhhhabhhhbhbahhahhhhahbhhbhh haaaahhaabbhhbhhhhhhhhbbahahhh------------------------------ *D6M284 hahhaahahhhhhbhhbaabhhhahhaahhhhhhhhabhhhbhbahhahhhhahbhhhhh hhaaahhaahbhhbhhhhhhhhhbahahhhhhhahbhhbabhahhhahbhbahahabhbh *D6M39 hahhahhahhhhhbahbahbhhhahhaabhhhhhhhhbhhhbhbhhbahhhhahbbbhhh hhahahhahhbhhbhhhbhbhhhbahahhhhhhahbhhbahaahhhahbhbahahahabh *D6M254 habhabhhbhhhhbahbhhhhbhahhhhbhhhahhhhbhhhbhhhhbabhhhhhbbbhhh hhahhhhabhbhhbhbhbhbhhhbahahhahhhhabhhbahaahhhahhhbhhhhahhba *D6M194 habhabhhbhhhhbabbhhhhbhahhhhbhhhahhhhbhahbhhhhbahhhhhhbbbhbh hhahhhhabhbhhbhbhbhbhbabahahha------------------------------ *D6M290 habh-bh-bhahhba-bhhhhbhah-------a-hhhbhahb-ah-ba-h---h-bbhbh hh-hhhhabhbh---bhb-bhbabahahha------------------------------ *D6M25 habhhbbbhhahhbabbhhhhbhahhhhbhhbahhhhbhahh-ahhbahhbhhhbbbhbh hhahhhhabhbhhbabhbhbhbabahahhahhhhahhhbah-hhhaabhhbhh--hhhba *D6M339 habhhbbbhaahhbabbhhhhbhahhhhbhhbahhhhbhahhhahhbahhbhhhbbbhbh hhahhhhabhbhhbabhbhbhbabahahhahhhhahhhbahahhhaabhhbhhhbhhhba *D6M59_ bhbhhbbbhaahhbabhhhhhbhahhhhbhhbaahhhbhahhhahhbahhbhhhbbbhhh hhahhhhabhbhbbabhbhbhbabahahha------------------------------ *D6M201 bhbbhbbbhaahhbabhhbhhbhah-hhbhhbaahhhbhahhhahhbahhbhbhbbbhhh hhahhhahbhbhbbabhbhbhbahahahhahhahahhhhhhahhhaabahbhhhbhhhha *D6M15 bhbbhbbbhaahhbabhhbhhbhahhhhbh-bahhhhbhahhhahhbahhbhbhbbbhhh hhahhhahbhbhbbabhbhbhbahahahhahhahahhhhhhahhhaabahbhhhbhhhha *D6M294 bhbbhbbbhaahhbabhhbhhbhahhhhbhhbahhhhbhahhhahhbahhbhbhbbbhhh hhahhhahbhbhbbabhbhbhbahhhhhhhhhahahhhhhhahhhaabahbhbhbhhhha *D7M246 bhabbaahbhhhababahhhhhabhhhbbhbabhhhhbbhhhahbhbaahbaahhhhabb hhbbahhhhaahhbbhhhhahabhbaabab------------------------------ *D7M145 bbabhaahbaahhbhbhhhhhhhhhahhbababhhhhbbbbaaabhha--bahahhhabb hhbhhbhaha-hhbhhhhhhhhbabaabh-babhbahhhahbhbabhhhhhahhbhahaa *D7M62 hbabaaahbahhhhhbhhhbahbhhbhhbababahhbbbbbaaabhhaabbahhhhhahb hhbhhbhahhbhhhhhbhhhahhahahbhhbahhh-hhbahaahahhahh-ah-bhahbh *D7M126 hbabaahhbah-h-hbhbhbaab-hbhhbababahhbbbabaaabhh--bbahhahha-- habhhb-a----h-hhbhh-a-h-a-----ba-hhah-bab-ahaa-abhaahb-h-hbh *D7M105 hbabhahhbhhhhhbbbbahaabhbhhahhbhbahbbbbabaaabbhaabahahahbhhh bhhhhhbahhbbbabhbhhhabahahhhhhbahhhaahhhbaahaahabhhahbhbhhbh *D7M259 hbahhahbhh-hhhhbhbahhaha--b-hhb-b--bbbhahh-a--haa-ahaha-bhhh bhahhh----hbbahhbhhhahahahbhhh------------------------------ *D8M94 hhhbahbabbahhahbbhbbahahahhbbahbbhbhbahahahabhbhbbhhaahbhhhh hhhahahhbhbbhahhbbhhhhhhhhaahhhabhabbbhabbhhahbaabhbhaaabhhh *D8M339 hhhbahbabbahhahbbabbahahahbbbahbbhbhhahahahabhbhbbhhaahbhhhh bhhahahhbhbbhahhbbhhhhhhhhaahhhabhabbbh-bbhha-baabhbhaaabhhh *D8M178 hhhbabbh-bahhahbbabbabhhahbbbhhbbh-hhahahhhabhbhbbhhhaahahhh bhhhhahhbhbbha-hbhhhhhhh-aaahhhahhhbbbbabbhbhhbaahhbh-aahhaa *D8M242 hbbbabbhbhabhaabbahhhbhhaabbbhhhbhbhhahhahhabhaabbahhaahabbh bhhhhahbhhbhhahbhahhhhhhhaaaab------------------------------ *D8M213 bbhbabbhbhabhaabb-hhhbhhhabbbbhhbhbhaahhahhahhaahbahhaahabbh bbhhhahbahbhhahbhahhhhhbaaaaabhhh-hbbh-abbhbbabhahabhbaahhhh *D8M156 bbhhhhbhahahhhahhaa-bbhhbhhbhbh-b-bhahhhhh-a--aa-bah-a--abbh b-ab-a-ba-bh-ah-aahhbhab-ahhh-hbhhabbhbabahbbahhhhhbhbahhhhh *D9M247 bhbhbhbbhbhahbhhbaahhahhhhahhbahhhhhhhhbabhbhbbbahahhhhahhba haaabbbbhhhhahaabhhahaahahhbhbaahhbhahabhaabbhhhhhh-ahbbahba *D9M328 babhbhbbhbhahbhhbaahhahhhhabhhahhbbhhhhbabhbhbbbahahhhaaahba haaabbbbhhhbahaabhhahaahahhbhbaa-h--hh-b--aabhbhh-hbah---hba *D9M106 habhbhbbhbbahbahhaahhahhhhabhhahhbbhbhhbabbbhbbbhaahhhaahabh hhaabbbhbhhhhhhabhhahaahahhbhhhahhbahhhbhaahbhbbbhhbhhbbahba *D9M269 hhbhhhababbaabahhhhhahhhhhabh-aahbbhbhhhab-ba--bhaabhhaahah- h-aa-hbhbhhh-hhabbhabahhabhhhh------------------------------ *D9M346 hhbhhhababbaabahhhhhabhhhhabhhhahbbhbhbhhhbbabbb-------a---- ---a--------hhhabbhahahbabhhhhhahabhbbhbhhahbhbbbaabhhbbaaba *D9M55 hhbhhhabahbaabahabhaabhhhhabhhhahbbhbhbhhhabahbhhahbbhhhhaah baaahhbahhbahahahbaahahbabhhha------------------------------ *D9M18 hhbhhhahaabaahahabhaabhhhhahhbbahbbbbhbhbhabahbhhahhbhhhhaah baaahhbahhbahahahhaahhababbhha------------------------------ *D10M298 hahaahhahaabhbhhabhhhahhabhaaahbaabhhhahhhhahahhabbhbhhahhaa habhaaaahhhahahhhbba-haaahhaaahhhhabbhhbhhbhhabbahhhahbbahhh *D10M294 haahhhhabhhbahahabbbhahaabhahhhhhahbhhhaahhaaahhabbhbhhhhhha habhahaahbhahahbabhahhhhahaaaa------------------------------ *D10M42_ baabhhh-bhhbhhahaabbhahhabhhhhah-ahbhhhaahahahhh-hhhbhb-bhha babhhhhhhbhabaababhhhhhhahahaaabhhhhahbhhabaahhabhhhbhahhhbh *D10M10 baahhhhabhhbhhabaabbha-hhhhhhhahhhhbhbhaahahahhhaahabhbhbhha bhhhhhhhhba-haahabhhhhhhahabaaabhhhhhbahh-b-abhab-hh---h-h-- *D10M233 baahhhhabhabhhbbhabhhaabhhhhbaabhhhbhbbaahahhbhhaaahhhbbhhha bhhhbhhbhbhahaahabbhbhhhahabaaabhhhhhhabhabaahhhbhhhbhhhhhbh *D11M78 hahbbhahbaababhhahbhahhbhhhhhhaahhhhbaahhhbhhhhbaaahhahhhaab bbhhaahbbabhhhhhhbhbabhahbhahh------------------------------ *D11M20 hahbbbabbhhbahahahbbahhbhhabbha-hhhhbaahbhbhhaabaa-hbh-hhhhb bbhbaahbbhhhhhhhhbhbabahhahahhhbhbbhhaahbhhhhhhhbhhbhhahhhhh *D11M242 hahbbbahhhhbahaba-hbhbhbhhabbhhhbhhhhhahb-bbhaabaaahbhahhbhh bbhba-hbbhabhhhhhbhhabahbahhaa--hbbh-aah-bhhh-hhbhhb-hhhhhhb *D11M356 aahbbbhbhhhbahhhahhbhbhbbhabbhhhbhhhhhhhbhbbhaahhbaabbahhhhh bbhbhahhbhabbhhbhbhha-abbaahaa------------------------------ *D11M327 aahbbbhbhhhbahahahhbhbhbbhabhhhabhahhhhhbhbbhaahhbaabbaahhhh bbhbhahhbhabbhhbhhbhababbaahaaahhbbahaahhbahhhhabhhbhhbbbbhb *D11M333 hahhhbbhhbhhhaabbhhbhbhbhhabhhhabbahhhhhbhbbahhhhbhhbbaaaaha aahbhahhbhabbbbhhahhabhhbahhahhhabbah-hha-hbaahabhh-ahbbbhhb *D12M105 babaabbaaaahahhhaahbabahhahahbabhhbhhahaahbhabhhaabahaahaaba hbhbhbbhhabhbhbbhhahahhbhbbhah------------------------------ *D12M46 babaabhha-aaahhhaahbabahhahaahabhhbhhahaaab-abhhaa-aaaahaaha hbababbhhabhbhbbhhhhahhbhbbhah------------------------------ *D12M34 bhhhahahhaaaahhhaahbahahhahhahabbhhhhahhaahbhhhhaahaaaa-aaha ahahhbbhhh-hbabbhhhhaahhhhbhabahbhhhbhhhhbaaahhabhbhbahhhhbh *D12M5 bbhaahahhaha-hhhahhbahahhhhbahabbhahhahhaahbahbhaahaaaahhaha ahaahbbhbhbababbbbhhaaahhhbhabahbhh-bhbhh-aaahhab--hbahhh-bh *D12M99 bbhaahahhahaahhhahhhbhhhbhhbhhaabhhhhabhaahhahhhaahahaabhaha ahaahbbhbhbabahbbbbhaaahhhbahh------------------------------ *D12M150 bhbaahahhabhhbhhaha-bhhhbhhbhhaabhh-hhbbaa-hah-haabahaabha-h ahhabbbbbhbabahhbbbhaaaahbbabhahhhhhbahahaahhhbhbbbhhhbahahb *D13M59 caacccccaccacccaccccccccbbhhhaabahahahbabbhhhhhhcccacccccaaa cacccacacacccaahbhccacaacccaacccacaaacaccccccccaccccccaacccc *D13M88 -aahhhhhahh-hbhabbbhhh--bbhhhaabahahahbabbhhhhhhabbabhhhbaaa hababahahahbbhahbhhhahaahb-a-hhhahaaahahhhhhhhhahhhhhhaahhhh *D13M21 hhahh-bhahhaabaabbbhh-hhbbhhhaa-a-ah-hhab-b---hahbb-bah-b-a- b-b-b-aahaabbhahbhbaabaah-haahhhahaahhahhhhhaahahhhhhhaahahh *D13M39 hhahhhbaahhaabaabbbhhhhhbbbhhaahahahahhab-bhhahahb-abahhbaaa hhbbbaaahaabbhahbhbaahaahahaah------------------------------ *D13M167 hhahhhbaahhaabaabbbhhhhhbbbhhaahahahahhabhbhhahahbbabahhbaaa hhbbbaaahaabbhahbhbaahaahbhaa------------------------------- *D13M99 ahahhhbaahhaabahbbbahhhabhbhhaahahabahhabhbhhahabbbabahhbaaa hhbbbaaahaabbhahbhhahhaahahaahhhahaahaahabhhaaaahbahhhaahahh *D13M233 a-ahhhb-ahhaabahbbbahhhahhbh-aa-ahabahhabhbhhahabbbab--ab--a h-bbbaaahaahbhahbhh--ha-h-haahhhahaahaahabhbaaahhbahhhaa-ahh *D13M106 ahhhhhbaahhhabahbbhahhhahhbhhaahahabahhabhbhhhhabbhabahabaaa hhbbbaaahaahbhahbhhahhaahahaaaahahaahaahabhbaaahhbahhhahhhhh *D13M147 ahhhhhbaahhhabahbbhahhhahhbhhaahahabahhabhbhhhbabbhabahabhaa hhhbbaaahaahbhahbhhahhaahahaaaahahaahaahabhbaaahhbahhaahhhhh *D13M226 ahhhhhb-ahh-hbhhb-hahhhahhbhhaaaah---h--b-bhh-habbhabahab--- hh-bb-aa--ahbhahbhhahha-h--aaa-hahaah--habh---ahhbahh-hh-hhh *D13M290 ahhhhhbaahhhhbhhbbhahhhahhbhhaahahabahaabhbhhhhabbhabahabhaa hhhbbhaahaahbhahbhhahhaahahaaaahahaa-aahabhbaaahhbahhahhhhhh *D13M151 ahhhhhbhahhhhbhhbbhahahahhbhhabaahhbahaahhbbhhhabbhabaaabhhh hhhbbhaabaahbhahbhhahhaahahaaa-aabahhhaaabhbaaahhbahhhbhhhhh *D14M14 babhhaahbabbbhabahabbhahhbbbhhhhhhhhahahhahhh-bhahbbhhbhhbba hahahhhhhabb-hhbbbahhhhhaahhab------------------------------ *D14M115 bbbahahbbhhbbhaaahhhhaahhhhhhhhbhhhhahaa-a-a----hhbbhhbahhbb hahahhh---bbhbbbbbhhahahhahhabahbhbhahbahhhhbhbaahahhhhaahhb *D14M265 hbbahahhbbhbbhhaahhaaaahhhhhhhhbhbhhahaahabhbhaahabhhhbahhhb hahaahbbhhhbhbbhbbhhahahhahaabahbhbhah--hh-hbhhaa-ahhhhhahhb *D14M266 hbhhhahhbhhbbhhhhhbaahahhhhhhhhhhbhhahhahbbhbhhahabhhhhahhhb haahhhbbhhhhabbhbhbaahaahahaab------------------------------ *D15M226 abbhahabhhahah--hhhbbhhbhabhbhhahahbhh--hhhaaabhhhahahhahhhb hb--hhhhhbbaahhbahahhhbbba--hbabaahhhhhbhhhhabhabhabbbbahahh *D15M100 hhbbahabahahab-aahabbhabhhbbhhhahahhhhbbh-------hhabhhhaahhb abhb------bhhhhbahabhhh-ba---babaahhhhhbhahbabhhbhabbhbaaahh *D15M209 hhbhababahahabaaahabbhabhhbbhhhhhahhahbbhahaaahhhhhbhahaahbb abhbahbhhbb-hhhbhhabhhhbbahbhbhbaahhhhhbaahbabhhbhhbbhbaaahh *D15M144 hhbhababahahabaaahabbhabhhbbhhhhhahhahbbhahaaahhhhhbhahaahbb abhbahbhhbbhahhbhhabhhhbbahbhb------------------------------ *D15M68 hhbhabahahahabaaahabhhabhhbbhhhhhahhahbb-ahhaa-bhhhbhahaahbb abhbabbahbbhahhbhhabhahbbahbhbhbaaahhhhbaahbhb-hbhhbhhbaaahb *D15M239 hhbhabahahahhbaaahabhhabhhbbhhhhhahhahbbhahhaahbhhhbhahaahbb abhbabhahbbhahhbhhabhahbbahbhbhbaaahhhhbaahbhbhhbhhhhhbaaahb *D15M241 hhbaabahahahhbaaahahhhabbhbbhbhbhahhahbbhahhhah-aahbhahaahbb abhhabhaa-b-ahhbhhabhah-hah-hhhbhaahhhhbaaabhbhhbhhhhhbaaahb *D15M34 hhbaab-hahhhhb-a-h-hhhabbhhbbbhhhahaahhb-abbh-hbaab-babaahb- ahb-abbaa-b-ahhbhh-bbaahhahbah------------------------------ *D16M154 ahbaahbbhbbbbhhbbahhhaaahbahhaahhahhabhaahbbaabhhaahbabhhbbh hhbaaabhbhhahhbbaahhbhbahhbbaa------------------------------ *D16M4 ahbhbhhbbbbbhahbhabhhaaahbabhahhhaahhbhaahbbaabhbaahbabh-hhh hhbhaahbbhhhbabhahahhhbhbhbbaaahbaahhbaaahahbhbhhhbbhaahhhhh *D16M139 ahbhbhhbbbbbhahbhabaahaabbabhabhhaahbbhaahbbaabhbahhhahhhhhh hhbhahhbbhhh-ahaahahhabhhhabaa------------------------------ *D16M86 aabbbhhbbhhhhahhaabaahhabbabhhbhhaahbbhahhhbahbhbahahahahbhh habbhhhbbhhhhhhahhhabahhhhahaa------------------------------ *D17M260 hhaaahhhaahhhbhbaabhbhhhhhabhhhahhbahhbhabhhahhaabhhhaababhh hbhhhhabbhhhhhhhbbhabbbahbaabb------------------------------ *D17M66 hhahahahaabhhbhbahbhbhhhhhabhhhahabahhbhabhhhahaabhhhaahabbb hbhhhhhbhhhbhhhhhbbabhbbhbabhb------------------------------ *D17M88 hhahahahhabhhbhhah-hbhhhhbabhhhhhhbahhbhabhh-a-aabhbhhahabbb hhhhhahbhhhbhhhhhbbabhhbhbabhb---b---a-ah-h-hhabh-hahaa--bbh *D17M129 hhabhbhhhabhhbhhahhbh-hbbhahabbhahbahhbhabh-hahhahhbhhahahbb hhahbahbahhbbahahhbhhahbbbabhhbbhbaabhbahhabhhaa-hahhhahhhbb *D18M94 bbhaahhabaahhabbahhahhaahhaaahaabhbhhbhaabbaabbbhhhhahhbahbb hhhhbhbahahahhahhhbbaaahhhahah------------------------------ *D18M58 bbhaahhabaahhab--hhah-aahhhaahaabhbhhb-aabba-bbbhhhhahhbahbb hhhhbhbahahahhahhhbbaaahhhabahhbahh-aaahhhbbhhbhbhb-ahhbhhhh *D18M106 bhbaahb--aahh-b---------------------------------ahhbhhbbahah ahhh--bahahhh-ahhaabaaahhhabhhahabhbhaahh-hbhbbhhhbhhahbahhh *D18M186 bhbaahbhbaahhhbbabhahhaabhhaahaahhbhabhahbbhabbhahhbbhhbahah ahhhbhbahahhhaahbaabahahhhabhbahabhbhaahbhhbhbbhhhbhaahbabhh *D19M68 hahbhabhhhbaahhbhhbbhaahhbhbhhhhhbhhhhahbbbaahhhhbahahhhbaha babbhbhaahbhbhaahhabhhabaahhah------------------------------ *D19M117 hhhhaabhhbhaabhb--bbhaahbbhhhhhhhhahhhaa--baaahhabahahhhhahh haabhhaaahbhbbahhhabhhhbabhhaa------------------------------ *D19M65 hhahaaahhbhha-hbahbbhahhhhbhhhhhhhaahhbahbbahah-ahhaahahhahh haabahhaabbhhbabahabhhbbabbhah------------------------------ *D19M10 ccacccacacccacacaa-ccacccccccccccccaaccacccacaccaccaacaccacc caacaccaccccccccacaccaccaccccc------------------------------ *DXM186 hhhhaahaahahhaaaaaaahhaha-ahahhhhhaaaahaaaahhaahaaahhaahhaaa aahhhaahhhhhahhaahhhhhaaaaahaaaaaaaahhhaaaaahhaaaahhaaaaahha *DXM64 hhhaahh-hahhhhaahahhaaahahaahhhhhhhahahhhahhha--haahahahhhaa a-hhhaahhaahhhhhaahhahaaaahaahahaahhh-aaaaahhhhaaahhahaahhaa *T264 118.317 264 194.917 264 145.417 177.233 264 76.667 90.75 76.167 104.083 194.5 75.917 75.833 90.25 103.667 128.4 122.25 264 72.6 264 264 264 81.717 264 264 116.483 87.467 264 - 74.417 264 264 174.567 88.583 264 95 264 86.05 71.517 112.767 264 264 117.817 185.3 85.367 264 70.883 98.45 85.1 216.367 94.65 111.817 90.9 264 170.517 111.717 264 75.383 84.35 97.667 97.783 264 90.433 264 90.05 90.083 90.117 264 71.967 264 - 264 264 74.267 - - 264 264 264 109.867 264 264 96.017 136.417 168.25 120.7 114.55 94.033 67.683 93.833 93.867 139.867 117.933 77.8 117.833 264 77.733 93.183 77.633 77.55 264 117.433 93.067 99.867 82.333 163.75 82.017 264 264 91.283 140.767 81.733 75.667 76.483 116.467 116.517 139.55 264 116.2 qtl/tests/listeria.map0000644000176000001440000000402011562004334014551 0ustar ripleyusers1 D10M44 0.00 1 D1M3 1.00 1 D1M75 24.85 1 D1M215 40.41 1 D1M309 49.99 1 D1M218 52.80 1 D1M451 70.11 1 D1M504 70.81 1 D1M113 80.62 1 D1M355 81.40 1 D1M291 84.93 1 D1M209 92.68 1 D1M155 93.64 2 D2M365 0.00 2 D2M37 27.94 2 D2M396 47.11 2 D2M493 67.26 2 D2M226 77.40 2 D2M148 90.86 3 D3M265 0.00 3 D3M51 32.48 3 D3M106 43.94 3 D3M257 57.59 3 D3M147 63.19 3 D3M19 70.84 4 D4M2 0.00 4 D4M178 19.16 4 D4M187 35.32 4 D4M251 68.10 5 D5M148 0.00 5 D5M232 6.10 5 D5M257 19.22 5 D5M83 19.55 5 D5M307 23.72 5 D5M357 25.50 5 D5M205 30.90 5 D5M398 30.91 5 D5M91 32.91 5 D5M338 38.07 5 D5M188 44.02 5 D5M29 50.98 5 D5M168 61.88 6 D6M223 10.00 6 D6M188 18.19 6 D6M284 23.87 6 D6M39 31.09 6 D6M254 41.80 6 D6M194 45.15 6 D6M290 47.53 6 D6M25 51.25 6 D6M339 51.65 6 D6M59_ 55.30 6 D6M201 59.01 6 D6M15 59.37 6 D6M294 60.76 7 D7M246 0.00 7 D7M145 18.79 7 D7M62 34.91 7 D7M126 41.03 7 D7M105 60.11 7 D7M259 72.08 8 D8M94 0.00 8 D8M339 1.34 8 D8M178 11.42 8 D8M242 27.14 8 D8M213 32.99 8 D8M156 50.86 9 D9M247 0.00 9 D9M328 4.22 9 D9M106 14.72 9 D9M269 27.32 9 D9M346 32.96 9 D9M55 45.34 9 D9M18 52.50 10 D10M298 0.00 10 D10M294 24.75 10 D10M42_ 40.71 10 D10M10 48.73 10 D10M233 61.06 11 D11M78 0.00 11 D11M20 15.15 11 D11M242 26.42 11 D11M356 38.52 11 D11M327 42.16 11 D11M333 64.34 12 D12M105 0.00 12 D12M46 6.18 12 D12M34 21.58 12 D12M5 29.08 12 D12M99 41.80 12 D12M150 54.46 13 D13M59 0.00 13 D13M88 0.29 13 D13M21 10.37 13 D13M39 13.05 13 D13M167 13.06 13 D13M99 18.91 13 D13M233 21.01 13 D13M106 24.88 13 D13M147 26.16 13 D13M226 28.39 13 D13M290 28.40 13 D13M151 35.99 14 D14M14 0.00 14 D14M115 23.91 14 D14M265 32.79 14 D14M266 45.55 15 D15M226 0.00 15 D15M100 13.46 15 D15M209 18.79 15 D15M144 19.36 15 D15M68 23.91 15 D15M239 25.13 15 D15M241 31.28 15 D15M34 42.97 16 D16M154 0.00 16 D16M4 16.77 16 D16M139 26.23 16 D16M86 41.80 17 D17M260 0.00 17 D17M66 11.73 17 D17M88 17.34 17 D17M129 38.85 18 D18M94 0.00 18 D18M58 0.69 18 D18M106 16.98 18 D18M186 20.90 19 D19M68 0.00 19 D19M117 16.36 19 D19M65 32.83 19 D19M10 44.49 X DXM186 0.00 X DXM64 42.35 qtl/tests/listeria.csv0000644000176000001440000010420511562004334014575 0ustar ripleyusersT264,D10M44,D1M3,D1M75,D1M215,D1M309,D1M218,D1M451,D1M504,D1M113,D1M355,D1M291,D1M209,D1M155,D2M365,D2M37,D2M396,D2M493,D2M226,D2M148,D3M265,D3M51,D3M106,D3M257,D3M147,D3M19,D4M2,D4M178,D4M187,D4M251,D5M148,D5M232,D5M257,D5M83,D5M307,D5M357,D5M205,D5M398,D5M91,D5M338,D5M188,D5M29,D5M168,D6M223,D6M188,D6M284,D6M39,D6M254,D6M194,D6M290,D6M25,D6M339,D6M59_,D6M201,D6M15,D6M294,D7M246,D7M145,D7M62,D7M126,D7M105,D7M259,D8M94,D8M339,D8M178,D8M242,D8M213,D8M156,D9M247,D9M328,D9M106,D9M269,D9M346,D9M55,D9M18,D10M298,D10M294,D10M42_,D10M10,D10M233,D11M78,D11M20,D11M242,D11M356,D11M327,D11M333,D12M105,D12M46,D12M34,D12M5,D12M99,D12M150,D13M59,D13M88,D13M21,D13M39,D13M167,D13M99,D13M233,D13M106,D13M147,D13M226,D13M290,D13M151,D14M14,D14M115,D14M265,D14M266,D15M226,D15M100,D15M209,D15M144,D15M68,D15M239,D15M241,D15M34,D16M154,D16M4,D16M139,D16M86,D17M260,D17M66,D17M88,D17M129,D18M94,D18M58,D18M106,D18M186,D19M68,D19M117,D19M65,D19M10,DXM186,DXM64 ,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,8,8,8,8,8,8,9,9,9,9,9,9,9,10,10,10,10,10,11,11,11,11,11,11,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,15,15,15,15,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,X,X ,0,0.99675,24.84773,40.41361,49.99468,52.8002,70.11204,70.80642,80.62324,81.39623,84.93474,92.68394,93.64344,0,27.94171,47.10541,67.26185,77.39805,90.8563,0,32.47839,43.93803,57.59338,63.1854,70.839,0,19.16072,35.32086,68.10316,0,6.10396,19.22335,19.54883,23.71714,25.50009,30.89665,30.89765,32.90522,38.06807,44.02376,50.98471,61.87613,10,18.18754,23.87218,31.0941,41.79506,45.14579,47.5299,51.24736,51.65073,55.30478,59.00988,59.37089,60.76244,0,18.78851,34.91062,41.03048,60.11409,72.08424,0,1.33987,11.42091,27.14066,32.98625,50.86364,0,4.21823,14.71565,27.32417,32.95644,45.33567,52.50404,0,24.74745,40.70983,48.73004,61.05621,0,15.15394,26.42149,38.52145,42.16139,64.34481,0,6.17921,21.58051,29.08404,41.79569,54.45582,0,0.28675,10.36588,13.04983,13.05083,18.90884,21.01258,24.87531,26.15954,28.3927,28.3937,35.98707,0,23.90747,32.78679,45.55022,0,13.46195,18.79081,19.36473,23.91373,25.1265,31.27607,42.97207,0,16.76684,26.23135,41.79901,0,11.72823,17.33527,38.84807,0,0.6856,16.98386,20.8999,0,16.36398,32.82935,44.49432,0,42.34593 118.317,B,B,B,H,H,H,B,B,H,H,H,H,H,H,A,A,-,A,A,B,B,B,B,B,B,A,H,A,H,A,A,H,H,H,H,H,-,H,H,H,B,B,A,A,H,H,H,H,H,H,H,B,B,B,B,B,B,H,H,H,H,H,H,H,H,B,B,B,B,H,H,H,H,H,H,H,B,B,B,H,H,H,A,A,H,B,B,B,B,B,B,C,-,H,H,H,A,A,A,A,A,A,A,B,B,H,H,A,H,H,H,H,H,H,H,A,A,A,A,H,H,H,H,B,B,B,B,H,H,H,C,H,H 264,-,B,B,B,H,H,H,H,H,H,H,H,H,B,B,H,-,H,A,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,H,H,B,B,B,A,A,A,A,A,A,A,A,A,H,H,H,H,H,B,B,B,B,B,H,H,H,B,B,B,H,A,A,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,H,B,B,H,A,A,H,H,H,H,-,H,H,H,H,H,A,B,B,B,B,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,B,B,H,H,A,H,H,C,H,H 194.917,-,H,H,H,H,H,H,H,B,B,B,B,B,H,H,H,-,-,H,H,H,H,H,B,B,A,A,H,H,A,A,A,A,H,H,H,-,H,H,H,H,A,H,H,H,H,B,B,B,B,B,B,B,B,B,A,A,A,A,A,A,H,H,H,B,H,H,B,B,B,B,B,B,B,H,A,A,A,A,H,H,H,H,H,H,B,B,H,H,H,B,A,A,A,A,A,A,A,H,H,H,H,H,B,B,B,H,B,B,B,B,B,B,B,B,B,B,B,B,A,A,A,A,H,H,B,B,H,H,A,A,H,H 264,B,B,H,H,H,H,B,B,B,B,B,B,B,A,-,A,-,H,H,B,H,H,H,H,H,H,H,H,H,-,H,A,A,A,A,A,-,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,B,H,B,B,B,B,B,H,H,H,H,H,H,H,H,A,H,B,H,H,B,B,B,B,B,H,A,A,H,A,A,A,C,H,H,H,H,H,H,H,H,H,H,H,H,A,A,H,H,B,H,H,H,H,A,A,A,H,H,B,A,H,H,B,A,A,A,A,B,H,H,C,H,A 145.417,H,H,H,H,B,H,H,H,H,H,H,H,H,B,H,H,-,-,H,B,A,A,A,A,A,A,A,A,H,-,A,A,A,A,A,-,-,H,H,H,H,H,A,A,A,A,A,A,-,H,H,H,H,H,H,B,H,A,A,H,H,A,A,A,A,A,H,B,B,B,H,H,H,H,A,H,H,H,H,B,B,B,B,B,H,A,A,A,A,A,A,C,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,B,B,B,A,A,A,H,A,A,A,A,H,A,A,C,A,A 177.233,H,H,B,B,B,B,B,B,B,B,B,B,B,H,A,A,A,-,A,B,B,B,B,B,B,H,H,H,H,A,A,A,A,A,A,H,-,H,H,H,-,H,A,A,A,H,B,B,B,B,B,B,B,B,B,A,A,A,A,A,A,H,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,H,H,H,H,C,H,-,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,B,B,B,B,B,B,H,H,H,H,H,H,H,B,H,H,H,H,A,A,A,C,A,H 264,H,H,H,H,A,A,A,A,H,H,H,H,H,B,B,B,B,-,H,B,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,A,-,A,A,A,-,H,H,H,H,H,H,H,H,B,B,B,B,B,B,A,A,A,H,H,H,B,B,B,B,B,B,B,B,B,A,A,A,A,H,H,H,H,H,A,A,A,H,H,B,B,H,A,A,A,A,C,H,B,B,B,B,B,B,B,B,B,B,A,H,H,H,A,A,A,A,A,A,A,-,B,H,H,H,H,A,A,H,H,H,B,B,B,B,A,A,H,H 76.667,H,H,H,H,A,A,A,A,H,H,H,H,H,H,H,A,-,A,A,H,B,H,H,H,H,H,-,H,B,B,B,B,B,B,B,B,-,B,B,H,H,H,A,A,A,A,H,H,-,B,B,B,B,B,B,H,H,H,H,H,B,A,A,H,H,H,H,B,B,B,B,B,B,H,A,A,-,A,A,H,B,H,B,B,H,A,H,H,H,H,H,C,H,H,A,A,A,-,A,A,-,A,H,H,B,H,H,B,B,B,B,H,H,H,H,B,B,B,B,H,H,H,H,A,A,-,H,H,H,H,C,A,- 90.75,A,A,H,B,B,B,H,H,H,H,H,-,H,A,H,H,H,H,B,A,H,H,A,A,A,H,H,H,B,H,H,H,H,A,A,A,-,A,A,A,-,H,H,H,H,H,B,B,B,H,H,H,H,H,H,B,B,B,B,B,H,B,B,-,B,B,A,H,H,H,A,A,A,A,H,B,B,B,B,B,B,H,H,H,H,A,A,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,B,B,B,B,H,A,A,A,A,A,A,A,H,B,B,B,A,A,H,H,B,B,-,B,H,H,H,A,A,H 76.167,B,B,H,H,A,A,A,A,A,A,A,A,A,A,A,H,H,H,H,A,H,H,H,H,A,B,H,H,H,H,H,H,H,H,H,H,-,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,H,A,A,A,H,H,B,B,B,H,H,H,B,B,B,B,B,H,A,A,H,H,H,H,A,H,H,H,H,B,A,-,A,A,A,A,C,H,H,H,H,H,H,H,H,H,H,H,A,H,B,H,H,H,H,H,H,H,H,H,B,B,B,H,A,A,A,A,A,A,A,A,H,B,B,C,H,A 104.083,A,H,H,H,H,H,H,H,H,H,H,-,H,A,A,B,B,B,B,H,A,A,H,H,H,H,H,H,B,H,H,H,H,H,H,H,-,H,H,H,B,B,H,H,H,H,H,H,A,A,A,A,A,A,A,H,A,H,H,H,-,A,A,A,A,A,A,H,H,B,B,B,B,B,A,H,H,H,A,A,H,H,H,H,H,A,A,A,H,H,B,C,H,H,H,H,H,H,H,H,H,H,H,B,H,H,H,A,A,A,A,A,A,A,H,B,B,B,H,H,B,B,B,A,A,A,A,B,H,H,C,A,H 194.5,A,A,H,H,H,H,H,H,H,H,H,H,H,B,B,H,H,H,H,A,H,B,H,H,H,H,H,B,B,B,B,B,B,B,B,B,-,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,H,H,H,H,H,B,B,H,A,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B,H,H,A,A,A,A,H,A,-,A,A,A,A,A,H,H,-,H,H,B,B,B,B,H,H,H,H,H,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,A,A,H,C,H,H 75.917,A,A,H,H,H,H,B,B,B,B,B,-,B,H,H,H,H,H,H,A,A,A,A,A,A,H,H,H,A,H,H,H,H,H,H,H,-,H,H,H,-,H,B,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,A,H,H,H,A,A,A,A,A,H,A,A,A,-,A,H,C,H,A,A,A,A,A,A,A,H,H,H,B,B,B,B,A,A,A,A,A,H,H,H,B,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H 75.833,H,H,A,A,A,A,A,A,A,A,A,A,A,H,B,B,H,-,H,B,H,H,H,B,H,H,H,H,H,B,B,B,B,B,B,B,-,B,B,B,-,H,H,B,B,B,B,B,B,B,B,B,B,B,B,B,B,H,-,H,H,A,A,A,A,A,H,B,B,B,B,B,B,H,B,H,H,H,H,B,H,H,H,H,A,H,H,H,H,H,B,C,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,B,B,B,B,B,B,B,H,A,A,A,B,B,B,B,A,A,-,H,H,B,-,C,A,H 90.25,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,H,H,B,B,B,B,B,B,H,H,B,B,A,A,H,H,H,H,H,-,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,H,H,H,B,H,H,H,H,A,A,A,H,H,A,A,A,A,A,H,A,A,A,B,H,A,A,H,A,A,H,H,H,H,H,H,C,H,A,A,A,A,A,A,A,H,H,H,A,A,H,H,-,-,A,A,A,A,A,-,H,H,H,H,H,H,H,H,B,B,B,B,H,H,H,A,A,A 103.667,H,H,B,B,B,B,H,H,H,H,H,A,A,B,B,H,H,A,A,H,-,H,H,H,H,B,B,B,B,H,B,B,B,B,B,B,-,B,B,B,B,H,H,H,H,H,H,B,-,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,B,B,H,H,B,H,H,B,H,H,H,H,H,H,A,A,A,A,A,H,H,H,H,H,H,H,B,A,A,H,-,A,A,A,A,A,A,A,B,B,B,H,B,B,H,H,B,-,-,B,B,B,B,C,A,A 128.4,A,A,A,A,A,A,H,H,H,H,H,H,H,H,B,H,-,H,H,B,-,A,A,A,A,B,H,H,H,H,H,H,H,B,B,B,-,B,B,B,B,B,H,H,B,B,B,B,B,B,B,H,H,H,H,A,H,H,H,B,H,B,B,B,B,B,H,B,B,H,H,H,A,A,A,A,A,A,H,A,A,A,A,A,B,A,A,A,A,A,A,C,B,B,B,B,B,B,B,B,B,B,B,A,A,A,H,H,A,A,A,A,A,A,-,B,H,H,A,A,A,A,A,A,-,-,A,H,-,A,A,A,H 122.25,B,B,H,H,-,H,H,H,H,H,H,B,B,B,B,H,H,H,B,A,A,A,H,H,H,A,H,H,H,H,H,H,H,H,H,H,-,H,H,H,H,H,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,H,A,A,A,-,A,A,A,A,H,H,B,B,B,B,A,A,A,H,H,-,H,H,H,A,A,A,H,H,H,C,B,B,B,B,B,B,B,B,-,B,B,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,H,H,H,H,H,-,B,H,-,H,A,A,A 264,H,H,A,H,H,H,B,B,B,B,B,-,B,H,H,A,A,A,H,A,A,H,A,H,A,A,-,H,A,A,A,A,A,A,A,A,-,A,A,A,-,A,H,H,A,H,H,H,H,H,H,H,B,B,B,H,H,H,H,A,A,B,B,B,H,H,A,A,A,A,H,H,H,H,H,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,A,C,B,B,B,B,B,B,H,H,H,H,H,A,H,H,B,H,A,A,A,A,A,A,-,H,B,B,B,B,B,-,H,H,H,-,H,B,B,B,-,A,H 72.6,H,H,H,H,A,A,A,A,A,A,-,H,H,H,H,H,A,A,A,A,A,A,A,-,A,A,H,H,H,B,H,H,H,H,H,H,-,H,A,A,A,A,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,B,B,H,H,B,B,B,H,H,-,H,H,H,H,H,A,A,H,B,B,B,H,H,B,B,B,B,B,B,B,B,B,H,-,C,H,H,H,H,A,A,A,A,A,A,A,B,H,A,A,B,B,B,B,B,B,H,H,H,H,A,A,H,H,H,B,A,A,-,A,B,B,B,C,A,H 264,H,H,H,A,A,A,A,A,H,H,H,H,H,H,H,A,A,A,B,B,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,-,A,A,A,-,A,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,H,A,A,A,H,H,B,H,H,H,A,A,A,A,H,H,H,H,H,A,A,H,H,H,H,A,A,A,A,B,B,C,H,H,H,H,H,H,H,H,H,H,H,B,H,A,A,B,B,B,B,H,H,H,H,H,H,A,A,B,B,B,H,H,H,-,H,H,H,H,C,H,A 264,B,B,H,H,H,H,H,H,H,H,H,-,H,H,H,H,H,A,A,H,B,B,B,H,H,B,B,B,B,A,A,H,H,H,H,H,-,H,H,H,-,B,H,H,H,H,B,B,B,B,B,B,B,B,B,H,H,H,A,A,A,H,H,B,B,B,B,A,A,A,H,B,B,B,A,A,A,A,A,H,H,B,B,B,B,B,B,H,H,H,H,C,H,-,H,H,H,H,H,H,H,H,A,H,A,A,H,H,H,H,H,H,H,H,H,A,A,H,H,H,H,H,-,H,-,-,H,A,A,A,A,H,A 264,A,A,A,A,A,A,H,H,B,B,B,B,B,-,A,A,A,A,H,A,H,H,A,A,A,B,B,B,H,A,A,A,A,A,A,A,-,A,H,H,H,A,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,B,B,B,H,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,A,H,H,H,H,H,H,A,A,A,A,H,H,C,-,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,A,A,A,A,A,A,A,A,A,A,H,H,H,H,H,A,A,-,A,A,A,H,C,A,A 81.717,H,H,H,-,H,H,H,H,H,H,H,H,A,H,H,B,B,B,A,H,H,H,H,B,B,H,H,A,B,-,B,B,B,B,B,B,-,B,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,B,H,H,-,H,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,B,B,B,B,B,B,B,H,H,H,H,H,H,C,-,H,H,H,A,A,A,A,A,A,A,H,H,H,H,B,B,B,B,B,B,B,B,A,A,A,A,H,H,H,B,A,A,-,A,H,H,H,C,H,H 264,-,H,H,H,H,H,B,B,B,B,B,B,B,H,A,A,-,H,H,A,A,A,A,A,A,H,H,H,H,B,-,B,B,H,H,H,H,H,A,A,A,A,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,-,A,A,A,A,H,B,H,H,H,H,H,H,H,A,A,A,H,H,H,H,H,B,B,H,H,H,H,H,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,H,H,B,B,H,H,H,B,H,H,-,B,H,B,H,C,A,A 264,-,H,B,H,H,H,H,H,H,H,H,H,H,A,B,B,-,H,A,H,H,H,H,H,H,H,H,B,B,B,B,H,H,H,H,H,H,H,H,H,H,A,B,B,H,H,H,H,-,H,H,H,-,H,H,H,A,B,B,H,-,H,H,H,A,A,H,H,H,H,H,H,H,H,B,B,B,H,H,H,H,H,H,H,H,A,A,A,H,H,H,B,B,B,B,B,H,H,H,H,H,H,H,B,H,H,H,A,H,H,H,H,H,H,H,B,B,B,B,H,H,B,H,H,H,-,H,B,B,H,C,-,H 116.483,-,H,H,H,H,H,H,H,H,H,H,A,A,H,H,H,-,H,H,A,H,H,H,H,H,A,-,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,-,H,H,H,H,H,H,H,H,H,H,H,B,H,B,B,B,B,H,A,A,A,A,A,A,A,H,H,H,H,H,H,A,A,A,A,A,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,B,B,B,H,H,H,B,B,B,B,B,B,B,H,A,A,A,A,A,A,A,A,A,H,-,H,H,H,B,C,A,A 87.467,-,H,H,A,A,A,A,A,A,A,A,A,A,H,H,B,-,A,A,H,A,A,A,A,H,H,B,H,H,B,B,B,B,B,B,B,B,B,B,B,B,B,A,A,A,A,H,H,-,H,H,H,H,H,H,B,H,H,H,A,-,B,B,B,B,B,B,H,B,B,B,B,B,H,A,A,H,H,H,H,B,B,B,B,B,A,A,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,H,H,H,H,B,B,B,B,B,B,B,H,B,B,B,B,B,B,H,A,A,-,A,B,H,H,C,H,A 264,H,H,H,A,-,H,H,H,H,H,H,H,H,-,A,H,H,H,B,B,B,B,H,H,H,A,H,H,A,A,A,A,A,A,A,A,A,A,A,H,-,H,H,H,H,B,B,B,-,B,B,B,B,B,B,B,B,B,B,H,H,B,B,B,B,B,H,H,H,H,H,H,H,H,A,H,H,H,B,H,B,B,B,H,H,H,A,A,A,H,H,H,H,H,H,H,H,-,H,H,H,H,H,H,H,H,H,B,H,H,H,H,H,H,B,H,H,H,H,H,H,H,A,A,A,-,A,H,H,H,C,A,H NA,A,A,A,H,H,B,H,H,H,H,H,H,H,-,H,H,H,-,H,H,B,B,H,H,H,B,H,B,H,-,H,H,H,H,H,H,H,H,H,A,-,H,A,H,H,H,H,H,-,H,H,H,H,H,H,H,A,A,A,H,H,A,A,H,H,B,B,B,H,H,-,H,H,B,A,H,H,H,A,H,H,H,H,H,H,B,H,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,B,B,A,A,A,H,H,H,H,B,H,H,-,H,H,H,H,C,H,H 74.417,A,A,H,H,H,H,A,A,A,A,A,H,H,B,B,B,H,H,A,H,A,A,H,H,H,H,H,B,H,H,H,A,A,A,A,A,A,A,A,A,-,A,B,H,H,H,H,H,-,H,H,H,H,-,H,B,B,B,B,B,B,H,H,H,H,H,H,A,A,A,A,H,H,B,H,H,A,A,A,A,A,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,B,H,H,H,H,H,H,H,H,H,H,H,H,A,H,B,B,H,H,H,B,A,A,-,A,H,H,H,C,H,H 264,A,A,H,H,B,B,H,H,H,H,A,A,A,-,H,B,B,B,H,H,H,H,H,H,H,H,A,A,H,A,A,A,A,A,A,A,A,A,A,H,H,H,H,H,H,H,H,H,-,B,B,B,B,B,B,A,A,A,A,H,-,B,B,B,H,H,-,H,H,H,A,A,A,A,B,H,H,H,B,A,-,H,H,A,A,B,B,B,B,A,A,B,B,-,H,H,H,-,H,H,A,H,A,H,B,B,H,A,A,H,H,H,H,B,H,H,H,H,H,A,A,H,H,A,A,-,A,H,H,H,C,H,H 264,B,B,H,A,A,A,A,A,H,H,H,H,H,B,B,B,B,H,H,B,H,H,A,A,A,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,H,H,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,A,H,-,H,H,H,H,B,B,B,B,H,H,B,B,B,B,A,A,A,A,A,A,A,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,B,B,-,H,H,H,H,C,H,H 174.567,B,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,A,A,H,A,H,H,H,H,H,B,-,H,B,H,H,H,H,H,H,B,H,B,B,B,B,B,H,H,H,H,H,H,-,H,H,A,A,H,H,H,H,A,A,A,-,H,H,H,H,H,-,H,B,B,B,B,B,B,A,A,A,H,H,H,H,H,H,H,B,H,H,H,H,H,H,H,H,-,H,H,H,H,H,H,H,H,H,H,H,B,B,A,A,A,A,A,A,A,A,A,A,A,A,H,A,H,H,H,H,-,H,B,H,H,C,H,H 88.583,B,B,B,B,B,B,B,B,B,B,B,H,-,H,H,H,H,A,H,H,A,H,H,B,B,H,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,B,B,-,B,B,B,H,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,A,A,B,B,H,A,H,H,A,A,A,A,A,A,A,A,A,-,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,B,B,B,B,B,B,-,B,H,A,A,C,A,H 264,H,H,B,B,B,B,B,B,B,B,B,H,-,A,H,H,B,B,B,H,H,H,H,H,H,H,B,B,H,H,H,H,H,H,H,H,H,H,H,A,A,A,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,H,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,-,H,H,H,H,H,B,B,B,B,-,B,B,H,H,H,H,B,H,H,H,H,H,H,A,H,H,H,H,A,A,A,A,H,H,-,H,H,H,A,A,A,A 95,H,H,H,H,H,H,H,A,A,A,A,A,-,B,H,H,A,A,A,H,H,H,A,-,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B,B,-,B,A,A,A,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,H,H,H,A,A,H,H,B,B,B,B,B,H,H,H,H,H,B,B,H,H,H,H,H,H,H,H,H,H,A,A,-,A,A,A,A,A,A,-,A,A,A,A,A,A,H,H,A,A,A,A,A,A,A,H,B,B,H,H,H,H,H,H,-,A,H,H,H,A,A,H 264,B,B,B,B,B,B,H,H,H,H,H,H,-,A,B,B,-,B,B,A,A,A,A,-,H,H,H,H,B,A,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,B,B,A,A,H,H,H,H,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,H,H,H,H,B,B,-,B,H,H,H,C,A,A 86.05,B,B,H,H,A,A,A,A,A,A,A,A,-,H,H,B,B,B,H,H,H,H,H,-,A,H,H,H,H,A,A,B,B,B,B,B,B,B,B,B,B,B,A,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,B,B,B,A,H,H,H,B,A,A,A,H,H,H,H,H,H,H,B,B,B,B,H,H,H,H,H,H,H,-,A,A,A,A,A,H,-,B,B,B,B,B,B,H,H,H,H,H,B,B,B,B,H,-,-,H,A,A,B,C,H,H 71.517,H,B,B,B,B,B,B,B,B,B,B,B,B,A,A,A,A,H,H,A,-,H,H,H,H,H,H,B,H,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,A,A,A,A,A,A,A,A,H,B,B,A,A,A,A,A,A,H,H,H,B,B,B,H,H,H,H,H,A,A,A,A,H,H,H,H,H,H,A,A,H,H,H,B,A,A,A,A,A,A,A,A,A,-,A,A,H,A,A,A,-,B,B,B,B,B,B,B,A,A,A,A,H,H,H,H,A,A,-,A,H,A,A,A,A,H 112.767,B,B,B,B,B,B,H,H,H,H,H,-,H,H,A,A,A,-,A,A,H,H,H,H,H,H,B,B,H,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,H,H,H,H,A,A,H,A,A,A,A,H,H,B,H,A,A,A,A,H,B,B,B,B,B,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B,B,H,H,-,H,H,H,H,H,H,-,H,H,-,A,A,A,H,A,A,A,A,A,A,-,H,B,-,H,C,A,H 264,A,A,A,A,A,A,A,A,A,A,H,H,H,A,A,H,H,H,H,A,A,H,H,H,H,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,A,A,B,B,B,B,B,B,B,H,H,H,H,H,H,H,A,A,A,A,H,A,A,H,H,H,H,B,B,B,B,H,H,H,H,H,H,H,H,H,H,-,H,H,H,H,A,A,A,A,A,B,B,-,-,H,H,H,H,H,-,H,H,A,A,A,B,H,-,A,A,A,A,A,A,H,H,H,H,B,B,B,B,B,B,-,B,B,-,B,C,A,A 264,B,B,B,A,A,A,H,H,A,A,A,A,A,-,H,H,-,B,B,B,H,A,A,A,A,H,-,A,H,A,A,H,H,H,H,H,H,H,H,H,-,B,H,H,H,H,H,H,-,-,H,H,H,H,H,A,A,A,A,A,-,H,H,H,H,H,-,H,H,B,-,B,A,A,H,H,A,A,A,B,B,B,B,B,B,B,B,H,H,H,-,H,H,B,B,B,B,B,B,B,B,B,B,H,-,B,B,H,-,H,H,H,H,H,B,B,B,B,H,H,H,H,H,B,B,-,B,B,B,B,C,A,H 117.817,H,H,H,B,B,B,B,B,B,B,B,H,H,H,H,H,A,A,A,H,A,A,A,A,H,H,A,H,B,H,H,H,H,H,A,A,A,A,A,A,A,A,B,B,B,B,H,H,A,A,A,A,A,A,A,H,A,A,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,B,A,A,H,H,H,H,H,B,B,B,B,H,-,B,B,H,H,H,H,-,H,H,H,H,H,H,H,H,B,H,A,H,H,A,-,A,A,H,H,H,B,B,B,B,B,H,H,H,-,A,A,-,H,A,A,A,A,H,H 185.3,A,A,A,H,H,B,B,B,B,B,B,-,B,A,A,-,-,A,A,A,A,A,H,H,B,H,H,H,H,B,B,H,H,H,H,H,H,H,H,A,-,A,A,A,A,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,-,B,B,B,B,H,-,H,H,H,A,A,A,A,H,A,A,A,H,H,H,H,H,H,A,A,A,H,A,A,A,H,H,-,H,H,H,H,H,H,H,H,H,H,-,B,B,A,-,A,A,A,A,H,H,A,A,A,A,A,H,-,H,A,-,-,A,A,A,H,C,H,H 85.367,H,H,A,A,A,A,H,H,H,H,H,H,H,A,H,A,-,B,B,H,H,H,H,H,H,H,-,A,A,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,-,H,H,H,H,H,H,H,H,H,H,B,-,H,H,H,H,H,-,B,B,B,-,B,H,H,A,A,H,H,B,H,A,A,A,A,H,B,B,H,H,H,H,H,H,-,A,A,A,A,H,H,-,H,H,-,-,H,H,A,-,A,A,A,A,A,-,A,A,A,H,H,A,A,A,B,B,-,B,H,A,A,A,A,A 264,H,H,H,B,B,B,B,B,B,B,B,-,B,H,A,B,-,A,H,A,H,H,B,B,B,H,H,H,H,-,A,A,A,A,A,A,A,A,A,A,-,A,H,H,H,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,B,B,B,A,A,A,B,B,B,-,B,B,B,H,H,H,H,H,H,A,A,A,A,H,H,H,H,B,H,-,H,H,H,H,H,H,H,H,B,H,H,H,B,-,A,H,B,-,H,H,-,H,H,H,B,B,B,B,H,H,-,H,B,B,-,B,H,H,H,C,A,- 70.883,H,H,A,A,A,A,A,A,A,A,H,H,H,H,H,H,-,B,B,H,H,A,A,A,A,A,H,H,H,-,A,H,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,-,A,A,H,H,H,A,A,A,B,B,B,B,B,H,H,H,H,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,A,H,-,A,A,H,-,H,H,B,B,-,B,H,H,H,H,A,A,A,H,B,B,-,H,H,H,-,C,H,- 98.45,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,-,H,H,H,A,A,A,A,A,H,H,H,A,B,B,B,B,B,B,-,-,B,B,B,B,B,H,H,H,H,B,H,-,H,H,H,H,H,H,A,-,A,-,A,A,B,B,B,B,H,-,A,A,H,H,-,H,H,A,A,-,A,A,A,A,A,H,H,H,A,A,A,A,A,A,C,A,H,H,H,B,B,B,B,B,B,B,A,H,H,H,H,H,H,H,H,H,A,A,H,B,B,B,A,A,A,A,H,H,A,A,H,A,A,A,A,H 85.1,-,H,H,A,A,A,A,A,A,A,A,H,H,A,H,H,-,A,A,H,H,H,H,H,H,B,-,H,H,H,H,H,H,H,H,-,-,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,B,B,B,-,B,B,B,B,B,B,H,H,A,A,-,A,A,B,B,H,A,A,A,A,A,B,B,B,A,A,A,A,A,A,C,B,B,B,B,B,B,B,B,B,B,B,H,H,A,A,H,H,H,H,H,H,A,A,A,A,A,A,B,B,B,H,H,H,H,H,B,B,H,C,A,A 216.367,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,-,A,H,H,H,H,H,H,B,H,-,B,B,B,B,B,B,B,B,B,B,B,B,B,-,H,H,H,H,H,H,H,-,B,B,B,B,B,B,B,B,B,B,A,A,H,H,H,A,A,A,A,A,A,A,-,H,H,B,B,H,H,A,A,-,A,A,A,H,B,-,H,H,H,B,C,B,B,-,B,B,B,H,H,H,H,H,B,B,B,B,A,A,H,H,H,H,H,B,A,A,H,H,H,H,H,H,H,H,H,H,A,A,H,C,A,A 94.65,-,B,B,B,B,B,H,H,H,H,H,H,H,A,A,H,-,B,B,A,H,H,H,H,B,B,H,A,A,H,H,H,H,-,H,H,H,H,H,A,A,A,H,H,H,H,H,H,-,H,H,H,H,H,H,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,B,-,B,H,H,H,H,A,H,H,H,H,A,A,H,A,A,A,A,A,A,A,A,-,A,A,A,A,A,A,A,A,A,B,B,H,H,H,B,B,B,B,B,B,-,H,H,H,A,H,H,B,B,H,H,B,B,H,H,A,A,H,H 111.817,A,-,H,A,A,A,A,A,A,A,A,A,A,B,A,A,-,H,H,H,B,B,B,B,B,H,-,B,B,B,B,B,B,H,H,H,H,H,H,H,A,A,A,A,A,A,H,H,-,H,H,H,B,B,B,A,H,H,H,A,A,A,A,H,H,H,-,H,H,H,H,-,B,B,B,B,B,B,H,H,B,B,B,B,B,H,A,A,A,H,H,C,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,A,H,H,H,H,H,H,B,B,B,H,H,H,H,H,H,A,A,H,B,A,A,A,A,H,A 90.9,B,B,B,B,B,B,B,B,B,B,B,B,B,A,H,H,H,H,A,B,H,A,H,H,H,H,H,B,B,-,B,B,B,B,B,B,B,B,B,B,-,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,A,A,A,A,A,A,H,H,H,H,-,H,H,H,H,H,H,H,A,H,H,B,B,B,A,A,A,A,A,A,C,H,A,A,A,A,-,A,A,A,A,A,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,H,H,H,H,H,H,H,H,H,C,A,H 264,A,-,H,H,B,B,B,B,B,B,B,B,B,-,B,B,B,B,H,H,H,H,H,H,H,H,H,A,H,H,H,A,A,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,-,B,B,B,B,B,B,H,H,H,A,A,A,H,H,A,A,A,-,H,A,A,A,-,H,H,H,H,B,B,B,H,-,A,A,A,A,A,A,A,A,A,A,C,H,H,H,H,H,-,H,H,H,H,A,B,B,B,H,H,H,H,H,H,H,H,B,B,B,H,H,A,A,A,A,H,H,B,H,H,H,A,A,A,A 170.517,H,H,B,H,H,H,B,B,B,B,B,B,B,A,H,A,-,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,-,B,B,H,H,H,-,A,A,A,A,A,H,H,A,H,-,H,B,H,H,H,H,A,A,H,H,-,H,B,B,C,H,-,H,H,H,A,A,A,A,A,A,H,A,A,A,A,A,A,A,A,A,A,A,H,H,H,A,B,H,H,H,B,B,B,B,H,H,H,C,H,H 111.717,H,-,H,H,A,A,H,H,B,B,B,B,B,H,A,A,H,B,B,H,H,H,H,A,A,H,H,H,H,A,H,H,H,H,H,H,H,H,H,B,B,B,H,H,H,B,B,B,B,B,B,B,B,B,B,H,H,H,H,B,B,H,H,A,A,A,A,H,A,H,H,-,H,H,H,H,B,B,H,H,H,H,H,H,A,A,A,A,H,H,H,C,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,A,A,A,A,A,A,A,H,-,H,H,A,A,A,A,A,A,A,A,B,H,H,C,H,H 264,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,H,H,H,A,A,H,H,H,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,H,H,H,B,B,B,H,H,A,A,-,A,A,H,H,H,H,H,A,H,B,H,H,A,A,A,A,A,A,A,A,A,-,A,A,A,-,A,H,-,H,H,B,H,H,H,H,H,H,H,H,H,H,H,B,H,H,B,B,B,B,H,H,H,H,H,A,A,A,A,A,H 75.383,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,B,B,B,H,H,A,A,A,A,H,A,A,A,A,A,A,A,H,H,B,B,B,B,B,B,B,H,H,H,H,H,B,B,B,B,H,H,H,H,B,B,H,-,H,H,H,H,H,B,B,B,B,B,B,H,-,A,A,A,H,H,H,H,A,H,H,H,H,H,B,H,H,H,H,-,A,A,A,A,A,A,-,A,A,-,A,H,B,B,H,H,H,H,B,B,B,B,B,B,B,H,H,H,H,B,B,B,B,B,A,A,H,H,H,C,A,A 84.35,H,H,H,H,A,A,A,A,A,A,A,A,A,H,H,H,H,-,H,A,H,B,B,B,B,H,H,B,B,A,A,A,A,A,H,H,H,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,-,H,H,H,H,H,H,H,H,A,A,H,-,-,H,H,A,A,A,A,A,B,B,H,H,H,A,A,A,A,A,A,H,A,A,-,A,A,A,A,A,A,-,A,H,A,B,B,B,B,B,B,B,B,B,B,-,H,H,H,H,H,B,B,B,B,B,H,H,A,H,H,C,A,A 97.667,B,B,B,B,B,B,B,B,H,H,H,H,H,H,B,H,H,H,H,H,H,B,B,B,B,H,H,H,B,H,H,H,H,A,A,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,H,B,B,B,B,B,H,H,H,H,-,B,B,H,H,B,B,B,B,B,B,B,B,A,H,H,A,A,A,A,C,H,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,A,A,B,H,H,C,A,A 97.783,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,H,H,H,H,H,H,H,H,H,-,B,A,A,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,H,H,B,-,A,A,H,-,-,A,A,A,A,A,H,H,B,B,B,B,B,A,B,B,H,H,H,H,A,A,-,H,H,H,-,H,H,H,H,H,A,A,A,A,B,B,B,B,B,B,B,H,H,H,H,A,B,B,H,H,H,H,H,H,A,A,A,A,A,- 264,H,H,H,H,B,B,B,B,B,B,H,H,H,B,B,B,B,B,B,H,H,B,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,A,-,A,A,A,A,A,A,B,B,B,B,H,A,H,H,H,H,H,A,A,A,A,A,-,A,A,B,B,B,H,H,H,H,H,H,H,H,H,A,A,A,A,H,C,B,B,B,B,B,B,B,H,-,H,H,H,H,H,A,-,H,H,H,H,H,H,B,B,B,B,B,H,H,H,A,H,H,H,H,B,A,A,A,H,H 90.433,H,H,H,H,H,H,A,A,A,A,H,H,H,A,A,A,A,A,A,H,H,A,A,A,A,B,B,H,H,B,B,B,B,B,B,B,B,B,B,B,B,B,H,A,A,H,H,H,H,H,H,H,H,H,H,B,H,H,H,H,H,A,A,H,H,H,B,A,A,A,A,A,A,A,H,H,H,H,H,H,B,B,B,B,B,B,B,H,A,A,A,C,A,-,B,B,B,B,B,B,B,B,B,A,A,A,H,-,B,B,B,B,B,H,-,A,H,H,B,H,H,H,H,H,H,H,H,B,B,B,C,H,H 264,A,A,H,H,H,H,H,H,A,A,A,A,A,-,A,H,H,H,H,A,H,H,H,H,H,B,-,H,H,-,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,H,H,H,H,H,H,H,A,H,H,H,H,H,H,H,H,H,H,-,B,B,B,-,-,H,H,A,A,H,H,B,A,A,A,H,H,H,H,A,H,H,H,B,C,B,B,B,B,B,B,B,B,B,B,B,H,H,A,H,H,-,A,A,A,A,A,A,A,A,A,H,H,H,H,B,B,B,-,B,H,H,A,A,H,H 90.05,H,H,H,B,B,B,B,B,H,H,H,H,H,B,B,B,B,-,B,A,A,A,B,B,B,H,H,H,B,H,H,H,H,-,H,H,H,H,H,H,H,H,B,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,H,H,A,A,A,A,A,A,B,B,B,H,-,H,H,A,H,H,H,H,A,A,-,A,A,A,B,B,B,B,B,B,A,A,-,A,A,A,A,A,A,-,H,H,H,H,H,H,H,-,H,H,B,B,B,B,A,A,H,H,H,H,A,A,H,H,-,H,B,H,H,C,A,A 90.083,H,H,H,H,H,H,H,H,H,H,-,H,H,B,H,H,-,H,H,B,H,H,H,H,H,B,-,B,B,H,B,B,B,B,B,B,B,B,H,H,-,H,B,H,H,H,H,H,H,H,H,H,A,A,A,H,H,H,-,B,-,H,H,H,H,H,-,B,B,B,B,-,B,B,A,A,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,C,H,A,A,A,A,A,A,A,A,A,A,H,H,B,B,H,-,B,B,B,H,H,B,B,H,H,H,A,H,H,H,B,B,B,B,H,A,H,C,A,A 90.117,H,H,A,A,A,A,H,H,H,B,B,B,B,H,H,H,H,B,B,H,B,B,B,B,B,H,B,B,B,B,B,B,B,B,B,B,B,H,H,H,-,H,H,A,A,A,A,A,A,A,A,A,H,H,H,H,A,A,A,A,-,H,H,H,B,B,B,B,B,H,H,-,A,A,A,A,H,H,B,B,B,B,H,H,H,H,H,H,H,H,B,A,A,A,A,A,A,A,A,A,A,A,A,H,-,B,B,H,-,H,H,A,A,A,A,H,B,B,B,B,B,B,B,A,A,A,A,A,A,A,A,H,H 264,A,A,A,A,A,A,H,H,B,B,B,B,B,H,B,B,-,H,H,B,H,H,B,B,B,A,A,H,B,A,H,A,A,A,A,A,A,A,A,A,-,A,A,A,A,H,B,B,B,B,B,B,B,B,B,H,H,H,-,H,-,B,B,B,H,A,A,H,H,B,B,-,H,H,H,H,H,H,H,B,B,B,B,B,B,H,H,H,B,B,B,C,H,H,H,H,H,H,H,H,-,H,B,H,-,H,H,H,-,H,H,H,H,A,A,B,B,B,B,B,H,H,A,H,H,H,H,A,A,A,C,H,H 71.967,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,A,H,H,H,H,H,H,A,A,A,B,-,H,A,A,A,A,H,H,H,B,B,-,H,B,B,H,H,H,H,H,H,H,H,H,H,H,A,A,H,-,H,-,H,H,H,H,H,-,H,H,H,H,-,H,H,H,B,B,B,B,A,H,H,H,H,H,A,A,H,H,H,H,A,A,A,A,A,A,A,A,A,-,A,A,A,-,H,H,B,-,B,B,B,B,-,-,H,H,H,H,H,H,H,H,A,A,A,A,H,H,B,C,H,A 264,H,H,H,H,H,H,H,H,H,H,H,-,H,H,H,B,-,H,H,H,B,B,B,H,H,B,H,H,H,A,H,A,A,A,A,A,A,A,A,H,-,H,B,B,B,B,B,B,B,B,B,B,B,B,B,A,-,B,-,B,H,B,B,B,B,B,B,H,H,H,H,-,B,B,H,H,H,A,H,B,H,A,A,A,A,B,B,-,B,B,B,C,H,A,A,A,A,A,A,A,A,A,A,B,B,H,H,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,C,H,A NA,B,B,B,B,B,B,H,H,A,A,A,A,A,H,A,A,A,A,A,H,H,H,H,H,H,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,-,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,-,B,B,B,B,B,H,H,H,H,B,H,H,-,A,A,A,A,A,-,A,H,H,B,B,B,B,H,H,H,A,A,A,C,B,B,B,B,B,H,H,H,H,H,H,B,B,B,H,A,H,-,H,H,H,-,-,A,H,H,H,H,B,B,B,A,A,H,H,H,H,H,C,H,H 264,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,H,-,H,H,H,A,A,A,A,H,A,B,B,H,H,B,B,B,B,B,B,-,B,B,B,B,B,H,H,H,H,H,H,-,H,H,B,B,B,B,H,H,H,H,B,B,H,H,H,H,H,-,A,A,H,-,H,H,H,H,H,B,H,H,H,H,H,B,B,B,B,B,B,B,B,B,C,B,B,B,B,B,B,B,B,B,B,B,-,H,H,A,A,H,H,A,A,A,A,A,H,B,-,H,H,H,H,B,H,H,H,H,B,B,H,C,A,H 264,-,H,-,H,H,H,H,H,H,H,H,H,H,B,H,H,-,H,H,A,A,H,H,H,B,A,A,H,B,H,H,H,H,H,H,H,H,H,H,H,H,A,B,B,B,B,B,B,-,B,B,B,B,B,B,B,B,H,-,A,A,A,A,A,A,A,A,H,H,H,H,H,A,A,A,A,A,A,A,H,H,H,H,H,B,H,H,A,A,A,A,A,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,A,A,H,H,H,H,A,H,H,-,A,H,B,B,C,H,H 74.267,B,B,H,H,H,H,A,A,A,A,A,A,A,H,A,A,-,H,H,A,A,H,H,H,H,B,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,H,H,H,H,H,H,H,-,A,A,A,A,A,A,B,H,H,H,B,H,H,H,-,H,H,H,A,A,H,H,H,H,H,H,H,A,A,A,H,H,H,H,H,B,B,B,B,B,H,H,A,A,A,A,A,A,A,A,A,A,A,A,H,B,B,B,H,H,H,H,H,H,H,H,B,B,H,H,H,H,H,H,A,A,A,A,A,A,A,C,H,H NA,-,H,A,A,H,H,H,H,H,H,H,H,H,B,B,B,-,A,A,A,A,A,A,A,A,H,H,B,H,-,H,A,A,A,A,A,A,A,A,A,H,H,H,H,H,H,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,B,B,-,A,A,A,A,A,A,A,H,B,B,H,H,H,H,H,B,B,H,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,H,H,B,B,B,B,B,B,B,B,B,H,A,A,H,H,H,A,H,H,H,H,A,H,B,C,A,H NA,H,H,H,H,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,H,H,H,H,B,B,B,H,A,A,A,A,A,H,H,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,H,H,A,B,B,B,B,B,H,H,H,A,A,A,A,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,A,A,H,H,H,H,H,H,A,A,A,H,B,H,H,H,H,H,H,B,H,H,A,A,A,A 264,-,H,H,B,B,B,B,B,B,B,B,B,B,H,H,-,A,H,H,H,A,A,A,H,H,A,A,H,B,-,A,A,A,A,A,A,A,A,A,A,A,A,H,H,H,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,B,B,H,A,A,A,H,H,H,B,B,B,H,B,B,B,B,B,B,B,B,B,H,A,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,H,H,H,H,H,H,H,H,H,A,H,H,H,B,B,B,H,H,H,A,A,H,H,H,C,H,A 264,A,A,H,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,H,H,H,H,-,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,B,H,H,H,B,H,H,H,H,B,H,A,H,H,H,B,B,C,H,B,B,B,H,H,H,H,H,H,H,A,H,H,B,A,A,A,A,A,A,A,-,H,A,A,H,H,B,B,B,B,B,A,A,A,A,A,A,H,H 264,A,A,A,H,H,H,H,H,A,A,A,A,A,B,H,H,H,H,H,B,B,B,H,H,H,H,-,B,H,B,H,A,A,A,A,A,A,A,A,A,A,A,H,H,H,B,B,B,B,B,B,B,B,B,B,A,H,H,-,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,H,H,H,B,B,H,H,H,H,H,H,H,H,H,H,C,H,A,A,A,A,-,A,A,A,A,A,H,H,H,A,H,B,B,B,B,B,B,B,H,H,H,A,A,A,A,H,B,B,B,B,B,B,B,C,H,H 109.867,H,H,B,-,H,B,B,B,B,B,B,B,B,A,H,H,H,H,H,H,B,B,B,H,H,H,H,H,B,B,B,B,B,B,B,B,B,B,H,H,H,H,-,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,H,H,H,B,H,H,H,B,H,H,H,-,H,H,H,B,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,H,-,H,H,H,H,H,H,A,A,A,H,H,H,H,H,H,H,B,B,H,H,B,B,B,B,H,A,A,A,A,H,H,H,C,H,A 264,B,B,A,A,A,A,A,A,A,A,A,A,A,H,A,A,H,H,H,A,A,A,A,A,A,A,A,A,A,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,B,B,B,B,B,A,H,H,-,B,H,H,H,H,H,H,H,A,A,A,A,A,A,H,H,H,H,H,H,B,B,B,-,B,B,H,H,A,A,A,A,C,H,B,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,A,H,H,A,A,B,H,H,A,A,A,A,H,H,H,H,A,H,H 264,H,H,H,H,H,H,H,H,B,B,B,B,B,H,H,H,B,B,B,H,A,A,H,H,H,B,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,B,B,B,H,H,H,A,A,A,A,A,A,A,A,B,B,H,H,A,A,H,H,H,H,H,A,A,A,A,H,H,H,A,A,H,H,H,H,H,A,A,A,A,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,H,A,A,A,B,H,H,H,H,H,H,A,B,B,B,H,B,B,H,H,A,A,A,A,A,H,B,C,A,A 96.017,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,H,H,H,B,B,H,A,H,H,H,H,H,H,H,H,H,H,H,-,H,H,B,B,B,B,B,B,B,B,B,H,H,H,H,A,A,-,H,H,H,H,H,H,B,B,H,H,H,H,B,B,B,A,H,H,H,H,A,H,H,B,B,H,B,B,H,H,H,A,A,A,A,A,A,A,-,A,A,-,A,A,H,H,H,A,B,-,B,B,B,B,-,H,A,H,H,H,A,B,B,B,H,H,H,H,B,B,B,C,A,A 136.417,H,H,H,H,H,H,B,B,H,H,H,H,H,B,B,B,A,A,A,H,A,A,A,A,H,H,-,H,H,B,B,B,B,B,B,B,B,B,B,B,B,B,A,A,A,A,A,A,A,A,A,A,A,A,H,B,B,H,A,A,A,H,H,-,H,A,-,A,A,A,A,A,A,A,A,A,A,A,A,H,H,B,B,B,B,H,H,H,H,H,H,C,H,H,H,H,H,H,H,H,H,H,H,A,H,H,H,B,B,B,B,B,B,H,H,H,B,H,H,H,H,H,B,H,H,H,H,A,A,A,A,A,A 168.25,H,H,B,B,B,B,B,B,B,B,B,H,H,B,A,A,A,A,A,H,A,H,H,H,H,H,H,H,H,B,H,A,A,A,A,A,A,A,A,A,-,A,H,H,H,H,H,H,H,H,H,H,H,H,H,A,A,A,-,H,H,H,H,A,A,A,A,H,H,H,B,B,B,B,H,H,H,H,H,B,A,A,A,A,A,B,B,H,H,H,B,C,B,-,A,B,A,-,A,A,-,A,A,A,A,A,A,A,A,A,A,A,A,A,A,H,H,H,H,B,B,B,B,H,H,H,H,A,B,B,C,A,A 120.7,A,A,A,H,A,H,B,B,B,B,B,B,B,H,B,H,H,A,A,H,H,H,B,H,H,A,A,A,B,H,H,B,B,B,B,B,B,B,B,B,B,B,A,A,A,A,A,A,A,A,A,A,A,A,H,A,A,H,-,H,B,A,A,A,A,A,H,H,H,H,H,H,H,B,H,A,A,A,A,H,H,H,A,A,H,B,B,B,B,B,B,C,-,H,H,H,H,H,H,H,-,H,H,H,H,H,H,-,-,H,H,H,H,H,H,B,B,A,A,A,A,A,A,A,A,A,A,H,H,B,C,A,H 114.55,B,B,B,B,B,B,H,H,H,H,H,H,B,H,H,H,H,A,A,H,A,A,A,A,H,B,-,B,H,H,H,H,H,H,H,H,H,H,H,H,-,B,H,H,H,H,H,H,H,H,H,H,H,H,H,B,B,B,-,H,H,A,A,A,A,A,H,B,B,B,H,H,H,H,A,A,H,B,B,A,A,H,H,H,H,H,H,H,H,A,A,A,A,A,A,A,A,A,A,A,A,A,A,H,H,A,A,-,-,B,B,B,B,-,B,B,B,B,H,A,B,B,B,H,B,B,B,H,H,H,C,H,A 94.033,A,A,H,A,H,H,B,B,B,B,B,B,B,H,H,H,A,A,A,H,H,A,A,A,A,B,B,B,A,B,B,B,B,B,B,B,B,B,B,B,B,B,H,H,H,H,H,H,H,H,H,H,H,H,H,A,H,H,-,H,H,H,H,H,A,A,H,H,H,H,H,H,H,H,A,A,A,A,A,H,H,A,A,A,A,A,A,A,A,H,B,A,-,A,A,A,A,A,A,A,A,A,A,A,A,A,A,H,-,H,H,H,H,H,A,A,A,A,A,B,H,H,H,A,A,H,H,A,A,A,C,A,A 67.683,H,H,H,H,H,H,H,A,A,A,A,H,H,H,H,H,H,H,H,H,H,A,A,A,A,B,B,B,H,A,H,H,H,H,H,B,B,B,B,B,-,B,B,H,H,H,A,A,A,A,A,A,A,A,H,B,-,H,-,H,H,H,H,H,B,B,-,B,B,H,H,H,A,A,A,A,A,A,A,H,H,A,A,A,H,H,H,B,B,H,H,C,H,H,H,-,H,H,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B,H,H,A,A,A,A,B,B,B,H,H,H,H,B,H,A,H,C,A,H 93.833,A,A,-,H,H,H,A,A,A,A,A,A,H,H,H,H,H,H,H,A,-,-,A,A,-,-,-,-,B,H,H,H,H,H,H,H,-,H,H,H,-,H,H,-,H,H,H,-,-,H,H,-,H,H,H,-,B,B,B,B,-,H,H,H,-,H,H,A,A,H,-,H,-,-,H,-,A,A,A,-,H,-,-,A,H,-,-,A,A,-,A,C,H,H,-,-,H,H,A,A,-,A,-,-,A,A,-,A,A,H,-,H,H,H,-,-,A,-,-,-,-,-,B,-,H,A,A,-,-,-,-,A,A 93.867,H,H,-,H,H,H,H,H,H,H,H,A,A,H,H,B,B,H,H,B,-,-,A,A,-,-,-,-,A,H,H,H,H,H,H,H,-,H,H,H,-,H,H,-,H,H,H,-,-,H,H,-,H,H,H,-,A,A,A,A,-,A,A,A,-,H,B,A,A,A,-,A,-,-,H,-,B,B,B,-,B,-,-,H,H,-,-,H,H,-,H,C,H,H,-,-,H,H,H,H,H,H,A,-,H,H,-,B,B,B,-,B,B,B,-,-,H,-,-,-,-,-,B,-,B,H,H,-,-,-,-,A,H 139.867,-,H,-,H,H,H,H,H,H,H,H,B,B,H,A,A,A,A,H,H,-,-,H,H,-,-,-,-,H,H,H,H,H,H,H,H,-,H,H,H,-,B,H,-,H,H,H,-,-,H,H,-,A,A,A,-,B,H,-,H,-,B,B,H,-,H,H,H,-,H,-,H,-,-,H,-,H,H,H,-,H,H,-,H,A,-,-,B,B,-,H,A,A,A,-,-,A,A,A,A,A,A,A,-,B,B,-,A,A,A,-,A,A,H,-,-,B,-,-,-,-,-,H,-,A,A,A,-,-,-,-,A,A 117.933,-,H,-,H,A,A,A,A,A,A,A,-,A,H,A,H,H,H,H,H,-,-,H,H,-,-,-,-,H,A,A,A,A,A,A,B,-,B,B,B,-,B,A,-,A,A,H,-,-,H,H,-,H,H,H,-,H,H,H,H,-,H,H,H,-,-,H,H,H,H,-,A,-,-,H,-,H,H,H,-,B,B,-,B,B,-,-,H,H,-,H,C,H,H,-,-,H,H,H,H,H,H,B,-,H,H,-,A,A,A,-,A,A,A,-,-,A,-,-,-,-,B,B,-,H,B,B,-,-,-,-,A,A 77.8,-,H,-,B,B,B,B,B,B,H,H,H,H,H,H,A,H,H,B,H,-,-,H,H,-,-,-,-,A,B,B,B,B,B,B,B,-,H,H,H,-,A,A,-,H,H,A,-,-,A,A,-,A,A,A,-,B,H,H,H,-,A,A,H,-,H,A,B,-,B,-,B,-,-,A,-,H,H,H,-,B,B,-,B,B,-,-,H,H,-,H,A,A,A,-,-,A,A,A,A,A,A,A,-,B,B,-,H,H,H,-,A,A,A,-,-,A,-,-,-,-,-,A,-,H,H,H,-,-,-,-,A,H 117.833,H,H,-,H,H,-,H,H,H,H,-,H,H,B,B,H,B,B,H,H,-,-,A,A,-,-,-,-,H,A,H,H,H,H,H,H,-,H,H,H,-,H,H,-,B,B,B,-,-,H,H,-,H,H,H,-,A,-,A,A,-,B,B,B,-,B,B,H,-,A,-,H,-,-,B,-,H,H,H,-,H,H,-,A,A,-,-,H,-,-,H,A,A,A,-,-,A,A,A,A,A,A,H,-,H,H,-,H,H,H,-,H,H,H,-,-,H,-,-,-,-,-,A,-,-,B,B,-,-,-,-,A,H 264,-,A,-,H,H,-,H,H,H,H,H,B,B,H,B,B,B,B,B,H,-,-,H,H,-,-,-,-,B,H,H,H,H,H,H,H,-,H,A,A,-,A,H,-,H,H,H,-,-,H,H,-,H,H,H,-,H,H,H,A,-,B,B,B,-,B,B,A,H,H,-,B,-,-,B,-,A,H,H,-,H,-,-,H,H,-,-,B,B,-,B,A,A,H,-,-,H,H,H,H,H,-,H,-,A,A,-,H,H,H,-,H,H,H,-,-,H,-,-,-,-,-,B,-,A,H,H,-,-,-,-,H,H 77.733,-,H,-,H,H,H,H,H,H,H,H,H,H,A,A,H,H,H,H,H,-,-,H,H,-,-,-,-,H,B,B,B,B,B,B,B,-,B,B,B,-,A,H,-,H,H,H,-,-,H,H,-,H,H,H,-,H,H,-,H,-,B,B,B,-,H,H,H,H,H,-,B,-,-,H,-,H,B,H,-,A,A,-,A,-,-,-,H,H,-,A,C,H,H,-,-,A,A,A,A,-,A,H,-,H,H,-,H,H,H,-,H,H,H,-,-,B,-,-,-,-,A,H,-,A,A,A,-,-,-,-,H,- 93.183,-,B,-,H,A,A,H,H,H,H,H,H,H,H,A,A,H,H,H,A,-,-,H,H,-,-,-,-,B,B,-,B,B,B,B,H,-,H,H,H,-,B,B,-,B,B,B,-,-,B,B,-,H,H,H,-,H,B,B,H,-,H,H,B,-,-,B,A,-,H,-,H,-,-,H,-,B,A,A,-,A,A,-,A,H,-,-,H,B,-,H,A,A,A,-,-,A,A,A,A,-,A,A,-,B,-,-,H,H,H,-,H,H,H,-,-,A,-,-,-,-,-,B,-,A,A,A,-,-,-,-,H,A 77.633,B,B,-,A,A,A,A,A,A,A,-,A,A,H,H,H,H,H,H,A,-,-,A,A,-,-,-,-,H,H,-,H,H,H,H,H,-,H,H,H,-,H,A,-,A,A,A,-,-,A,A,-,H,H,H,-,A,A,A,H,-,A,-,A,-,A,A,B,B,B,-,B,-,-,B,-,H,H,B,-,H,H,-,H,H,-,-,H,H,-,A,C,H,H,-,-,H,H,H,H,H,H,A,-,A,-,-,B,B,B,-,B,B,B,-,-,A,-,-,-,-,A,A,-,H,H,H,-,-,-,-,A,A 77.55,A,A,-,H,H,H,A,A,A,A,A,A,A,H,B,B,H,H,H,H,-,-,H,H,-,-,-,-,H,H,H,H,H,H,H,H,-,H,H,H,-,A,B,-,B,H,H,-,-,H,H,-,H,H,H,-,H,H,B,B,-,B,B,B,-,B,B,H,-,H,-,H,-,-,H,-,H,H,H,-,B,-,-,H,A,-,-,H,H,-,H,C,H,H,-,-,A,A,A,A,A,A,A,-,H,H,-,H,H,A,-,A,A,A,-,-,A,-,-,-,-,H,H,-,H,H,B,-,-,-,-,A,A 264,A,A,-,H,H,H,H,H,B,B,B,-,H,H,H,A,A,A,A,A,-,-,H,H,-,-,-,-,H,H,-,A,A,A,A,A,-,A,H,H,-,H,B,-,H,A,A,-,-,-,A,-,A,A,A,-,B,A,-,A,-,B,B,B,-,B,A,A,-,A,-,H,-,-,H,-,A,-,A,-,H,B,-,B,-,-,-,B,-,-,A,C,H,H,-,-,B,B,B,B,B,B,B,-,H,H,-,H,A,A,-,A,A,A,-,-,H,-,-,-,-,-,H,-,H,-,H,-,-,-,-,A,A 117.433,-,B,B,B,B,H,H,H,H,H,A,A,A,A,H,H,B,B,B,H,-,-,B,B,-,-,-,-,A,H,H,H,H,A,A,A,-,A,A,A,-,H,A,-,A,A,A,-,-,H,H,-,H,H,H,-,H,A,A,A,-,H,H,H,-,H,H,A,A,A,-,A,-,-,B,-,B,B,B,-,H,H,-,A,H,-,-,A,A,-,A,C,H,H,-,-,H,H,H,H,H,H,H,-,H,-,-,H,H,H,-,H,H,A,-,-,A,-,-,-,-,H,A,-,B,H,H,-,-,-,-,A,A 93.067,B,B,B,H,H,H,B,B,H,H,H,H,H,H,H,H,A,A,A,H,-,-,A,H,-,-,-,-,A,B,B,B,B,H,H,H,-,H,H,H,-,H,A,-,H,H,H,-,-,H,H,-,H,H,H,-,B,H,H,H,-,H,H,B,-,B,B,B,A,H,-,H,-,-,H,-,A,-,A,-,H,H,-,H,B,-,-,A,A,-,H,C,H,H,-,-,H,B,B,B,-,B,B,-,H,H,-,H,B,B,-,B,B,B,-,-,H,-,-,-,-,-,B,-,B,B,B,-,-,-,-,A,H 99.867,-,H,-,H,H,H,A,A,A,A,A,A,A,B,B,B,B,B,A,A,-,-,B,B,-,-,-,-,A,A,A,A,H,H,H,H,-,H,H,H,-,H,A,-,H,H,H,-,-,H,H,-,H,H,H,-,A,A,A,A,-,A,A,H,-,B,B,B,B,B,-,B,-,-,H,-,A,A,A,-,H,H,-,H,A,-,-,A,A,-,H,C,H,A,-,-,A,A,A,A,-,A,A,-,B,B,-,A,A,A,-,H,H,H,-,-,B,-,-,-,-,H,H,-,H,H,H,-,-,-,-,H,H 82.333,A,H,-,B,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,A,-,-,A,A,-,-,-,-,B,B,B,B,B,B,B,B,-,B,B,B,-,B,H,-,H,H,H,-,-,A,A,-,A,A,A,-,B,H,A,A,-,H,-,H,-,A,A,H,H,H,-,H,-,-,A,-,H,B,H,-,H,-,-,H,A,-,-,H,H,-,H,C,H,A,-,-,A,A,A,A,-,A,A,-,H,H,-,B,B,B,-,B,B,B,-,-,H,-,-,-,-,H,H,-,H,B,B,-,-,-,-,H,H 163.75,B,B,B,B,H,H,A,A,H,H,H,H,H,B,H,H,H,H,H,H,-,-,H,H,-,-,-,-,H,A,A,A,A,A,A,A,-,A,A,A,-,A,A,-,A,A,A,-,-,A,A,-,A,A,A,-,H,H,-,H,-,B,B,B,-,B,H,H,B,B,-,B,-,-,B,-,H,H,H,-,H,H,-,H,H,-,-,H,H,-,B,C,H,H,-,-,A,A,A,A,A,A,A,-,B,H,-,H,H,H,-,-,H,H,-,-,B,-,-,-,-,A,A,-,B,B,B,-,-,-,-,A,H 82.017,B,B,B,H,H,B,B,B,B,B,B,B,B,H,H,H,A,A,A,A,-,-,-,H,-,-,-,-,H,H,-,B,B,B,B,B,-,B,B,B,-,B,H,-,H,H,H,-,-,B,B,-,B,B,B,-,H,A,A,A,-,A,A,A,-,H,H,H,H,B,-,B,-,-,B,-,A,A,H,-,H,H,-,A,A,-,-,A,A,-,H,A,A,A,-,-,A,H,H,H,H,H,H,-,A,A,-,A,H,H,-,H,H,H,-,-,H,-,-,-,-,B,A,-,H,H,H,-,-,-,-,A,A 264,H,H,B,B,B,B,H,H,H,H,H,H,H,H,B,B,B,H,H,B,-,-,H,H,-,-,-,-,A,B,B,A,A,A,A,A,-,A,A,A,-,H,B,-,B,B,H,-,-,H,H,-,A,A,A,-,H,H,B,B,-,A,A,A,-,A,H,H,H,B,-,B,-,-,A,-,B,B,B,-,B,B,-,B,B,-,-,B,B,-,B,C,H,H,-,-,H,H,H,H,H,H,H,-,A,A,-,B,B,B,-,B,B,B,-,-,H,-,-,-,-,H,-,-,B,H,H,-,-,-,-,A,A 264,A,A,-,H,B,B,B,B,B,B,-,B,B,B,B,B,B,B,B,A,-,-,H,H,-,-,-,-,H,A,A,A,A,A,A,A,-,A,H,H,-,H,B,-,H,H,H,-,-,H,H,-,H,H,H,-,H,H,H,H,-,B,B,H,-,H,H,H,-,H,-,A,-,-,H,-,H,-,H,-,H,H,-,H,H,-,-,H,-,-,B,C,H,H,-,-,B,B,B,B,B,B,B,-,H,-,-,H,H,H,-,H,H,H,-,-,H,-,-,-,-,-,H,-,H,H,H,-,-,-,-,A,A 91.283,B,B,-,-,A,A,A,A,A,A,H,H,H,H,A,A,H,H,H,H,-,-,H,H,-,-,-,-,B,H,H,H,H,H,H,H,-,H,H,H,-,H,B,-,B,B,B,-,-,B,B,-,B,B,B,-,H,-,A,H,-,H,H,H,-,A,H,H,H,H,-,A,-,-,H,-,H,H,H,-,H,H,-,H,H,-,-,B,-,-,B,C,H,H,-,-,A,A,A,A,A,A,A,-,A,A,-,A,A,H,-,H,H,H,-,-,B,-,-,-,-,H,A,-,B,B,B,-,-,-,-,H,H 140.767,H,H,-,H,H,H,H,H,H,H,H,B,B,B,B,H,A,A,A,H,-,-,H,H,-,-,-,-,A,H,H,H,H,H,H,H,-,H,H,H,-,B,A,-,A,A,H,-,-,H,H,-,H,H,H,-,A,A,A,A,-,B,B,B,-,B,B,-,B,B,-,B,-,-,H,-,H,H,H,-,B,B,-,B,-,-,-,H,H,-,H,C,H,H,-,-,H,H,H,H,H,H,H,-,H,H,-,B,B,B,-,B,H,H,-,-,B,-,-,-,-,A,H,-,-,H,H,-,-,-,-,H,H 81.733,A,A,-,A,A,A,A,A,A,A,A,A,A,A,H,H,H,H,B,H,-,-,H,H,-,-,-,-,H,B,B,B,B,B,B,-,-,H,H,A,-,A,B,-,H,H,H,-,-,H,H,-,H,H,B,-,H,H,H,H,-,H,H,H,-,H,H,A,A,H,-,H,-,-,A,-,B,-,B,-,H,-,-,H,A,-,-,B,B,-,H,C,H,H,-,-,H,H,H,H,H,H,H,-,H,H,-,B,B,B,-,H,H,H,-,-,H,-,-,-,-,H,H,-,A,H,A,-,-,-,-,A,A 75.667,H,H,-,A,A,A,A,A,A,A,A,-,A,A,H,H,B,B,H,H,-,-,-,A,-,-,-,-,A,H,-,H,H,-,B,B,-,B,B,B,-,B,A,-,A,A,H,-,-,-,H,-,H,H,H,-,H,-,B,B,-,A,A,-,-,B,B,H,H,H,-,H,-,-,H,-,H,-,H,-,H,H,-,H,H,-,-,A,A,-,H,C,H,H,-,-,H,H,H,A,-,A,H,-,H,H,-,B,H,H,-,H,H,H,-,-,A,-,-,-,-,A,H,-,H,A,A,-,-,-,-,A,H 76.483,B,B,B,B,B,H,H,H,H,H,H,H,H,B,B,H,H,H,A,H,-,-,A,A,-,-,-,-,A,B,-,H,H,H,H,H,-,H,H,H,-,H,A,-,H,H,H,-,-,-,B,-,B,B,B,-,B,B,-,H,-,A,A,A,-,A,A,B,-,B,-,B,-,-,B,-,A,-,H,-,A,H,-,B,B,-,-,H,H,-,B,A,A,A,-,-,A,A,A,A,H,H,B,-,H,H,-,B,B,B,-,B,B,B,-,-,A,-,-,-,-,A,A,-,H,H,H,-,-,-,-,A,A 116.467,H,H,-,B,B,B,B,B,B,B,H,H,H,H,H,B,B,B,H,H,-,-,H,-,-,-,-,-,B,H,H,A,A,A,A,A,-,A,A,A,-,H,A,-,A,A,A,-,-,H,H,-,H,H,H,-,H,H,H,B,-,A,A,A,-,A,H,B,-,B,-,B,-,-,B,-,H,H,H,-,H,H,-,B,B,-,-,H,H,-,A,A,A,A,-,-,A,A,H,H,H,H,H,-,A,H,-,A,A,A,-,A,A,A,-,-,H,-,-,-,-,-,H,-,B,B,B,-,-,-,-,A,A 116.517,A,A,-,B,B,B,B,B,B,B,B,H,H,H,H,B,H,H,H,H,-,-,H,H,-,-,-,-,A,B,B,B,B,B,B,B,-,B,H,H,-,H,B,-,B,H,H,-,-,H,H,-,H,H,H,-,A,A,-,H,-,B,B,H,-,H,H,A,-,A,-,A,-,-,A,-,H,-,H,-,H,H,-,B,B,-,-,H,H,-,H,C,H,H,-,-,H,-,H,H,-,H,H,-,A,A,-,H,A,A,-,A,A,A,-,-,H,-,-,-,-,-,H,-,H,A,A,-,-,-,-,A,H 139.55,H,H,B,B,B,B,B,B,H,H,H,H,H,A,A,A,H,H,H,H,-,-,H,H,-,-,-,-,H,H,H,H,H,-,H,H,-,H,H,B,-,B,H,-,H,A,H,-,-,H,H,-,H,H,H,-,H,H,H,H,-,H,H,H,-,H,H,H,H,H,-,A,-,-,H,-,H,H,H,-,H,H,-,B,H,-,-,H,-,-,A,C,H,A,-,-,A,A,H,H,H,H,H,-,H,H,-,A,A,A,-,A,A,A,-,-,H,-,-,-,-,B,H,-,H,H,B,-,-,-,-,H,H 264,A,A,-,A,A,A,A,A,A,A,A,A,A,B,B,H,H,H,H,B,-,-,H,H,-,-,-,-,H,B,B,H,H,H,H,H,-,H,H,H,-,H,B,-,B,B,B,-,-,B,B,-,H,H,H,-,A,B,B,B,-,H,H,A,-,H,H,B,B,B,-,B,-,-,H,-,B,-,B,-,H,H,-,H,H,-,-,B,B,-,H,C,H,H,-,-,H,H,H,H,H,H,H,-,H,H,-,H,H,H,-,H,H,H,-,-,H,-,-,-,-,B,B,-,H,H,H,-,-,-,-,H,A 116.2,A,A,-,H,H,H,H,H,H,H,H,A,A,A,H,H,H,A,A,H,-,-,H,B,-,-,-,-,H,H,H,H,H,H,H,H,-,B,B,-,-,B,H,-,H,H,A,-,-,A,A,-,A,A,A,-,A,H,H,H,-,H,H,A,-,H,H,A,A,A,-,A,-,-,H,-,H,-,H,-,H,B,-,B,B,-,-,H,H,-,B,C,H,H,-,-,H,H,H,H,H,H,H,-,B,B,-,H,H,H,-,B,B,B,-,-,H,-,-,-,-,H,B,-,H,H,H,-,-,-,-,A,A qtl/tests/gen.txt0000644000176000001440000007626011562004334013567 0ustar ripleyusers3 3 3 2 2 2 3 3 2 2 2 2 2 2 1 1 0 1 1 3 3 3 3 3 3 1 2 1 2 1 1 2 2 2 2 2 0 2 2 2 3 3 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 2 2 2 2 2 2 3 3 3 3 2 2 2 2 2 2 2 3 3 3 2 2 2 1 1 2 3 3 3 3 3 3 5 0 2 2 2 1 1 1 1 1 1 1 3 3 2 2 1 2 2 2 2 2 2 2 1 1 1 1 2 2 2 2 3 3 3 3 2 2 2 5 2 2 0 3 3 3 2 2 2 2 2 2 2 2 2 3 3 2 0 2 1 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2 2 3 3 3 1 1 1 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 2 2 2 3 3 3 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 3 2 1 1 2 2 2 2 0 2 2 2 2 2 1 3 3 3 3 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 3 3 2 2 1 2 2 5 2 2 0 2 2 2 2 2 2 2 3 3 3 3 3 2 2 2 0 0 2 2 2 2 2 3 3 1 1 2 2 1 1 1 1 2 2 2 0 2 2 2 2 1 2 2 2 2 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 2 2 2 3 2 2 3 3 3 3 3 3 3 2 1 1 1 1 2 2 2 2 2 2 3 3 2 2 2 3 1 1 1 1 1 1 1 2 2 2 2 2 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 2 2 3 3 2 2 1 1 2 2 3 3 2 2 2 2 3 3 3 3 3 3 3 1 0 1 0 2 2 3 2 2 2 2 2 2 2 2 2 0 2 1 1 1 1 1 0 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 2 3 3 3 3 3 2 2 2 2 2 2 2 2 1 2 3 2 2 3 3 3 3 3 2 1 1 2 1 1 1 5 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 3 2 2 2 2 1 1 1 2 2 3 1 2 2 3 1 1 1 1 3 2 2 5 2 1 2 2 2 2 3 2 2 2 2 2 2 2 2 3 2 2 0 0 2 3 1 1 1 1 1 1 1 1 2 0 1 1 1 1 1 0 0 2 2 2 2 2 1 1 1 1 1 1 0 2 2 2 2 2 2 3 2 1 1 2 2 1 1 1 1 1 2 3 3 3 2 2 2 2 1 2 2 2 2 3 3 3 3 3 2 1 1 1 1 1 1 5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 3 3 3 1 1 1 2 1 1 1 1 2 1 1 5 1 1 2 2 3 3 3 3 3 3 3 3 3 3 3 2 1 1 1 0 1 3 3 3 3 3 3 2 2 2 2 1 1 1 1 1 1 2 0 2 2 2 0 2 1 1 1 2 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 2 2 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 2 2 2 2 5 2 0 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 3 3 3 3 3 3 2 2 2 2 2 2 2 3 2 2 2 2 1 1 1 5 1 2 2 2 2 2 1 1 1 1 2 2 2 2 2 3 3 3 3 0 2 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 0 1 1 1 0 2 2 2 2 2 2 2 2 3 3 3 3 3 3 1 1 1 2 2 2 3 3 3 3 3 3 3 3 3 1 1 1 1 2 2 2 2 2 1 1 1 2 2 3 3 2 1 1 1 1 5 2 3 3 3 3 3 3 3 3 3 3 1 2 2 2 1 1 1 1 1 1 1 0 3 2 2 2 2 1 1 2 2 2 3 3 3 3 1 1 2 2 2 2 2 2 1 1 1 1 2 2 2 2 2 2 2 1 0 1 1 2 3 2 2 2 2 2 0 2 3 3 3 3 3 3 3 3 0 3 3 2 2 2 1 1 1 1 2 2 0 3 3 3 3 3 3 2 2 2 2 2 3 1 1 2 2 2 2 3 3 3 3 3 3 2 1 1 0 1 1 2 3 2 3 3 2 1 2 2 2 2 2 5 2 2 1 1 1 0 1 1 0 1 2 2 3 2 2 3 3 3 3 2 2 2 2 3 3 3 3 2 2 2 2 1 1 0 2 2 2 2 5 1 0 1 1 2 3 3 3 2 2 2 2 2 0 2 1 2 2 2 2 3 1 2 2 1 1 1 2 2 2 3 2 2 2 2 1 1 1 0 1 1 1 0 2 2 2 2 2 3 3 3 2 2 2 2 2 2 3 3 3 3 3 2 3 3 0 3 3 1 2 2 2 1 1 1 1 2 3 3 3 3 3 3 2 2 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 2 1 1 1 1 1 1 1 2 3 3 3 1 1 2 2 3 3 0 3 2 2 2 1 1 2 3 3 2 2 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 2 2 2 2 1 3 2 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 2 1 1 1 2 2 3 3 3 2 2 2 3 3 3 3 3 2 1 1 2 2 2 2 1 2 2 2 2 3 1 0 1 1 1 1 5 2 2 2 2 2 2 2 2 2 2 2 1 2 3 2 2 2 2 2 2 2 2 2 3 3 3 2 1 1 1 1 1 1 1 1 2 3 3 5 2 1 1 2 2 2 2 2 2 2 2 2 2 0 2 1 1 3 3 3 3 2 1 1 2 2 2 2 2 2 3 2 2 2 2 2 2 2 0 2 2 2 3 3 2 2 2 2 2 2 1 1 1 1 1 1 1 2 1 2 2 2 0 1 1 1 1 1 1 2 2 3 3 3 3 3 1 2 2 2 1 1 2 2 2 2 2 1 1 1 2 2 3 5 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 1 1 1 1 1 1 1 2 3 3 3 2 2 3 3 3 1 1 1 1 3 2 2 5 1 2 1 1 2 2 2 2 2 2 2 2 2 2 2 3 3 2 2 2 2 1 2 3 2 2 2 2 2 3 3 3 3 3 3 3 3 3 0 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 3 3 2 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 2 2 1 1 1 1 2 1 0 1 1 1 1 1 2 2 0 2 2 3 3 3 3 2 2 2 2 2 2 2 2 3 3 3 2 2 2 2 2 2 2 2 2 1 1 2 5 2 2 1 1 2 2 2 2 3 3 3 3 3 0 3 2 2 2 2 2 2 1 1 1 1 1 1 2 2 2 1 2 2 2 2 2 2 2 0 2 2 2 0 2 3 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 1 1 1 0 1 2 5 2 1 1 1 1 1 1 1 2 2 2 3 3 3 3 1 1 1 1 1 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 2 3 3 2 0 2 3 2 2 2 3 2 2 2 2 2 3 3 3 3 3 3 3 0 3 3 3 0 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 0 2 2 1 1 1 1 1 2 3 3 3 3 3 3 2 3 2 2 2 2 3 2 2 2 2 1 2 2 2 2 2 3 5 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 3 3 3 3 3 3 3 2 1 1 1 3 3 3 3 1 1 0 2 2 3 0 5 1 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 3 3 3 3 3 3 2 2 3 3 1 1 2 2 2 2 2 0 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 2 2 2 3 2 2 2 2 1 1 1 2 2 1 1 1 1 1 2 1 1 1 3 2 1 1 2 1 1 2 2 2 2 2 2 5 2 1 1 1 1 1 1 1 2 2 2 1 1 2 2 0 0 1 1 1 1 1 0 2 2 2 2 2 2 2 2 3 3 3 3 2 2 2 1 1 1 2 2 3 3 3 3 2 2 2 2 2 1 1 3 3 2 2 1 1 2 0 2 2 2 2 3 3 3 3 2 3 3 3 3 3 3 0 3 3 3 3 2 2 2 2 2 2 3 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 3 3 2 2 3 2 2 3 2 2 2 2 2 2 1 1 1 1 1 2 2 2 2 2 2 2 3 1 1 2 0 1 1 1 1 1 1 1 3 3 3 2 3 3 2 2 3 0 0 3 3 3 3 5 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 2 0 2 2 3 0 1 1 1 1 3 2 2 2 2 2 2 2 3 3 3 0 3 3 3 3 3 2 2 3 3 3 3 3 3 3 2 2 2 2 1 2 2 2 3 2 3 3 3 3 3 2 3 3 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 3 1 1 1 1 1 1 5 3 3 3 3 3 3 3 3 3 3 3 1 1 1 2 2 1 1 1 1 1 1 0 3 2 2 1 1 1 1 1 1 0 0 1 2 0 1 1 1 2 3 3 2 2 0 2 2 2 2 2 2 3 3 3 3 2 2 2 3 1 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 2 1 1 1 0 1 1 1 1 2 2 3 3 3 3 1 1 1 2 2 0 2 2 2 1 1 1 2 2 2 5 3 3 3 3 3 3 3 3 0 3 3 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 2 2 2 2 2 0 3 2 0 2 1 1 1 2 2 1 2 2 2 3 3 3 3 3 0 3 2 2 1 1 1 2 1 1 2 1 2 1 1 0 2 1 1 1 1 1 1 1 1 0 1 1 1 0 1 2 2 1 2 2 2 2 2 2 2 3 3 3 2 2 2 2 1 1 3 3 3 2 2 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 1 5 3 3 3 3 3 3 2 2 2 2 2 1 2 2 3 2 1 1 1 1 1 1 0 2 3 3 3 3 3 0 2 2 2 0 2 3 3 3 0 1 2 2 2 2 2 1 1 1 1 1 1 0 2 2 2 2 2 1 1 1 1 1 1 1 0 1 1 2 2 2 3 2 2 2 2 2 2 0 2 1 1 1 1 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 3 3 2 2 3 3 3 2 2 0 2 2 2 2 2 1 1 2 3 3 3 2 2 3 3 3 3 3 3 3 3 3 2 0 5 2 2 2 2 1 1 1 1 1 1 1 3 2 1 1 3 3 3 3 3 3 2 2 2 2 1 1 2 2 2 3 1 1 0 1 3 3 3 5 1 2 2 2 2 1 1 1 1 1 2 2 2 2 2 2 2 1 1 1 3 3 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 0 1 1 1 0 1 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 2 1 1 1 2 2 3 2 2 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 3 3 5 2 2 2 2 2 2 2 2 2 2 2 3 2 1 1 3 3 3 3 2 2 2 2 2 2 1 1 3 3 3 2 2 2 0 2 2 2 2 5 2 1 3 3 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 1 1 2 3 3 3 2 2 3 3 3 3 1 1 2 2 2 2 2 0 2 2 2 0 3 2 2 2 2 3 3 3 3 3 3 3 3 3 2 2 2 1 1 1 2 2 3 3 3 3 1 1 1 2 3 3 3 1 1 1 1 1 2 2 3 3 3 3 3 3 2 2 2 2 5 2 0 2 2 2 2 2 2 2 2 1 2 1 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 2 0 2 0 0 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 3 3 3 3 3 0 1 1 1 1 2 1 2 2 1 1 1 3 3 3 2 1 1 1 1 1 1 1 0 1 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 3 3 3 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 1 2 2 2 2 2 2 1 1 1 1 2 2 5 0 2 2 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 0 1 1 1 2 5 1 1 2 2 2 0 2 2 2 2 2 2 2 2 1 2 2 3 3 3 1 2 2 2 2 3 3 2 2 1 3 0 3 3 3 3 3 3 0 3 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 3 2 2 0 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 3 3 3 3 3 3 3 2 2 2 2 2 2 5 0 2 2 2 1 1 1 1 1 1 1 2 2 2 2 3 3 3 3 3 3 3 3 1 1 1 1 2 2 2 3 1 1 0 1 2 2 2 5 2 2 0 2 2 2 2 2 3 3 3 3 3 3 3 2 1 1 0 2 2 1 1 1 1 1 1 2 2 2 2 3 0 3 3 2 2 2 2 2 1 1 1 1 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 0 1 1 1 1 2 3 2 2 2 2 2 2 2 1 1 1 2 2 2 2 2 3 3 2 2 2 2 2 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 2 2 3 3 2 2 2 3 2 2 0 3 2 3 2 5 1 1 0 2 3 2 2 2 2 2 2 2 2 2 2 1 3 3 0 2 1 2 2 2 2 2 2 2 2 3 3 3 3 2 2 2 2 2 2 2 2 2 2 1 3 3 2 2 2 2 0 2 2 2 0 2 2 2 1 3 3 2 0 2 2 2 1 1 2 2 2 2 2 2 2 2 3 3 3 2 2 2 2 2 2 2 2 1 1 1 2 2 2 3 3 3 3 3 2 2 2 2 2 2 2 3 2 2 2 1 2 2 2 2 2 2 2 3 3 3 3 2 2 3 2 2 2 0 2 3 3 2 5 0 2 0 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 0 2 2 1 2 2 2 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 0 2 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 1 1 1 1 1 1 1 2 2 2 2 2 2 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 2 2 2 3 3 3 3 3 3 3 2 1 1 1 1 1 1 1 1 1 2 0 2 2 2 3 5 1 1 0 2 2 1 1 1 1 1 1 1 1 1 1 2 2 3 0 1 1 2 1 1 1 1 2 2 3 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 2 2 0 2 2 2 2 2 2 3 2 2 2 1 0 3 3 3 3 3 3 2 3 3 3 3 3 2 1 1 2 2 2 2 3 3 3 3 3 1 1 2 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 3 3 3 3 3 3 3 2 3 3 3 3 3 3 2 1 1 0 1 3 2 2 5 2 1 2 2 2 1 0 2 2 2 2 2 2 2 2 0 1 2 2 2 3 3 3 3 2 2 2 1 2 2 1 1 1 1 1 1 1 1 1 1 1 2 0 2 2 2 2 3 3 3 0 3 3 3 3 3 3 3 3 3 3 2 2 3 3 3 3 3 2 2 2 2 2 2 2 2 1 2 2 2 3 2 3 3 3 2 2 2 1 1 1 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 1 1 1 0 1 2 2 2 5 1 2 1 1 1 2 2 3 2 2 2 2 2 2 2 0 2 2 2 0 2 2 3 3 2 2 2 3 2 3 2 0 2 2 2 2 2 2 2 2 2 1 0 2 1 2 2 2 2 2 0 2 2 2 2 2 2 2 1 1 1 2 2 1 1 2 2 3 3 3 2 2 0 2 2 3 1 2 2 2 1 2 2 2 2 2 2 3 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 1 1 1 2 2 2 2 3 2 2 0 2 2 2 2 5 2 2 1 1 2 2 2 2 1 1 1 1 1 2 2 3 3 3 2 2 1 2 1 1 2 2 2 2 2 3 2 2 2 1 1 1 1 1 1 1 1 1 0 1 3 2 2 2 2 2 0 2 2 2 2 0 2 3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 2 2 3 2 2 1 1 1 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 2 2 2 2 2 2 2 2 2 2 2 2 1 2 3 3 2 2 2 3 1 1 0 1 2 2 2 5 2 2 1 1 2 2 3 3 2 2 2 2 1 1 1 0 2 3 3 3 2 2 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 0 3 3 3 3 3 3 1 1 1 1 2 0 3 3 3 2 2 0 2 2 2 1 1 1 1 3 2 2 2 3 1 0 2 2 1 1 3 3 3 3 1 1 3 3 0 2 2 2 0 2 2 1 2 1 2 3 3 2 1 1 2 2 2 2 3 2 2 2 2 2 1 1 2 2 1 1 0 1 2 2 2 5 2 2 3 3 2 1 1 1 1 1 2 2 2 2 2 3 3 3 3 2 2 3 2 2 1 1 1 2 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 2 2 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 1 2 0 2 2 2 2 3 3 3 3 2 2 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 3 3 0 2 2 2 2 5 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 1 1 2 1 2 2 2 2 2 3 0 2 3 2 2 2 2 2 2 3 2 3 3 3 3 3 2 2 2 2 2 2 0 2 2 1 1 2 2 2 2 1 1 1 0 2 2 2 2 2 0 2 3 3 3 3 3 3 1 1 1 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2 2 2 2 3 3 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 2 2 2 0 2 3 2 2 5 2 2 3 3 3 3 3 3 3 3 3 3 3 2 0 2 2 2 2 1 2 2 1 2 2 3 3 2 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 3 3 0 3 3 3 2 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 1 1 3 3 2 1 2 2 1 1 1 1 1 1 1 1 1 0 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 3 3 3 3 3 3 0 3 2 1 1 5 1 2 2 2 3 3 3 3 3 3 3 3 3 2 0 1 2 2 3 3 3 2 2 2 2 2 2 2 3 3 2 2 2 2 2 2 2 2 2 2 2 1 1 1 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 2 2 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 3 3 3 3 0 3 3 2 2 2 2 3 2 2 2 2 2 2 1 2 2 2 2 1 1 1 1 2 2 0 2 2 2 1 1 1 1 2 2 2 2 2 2 2 1 1 1 1 1 0 3 2 2 1 1 1 2 2 2 1 0 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 0 3 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 2 2 2 1 1 2 2 3 3 3 3 3 2 2 2 2 2 3 3 2 2 2 2 2 2 2 2 2 2 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 3 3 2 2 2 2 2 2 0 1 2 2 2 1 1 2 3 3 3 3 3 3 2 2 2 2 2 2 0 1 3 3 0 3 3 1 1 1 1 0 2 2 2 2 3 1 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 3 3 1 1 2 2 2 2 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 2 2 2 2 3 3 0 3 2 2 2 5 1 1 3 3 2 2 1 1 1 1 1 1 1 1 0 2 2 3 3 3 2 2 2 2 2 0 1 2 2 2 2 1 1 3 3 3 3 3 3 3 3 3 3 3 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 3 3 3 1 2 2 2 3 1 1 1 2 2 2 2 2 2 2 3 3 3 3 2 2 2 2 2 2 2 0 1 1 1 1 1 2 0 3 3 3 3 3 3 2 2 2 2 2 3 3 3 3 2 0 0 2 1 1 3 5 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 2 2 1 0 2 2 2 2 2 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 1 1 1 1 1 1 1 1 2 3 3 1 1 1 1 1 1 2 2 2 3 3 3 2 2 2 2 2 1 1 1 1 2 2 2 2 2 2 1 1 2 2 2 3 1 1 1 1 1 1 1 1 1 0 1 1 2 1 1 1 0 3 3 3 3 3 3 3 1 1 1 1 2 2 2 2 1 1 0 1 2 1 1 1 1 2 3 3 3 3 3 3 2 2 2 2 2 0 2 2 1 1 1 0 1 1 2 2 2 2 2 2 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 2 2 2 2 1 1 2 1 1 1 1 2 2 3 2 1 1 1 1 2 3 3 3 3 3 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 2 2 0 2 2 2 2 2 2 0 2 2 0 1 1 1 2 1 1 1 1 1 1 0 2 3 0 2 5 1 2 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 2 2 2 2 1 1 2 2 2 2 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 1 1 3 3 3 3 3 3 3 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 2 2 2 3 3 3 3 2 2 2 2 2 2 2 2 2 2 0 2 2 2 2 1 1 1 1 1 3 3 0 0 2 2 2 2 2 0 2 2 1 1 1 3 2 0 1 1 1 1 1 1 2 2 2 2 3 3 3 3 3 3 0 3 3 0 3 5 1 1 3 3 3 1 1 1 2 2 1 1 1 1 1 0 2 2 0 3 3 3 2 1 1 1 1 2 0 1 2 1 1 2 2 2 2 2 2 2 2 2 0 3 2 2 2 2 2 2 0 0 2 2 2 2 2 1 1 1 1 1 0 2 2 2 2 2 0 2 2 3 0 3 1 1 2 2 1 1 1 3 3 3 3 3 3 3 3 2 2 2 0 2 2 3 3 3 3 3 3 3 3 3 3 2 0 3 3 2 0 2 2 2 2 2 3 3 3 3 2 2 2 2 2 3 3 0 3 3 3 3 5 1 2 2 2 2 3 3 3 3 3 3 3 3 2 2 2 2 2 1 1 1 2 1 1 1 1 2 2 1 2 3 2 2 2 2 2 1 1 1 1 1 1 1 1 3 3 3 3 2 2 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 1 1 2 2 2 2 2 3 3 3 3 2 0 3 3 2 2 2 2 0 2 2 2 2 2 2 2 2 3 2 1 2 2 1 0 1 1 2 2 2 3 3 3 3 3 2 2 2 0 1 1 0 2 1 1 1 1 2 2 1 1 1 2 2 3 3 3 3 3 3 0 3 1 1 0 0 1 1 1 1 1 2 2 3 2 2 2 2 3 3 2 2 2 2 2 2 2 2 1 0 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 0 3 3 3 3 2 0 2 2 2 1 1 1 1 2 1 1 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 2 0 2 2 2 2 2 2 2 2 2 2 0 3 3 1 0 1 1 1 1 2 2 1 1 1 1 1 2 0 2 1 0 0 1 1 1 2 5 2 2 2 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 0 3 3 2 2 2 2 2 2 2 0 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2 2 2 3 0 2 2 2 2 2 0 3 3 3 0 3 2 2 1 1 2 2 3 2 1 1 1 1 2 3 3 2 2 2 2 2 2 0 1 1 1 1 2 2 0 2 2 0 0 2 2 1 0 1 1 1 1 1 0 1 1 1 2 2 1 1 1 3 3 0 3 2 1 1 1 1 1 2 2 2 3 3 3 3 3 3 3 3 0 3 2 1 3 0 1 2 1 2 2 3 3 3 2 2 2 2 0 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 3 3 3 1 1 1 3 3 3 0 3 3 3 2 2 2 2 2 2 1 1 1 1 2 2 2 2 3 2 0 2 2 2 2 2 2 2 2 3 2 2 2 3 0 1 2 3 0 2 2 0 2 2 2 3 3 3 3 2 2 0 2 3 3 0 3 2 2 2 5 1 0 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 0 3 3 2 2 1 1 1 1 1 2 2 2 0 1 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 2 2 2 1 1 1 3 3 3 3 3 2 2 2 2 2 2 2 3 3 3 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 0 1 1 2 0 2 2 3 3 0 3 2 2 2 2 1 1 1 2 3 3 0 2 2 2 0 5 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 0 2 2 2 1 1 1 1 1 2 2 2 1 3 3 3 3 3 3 0 0 3 3 3 3 3 2 2 2 2 3 2 0 2 2 2 2 2 2 1 0 1 0 1 1 3 3 3 3 2 0 1 1 2 2 0 2 2 1 1 0 1 1 1 1 1 2 2 2 1 1 1 1 1 1 5 1 2 2 2 3 3 3 3 3 3 3 1 2 2 2 2 2 2 2 2 2 1 1 2 3 3 3 1 1 1 1 2 2 1 1 2 1 1 1 1 2 0 2 2 1 1 1 1 1 1 1 1 2 2 1 2 2 0 1 1 2 2 2 2 2 2 3 0 2 2 2 2 2 2 2 2 0 0 2 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 3 3 3 0 3 3 3 3 3 3 2 2 1 1 0 1 1 3 3 2 1 1 1 1 1 3 3 3 1 1 1 1 1 1 5 3 3 3 3 3 3 3 3 3 3 3 2 2 1 1 2 2 2 2 2 2 1 1 1 1 1 1 3 3 3 2 2 2 2 2 3 3 2 5 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 0 1 2 2 2 2 2 2 3 2 0 3 3 3 3 3 3 3 3 3 3 3 3 3 0 2 2 2 2 2 2 2 0 3 3 3 3 3 3 3 3 3 3 1 1 2 2 2 1 1 1 1 1 1 1 0 2 2 3 3 2 2 1 1 0 1 1 1 2 3 0 2 2 2 3 5 3 3 0 3 3 3 2 2 2 2 2 3 3 3 3 1 1 2 2 2 2 2 3 1 1 2 2 2 2 2 2 2 2 2 2 1 1 2 5 1 1 0 3 3 3 3 3 2 2 2 2 2 2 2 1 1 2 0 3 3 1 2 2 2 2 3 3 2 1 1 2 2 2 2 0 2 2 2 2 2 1 1 1 2 2 2 2 2 2 0 2 2 2 2 2 2 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 3 0 3 2 2 2 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 3 3 2 2 2 3 3 3 3 3 3 0 2 2 2 1 2 2 3 3 2 2 3 3 2 2 1 1 2 2 1 0 2 1 1 1 1 1 1 1 1 1 1 3 1 1 0 2 2 2 3 3 3 3 3 2 0 3 3 3 3 3 3 2 2 2 2 2 2 2 1 1 1 1 1 1 2 2 0 2 2 2 3 3 3 1 2 2 2 1 1 1 1 2 2 2 0 2 2 2 2 0 3 3 3 3 3 3 2 2 3 3 3 3 3 2 1 1 1 2 2 5 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 1 2 2 2 2 2 2 3 3 3 2 2 2 2 2 2 1 1 2 3 1 1 1 1 2 1 3 3 3 3 3 3 3 3 3 3 3 3 3 1 2 2 2 2 1 3 2 1 2 2 2 2 2 3 3 0 3 3 3 3 3 3 3 3 3 3 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 1 1 1 1 1 1 2 2 2 2 0 2 2 2 2 2 2 2 1 2 2 3 3 3 1 1 1 1 1 1 5 2 1 1 1 1 0 1 1 1 1 1 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 5 1 2 1 0 2 2 3 3 3 3 3 3 3 3 3 0 3 3 3 3 2 2 2 2 2 2 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 0 3 3 3 3 3 3 2 2 2 1 1 1 2 2 1 1 1 0 2 1 1 1 0 2 2 2 2 3 3 3 2 0 1 1 1 1 1 1 1 1 1 1 5 2 2 2 2 2 0 2 2 2 2 1 3 3 3 2 2 2 2 2 2 2 2 3 3 3 2 2 1 1 1 1 2 2 3 2 2 2 1 1 1 1 2 2 3 2 2 2 3 3 3 3 3 3 3 1 2 1 0 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 0 3 3 2 2 2 0 1 1 1 1 1 2 2 1 2 0 2 3 2 2 2 2 1 1 2 2 0 2 3 3 5 2 0 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 3 2 2 2 3 3 3 3 2 2 2 5 2 2 2 0 2 2 1 1 2 2 3 3 3 3 3 2 1 1 2 3 3 2 2 2 2 1 1 2 2 2 2 1 2 2 2 2 2 2 2 2 2 3 3 3 2 2 2 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 3 2 2 1 1 1 1 2 1 2 2 0 2 2 2 2 3 3 2 2 2 2 2 2 1 1 1 1 2 2 2 5 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 1 1 1 1 1 1 1 2 0 2 2 1 1 1 1 1 1 1 1 3 2 2 5 2 2 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 2 2 2 3 3 3 2 2 1 1 0 1 1 2 2 2 2 2 1 2 3 2 2 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 2 0 2 2 3 2 2 2 2 2 2 2 2 2 2 2 3 2 2 3 3 3 3 2 2 2 2 2 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 3 3 3 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 3 3 3 3 3 3 3 2 2 2 2 2 3 3 3 3 2 2 2 2 3 3 2 0 2 2 2 2 2 3 3 3 3 3 3 2 0 1 1 1 2 2 2 2 1 2 2 2 2 2 3 2 2 2 2 0 1 1 1 1 1 1 0 1 1 0 1 2 3 3 2 2 2 2 3 3 3 3 3 3 3 2 2 2 2 3 3 3 3 3 1 1 2 2 2 5 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 2 2 2 2 0 2 1 2 3 3 3 3 2 2 3 3 1 1 1 1 1 2 2 2 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 0 2 2 2 2 2 2 2 2 1 1 2 0 0 2 2 1 1 1 1 1 3 3 2 2 2 1 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 0 1 2 1 3 3 3 3 3 3 3 3 3 3 0 2 2 2 2 2 3 3 3 3 3 2 2 1 2 2 5 1 1 3 3 3 3 3 3 3 3 2 2 2 2 2 2 3 2 2 2 2 2 2 3 3 3 3 2 2 2 3 2 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 2 3 3 3 3 3 2 2 2 2 0 3 3 2 2 3 3 3 3 3 3 3 3 1 2 2 1 1 1 1 5 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 1 1 3 2 2 5 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 0 3 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 3 0 1 1 2 0 0 1 1 1 1 1 2 2 3 3 3 3 3 1 3 3 2 2 2 2 1 1 0 2 2 2 0 2 2 2 2 2 1 1 1 1 3 3 3 3 3 3 3 2 2 2 2 1 3 3 2 2 2 2 2 2 1 1 1 1 1 0 2 2 2 2 3 3 3 3 3 3 2 2 2 3 3 3 3 3 3 2 2 3 2 2 2 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 0 1 1 1 1 1 1 3 3 3 3 2 1 2 2 2 2 2 1 1 1 1 1 0 1 1 3 3 3 2 2 2 2 2 2 2 2 2 1 1 1 1 2 5 3 3 3 3 3 3 3 2 0 2 2 2 2 2 1 0 2 2 2 2 2 2 3 3 3 3 3 2 2 2 1 2 2 2 2 3 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 2 2 1 1 1 1 3 3 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 2 1 1 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 1 1 2 2 2 3 1 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3 2 1 1 1 5 1 0 3 3 3 3 3 3 3 3 3 1 1 1 2 0 3 3 3 3 3 2 0 1 2 2 3 2 2 2 2 2 2 2 2 3 3 3 5 2 2 1 1 2 2 2 2 2 2 1 1 1 1 1 0 1 2 2 2 2 1 2 2 2 2 2 3 0 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 0 3 3 3 0 0 2 2 1 1 2 2 3 1 1 1 2 2 2 2 1 2 2 2 3 5 3 3 3 3 3 3 3 3 3 3 3 2 2 1 2 2 0 1 1 1 1 1 1 1 1 1 2 2 2 2 3 3 3 0 3 2 2 1 1 2 2 2 2 2 3 3 3 3 3 2 2 2 2 2 3 3 3 3 0 3 1 1 1 3 3 3 2 2 2 3 2 2 2 2 0 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 2 2 1 1 1 1 1 1 3 3 3 2 0 2 2 1 2 2 2 2 1 1 0 1 1 1 3 3 3 3 3 3 1 1 0 1 1 1 1 1 1 0 2 2 2 2 2 2 2 0 2 2 3 3 3 3 1 1 2 2 2 2 1 1 2 2 0 2 3 2 2 5 1 1 2 2 2 2 2 2 2 2 2 2 0 2 2 3 2 2 0 2 2 3 2 2 2 2 2 3 0 3 3 2 3 3 3 3 3 3 3 3 2 2 0 2 3 2 2 2 2 2 2 2 2 2 1 1 1 2 2 2 0 3 0 2 2 2 2 2 0 3 3 3 3 0 3 3 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 5 2 1 1 1 1 1 1 1 1 1 1 2 2 3 3 2 0 3 3 3 2 2 3 3 2 2 2 1 2 2 2 3 3 3 3 2 1 2 5 1 1 2 2 1 1 1 1 2 2 2 3 3 3 3 2 2 2 2 3 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 0 2 2 1 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 1 0 2 2 2 3 3 3 3 3 2 2 0 1 1 1 1 2 2 3 3 3 3 2 2 2 2 2 2 2 2 3 1 1 1 1 1 1 1 1 1 1 1 1 2 0 3 3 2 0 2 2 1 1 1 1 2 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 2 2 3 3 3 3 3 2 3 3 0 2 2 3 2 2 3 3 3 1 1 2 3 1 2 1 1 1 1 1 1 1 1 1 0 1 1 1 1 2 3 3 3 3 3 3 3 3 3 2 2 2 0 2 0 3 3 3 2 1 1 2 2 3 3 0 2 2 2 2 2 2 2 3 3 3 3 3 3 2 2 2 3 3 3 5 2 2 2 2 2 2 2 2 0 2 3 2 0 2 2 2 0 2 2 2 2 1 1 3 3 3 3 3 2 2 1 2 2 2 2 1 1 1 5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 2 2 2 2 2 2 1 1 1 3 0 2 1 1 1 1 2 2 2 3 3 0 2 3 3 2 2 2 2 2 2 2 2 2 2 2 1 1 2 0 2 0 2 2 2 2 2 0 2 2 2 2 0 2 2 2 3 3 3 3 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 0 1 1 1 0 2 2 3 0 3 3 3 3 0 0 2 2 2 2 2 2 2 2 1 1 1 1 2 2 3 5 2 1 2 2 2 2 2 2 2 2 2 2 2 0 2 2 2 3 0 2 2 2 3 3 3 2 2 3 2 2 2 1 2 1 1 1 1 1 1 1 1 2 0 2 3 3 3 3 3 3 3 3 3 3 3 3 3 1 0 3 0 3 2 3 3 3 3 3 3 2 2 2 2 0 3 3 2 2 2 1 2 3 2 1 1 1 1 3 3 0 3 3 3 5 2 1 1 1 1 1 1 1 1 1 1 3 3 2 2 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 5 2 1 3 3 3 3 3 3 2 2 1 1 1 1 1 2 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 3 3 3 3 3 2 2 2 2 3 2 2 0 1 1 1 1 1 0 1 2 2 3 3 3 3 2 2 2 1 1 1 5 3 3 3 3 3 2 2 2 2 2 2 3 3 3 2 1 2 0 2 2 2 0 0 1 2 2 2 2 3 3 3 1 1 2 2 2 2 2 5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 2 0 2 2 2 1 1 1 1 2 1 3 3 2 2 3 3 3 3 3 3 0 3 3 3 3 3 2 2 2 2 2 2 0 2 2 3 3 3 3 2 2 2 2 3 3 2 2 2 2 2 0 1 1 2 0 2 2 2 2 2 3 2 2 2 2 2 3 3 3 3 3 3 3 3 3 5 3 3 3 3 3 3 3 3 3 3 3 0 2 2 1 1 2 2 1 1 1 1 1 2 3 0 2 2 2 2 3 2 2 2 2 3 3 2 5 1 2 0 2 0 2 2 2 2 2 2 2 2 2 2 3 2 2 0 2 2 1 1 2 2 2 3 1 1 2 3 2 2 2 2 2 2 2 2 2 2 2 2 1 3 3 3 3 3 3 0 3 3 3 3 3 3 3 3 2 0 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 3 2 2 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 2 0 1 2 3 3 5 2 2 3 3 2 2 2 2 1 1 1 1 1 1 1 2 1 1 0 2 2 1 1 2 2 2 2 3 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 2 2 2 2 2 2 2 0 1 1 1 1 1 1 3 2 2 2 3 2 2 2 0 2 2 2 1 1 2 2 2 2 2 2 2 1 1 1 2 2 2 2 2 3 3 3 3 3 2 2 1 1 1 1 1 1 1 1 1 1 1 1 2 3 3 3 2 2 2 2 2 2 2 2 3 3 2 2 2 2 2 2 1 1 1 1 1 1 1 5 2 2 0 2 1 1 2 2 2 2 2 2 2 2 2 3 3 3 0 1 1 1 1 1 1 1 1 2 2 3 2 0 2 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 3 3 0 1 1 1 1 1 1 1 2 3 3 2 2 2 2 2 3 3 2 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 2 2 3 3 3 3 3 3 3 3 3 2 1 1 2 2 2 1 2 2 2 2 1 2 3 5 1 2 2 2 2 2 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 3 3 3 2 1 1 1 1 1 2 2 2 2 2 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 2 2 1 3 3 3 3 3 2 2 2 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 2 2 2 2 2 2 1 1 1 2 3 2 2 2 2 2 2 3 2 2 1 1 1 1 0 2 2 3 3 3 3 3 3 3 3 3 3 2 2 0 1 2 2 2 1 1 1 2 2 1 1 2 3 0 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 3 3 2 1 1 1 2 2 2 3 3 3 2 3 3 3 3 3 3 3 3 3 2 1 2 2 2 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 2 2 2 2 2 2 2 2 2 1 2 2 2 3 3 3 2 2 2 1 1 2 2 2 5 2 1 1 1 2 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 3 2 2 2 3 2 2 2 2 3 2 1 2 2 2 3 3 5 2 3 3 3 2 2 2 2 2 2 2 1 2 2 3 1 1 1 1 1 1 1 0 2 1 1 2 2 3 3 3 3 3 1 1 1 1 1 1 2 2 1 1 1 2 2 2 2 2 1 1 1 1 1 3 2 2 2 2 2 3 3 3 2 2 2 2 0 3 2 3 2 1 1 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 3 3 3 3 3 3 3 1 2 2 0 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 2 2 2 3 3 2 2 2 2 2 2 2 2 2 2 5 2 1 1 1 1 0 1 1 1 1 1 2 2 2 1 2 3 3 3 3 3 3 3 2 2 2 1 1 1 1 2 3 3 3 3 3 3 3 5 2 2 2 2 3 0 2 3 3 3 3 3 3 3 3 1 2 2 2 2 2 2 3 3 3 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 2 2 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 2 2 2 3 2 2 2 3 2 2 2 0 2 2 2 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0 2 2 2 2 2 2 1 1 1 2 2 2 2 2 2 2 3 3 2 2 3 3 3 3 2 1 1 1 1 2 2 2 5 2 1 3 3 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 1 2 2 0 3 2 2 2 2 2 2 2 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 0 3 3 2 2 1 1 1 1 5 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 1 1 3 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 2 2 2 3 3 3 2 1 1 2 2 2 3 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 2 2 2 1 1 1 1 1 1 1 1 3 3 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 3 2 2 2 2 2 2 1 3 3 3 2 3 3 2 2 1 1 1 1 1 2 3 5 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 2 2 2 3 3 2 1 2 2 2 2 2 2 2 2 2 2 2 0 2 2 3 3 3 3 3 3 3 3 3 2 2 2 2 1 1 0 2 2 2 2 2 2 3 3 2 2 2 2 3 3 3 1 2 2 2 2 1 2 2 3 3 2 3 3 2 2 2 1 1 1 1 1 1 1 0 1 1 0 1 1 2 2 2 1 3 0 3 3 3 3 0 2 1 2 2 2 1 3 3 3 2 2 2 2 3 3 3 5 1 1 2 2 2 2 2 2 3 3 2 2 2 2 2 3 3 3 1 1 1 2 1 1 1 1 2 2 0 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 2 3 3 2 1 1 1 2 2 0 2 1 0 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 3 3 3 2 2 2 2 2 2 5 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 3 3 3 3 3 3 2 2 2 3 2 2 2 2 2 3 2 2 2 2 1 1 1 1 1 1 2 2 3 3 3 3 3 3 3 3 3 2 2 3 1 1 1 1 1 2 1 2 2 2 2 2 2 2 2 3 2 1 1 1 1 1 1 1 1 1 0 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 0 2 2 2 2 1 1 1 1 2 2 2 3 3 3 3 2 2 2 2 2 3 1 1 1 1 1 3 3 2 2 2 3 5 3 0 1 3 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 3 3 3 3 2 2 2 2 1 3 3 5 1 1 1 1 1 2 1 2 3 3 3 3 3 3 3 2 3 2 2 1 1 2 2 2 3 2 2 1 1 1 3 2 2 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 0 2 3 1 1 1 1 1 2 2 2 2 2 2 2 3 2 1 1 1 1 2 2 2 1 1 2 3 3 3 3 3 3 5 0 2 2 2 2 2 2 2 0 2 2 2 2 2 2 0 0 2 2 2 2 2 2 3 3 1 1 1 1 1 1 1 1 1 1 2 2 3 5 1 2 3 3 3 3 3 3 2 2 2 2 2 2 3 2 2 2 2 1 1 2 1 1 1 1 2 3 0 3 2 2 2 2 2 2 2 2 2 2 2 2 0 3 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 0 2 2 1 1 1 1 1 2 3 3 3 2 2 2 2 1 1 2 3 3 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 0 0 3 3 3 3 0 3 3 3 3 2 1 3 3 3 2 3 3 3 2 2 2 5 2 1 1 1 2 1 2 2 3 3 3 3 3 3 3 2 2 2 1 1 1 2 2 1 1 1 1 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 0 2 2 2 2 2 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 2 3 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0 2 2 2 2 2 1 1 1 1 1 3 2 2 2 1 1 2 2 1 1 1 5 1 1 2 2 2 2 2 2 2 1 1 1 1 2 2 2 2 2 2 2 2 2 2 1 1 1 1 3 3 3 2 1 2 2 2 2 2 3 3 3 3 3 0 3 3 2 2 2 1 1 1 1 1 1 1 1 2 3 0 2 0 2 2 2 2 2 3 3 0 3 3 2 2 2 1 1 1 1 1 1 1 2 2 1 1 1 2 2 2 3 3 2 2 5 2 2 2 0 2 2 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 2 2 1 1 1 1 3 3 3 2 2 2 2 3 2 1 2 5 1 2 1 1 0 2 2 2 1 1 1 1 1 1 2 2 2 2 2 2 2 1 0 0 1 1 0 0 0 0 3 2 2 2 2 2 2 2 0 2 2 2 0 2 2 0 2 2 2 0 0 2 2 0 2 2 2 0 3 3 3 3 0 2 2 2 0 2 2 1 1 2 0 2 0 0 2 0 1 1 1 0 2 0 0 1 2 0 0 1 1 0 1 5 2 2 0 0 2 2 1 1 0 1 0 0 1 1 0 1 1 2 0 2 2 2 0 0 1 0 0 0 0 0 3 0 2 1 1 0 0 0 0 1 1 2 2 0 2 2 2 2 2 2 2 2 1 1 2 2 3 3 2 2 3 0 0 1 1 0 0 0 0 1 2 2 2 2 2 2 2 0 2 2 2 0 2 2 0 2 2 2 0 0 2 2 0 2 2 2 0 1 1 1 1 0 1 1 1 0 2 3 1 1 1 0 1 0 0 2 0 3 3 3 0 3 0 0 2 2 0 0 2 2 0 2 5 2 2 0 0 2 2 2 2 2 2 1 0 2 2 0 3 3 3 0 3 3 3 0 0 2 0 0 0 0 0 3 0 3 2 2 0 0 0 0 1 2 0 2 0 2 2 2 2 2 2 2 2 3 3 2 1 1 1 1 2 2 0 0 2 2 0 0 0 0 2 2 2 2 2 2 2 2 0 2 2 2 0 3 2 0 2 2 2 0 0 2 2 0 1 1 1 0 3 2 0 2 0 3 3 2 0 2 2 2 0 2 0 2 0 0 2 0 2 2 2 0 2 2 0 2 1 0 0 3 3 0 2 1 1 1 0 0 1 1 1 1 1 1 1 0 3 3 0 1 1 1 0 1 1 2 0 0 3 0 0 0 0 0 2 0 1 1 1 0 0 0 0 1 1 0 2 0 2 1 1 1 1 1 1 1 0 1 2 1 2 2 2 2 2 0 0 2 2 0 0 0 0 2 1 1 1 1 1 1 3 0 3 3 3 0 3 1 0 1 1 2 0 0 2 2 0 2 2 2 0 2 2 2 2 0 2 2 2 0 0 2 2 2 2 0 1 0 0 2 0 2 2 2 0 3 3 0 3 3 0 0 2 2 0 2 5 2 2 0 0 2 2 2 2 2 2 3 0 2 2 0 1 1 1 0 1 1 1 0 0 1 0 0 0 0 3 3 0 2 3 3 0 0 0 0 1 1 0 2 0 3 3 3 3 3 3 2 2 2 2 2 2 1 2 2 3 2 0 0 2 2 0 0 0 0 1 3 3 3 3 3 3 3 0 2 2 2 0 1 1 0 2 2 1 0 0 1 1 0 1 1 1 0 3 2 2 2 0 1 1 2 0 2 1 3 0 3 0 3 0 0 1 0 2 2 2 0 3 3 0 3 3 0 0 2 2 0 2 1 1 1 0 0 1 1 1 1 1 1 1 0 3 3 0 2 2 2 0 1 1 1 0 0 1 0 0 0 0 0 1 0 2 2 2 0 0 0 0 1 2 2 2 0 2 2 0 2 2 2 2 0 2 2 3 3 2 3 3 2 2 0 0 1 1 0 0 0 0 2 1 2 2 2 2 2 2 0 2 2 2 0 2 2 0 3 3 3 0 0 2 2 0 2 2 2 0 1 0 1 1 0 3 3 3 0 3 3 2 0 1 0 2 0 0 3 0 2 2 2 0 2 2 0 1 1 0 0 2 0 0 2 1 1 1 0 0 1 1 1 1 1 1 2 0 2 2 0 2 2 2 0 2 2 2 0 0 2 0 0 0 0 0 1 0 0 3 3 0 0 0 0 1 2 0 1 0 2 2 0 2 2 2 2 2 3 3 2 3 3 3 3 3 2 0 0 2 2 0 0 0 0 3 2 2 2 2 2 2 2 0 2 1 1 0 1 2 0 2 2 2 0 0 2 2 0 2 2 2 0 2 2 2 1 0 3 3 3 0 3 3 1 2 2 0 3 0 0 3 0 1 2 2 0 2 0 0 2 2 0 0 3 3 0 3 1 1 2 0 0 2 2 2 2 2 0 2 0 1 1 0 2 2 2 0 2 2 2 0 0 2 0 0 0 0 0 3 0 1 2 2 0 0 0 0 2 2 0 2 0 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 2 0 0 2 2 0 0 0 0 2 3 3 3 3 3 3 3 0 3 3 3 0 1 2 0 2 2 2 0 0 2 2 0 2 2 2 0 2 2 0 2 0 3 3 3 0 2 2 2 2 2 0 3 0 0 2 0 2 3 2 0 1 1 0 1 0 0 0 2 2 0 1 5 2 2 0 0 1 1 1 1 0 1 2 0 2 2 0 2 2 2 0 2 2 2 0 0 3 0 0 0 0 1 2 0 1 1 1 0 0 0 0 2 0 0 3 0 2 1 1 2 2 2 2 2 2 2 2 1 1 2 2 2 1 0 0 2 2 0 0 0 0 3 3 0 3 3 3 3 2 0 2 2 2 0 3 3 0 3 3 3 0 0 3 3 0 2 2 2 0 2 3 3 2 0 2 2 3 0 0 3 1 0 2 0 2 0 0 2 0 3 1 1 0 1 1 0 1 2 0 0 2 3 0 2 1 1 1 0 0 1 1 1 1 0 1 1 0 3 0 0 2 2 2 0 2 2 2 0 0 1 0 0 0 0 0 3 0 1 1 1 0 0 0 0 2 1 3 3 0 1 1 1 1 1 1 1 0 1 1 2 2 2 2 2 2 1 0 0 1 1 0 0 0 0 2 2 0 2 2 2 2 2 0 2 2 2 0 2 1 0 1 1 1 0 0 1 1 0 2 2 2 0 1 1 1 2 0 1 0 1 0 1 1 3 3 3 0 3 0 0 3 0 2 2 3 0 2 2 0 2 2 0 0 2 2 0 1 5 2 2 0 0 2 2 2 2 2 2 1 0 1 0 0 3 3 3 0 3 3 3 0 0 1 0 0 0 0 1 1 0 2 2 2 0 0 0 0 1 1 1 1 0 2 2 2 1 1 1 1 1 1 1 2 3 3 2 2 2 2 0 0 2 2 0 0 0 0 2 2 2 2 2 2 2 2 0 2 2 2 0 1 3 0 3 2 2 0 0 2 2 0 2 2 2 0 2 2 3 3 0 3 3 3 0 3 3 2 0 2 0 2 0 0 2 0 2 2 2 0 3 0 0 2 1 0 0 2 2 0 2 5 2 2 0 0 1 1 1 1 1 1 1 0 2 2 0 2 2 1 0 1 1 1 0 0 1 0 0 0 0 2 2 0 2 2 3 0 0 0 0 1 1 1 1 0 2 2 2 2 2 3 3 3 0 2 2 2 1 1 1 1 1 0 0 2 2 0 0 0 0 2 2 0 1 1 1 1 1 0 1 2 2 0 2 3 0 2 1 1 0 0 0 1 0 1 1 1 0 3 1 0 1 0 3 3 3 0 3 1 1 0 1 0 2 0 0 2 0 1 0 1 0 2 3 0 3 0 0 0 3 0 0 1 5 2 2 0 0 3 3 3 3 3 3 3 0 2 2 0 2 1 1 0 1 1 1 0 0 2 0 0 0 0 0 2 0 2 0 2 0 0 0 0 1 1 0 3 3 3 3 2 2 2 2 2 1 1 1 1 2 2 3 3 3 2 0 0 3 3 0 0 0 0 1 2 2 2 2 1 1 1 0 1 1 1 0 2 1 0 1 1 1 0 0 2 2 0 2 2 2 0 2 1 1 1 0 2 2 2 0 2 2 1 1 1 0 1 0 0 3 0 3 3 3 0 2 2 0 1 2 0 0 1 1 0 1 5 2 2 0 0 2 2 2 2 2 2 2 0 2 0 0 2 2 2 0 2 2 1 0 0 1 0 0 0 0 2 1 0 3 2 2 0 0 0 0 1 1 3 3 3 2 2 2 3 3 2 2 2 2 2 2 2 2 1 1 1 2 0 0 1 2 0 0 0 0 1 3 3 3 3 2 2 2 0 2 2 2 0 2 1 0 2 2 2 0 0 2 2 0 2 2 2 0 3 2 2 2 0 2 2 3 0 3 3 3 1 2 0 2 0 0 2 0 1 0 1 0 2 2 0 2 3 0 0 1 1 0 2 5 2 2 0 0 2 3 3 3 0 3 3 0 2 2 0 2 3 3 0 3 3 3 0 0 2 0 0 0 0 0 3 0 3 3 3 0 0 0 0 1 2 0 2 0 2 2 2 1 1 1 1 1 1 1 3 3 3 3 3 1 1 0 0 3 3 0 0 0 0 1 1 1 1 2 2 2 2 0 2 2 2 0 2 1 0 2 2 2 0 0 2 2 0 2 2 2 0 1 1 1 1 0 1 1 2 0 3 3 3 3 3 0 3 0 0 2 0 1 1 1 0 2 2 0 2 1 0 0 1 1 0 2 5 2 1 0 0 1 1 1 1 0 1 1 0 3 3 0 1 1 1 0 2 2 2 0 0 3 0 0 0 0 2 2 0 2 2 2 0 0 0 0 2 2 1 2 0 3 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 1 0 0 1 1 0 0 0 0 3 3 3 3 3 3 3 3 0 3 3 3 0 3 2 0 2 2 2 0 0 1 1 0 1 1 1 0 3 2 1 1 0 2 0 2 0 1 1 2 2 2 0 2 0 0 1 0 2 3 2 0 2 0 0 2 1 0 0 2 2 0 2 5 2 1 0 0 1 1 1 1 0 1 1 0 2 2 0 3 3 3 0 3 3 3 0 0 2 0 0 0 0 2 2 0 2 3 3 0 0 0 0 2 2 3 3 3 3 2 2 1 1 2 2 2 2 2 3 2 2 2 2 2 2 0 0 2 2 0 0 0 0 2 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 0 0 1 1 0 1 1 1 0 2 2 0 2 0 3 3 3 0 3 2 2 3 3 0 3 0 0 3 0 2 2 2 0 2 2 0 2 2 0 0 2 2 0 3 5 2 2 0 0 1 1 1 1 1 1 1 0 3 2 0 2 2 2 0 0 2 2 0 0 3 0 0 0 0 1 1 0 3 3 3 0 0 0 0 1 2 3 3 3 2 2 3 3 3 3 3 3 3 3 2 2 2 1 1 1 1 0 0 0 2 0 0 0 0 2 2 0 3 3 3 3 3 0 3 3 3 0 3 2 0 2 2 2 0 0 3 3 0 3 3 3 0 2 1 1 1 0 1 1 1 0 2 2 2 2 3 0 3 0 0 3 0 1 1 2 0 2 2 0 1 1 0 0 1 1 0 2 1 1 1 0 0 1 2 2 2 2 2 2 0 1 1 0 1 2 2 0 2 2 2 0 0 2 0 0 0 0 3 1 0 2 2 2 0 0 0 0 1 1 2 2 3 3 3 3 2 2 2 2 2 2 2 2 3 3 3 2 2 3 0 0 2 2 0 0 0 0 1 3 3 1 1 1 1 1 0 1 1 1 0 2 3 0 3 3 2 0 0 2 2 0 1 1 1 0 2 2 3 3 0 1 1 1 0 1 2 2 2 3 0 3 0 0 1 0 3 3 3 0 3 3 0 3 3 0 0 3 3 0 3 5 2 2 0 0 2 2 2 2 2 2 2 0 1 1 0 3 3 3 0 3 3 3 0 0 2 0 0 0 0 2 0 0 3 2 2 0 0 0 0 1 1 1 1 0 2 3 3 3 3 3 3 0 3 3 3 3 3 3 3 3 1 0 0 2 2 0 0 0 0 2 1 1 1 1 1 1 1 0 1 2 2 0 2 3 0 2 2 2 0 0 2 2 0 2 2 2 0 2 2 2 2 0 3 3 2 0 2 2 2 0 2 0 1 0 0 2 0 2 0 2 0 2 2 0 2 2 0 0 2 0 0 3 5 2 2 0 0 3 3 3 3 3 3 3 0 2 0 0 2 2 2 0 2 2 2 0 0 2 0 0 0 0 0 2 0 2 2 2 0 0 0 0 1 1 3 3 0 0 1 1 1 1 1 1 2 2 2 2 1 1 2 2 2 2 0 0 2 2 0 0 0 0 3 2 2 2 2 2 2 2 0 2 2 2 0 2 3 0 3 3 3 0 0 3 3 0 3 3 3 0 2 0 1 2 0 2 2 2 0 1 2 2 2 2 0 1 0 0 2 0 2 2 2 0 2 2 0 2 2 0 0 3 0 0 3 5 2 2 0 0 1 1 1 1 1 1 1 0 1 1 0 1 1 2 0 2 2 2 0 0 3 0 0 0 0 2 1 0 3 3 3 0 0 0 0 2 2 2 2 0 2 2 2 2 2 2 2 2 3 3 3 3 2 1 1 1 2 0 0 2 2 0 0 0 0 1 2 2 2 2 2 2 2 0 2 2 2 0 3 1 0 1 1 2 0 0 2 2 0 2 2 2 0 1 1 1 1 0 3 3 3 0 3 3 0 3 3 0 3 0 0 2 0 2 2 2 0 3 3 0 3 0 0 0 2 2 0 2 5 2 2 0 0 2 2 2 2 2 2 2 0 2 2 0 3 3 3 0 3 2 2 0 0 3 0 0 0 0 1 2 0 0 2 2 0 0 0 0 2 2 1 1 0 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 3 2 0 0 2 2 0 0 0 0 2 3 3 3 3 3 3 0 0 2 2 1 0 1 3 0 2 2 2 0 0 2 2 0 2 2 3 0 2 2 2 2 0 2 2 2 0 2 2 1 1 2 0 2 0 0 1 0 3 0 3 0 2 0 0 2 1 0 0 3 3 0 2 5 2 2 0 0 2 2 2 2 2 2 2 0 2 2 0 3 3 3 0 2 2 2 0 0 2 0 0 0 0 2 2 0 1 2 1 0 0 0 0 1 1 2 2 0 1 1 1 1 1 1 1 1 0 1 1 2 2 3 3 2 2 0 0 0 1 0 0 0 0 1 2 0 2 2 0 3 3 0 3 3 3 0 3 1 0 1 1 2 0 0 0 2 0 2 2 2 0 2 0 3 3 0 1 1 0 0 3 3 2 2 2 0 2 0 0 2 0 2 0 2 0 2 2 0 2 2 0 0 1 1 0 2 5 2 2 0 0 2 2 2 1 0 1 2 0 2 2 0 3 2 2 0 2 2 2 0 0 1 0 0 0 0 1 2 0 2 1 1 0 0 0 0 1 2 3 3 3 3 3 2 2 2 2 2 2 2 2 3 3 2 2 2 1 2 0 0 1 1 0 0 0 0 1 3 0 2 2 2 2 2 0 2 2 2 0 2 1 0 2 2 2 0 0 0 3 0 3 3 3 0 3 3 0 2 0 1 1 1 0 1 1 3 0 3 0 3 0 0 3 0 1 0 2 0 1 2 0 3 3 0 0 2 2 0 3 1 1 1 0 0 1 1 1 1 2 2 3 0 2 2 0 3 3 3 0 3 3 3 0 0 1 0 0 0 0 1 1 0 2 2 2 0 0 0 0 1 1 2 2 0 3 3 3 3 3 3 3 2 2 2 2 2 3 3 3 2 2 0 0 2 0 0 0 0 0 3 2 2 1 1 1 1 1 0 1 1 1 0 2 1 0 1 1 1 0 0 2 2 0 2 2 2 0 2 2 2 3 0 1 1 1 0 1 2 3 0 3 0 3 0 0 3 0 2 2 2 0 2 2 0 3 3 0 0 2 2 0 1 1 1 1 0 0 1 1 2 2 2 2 2 0 1 2 0 1 1 1 0 1 1 1 0 0 2 0 0 0 0 0 2 0 3 3 3 0 0 0 0 1 1 1 1 0 3 3 3 3 3 3 3 3 2 2 2 2 3 2 2 2 2 0 0 2 2 0 0 0 0 1 3 3 3 3 3 3 3 0 3 2 2 0 2 3 0 3 2 2 0 0 2 2 0 2 2 2 0 1 1 0 2 0 3 3 2 0 2 2 1 0 1 0 1 0 0 1 0 2 0 2 0 2 2 0 3 3 0 0 2 2 0 2 5 2 2 0 0 2 0 2 2 0 2 2 0 1 1 0 2 1 1 0 1 1 1 0 0 2 0 0 0 0 0 2 0 2 1 1 0 0 0 0 1 2 2 2 3 3 3 3 3 3 2 2 2 2 2 1 1 1 2 2 2 2 0 0 2 2 0 0 0 0 2 2 2 2 2 0 2 2 0 2 2 3 0 3 2 0 2 1 2 0 0 2 2 0 2 2 2 0 2 2 2 2 0 2 2 2 0 2 2 2 2 2 0 1 0 0 2 0 2 2 2 0 2 2 0 3 2 0 0 2 0 0 1 5 2 1 0 0 1 1 2 2 2 2 2 0 2 2 0 1 1 1 0 1 1 1 0 0 2 0 0 0 0 3 2 0 2 2 3 0 0 0 0 2 2 1 1 0 1 1 1 1 1 1 1 1 1 1 3 3 2 2 2 2 3 0 0 2 2 0 0 0 0 2 3 3 2 2 2 2 2 0 2 2 2 0 2 3 0 3 3 3 0 0 3 3 0 2 2 2 0 1 3 3 3 0 2 2 1 0 2 2 3 3 3 0 3 0 0 2 0 3 0 3 0 2 2 0 2 2 0 0 3 3 0 2 5 2 2 0 0 2 2 2 2 2 2 2 0 2 2 0 2 2 2 0 2 2 2 0 0 2 0 0 0 0 3 3 0 2 2 2 0 0 0 0 2 1 1 1 0 2 2 2 2 2 2 2 2 1 1 1 2 2 2 1 1 2 0 0 2 3 0 0 0 0 2 2 2 2 2 2 2 2 0 3 3 0 0 3 2 0 2 2 1 0 0 1 1 0 1 1 1 0 1 2 2 2 0 2 2 1 0 2 2 1 1 1 0 1 0 0 2 0 2 0 2 0 2 3 0 3 3 0 0 2 2 0 3 5 2 2 0 0 2 2 2 2 2 2 2 0 3 3 0 2 2 2 0 3 3 3 0 0 2 0 0 0 0 2 3 0 2 2 2 0 0 0 0 1 1 qtl/src/0000755000176000001440000000000012131541647011675 5ustar ripleyusersqtl/src/zeroin.h0000644000176000001440000000143612131541647013360 0ustar ripleyusersdouble Rqtl_zeroin( /* An estimate of the root */ double ax, /* Left border | of the range */ double bx, /* Right border| the root is seeked*/ double (*f)(double x, void *info), /* Function under investigation */ void *info, /* Add'l info passed on to f */ double *Tol, /* Acceptable tolerance */ int *Maxit); /* Max # of iterations */ double Rqtl_zeroin2( /* An estimate of the root */ double ax, /* Left border | of the range */ double bx, /* Right border| the root is seeked*/ double fa, double fb, /* f(a), f(b) */ double (*f)(double x, void *info), /* Function under investigation */ void *info, /* Add'l info passed on to f */ double *Tol, /* Acceptable tolerance */ int *Maxit); /* Max # of iterations */ qtl/src/zeroin.c0000644000176000001440000001572312131541647013357 0ustar ripleyusers/* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 1999, 2001 the R Core Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, a copy is available at * http://www.r-project.org/Licenses/ */ /* from NETLIB c/brent.shar with max.iter, add'l info and convergence details hacked in by Peter Dalgaard */ /* Karl Broman changed R_* to Rqtl_*, to avoid potential conflicts with R */ /************************************************************************* * C math library * function ZEROIN - obtain a function zero within the given range * * Input * double zeroin(ax,bx,f,info,Tol,Maxit) * double ax; Root will be seeked for within * double bx; a range [ax,bx] * double (*f)(double x, void *info); Name of the function whose zero * will be seeked for * void *info; Add'l info passed to f * double *Tol; Acceptable tolerance for the root * value. * May be specified as 0.0 to cause * the program to find the root as * accurate as possible * * int *Maxit; Max. iterations * * * Output * Zeroin returns an estimate for the root with accuracy * 4*EPSILON*abs(x) + tol * *Tol returns estimated precision * *Maxit returns actual # of iterations, or -1 if maxit was * reached without convergence. * * Algorithm * G.Forsythe, M.Malcolm, C.Moler, Computer methods for mathematical * computations. M., Mir, 1980, p.180 of the Russian edition * * The function makes use of the bisection procedure combined with * the linear or quadric inverse interpolation. * At every step program operates on three abscissae - a, b, and c. * b - the last and the best approximation to the root * a - the last but one approximation * c - the last but one or even earlier approximation than a that * 1) |f(b)| <= |f(c)| * 2) f(b) and f(c) have opposite signs, i.e. b and c confine * the root * At every step Zeroin selects one of the two new approximations, the * former being obtained by the bisection procedure and the latter * resulting in the interpolation (if a,b, and c are all different * the quadric interpolation is utilized, otherwise the linear one). * If the latter (i.e. obtained by the interpolation) point is * reasonable (i.e. lies within the current interval [b,c] not being * too close to the boundaries) it is accepted. The bisection result * is used in the other case. Therefore, the range of uncertainty is * ensured to be reduced at least by the factor 1.6 * ************************************************************************ * * NOTE: uniroot() --> do_zeroin2() --- in ../main/optimize.c * ~~~~~~~~~~~~~~~~~~ */ #include #include #include "zeroin.h" #define EPSILON DBL_EPSILON double Rqtl_zeroin( /* An estimate of the root */ double ax, /* Left border | of the range */ double bx, /* Right border| the root is seeked*/ double (*f)(double x, void *info), /* Function under investigation */ void *info, /* Add'l info passed on to f */ double *Tol, /* Acceptable tolerance */ int *Maxit) /* Max # of iterations */ { double fa = (*f)(ax, info); double fb = (*f)(bx, info); return Rqtl_zeroin2(ax, bx, fa, fb, f, info, Tol, Maxit); } /* Rqtl_zeroin2() is faster for "expensive" f(), in those typical cases where * f(ax) and f(bx) are available anyway : */ double Rqtl_zeroin2( /* An estimate of the root */ double ax, /* Left border | of the range */ double bx, /* Right border| the root is seeked*/ double fa, double fb, /* f(a), f(b) */ double (*f)(double x, void *info), /* Function under investigation */ void *info, /* Add'l info passed on to f */ double *Tol, /* Acceptable tolerance */ int *Maxit) /* Max # of iterations */ { double a,b,c, fc; /* Abscissae, descr. see above, f(c) */ double tol; int maxit; a = ax; b = bx; c = a; fc = fa; maxit = *Maxit + 1; tol = * Tol; /* First test if we have found a root at an endpoint */ if(fa == 0.0) { *Tol = 0.0; *Maxit = 0; return a; } if(fb == 0.0) { *Tol = 0.0; *Maxit = 0; return b; } while(maxit--) /* Main iteration loop */ { double prev_step = b-a; /* Distance from the last but one to the last approximation */ double tol_act; /* Actual tolerance */ double p; /* Interpolation step is calcu- */ double q; /* lated in the form p/q; divi- * sion operations is delayed * until the last moment */ double new_step; /* Step at this iteration */ if( fabs(fc) < fabs(fb) ) { /* Swap data for b to be the */ a = b; b = c; c = a; /* best approximation */ fa=fb; fb=fc; fc=fa; } tol_act = 2*EPSILON*fabs(b) + tol/2; new_step = (c-b)/2; if( fabs(new_step) <= tol_act || fb == (double)0 ) { *Maxit -= maxit; *Tol = fabs(c-b); return b; /* Acceptable approx. is found */ } /* Decide if the interpolation can be tried */ if( fabs(prev_step) >= tol_act /* If prev_step was large enough*/ && fabs(fa) > fabs(fb) ) { /* and was in true direction, * Interpolation may be tried */ register double t1,cb,t2; cb = c-b; if( a==c ) { /* If we have only two distinct */ /* points linear interpolation */ t1 = fb/fa; /* can only be applied */ p = cb*t1; q = 1.0 - t1; } else { /* Quadric inverse interpolation*/ q = fa/fc; t1 = fb/fc; t2 = fb/fa; p = t2 * ( cb*q*(q-t1) - (b-a)*(t1-1.0) ); q = (q-1.0) * (t1-1.0) * (t2-1.0); } if( p>(double)0 ) /* p was calculated with the */ q = -q; /* opposite sign; make p positive */ else /* and assign possible minus to */ p = -p; /* q */ if( p < (0.75*cb*q-fabs(tol_act*q)/2) /* If b+p/q falls in [b,c]*/ && p < fabs(prev_step*q/2) ) /* and isn't too large */ new_step = p/q; /* it is accepted * If p/q is too large then the * bisection procedure can * reduce [b,c] range to more * extent */ } if( fabs(new_step) < tol_act) { /* Adjust the step to be not less*/ if( new_step > (double)0 ) /* than tolerance */ new_step = tol_act; else new_step = -tol_act; } a = b; fa = fb; /* Save the previous approx. */ b += new_step; fb = (*f)(b, info); /* Do step to a new approxim. */ if( (fb > 0 && fc > 0) || (fb < 0 && fc < 0) ) { /* Adjust c for it to have a sign opposite to that of b */ c = a; fc = fa; } } /* failed! */ *Tol = fabs(c-b); *Maxit = -1; return b; } qtl/src/vbscan.h0000644000176000001440000000263312131541647013326 0ustar ripleyusers/********************************************************************** * * vbscan.h * * copyright (c) 2001, Karl W Broman * * last modified July, 2001 * first written May, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * * C function for performing QTL mapping with the model * p_g = Pr(pheno unobserved | genotype g) * y | pheno observed, g ~ N(mu_g, sigma) * * Contains: vbscan, R_vbscan * **********************************************************************/ void vbscan(int n_pos, int n_ind, int n_gen, double *genoprob, double *pheno, int *survived, double *lod, int maxit, double tol); void R_vbscan(int *n_pos, int *n_ind, int *n_gen, double *genoprob, double *pheno, int *survived, double *lod, int *maxit, double *tol); /* end of vbscan.h */ qtl/src/vbscan.c0000644000176000001440000001704412131541647013323 0ustar ripleyusers/********************************************************************** * * vbscan.c * * copyright (c) 2001-6, Karl W Broman * * last modified Dec, 2006 * first written May, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * * C function for performing QTL mapping with the model * p_g = Pr(pheno unobserved | genotype g) * y | pheno observed, g ~ N(mu_g, sigma) * * Contains: vbscan, R_vbscan * **********************************************************************/ #include #include #include #include "R.h" #include "Rmath.h" #include #include "vbscan.h" #include "util.h" void vbscan(int n_pos, int n_ind, int n_gen, double *genoprob, double *pheno, int *survived, double *lod, int maxit, double tol) { double ***Genoprob, **w; int i, j, k, p, flag, ncol; double *mu, sig=0.0, *pi, *mu_prev, sig_prev, *pi_prev; double mu0, sig0, pi0, q0, loglik0; double s1, s2, s3; ncol = 3; /* set up matrix for the genoprob */ reorg_genoprob(n_ind, n_pos, n_gen, genoprob, &Genoprob); /* allocate space for things */ allocate_dmatrix(n_gen, n_ind, &w); allocate_double(n_gen, &mu); allocate_double(n_gen, &pi); allocate_double(n_gen, &mu_prev); allocate_double(n_gen, &pi_prev); /* estimates under null model */ pi0 = mu0 = sig0 = 0.0; for(i=0; itol*(sig_prev+tol*100.0)) flag=1; for(j=0; jtol*(fabs(mu_prev[j])+tol*100.0)) { flag=1; break; } if(fabs(pi[j]-pi_prev[j])>tol*(pi_prev[j]+tol*100.0)) { flag=1; break; } } if(flag==0) break; sig_prev = sig; for(j=0; jtol*(sig_prev+tol*100.0)) flag=1; for(j=0; jtol*(fabs(mu_prev[j])+tol*100.0)) { flag=1; break; } if(flag==0) break; sig_prev = sig; for(j=0; jtol*(pi_prev[j]+tol*100.0)) { flag=1; break; } if(flag==0) break; for(j=0; j (b)) ? (a) : (b)) #endif /********************************************************************** * * addlog * * Calculate addlog(a,b) = log[exp(a) + exp(b)] * * This makes use of the function log1p(x) = log(1+x) provided * in R's math library. * **********************************************************************/ double addlog(double a, double b); /********************************************************************** * * subtrlog * * Calculate subtrlog(a,b) = log[exp(a) - exp(b)] * * This makes use of the function log1p(x) = log(1+x) provided * in R's math library. * **********************************************************************/ double subtrlog(double a, double b); /********************************************************************** * * reorg_geno * * Reorganize the genotype data so that it is a doubly indexed array * rather than a single long vector * * Afterwards, geno indexed like Geno[mar][ind] * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void reorg_geno(int n_ind, int n_pos, int *geno, int ***Geno); /********************************************************************** * * reorg_genoprob * * Reorganize the genotype probability data so that it is a triply * indexed array rather than a single long vector * * Afterwards, genoprob indexed like Genoprob[gen][mar][ind] * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void reorg_genoprob(int n_ind, int n_pos, int n_gen, double *genoprob, double ****Genoprob); /********************************************************************** * * reorg_pairprob * * Reorganize the joint genotype probabilities so that they form a * quintuply indexed array rather than a single long vector * * Afterwards, pairprob indexed like * Pairprob[gen1][gen2][pos1][pos2][ind] with pos2 > pos1 * * You *must* refer to cases with pos2 > pos1, as cases with * pos2 <= pos1 point off into the ether. * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void reorg_pairprob(int n_ind, int n_pos, int n_gen, double *pairprob, double ******Pairprob); /********************************************************************** * * allocate_alpha * * Allocate space for alpha and beta matrices * * Afterwards, indexed like alpha[gen][mar] * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void allocate_alpha(int n_pos, int n_gen, double ***alpha); /********************************************************************** * * reorg_draws * * Reorganize the simulated genotypes so that it is a triply * indexed array rather than a single long vector * * Afterwards, draws indexed like Draws[repl][mar][ind] * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void reorg_draws(int n_ind, int n_pos, int n_draws, int *draws, int ****Draws); /********************************************************************** * * allocate_double * * Allocate space for a vector of doubles * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void allocate_double(int n, double **vector); /********************************************************************** * * allocate_int * * Allocate space for a vector of ints * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void allocate_int(int n, int **vector); /********************************************************************** * * allocate_uint * * Allocate space for a vector of unsigned ints * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void allocate_uint(int n, unsigned int **vector); /********************************************************************** * * allocate_dmatrix * * Allocate space for a matrix of doubles * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void allocate_dmatrix(int n_row, int n_col, double ***matrix); /********************************************************************** * * allocate_imatrix * * Allocate space for a matrix of ints * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void allocate_imatrix(int n_row, int n_col, int ***matrix); /********************************************************************** * * sample_int * * Make a single draw from (1, ..., n) with probs (p_0, ..., p_(n-1)) * **********************************************************************/ int sample_int(int n, double *p); /********************************************************************** * * reorg_errlod * * Just like reorg_geno(), only for a matrix of doubles. * * Afterwards, errlod indexed like Errlod[mar][ind] * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void reorg_errlod(int n_ind, int n_mar, double *errlod, double ***Errlod); /********************************************************************** * * double_permute * * This function randomly permutes a vector of doubles * * Input: * * array = vector of doubles; on output, it contains a random * permutation of the input vector * * len = length of the vector * **********************************************************************/ void double_permute(double *array, int len); /********************************************************************** * * int_permute * * This function randomly permutes a vector of int * * Input: * * array = vector of int; on output, it contains a random * permutation of the input vector * * len = length of the vector * **********************************************************************/ void int_permute(int *array, int len); /********************************************************************** * * random_int * * Generates a random int integer between "low" and "high", inclusive. * * Input: * * low * * high * **********************************************************************/ int random_int(int low, int high); /********************************************************************** * wtaverage * calculate the weight average of the LOD scores *********************************************************************/ double wtaverage(double *LOD, int n_draws); /********************************************************************** * comparegeno * * Count number of matches in the genotypes for all pairs of * individuals. * * Input: * **********************************************************************/ void comparegeno(int **Geno, int n_ind, int n_mar, int **N_Match, int **N_Missing); /********************************************************************** * R_comparegeno: wrapper for R **********************************************************************/ void R_comparegeno(int *geno, int *n_ind, int *n_mar, int *n_match, int *n_missing); void R_locate_xo(int *n_ind, int *n_mar, int *type, int *geno, double *map, double *location, int *nseen, int *ileft, int *iright, double *left, double *right, int *gleft, int *gright, int *ntyped, int *full_info); /* Note: type ==0 for backcross and ==1 for intercross */ void locate_xo(int n_ind, int n_mar, int type, int **Geno, double *map, double **Location, int *nseen, int **iLeft, int **iRight, double **Left, double **Right, int **gLeft, int **gRight, int **nTyped, int full_info); /* multiply two matrices - I'm using dgemm from lapack here */ void matmult(double *result, double *a, int nrowa, int ncola, double *b, int ncolb); /* multiply two matrices - I'm using dgemm from lapack here */ /* void matmult2(double *result, double *a, int nrowa, int ncola, double *b, int ncolb); */ /********************************************************************** * * expand_col2drop * * Used in scantwo_1chr_em for the X chromosome, to figure out * what columns to drop in the presence of covariates when certain * genotype columns must be dropped * **********************************************************************/ void expand_col2drop(int n_gen, int n_addcov, int n_intcov, int *col2drop, int *allcol2drop); void dropcol_xpx(int *n_col, int *col2drop, double *xpx); void dropcol_xpy(int n_col, int *col2drop, double *xpy); void dropcol_x(int *n_col, int n_row, int *col2drop, double *x); /********************************************************************** * * reviseMWril Revise genotypes for 4- or 8-way RIL * to form encoding the founders' genotypes * * n_ril Number of RILs to simulate * n_mar Number of markers * n_str Number of founder strains * * Parents SNP data for the founder strains [dim n_mar x n_str] * * Geno On entry, the detailed genotype data; on exit, the * SNP data written bitwise. [dim n_ril x n_mar] * * Crosses The crosses [n_ril x n_str] * **********************************************************************/ void reviseMWril(int n_ril, int n_mar, int n_str, int **Parents, int **Geno, int **Crosses, int missingval); /* wrapper for calling reviseMWril from R */ void R_reviseMWril(int *n_ril, int *n_mar, int *n_str, int *parents, int *geno, int *crosses, int *missingval); /* wrapper for calcPermPval */ void R_calcPermPval(double *peaks, int *nc_peaks, int *nr_peaks, double *perms, int *n_perms, double *pval); /* calculate permutation p-values for summary.scanone() */ void calcPermPval(double **Peaks, int nc_peaks, int nr_peaks, double **Perms, int n_perms, double **Pval); #ifdef __cplusplus } #endif #endif /* end of util.h */ qtl/src/util.c0000644000176000001440000006004712131541647013025 0ustar ripleyusers/********************************************************************** * * util.c * * copyright (c) 2001-2012, Karl W Broman and Hao Wu * * This file written mostly by Karl Broman with some additions * from Hao Wu. * * last modified Nov, 2012 * first written Feb, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These are utility functions, mostly for the HMM engine. * * Other functions: addlog, subtrlog, reorg_geno, reorg_genoprob, * reorg_pairprob, allocate_int * allocate_alpha, reorg_draws, allocate_double, * sample_int, allocate_imatrix, allocate_dmatrix * reorg_errlod, double_permute, int_permute, * random_int * wtaverage, comparegeno, R_comparegeno, * R_locate_xo, locate_xo, matmult, expand_col2drop * dropcol_xpx, dropcol_xpy, dropcol_x, * reviseMWril, R_reviseMWril, R_calcPermPval, * calcPermPval * **********************************************************************/ #include /* #include */ #include "util.h" #define THRESH 200.0 /********************************************************************** * * addlog * * Calculate addlog(a,b) = log[exp(a) + exp(b)] * * This makes use of the function log1p(x) = log(1+x) provided * in R's math library. * **********************************************************************/ double addlog(double a, double b) { if(b > a + THRESH) return(b); else if(a > b + THRESH) return(a); else return(a + log1p(exp(b-a))); } /********************************************************************** * * subtrlog * * Calculate subtrlog(a,b) = log[exp(a) - exp(b)] * * This makes use of the function log1p(x) = log(1+x) provided * in R's math library. * **********************************************************************/ double subtrlog(double a, double b) { if(a > b + THRESH) return(a); else return(a + log1p(-exp(b-a))); } /********************************************************************** * * reorg_geno * * Reorganize the genotype data so that it is a doubly indexed array * rather than a single long vector * * Afterwards, geno indexed like Geno[mar][ind] * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void reorg_geno(int n_ind, int n_pos, int *geno, int ***Geno) { int i; *Geno = (int **)R_alloc(n_pos, sizeof(int *)); (*Geno)[0] = geno; for(i=1; i< n_pos; i++) (*Geno)[i] = (*Geno)[i-1] + n_ind; } /********************************************************************** * * reorg_genoprob * * Reorganize the genotype probability data so that it is a triply * indexed array rather than a single long vector * * Afterwards, genoprob indexed like Genoprob[gen][mar][ind] * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void reorg_genoprob(int n_ind, int n_pos, int n_gen, double *genoprob, double ****Genoprob) { int i, j; double **a; *Genoprob = (double ***)R_alloc(n_gen, sizeof(double **)); a = (double **)R_alloc(n_pos*n_gen, sizeof(double *)); (*Genoprob)[0] = a; for(i=1; i< n_gen; i++) (*Genoprob)[i] = (*Genoprob)[i-1]+n_pos; for(i=0; i pos1 * * You *must* refer to cases with pos2 > pos1, as cases with * pos2 <= pos1 point off into the ether. * * Allocation done by R_alloc, so that R does the cleanup. * **********************************************************************/ void reorg_pairprob(int n_ind, int n_pos, int n_gen, double *pairprob, double ******Pairprob) { int i, j, k, s, n_pairs; double ****ptr1, ***ptr2, **ptr3; /* note: n_pos must be at least 2 */ n_pairs = n_pos*(n_pos-1)/2; *Pairprob = (double *****)R_alloc(n_gen, sizeof(double ****)); ptr1 = (double ****)R_alloc(n_gen*n_gen, sizeof(double ***)); (*Pairprob)[0] = ptr1; for(i=1; i 1) { for(k=0,sums=0.0; k= Peaks[i][j]) count++; Pval[i][j] = (double)count/(double)n_perms; } } } /* end of util.c */ qtl/src/test_bcsft.c0000644000176000001440000001117512131541647014206 0ustar ripleyusers/********************************************************************** * * hmm_bcsft.c * * copyright (c) 2001-9, Karl W Broman * modified from hmm_f2.c by Brian S Yandell and Laura M Shannon (c) 2010 * * modified Jun, 2010 * last modified Apr, 2009 * first written Feb, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * Contains: init_bcsft, emit_bcsft, step_bcsft, init_bcsftb, emit_bcsftb, step_bcsftb, * calc_genoprob_bcsft, calc_genoprob_special_bcsft, sim_geno_bcsft, est_map_bcsft, * argmax_geno_bcsft, errorlod_bcsft, calc_errorlod_bcsft, nrec2_bcsft, * logprec_bcsft, est_rf_bcsft, calc_pairprob_bcsft, marker_loglik_bcsft * * These are the init, emit, and step functions plus * all of the hmm wrappers for the F2 intercross. * * Genotype codes: 0=AA; 1=AB; 2=BB * Phenotype codes: 0=missing; 1=AA; 2=AB; 3=BB; 4=not BB; 5=not AA * **********************************************************************/ #include #include #include #include #include #include #include "hmm_main.h" #include "hmm_bcsft.h" #include "hmm_f2.h" #include "hmm_bc.h" /* ref: Jiang and Zeng (1997 Genetics) */ void prob_bcsft(double rf, int s, int t, double *transpr); void count_bcsft(double rf, int s, int t, double *transct); void expect_bcsft(double rf, int s, int t, double *transexp); void step_wrap(int *gen1, int *gen2, double *rf, int *cross_scheme, double *ret, double *transpr) { prob_bcsft(*rf, cross_scheme[0], cross_scheme[1], transpr); ret[0] = step_bcsftb(*gen1, *gen2, *rf, *rf, cross_scheme); ret[1] = step_bcsft(*gen1, *gen2, *rf, *rf, cross_scheme); ret[2] = step_bc(*gen1, *gen2, *rf, *rf, cross_scheme); ret[3] = step_f2b(*gen1, *gen2, *rf, *rf, cross_scheme); ret[4] = step_f2(*gen1, *gen2, *rf, *rf, cross_scheme); return; } void init_wrap(int *gen, int *cross_scheme, double *ret) { ret[0] = init_bcsftb(*gen, cross_scheme); ret[1] = init_f2b(*gen, cross_scheme); if(*gen < 4) { if(*gen < 4 || cross_scheme[1] > 0) ret[2] = init_bcsft(*gen, cross_scheme); ret[3] = init_f2(*gen, cross_scheme); if(*gen < 3) ret[4] = init_bc(*gen, cross_scheme); } return; } void nrec_wrap(int *gen1, int *gen2, double *rf, int *cross_scheme, double *ret) { ret[0] = nrec_bcsftb(*gen1, *gen2, *rf, cross_scheme); ret[1] = nrec_f2b(*gen1, *gen2, *rf, cross_scheme); if(*gen1 < 3 && *gen2 < 3) ret[2] = nrec_bc(*gen1, *gen2, *rf, cross_scheme); return; } void rf_wrap(int *gen1, int *gen2, double *rf, int *cross_scheme, double *ret) { ret[0] = nrec2_bcsft(*gen1, *gen2, *rf, cross_scheme); ret[1] = nrec2_f2(*gen1, *gen2, *rf, cross_scheme); ret[2] = logprec_bcsft(*gen1, *gen2, *rf, cross_scheme); ret[3] = logprec_f2(*gen1, *gen2, *rf, cross_scheme); return; } void bcsft_wrap(double *rf, int *cross_scheme, double *init, double *emit, double *step, double *stepb, double *nrec, double *transpr, double *transexp) { int gen1,gen2; static double error_prob = 0.0001; prob_bcsft(*rf, cross_scheme[0], cross_scheme[1], transpr); expect_bcsft(*rf, cross_scheme[0], cross_scheme[1], transexp); for(gen1=0; gen1<4; gen1++) { if(gen1 < 3) { init[gen1] = init_bcsft(gen1+1, cross_scheme); init[gen1+3] = init_bc(gen1+1, cross_scheme); } for(gen2=0; gen2<3; gen2++) { if((gen1 < 3) && (gen2 < 3)) { emit[gen1 + 3 * gen2] = emit_bcsft(gen1+1, gen2+1, error_prob, cross_scheme); emit[gen1 + 3 * gen2 + 9] = emit_bc(gen1+1, gen2+1, error_prob, cross_scheme); step[gen1 + 3 * gen2] = step_bcsft(gen1+1, gen2+1, *rf, *rf, cross_scheme); step[gen1 + 3 * gen2 + 9] = step_bc(gen1+1, gen2+1, *rf, *rf, cross_scheme); } nrec[gen1 + 4 * gen2] = nrec_bcsftb(gen1+1, gen2+1, *rf, cross_scheme); nrec[gen1 + 4 * gen2 + 16] = nrec_bc(gen1+1, gen2+1, *rf, cross_scheme); stepb[gen1 + 4 * gen2] = step_bcsftb(gen1+1, gen2+1, *rf, *rf, cross_scheme); stepb[gen1 + 4 * gen2 + 16] = step_bc(gen1+1, gen2+1, *rf, *rf, cross_scheme); } } return; } /* end of test_bcsft.c */ qtl/src/summary_scantwo.h0000644000176000001440000001013512131541647015301 0ustar ripleyusers/********************************************************************** * * summary_scantwo.h * * copyright (c) 2006, Karl W Broman * * last modified Oct, 2006 * first written Oct, 2006 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These constitute a subroutine for getting the maximum LOD scores * for each pair of chromosomes in scantwo output. * * Contains: R_summary_scantwo, summary_scantwo * **********************************************************************/ /********************************************************************** * * R_summary_scantwo * * Wrapper for call from R * **********************************************************************/ void R_summary_scantwo(int *n_pos, int *n_phe, double *lod, int *n_chr, int *chr, double *pos, int *xchr, double *scanoneX, int *n_chrpair, int *chr1, int *chr2, int *chrpair, double *pos1_jnt, double *pos2_jnt, double *pos1_add, double *pos2_add, double *pos1_int, double *pos2_int, double *jnt_lod_full, double *jnt_lod_add, double *add_lod_full, double *add_lod_add, double *int_lod_full, double *int_lod_add, double *lod_1qtl); /********************************************************************** * * summary_scantwo * * Function to pull out the major bits from scantwo output * * n_pos: Total number of positions * n_phe: Number of phenotype columns * Lod: Array of LOD scores indexed as [phe][pos2][pos1] * diagonal = scanone results; upper.tri = add've LOD; lower = full * n_chr Number of distinct chromosomes * chr Index of chromosomes; length n_pos, taking values in 1..n_chr * pos cM positions; length n_pos * xchr Index of xchr; length n_chr; 0=autosome, 1=X chromosome * ScanoneX special X scanone; matrix indexed as [phe][pos] * * n_chrpair Number of pairs of chromosomes * Chrpair Matrix giving chrpair index for a pair of chromosomes * Pos1_add, Pos2_add On output, positions of maximum add've LOD * Matrices indexed as [phe][chrpair] * Pos1_full, Pos2_full On output, positions of maximum joint LOD * Matrices indexed as [phe][chrpair] * Pos1_int, Pos2_int On output, positions of maximum int've LOD * Matrices indexed as [phe][chrpair] * JNT_lod_* On output, joint and add've LOD at pos'ns with * maximum joint LOD; matrices indexed as [phe][chrpair] * ADD_lod_* On output, joint and add've LOD at pos'ns with * maximum add've LOD; matrices indexed as [phe][chrpair] * INT_lod_* On output, joint and add've LOD at pos'ns with * maximum int've LOD; matrices indexed as [phe][chrpair] * LOD_1qtl On output, maximum 1-QTL LOD for each pair of chr * (selected from either scanone or scanoneX * **********************************************************************/ void summary_scantwo(int n_pos, int n_phe, double ***Lod, int n_chr, int *chr, double *pos, int *xchr, double **ScanoneX, int n_chrpair, int **Chrpair, double **Pos1_jnt, double **Pos2_jnt, double **Pos1_add, double **Pos2_add, double **Pos1_int, double **Pos2_int, double **JNT_lod_full, double **JNT_lod_add, double **ADD_lod_full, double **ADD_lod_add, double **INT_lod_full, double **INT_lod_add, double **LOD_1qtl); /* end of summary_scantwo.h */ qtl/src/summary_scantwo.c0000644000176000001440000002034012131541647015273 0ustar ripleyusers/********************************************************************** * * summary_scantwo.c * * copyright (c) 2006, Karl W Broman * * last modified Dec, 2006 * first written Oct, 2006 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These constitute a subroutine for getting the maximum LOD scores * for each pair of chromosomes in scantwo output. * * Contains: R_summary_scantwo, summary_scantwo * **********************************************************************/ #include #include #include #include #include #include #include #include "util.h" #include "summary_scantwo.h" /********************************************************************** * * R_summary_scantwo * * Wrapper for call from R * **********************************************************************/ void R_summary_scantwo(int *n_pos, int *n_phe, double *lod, int *n_chr, int *chr, double *pos, int *xchr, double *scanoneX, int *n_chrpair, int *chr1, int *chr2, int *chrpair, double *pos1_jnt, double *pos2_jnt, double *pos1_add, double *pos2_add, double *pos1_int, double *pos2_int, double *jnt_lod_full, double *jnt_lod_add, double *add_lod_full, double *add_lod_add, double *int_lod_full, double *int_lod_add, double *lod_1qtl) { double ***Lod, **ScanoneX; double **Pos1_jnt, **Pos2_jnt; double **Pos1_add, **Pos2_add; double **Pos1_int, **Pos2_int; double **JNT_lod_full, **JNT_lod_add; double **ADD_lod_full, **ADD_lod_add; double **INT_lod_full, **INT_lod_add; double **LOD_1qtl; int i, j, k, **Chrpair; *n_chrpair = *n_chr*(*n_chr+1)/2; /* re-organize matrices */ reorg_genoprob(*n_pos, *n_pos, *n_phe, lod, &Lod); reorg_errlod(*n_chrpair, *n_phe, pos1_jnt, &Pos1_jnt); reorg_errlod(*n_chrpair, *n_phe, pos2_jnt, &Pos2_jnt); reorg_errlod(*n_chrpair, *n_phe, pos1_add, &Pos1_add); reorg_errlod(*n_chrpair, *n_phe, pos2_add, &Pos2_add); reorg_errlod(*n_chrpair, *n_phe, pos1_int, &Pos1_int); reorg_errlod(*n_chrpair, *n_phe, pos2_int, &Pos2_int); reorg_errlod(*n_chrpair, *n_phe, jnt_lod_full, &JNT_lod_full); reorg_errlod(*n_chrpair, *n_phe, jnt_lod_add, &JNT_lod_add); reorg_errlod(*n_chrpair, *n_phe, add_lod_full, &ADD_lod_full); reorg_errlod(*n_chrpair, *n_phe, add_lod_add, &ADD_lod_add); reorg_errlod(*n_chrpair, *n_phe, int_lod_full, &INT_lod_full); reorg_errlod(*n_chrpair, *n_phe, int_lod_add, &INT_lod_add); reorg_errlod(*n_chrpair, *n_phe, lod_1qtl, &LOD_1qtl); reorg_errlod(*n_pos, *n_phe, scanoneX, &ScanoneX); reorg_geno(*n_chr, *n_chr, chrpair, &Chrpair); for(i=0, k=0; i<*n_chr; i++) { for(j=i; j<*n_chr; j++, k++) { chr1[k] = i; chr2[k] = j; Chrpair[j][i] = Chrpair[i][j] = k; } } summary_scantwo(*n_pos, *n_phe, Lod, *n_chr, chr, pos, xchr, ScanoneX, *n_chrpair, Chrpair, Pos1_jnt, Pos2_jnt, Pos1_add, Pos2_add, Pos1_int, Pos2_int, JNT_lod_full, JNT_lod_add, ADD_lod_full, ADD_lod_add, INT_lod_full, INT_lod_add, LOD_1qtl); } /********************************************************************** * * summary_scantwo * * Function to pull out the major bits from scantwo output * * n_pos: Total number of positions * n_phe: Number of phenotype columns * Lod: Array of LOD scores indexed as [phe][pos2][pos1] * diagonal = scanone results; upper.tri = add've LOD; lower = full * n_chr Number of distinct chromosomes * chr Index of chromosomes; length n_pos, taking values in 1..n_chr * pos cM positions; length n_pos * xchr Index of xchr; length n_chr; 0=autosome, 1=X chromosome * ScanoneX special X scanone; matrix indexed as [phe][pos] * * n_chrpair Number of pairs of chromosomes * Chrpair Matrix giving chrpair index for a pair of chromosomes * Pos1_jnt, Pos2_jnt On output, positions of maximum joint LOD * Matrices indexed as [phe][chrpair] * Pos1_add, Pos2_add On output, positions of maximum add've LOD * Matrices indexed as [phe][chrpair] * Pos1_int, Pos2_int On output, positions of maximum int've LOD * Matrices indexed as [phe][chrpair] * JNT_lod_* On output, joint and add've LOD at pos'ns with * maximum joint LOD; matrices indexed as [phe][chrpair] * ADD_lod_* On output, joint and add've LOD at pos'ns with * maximum add've LOD; matrices indexed as [phe][chrpair] * INT_lod_* On output, joint and add've LOD at pos'ns with * maximum int've LOD; matrices indexed as [phe][chrpair] * LOD_1qtl On output, maximum 1-QTL LOD for each pair of chr * (selected from either scanone or scanoneX * **********************************************************************/ void summary_scantwo(int n_pos, int n_phe, double ***Lod, int n_chr, int *chr, double *pos, int *xchr, double **ScanoneX, int n_chrpair, int **Chrpair, double **Pos1_jnt, double **Pos2_jnt, double **Pos1_add, double **Pos2_add, double **Pos1_int, double **Pos2_int, double **JNT_lod_full, double **JNT_lod_add, double **ADD_lod_full, double **ADD_lod_add, double **INT_lod_full, double **INT_lod_add, double **LOD_1qtl) { int i, j, k, c1, c2, thepair; double *maxone, *maxoneX; allocate_double(n_chr, &maxone); allocate_double(n_chr, &maxoneX); for(i=0; i maxone[chr[j]-1]) maxone[chr[j]-1] = Lod[i][j][j]; if(ScanoneX[i][j] > maxoneX[chr[j]-1]) maxoneX[chr[j]-1] = ScanoneX[i][j]; } /* zero out the matrices for the maximum LOD scores */ for(j=0; j JNT_lod_full[i][thepair]) { JNT_lod_full[i][thepair] = Lod[i][j][k]; JNT_lod_add[i][thepair] = Lod[i][k][j]; Pos1_jnt[i][thepair] = pos[j]; Pos2_jnt[i][thepair] = pos[k]; } if(Lod[i][k][j] > ADD_lod_add[i][thepair]) { ADD_lod_add[i][thepair] = Lod[i][k][j]; ADD_lod_full[i][thepair] = Lod[i][j][k]; Pos1_add[i][thepair] = pos[j]; Pos2_add[i][thepair] = pos[k]; } if(Lod[i][j][k] - Lod[i][k][j] > INT_lod_full[i][thepair] - INT_lod_add[i][thepair]) { INT_lod_full[i][thepair] = Lod[i][j][k]; INT_lod_add[i][thepair] = Lod[i][k][j]; Pos1_int[i][thepair] = pos[j]; Pos2_int[i][thepair] = pos[k]; } } } /* pull out biggest single-QTL LOD scores */ for(j=0; j maxoneX[k]) LOD_1qtl[i][thepair] = maxoneX[j]; else LOD_1qtl[i][thepair] = maxoneX[k]; } else { if(maxone[j] > maxone[k]) LOD_1qtl[i][thepair] = maxone[j]; else LOD_1qtl[i][thepair] = maxone[k]; } } } } /* end loop over phenotype columns */ } /* end of summary_scantwo.c */ qtl/src/standalone.h0000644000176000001440000000253112131541647014177 0ustar ripleyusers/********************************************************************** * * standalone.h * * Remap R methods for standalone/biolib version of R/qtl * * copyright (c) 2009 Ritsert Jansen, Danny Arends, Pjotr Prins and Karl W Broman * * last modified Apr, 2009 * first written Mrt, 2009 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * Defines if we build a Rpackage or a standalone app, and any other functions etc we want to have changed AFTER reading all the libraries & dependancies * Contains: * **********************************************************************/ #ifndef __STANDALONE_HPP #define __STANDALONE_HPP // #define STANDALONE - should be defined in the build system #ifdef STANDALONE #undef Rprintf #define Rprintf(args...) printf(args) #endif #endif // __STANDALONE_HPP qtl/src/stahl_mf.h0000644000176000001440000000764112131541647013653 0ustar ripleyusers/********************************************************************** * * stahl_mf.h * * copyright (c) 2006-7, Karl W Broman * * last modified Mar, 2007 * first written Aug, 2006 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * Contains: mf_stahl, R_mf_stahl, imf_stahl, R_imf_stahl, * imf_stahl_sub * * These are functions for the calculating the map function for * the Stahl model for crossover interference (with chiasmata * coming from two mechanisms: one following a chi-square model * and one following a no interference model). * m = interference parameter in the chi-square model (m=0 == NI) * p = proportion of chiasmata from the NI model (p=1 == NI) * **********************************************************************/ /* structure used by imf_stahl and imf_stahl_sub */ struct imf_stahl_data { double r; int m; double p; }; /*********************************************************************** * R_mf_stahl: wrapper for R * * n_d = length of vector d * d = genetic distances (in Morgans) * m = interference parameter (non-negative integer) * p = proportion of chiasmata from the NI mechanism (double in [0,1]) * result = vector of length n_d to contain the results **********************************************************************/ void R_mf_stahl(int *n_d, double *d, int *m, double *p, double *result); /********************************************************************** * mf_stahl: map function for Stahl model * * d = genetic distances (in cM) * m = interference parameter (non-negative integer) * p = proportion of chiasmata from the NI mechanism (double in [0,1]) **********************************************************************/ double mf_stahl(double d, int m, double p); /********************************************************************** * R_imf_stahl: wrapper for R * * n_r = length of vector r * r = recombination fractions * m = interference parameter (non-negative integer) * p = proportion of chiasmata from the NI mechanism (double in [0,1]) * result = vector of length n_r to contain the results * tol = tolerance for convergence * maxit = number of interations **********************************************************************/ void R_imf_stahl(int *n_r, double *r, int *m, double *p, double *result, double *tol, int *maxit); /********************************************************************** * imf_stahl: inverse map function for chi-square model * * r = recombination fraction * m = interference parameter (non-negative integer) * p = proportion of chiasmata from the NI mechanism (double in [0,1]) * tol = tolerance for convergence * maxit = number of interations **********************************************************************/ double imf_stahl(double r, int m, double p, double tol, int maxit); /********************************************************************** * imf_stahl_sub: utility function for imf_stahl * * r = recombination fraction * m = interference parameter (non-negative integer) * p = proportion of chiasmata from the NI mechanism (double in [0,1]) * tol = tolerance for convergence * maxit = number of interations **********************************************************************/ double imf_stahl_sub(double d, struct imf_stahl_data *info); /* end of stahl_mf.h */ qtl/src/stahl_mf.c0000644000176000001440000001136612131541647013645 0ustar ripleyusers/********************************************************************** * * stahl_mf.c * * copyright (c) 2006-2012, Karl W Broman * * last modified Aug, 2012 * first written Aug, 2006 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * Contains: mf_stahl, R_mf_stahl, imf_stahl, R_imf_stahl, * imf_stahl_sub * * These are functions for the calculating the map function for * the Stahl model for crossover interference (with chiasmata * coming from two mechanisms: one following a chi-square model * and one following a no interference model). * m = interference parameter in the chi-square model (m=0 == NI) * p = proportion of chiasmata from the NI model (p=1 == NI) * **********************************************************************/ #include #include #include #include #include #include #include "util.h" #include "stahl_mf.h" #include "zeroin.h" /*********************************************************************** * R_mf_stahl: wrapper for R * * n_d = length of vector d * d = genetic distances (in Morgans) * m = interference parameter (non-negative integer) * p = proportion of chiasmata from the NI mechanism (double in [0,1]) * result = vector of length n_d to contain the results **********************************************************************/ void R_mf_stahl(int *n_d, double *d, int *m, double *p, double *result) { int i; for(i=0; i<*n_d; i++) result[i] = mf_stahl(d[i], *m, *p); } /********************************************************************** * mf_stahl: map function for Stahl model * * d = genetic distances (in cM) * m = interference parameter (non-negative integer) * p = proportion of chiasmata from the NI mechanism (double in [0,1]) **********************************************************************/ double mf_stahl(double d, int m, double p) { int i; double result, lam1, lam2; lam1 = (double)(m+1) * d *(1.0-p) * 2.0; lam2 = d * p * 2.0; result = 0.0; for(i=0; i #include #include #include #include #include #include #include "util.h" #include "simulate_ril.h" /* wrapper for sim_ril, to be called from R */ void R_sim_ril(int *n_chr, int *n_mar, int *n_ril, double *map, int *n_str, int *m, double *p, int *include_x, int *random_cross, int *selfing, int *cross, int *ril, int *origgeno, double *error_prob, double *missing_prob, int *errors) { GetRNGstate(); sim_ril(*n_chr, n_mar, *n_ril, map, *n_str, *m, *p, *include_x, *random_cross, *selfing, cross, ril, origgeno, *error_prob, *missing_prob, errors); PutRNGstate(); } /********************************************************************** * * sim_ril * * n_chr Number of chromosomes * n_mar Number of markers on each chromosome (vector of length n_chr) * n_ril Number of RILs to simulate * * map Vector of marker locations, of length sum(n_mar) * First marker on each chromosome should be at 0. * * n_str Number of parental strains (either 2, 4, or 8) * * m Interference parameter (0 is no interference) * p For Stahl model, proportion of chiasmata from the NI model * * include_x Whether the last chromosome is the X chromosome * * random_cross Indicates whether the order of the strains in the cross * should be randomized. * * selfing If 1, use selfing; if 0, use sib mating * * cross On output, the cross used for each line * (vector of length n_ril x n_str) * * ril On output, the simulated data * (vector of length sum(n_mar) x n_ril) * * origgeno Like ril, but with no missing data * * error_prob Genotyping error probability (used nly with n_str==2) * * missing_prob Rate of missing genotypes * * errors Error indicators (n_mar x n_ril) * **********************************************************************/ void sim_ril(int n_chr, int *n_mar, int n_ril, double *map, int n_str, int m, double p, int include_x, int random_cross, int selfing, int *cross, int *ril, int *origgeno, double error_prob, double missing_prob, int *errors) { int i, j, k, tot_mar, curseg; struct individual par1, par2, kid1, kid2; int **Ril, **Cross, **Errors, **OrigGeno; int maxwork, isX, flag, max_xo, *firstmarker; double **Map, maxlen, chrlen, *work; /* count total number of markers */ for(i=0, tot_mar=0; i 1e-6) { flag = 1; break; } } if(kid1.allele[0][kid1.n_xo[0]] != kid1.allele[1][kid1.n_xo[0]]) flag = 1; } else flag = 1; } else { if(kid1.n_xo[0] == kid1.n_xo[1] && kid1.n_xo[0] == kid2.n_xo[0] && kid1.n_xo[0] == kid2.n_xo[1]) { for(k=0; k 1e-6 || fabs(kid1.xoloc[0][k] - kid2.xoloc[0][k]) > 1e-6 || fabs(kid1.xoloc[0][k] - kid2.xoloc[1][k]) > 1e-6) { flag = 1; break; } } if(kid1.allele[0][kid1.n_xo[0]] != kid1.allele[1][kid1.n_xo[0]] || kid1.allele[0][kid1.n_xo[0]] != kid2.allele[0][kid1.n_xo[0]] || kid1.allele[0][kid1.n_xo[0]] != kid2.allele[1][kid1.n_xo[0]]) flag = 1; } else flag = 1; } if(!flag) break; /* done inbreeding */ /* go to next generation */ copy_individual(&kid1, &par1); if(selfing) copy_individual(&kid1, &par2); else copy_individual(&kid2, &par2); } /* end with inbreeding of this chromosome */ /* fill in alleles */ curseg = 0; for(k=0; k kid1.xoloc[0][curseg]) curseg++; OrigGeno[i][k+firstmarker[j]] = Ril[i][k+firstmarker[j]] = Cross[i][kid1.allele[0][curseg]-1]; /* simulate missing ? */ if(unif_rand() < missing_prob) { Ril[i][k+firstmarker[j]] = 0; } else if(n_str == 2 && unif_rand() < error_prob) { /* simulate error */ Ril[i][k+firstmarker[j]] = 3 - Ril[i][k+firstmarker[j]]; Errors[i][k+firstmarker[j]] = 1; } } } /* loop over chromosomes */ } /* loop over lines */ } /********************************************************************** * allocate_individual **********************************************************************/ void allocate_individual(struct individual *ind, int max_seg) { (*ind).max_segments = max_seg; (*ind).n_xo[0] = (*ind).n_xo[1] = 0; (*ind).allele = (int **)R_alloc(2, sizeof(int *)); (*ind).allele[0] = (int *)R_alloc(2*max_seg, sizeof(int)); (*ind).allele[1] = (*ind).allele[0] + max_seg; (*ind).xoloc = (double **)R_alloc(2, sizeof(double *)); (*ind).xoloc[0] = (double *)R_alloc(2*(max_seg-1), sizeof(double)); (*ind).xoloc[1] = (*ind).xoloc[0] + (max_seg-1); } /********************************************************************** * reallocate_individual **********************************************************************/ void reallocate_individual(struct individual *ind, int old_max_seg, int new_max_seg) { int j; (*ind).max_segments = new_max_seg; (*ind).allele[0] = (int *)S_realloc((char *)(*ind).allele[0], 2*new_max_seg, 2*old_max_seg, sizeof(int)); (*ind).allele[1] = (*ind).allele[0] + new_max_seg; for(j=0; j (*to).max_segments) reallocate_individual(to, (*to).max_segments, (*from).max_segments); for(j=0; j<2; j++) { n_xo = (*to).n_xo[j] = (*from).n_xo[j]; for(i=0; i 0 && p < 1.0) { /* crossover interference */ /* simulate number of XOs and intermediates */ n = (int)rpois(L*(double)(m+1)/50.0*(1.0-p)); if(n > *maxwork) { /* need a bigger workspace */ *work = (double *)S_realloc((char *)*work, n*2, *maxwork, sizeof(double)); *maxwork = n*2; } for(i=0; i *maxwork) { /* need a bigger workspace */ *work = (double *)S_realloc((char *)*work, (n+nn)*2, *maxwork, sizeof(double)); *maxwork = (n+nn)*2; } for(i=0; i *maxwork) { /* need a bigger workspace */ *work = (double *)S_realloc((char *)*work, n*2, *maxwork, sizeof(double)); *maxwork = n*2; } for(i=0; i n_str) { if(Geno[j][i] > n_str) warning("Error in RIL genotype (%d): line %d at marker %d\n", Geno[j][i], i+1, j+1); Geno[j][i] = 0; } else { temp = Parents[Geno[j][i]-1][j]; /* SNP genotype of RIL i at marker j */ if(all_snps && unif_rand() < error_prob) { /* make it an error */ temp = 1 - temp; Errors[j][i] = 1; } Geno[j][i] = 0; for(k=0; k 0) * p Probability chiasma comes from no interference mechanism * Geno Matrix of size n_ind x n_mar to contain genotype data * **********************************************************************/ void sim_bc(int n_mar, int n_ind, double *pos, int m, double p, int **Geno); /* end of simulate.h */ qtl/src/simulate.c0000644000176000001440000001265512131541647013675 0ustar ripleyusers/********************************************************************** * * simulate.c * * copyright (c) 2006, Karl W Broman * * last modified Dec, 2006 * first written Jul, 2006 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for simulating backcross genotype data * * Contains: sim_bc_ni, sim_bc, R_sim_bc, R_sim_bc_ni * **********************************************************************/ #include #include #include #include #include #include #include /* for Calloc, Realloc */ #include #include "util.h" #include "simulate.h" /********************************************************************** * * R_sim_bc_ni Wrapper for sim_bc_ni * * geno is empty, of size n_mar * n_ind * **********************************************************************/ void R_sim_bc_ni(int *n_mar, int *n_ind, double *rf, int *geno) { int **Geno; reorg_geno(*n_ind, *n_mar, geno, &Geno); GetRNGstate(); sim_bc_ni(*n_mar, *n_ind, rf, Geno); PutRNGstate(); } /********************************************************************** * * sim_bc_ni Simulate backcross under no interference * * n_mar Number of markers * n_ind Number of individuals * rf recombination fractions (length n_mar-1) * Geno Matrix of size n_ind x n_mar to contain genotype data * **********************************************************************/ void sim_bc_ni(int n_mar, int n_ind, double *rf, int **Geno) { int i, j; for(i=0; i 0) * p Probability chiasma comes from no interference mechanism * Geno Matrix of size n_ind x n_mar to contain genotype data * **********************************************************************/ void sim_bc(int n_mar, int n_ind, double *pos, int m, double p, int **Geno) { int i, j, k, first; int n_chi, max_chi, n_ni_xo; double *chi, L; L = pos[n_mar-1]; /* length of chromosome in cM */ /* space to place the crossover locations */ max_chi = qpois(1e-10, L/50.0*(double)(m+2), 0, 0); chi = (double *)Calloc(max_chi, double); for(i=0; i 0) n_ni_xo = rpois(L/100.0*p); else n_ni_xo = 0; if(n_chi + n_ni_xo > max_chi) { /* need more space */ max_chi = n_chi + n_ni_xo; chi = (double *)Realloc(chi, max_chi, double); } /* simulate locations */ for(j=0; j= n_chi) n_chi = 0; else { for(j=first, k=0; j 0) { /* thin with probability 1/2 */ for(j=0, k=0; j col) contains the joint LODs while * the upper triangle (row < col) contains the LODs for * testing epistasis. * Note: indexed as Result[col][row] * * n_col2drop For X chromosome, number of columns to drop * * col2drop For X chromosome, indicates which columns to drop * **********************************************************************/ void scantwo_1chr_mr(int n_ind, int n_pos, int n_gen, int **Geno, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double **Result, int n_col2drop, int *col2drop); /********************************************************************** * * R_scantwo_2chr_mr * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_2chr_mr. * **********************************************************************/ void R_scantwo_2chr_mr(int *n_ind, int *n_pos1, int *n_pos2, int *n_gen1, int *n_gen2, int *geno1, int *geno2, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *weights, double *result_full, double *result_add); /********************************************************************** * * scantwo_2chr_mr * * Performs a 2-dimensional genome scan using the Haley-Knott * regression method (regressing phenotypes on conditional genotype * probabilities) for a two-QTL model with the two QTL residing on * the different chromosomes. * * n_ind Number of individuals * * n_pos1 Number of marker positions on first chromosome * * n_pos2 Number of marker positions on second chromosome * * n_gen1 Number of different genotypes for first chromosome * * n_gen2 Number of different genotypes for second chromosome * * Geno1 Matrix of marker genotype data for chr 1, * indexed as Geno1[pos][ind] * * Geno2 Matrix of marker genotype data for chr 2 * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * weights Vector of positive weights, of length n_ind * * Result_full Result matrix of size [n_pos1 x n_pos2] * containing the joint LODs * Note: indexed as Result[pos2][pos1] * * Result_add Result matrix of size [n_pos2 x n_pos1] * containing the LODs for add've models * also indexed as Result[pos2][pos1] * **********************************************************************/ void scantwo_2chr_mr(int n_ind, int n_pos1, int n_pos2, int n_gen1, int n_gen2, int **Geno1, int **Geno2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double **Result_full, double **Result_add); /* end of scantwo_mr.h */ qtl/src/scantwo_mr.c0000644000176000001440000004563312131541647014230 0ustar ripleyusers/********************************************************************** * * scantwo_mr.c * * copyright (c) 2001-6, Karl W Broman * * last modified Dec, 2006 * first written Nov, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for performing a two-dimensional genome scan with * a two-QTL model by marker regression. Individuals missing genotypes * at either of a pair of markers are dropped. * * Contains: R_scantwo_1chr_mr, scantwo_1chr_mr, * R_scantwo_2chr_mr, scantwo_2chr_mr * **********************************************************************/ #include #include #include #include #include #include #include #include #include "util.h" #include "scantwo_mr.h" #define TOL 1e-12 /********************************************************************** * * R_scantwo_1chr_mr * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_1chr_mr. * **********************************************************************/ void R_scantwo_1chr_mr(int *n_ind, int *n_pos, int *n_gen, int *geno, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *weights, double *result, int *n_col2drop, int *col2drop) { int **Geno; double **Result, **Addcov, **Intcov; reorg_geno(*n_ind, *n_pos, geno, &Geno); reorg_errlod(*n_pos, *n_pos, result, &Result); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scantwo_1chr_mr(*n_ind, *n_pos, *n_gen, Geno, Addcov, *n_addcov, Intcov, *n_intcov, pheno, weights, Result, *n_col2drop, col2drop); } /********************************************************************** * * scantwo_1chr_mr * * Performs a 2-dimensional genome scan using the Haley-Knott * regression method (regressing phenotypes on conditional genotype * probabilities) for a two-QTL model with the two QTL residing on * the same chromosome. * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Geno Array of marker genotype data, indexed as * Geno[pos][ind] * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * weights Vector of positive weights, of length n_ind * * Result Result matrix of size [n_pos x n_pos]; the lower * triangle (row > col) contains the joint LODs while * the upper triangle (row < col) contains the LODs for * additve models. * Note: indexed as Result[col][row] * * n_col2drop For X chromosome, number of columns to drop * * col2drop For X chromosome, indicates which columns to drop * **********************************************************************/ void scantwo_1chr_mr(int n_ind, int n_pos, int n_gen, int **Geno, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double **Result, int n_col2drop, int *col2drop) { int ny, *jpvt, i, i2, j, k, s, this_n_ind, done_allind=0; int n_col_0, n_col_a, n_col_f, n_col_a_temp, n_col_f_temp, n_gen_sq, *which_ind; double *work, *x, *qty, *qraux, *coef, *resid, tol, lrss0, *y; double lrss0_allind=0.0; int *allcol2drop; /* tolerance for linear regression */ tol = TOL; n_gen_sq = n_gen*n_gen; /* no. param in null model */ n_col_0 = n_addcov+1; /* no. param in additive QTL model */ n_col_a = (n_gen*2-1)+n_addcov+n_intcov*(n_gen-1)*2; /* no. param full model */ n_col_f = n_gen_sq+n_addcov+n_intcov*(n_gen_sq-1); /* expand col2drop */ if(n_col2drop) { allocate_int(n_col_f, &allcol2drop); expand_col2drop(n_gen, n_addcov, n_intcov, col2drop, allcol2drop); } /* allocate space and set things up*/ which_ind = (int *)R_alloc(n_ind, sizeof(int)); y = (double *)R_alloc(n_ind, sizeof(double)); x = (double *)R_alloc(n_ind*n_col_f, sizeof(double)); coef = (double *)R_alloc(n_col_f, sizeof(double)); resid = (double *)R_alloc(n_ind, sizeof(double)); qty = (double *)R_alloc(n_ind, sizeof(double)); jpvt = (int *)R_alloc(n_col_f, sizeof(int)); qraux = (double *)R_alloc(n_col_f, sizeof(double)); work = (double *)R_alloc(2 * n_col_f, sizeof(double)); ny = 1; /* modify pheno, Addcov and Intcov with weights */ for(j=0; j 0 && Geno[i2][j] > 0) { which_ind[this_n_ind] = j; y[this_n_ind] = pheno[j]; this_n_ind++; } } if(this_n_ind > 0) { if((this_n_ind < n_ind) || !done_allind) { /* the above is to avoid repeatedly doing the null model regression in the case of complete marker data */ /* NULL MODEL */ /* fill up X matrix */ for(j=0; j 0 individuals with available data */ } /* end loop over positions */ } } /********************************************************************** * * R_scantwo_2chr_mr * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_2chr_mr. * **********************************************************************/ void R_scantwo_2chr_mr(int *n_ind, int *n_pos1, int *n_pos2, int *n_gen1, int *n_gen2, int *geno1, int *geno2, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *weights, double *result_full, double *result_add) { int **Geno1, **Geno2; double **Result_full, **Result_add, **Addcov, **Intcov; reorg_geno(*n_ind, *n_pos1, geno1, &Geno1); reorg_geno(*n_ind, *n_pos2, geno2, &Geno2); reorg_errlod(*n_pos1, *n_pos2, result_full, &Result_full); reorg_errlod(*n_pos1, *n_pos2, result_add, &Result_add); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scantwo_2chr_mr(*n_ind, *n_pos1, *n_pos2, *n_gen1, *n_gen2, Geno1, Geno2, Addcov, *n_addcov, Intcov, *n_intcov, pheno, weights, Result_full, Result_add); } /********************************************************************** * * scantwo_2chr_mr * * Performs a 2-dimensional genome scan using the Haley-Knott * regression method (regressing phenotypes on conditional genotype * probabilities) for a two-QTL model with the two QTL residing on * the different chromosomes. * * n_ind Number of individuals * * n_pos1 Number of marker positions on first chromosome * * n_pos2 Number of marker positions on second chromosome * * n_gen1 Number of different genotypes for first chromosome * * n_gen2 Number of different genotypes for second chromosome * * Geno1 Matrix of marker genotype data for chr 1, * indexed as Geno1[pos][ind] * * Geno2 Matrix of marker genotype data for chr 2 * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * weights Vector of positive weights, of length n_ind * * Result_full Result matrix of size [n_pos1 x n_pos2] * containing the joint LODs * Note: indexed as Result[pos2][pos1] * * Result_add Result matrix of size [n_pos2 x n_pos1] * containing the LODs for add've models * also indexed as Result[pos2][pos1] * **********************************************************************/ void scantwo_2chr_mr(int n_ind, int n_pos1, int n_pos2, int n_gen1, int n_gen2, int **Geno1, int **Geno2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double **Result_full, double **Result_add) { int ny, *jpvt, i, i2, j, k, s, this_n_ind, done_allind=0; int n_col_0, n_col_a, n_col_f, n_gen_sq, *which_ind; double *work, *x, *qty, *qraux, *coef, *resid, tol, lrss0, *y; double lrss0_allind=0.0; /* tolerance for linear regression */ tol = TOL; n_gen_sq = n_gen1*n_gen2; /* no. param in null model */ n_col_0 = n_addcov+1; /* no. param in additive QTL model */ n_col_a = (n_gen1+n_gen2-1)+n_addcov+n_intcov*(n_gen1+n_gen2-2); /* no. param full model */ n_col_f = n_gen_sq+n_addcov+n_intcov*(n_gen_sq-1); /* allocate space and set things up*/ which_ind = (int *)R_alloc(n_ind, sizeof(int)); y = (double *)R_alloc(n_ind, sizeof(double)); x = (double *)R_alloc(n_ind*n_col_f, sizeof(double)); coef = (double *)R_alloc(n_col_f, sizeof(double)); resid = (double *)R_alloc(n_ind, sizeof(double)); qty = (double *)R_alloc(n_ind, sizeof(double)); jpvt = (int *)R_alloc(n_col_f, sizeof(int)); qraux = (double *)R_alloc(n_col_f, sizeof(double)); work = (double *)R_alloc(2 * n_col_f, sizeof(double)); ny = 1; /* modify pheno, Addcov and Intcov with weights */ for(j=0; j 0 && Geno2[i2][j] > 0) { which_ind[this_n_ind] = j; y[this_n_ind] = pheno[j]; this_n_ind++; } } if(this_n_ind > 0) { if((this_n_ind < n_ind) || !done_allind) { /* the above is to avoid repeatedly doing the null model regression in the case of complete marker data */ /* NULL MODEL */ /* fill up X matrix */ for(j=0; j 0 individuals with available data */ } /* end loop over positions */ } } /* end of scantwo_mr.c */ qtl/src/scantwo_imp.h0000644000176000001440000000763312131541647014402 0ustar ripleyusers/********************************************************************** * * scantwo_imp.h * * copyright (c) 2001-6, Karl W Broman and Hao Wu * * This file was written by Hao Wu with modifications by * Karl Broman. * * last modified Oct, 2006 * first written Nov, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for performing a 2-dimensional genome scan * with a 2-QTL model by imputation. * * Contains: R_scantwo_imp, scantwo_imp, altRss2 * **********************************************************************/ /********************************************************************** * * R_scantwo_imp * * Wrapper for call from R; reorganizes genotype prob, additive and * interactive covariates and result matrix. Then calls scantwo_imp. * **********************************************************************/ void R_scantwo_imp(int *n_ind, int *same_chr, int *n_pos1, int *n_pos2, int *n_gen1, int *n_gen2, int *n_draws, int *draws1, int *draws2, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, int *nphe, double *weights, double *result, int *n_col2drop, int *col2drop); /********************************************************************** * * scantwo_imp * * Performs genotype pair scan using the pseudomarker algorithm * (imputation) method of Sen and Churchill (2001). * * n_ind Number of individuals * * same_chr If = 1, work only with Draws1 and do 2-QTL model with * QTLs on the same chromosome. * * chr2 Chromesome id 2 * * n_pos1 Number of marker positions in chromesome 1 * * n_pos2 Number of marker positions in chromesome 2 * * n_gen1 Number of different genotypes on chr 1 * * n_gen2 Number of different genotypes on chr 2 * * n_draws Number of impiutations * * Draws1 Array of genotype imputations in chromesome 1, * indexed as Draws1[repl][mar][ind] * * Draws2 Array of genotype imputations in chromesome 2, * indexed as Draws2[repl][mar][ind] * * addcov Additive covariates matrix, addcov[mar][ind] * * n_addcov Number of additive covariates * * intcov Interacting covariates matrix, intcov[mar][ind] * * n_intcov Number of interacting covariates * * pheno Phenotype data, as a vector * * weights Vector of positive weights, of length n_ind * * result Result vector of length [n_pos1*n_pos2]; * * n_col2drop For X chromosome, number of columns to drop * * col2drop For X chromosome, indicates which columns to drop * **********************************************************************/ void scantwo_imp(int n_ind, int same_chr, int n_pos1, int n_pos2, int n_gen1, int n_gen2, int n_draws, int ***Draws1, int ***Draws2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, int nphe, double *weights, double *result, int n_col2drop, int *col2drop); void altRss2(double *tmppheno, double *pheno, int nphe, int n_ind, int n_gen1, int n_gen2, int *Draws1, int *Draws2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *lrss, double *dwork_add, double *dwork_full, int multivar, double *weights, int n_col2drop, int *allcol2drop); /* end of scantwo_imp.h */ qtl/src/scantwo_imp.c0000644000176000001440000005573712131541647014405 0ustar ripleyusers/********************************************************************** * * scantwo_imp.c * * copyright (c) 2001-2011, Karl W Broman and Hao Wu * * last modified May, 2011 * first written Nov, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for performing a 2-dimensional genome scan * with a 2-QTL model by imputation. * * Contains: R_scantwo_imp, scantwo_imp, altRss2 * **********************************************************************/ #include #include #include #include #include #include #include #include #include "util.h" #include "lapackutil.h" #include "scantwo_imp.h" #include "scanone_imp.h" #define TOL 1.0e-12 /********************************************************************** * * R_scantwo_imp * * Wrapper for call from R; reorganizes genotype prob, additive and * interactive covariates and result matrix. Then calls scantwo_imp. * **********************************************************************/ void R_scantwo_imp(int *n_ind, int *same_chr, int *n_pos1, int *n_pos2, int *n_gen1, int *n_gen2, int *n_draws, int *draws1, int *draws2, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, int *nphe, double *weights, double *result, int *n_col2drop, int *col2drop) { int ***Draws1, ***Draws2; double **Addcov, **Intcov; /* reorganize draws */ reorg_draws(*n_ind, *n_pos1, *n_draws, draws1, &Draws1); if(!(*same_chr)) reorg_draws(*n_ind, *n_pos2, *n_draws, draws2, &Draws2); /* reorganize addcov and intcov (if they are not empty) */ /* currently reorg_geno function is used to reorganized the data */ if(*n_addcov != 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov != 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); /* call the engine function scantwo_imp */ scantwo_imp(*n_ind, *same_chr, *n_pos1, *n_pos2, *n_gen1, *n_gen2, *n_draws, Draws1, Draws2, Addcov, *n_addcov, Intcov, *n_intcov, pheno, *nphe, weights, result, *n_col2drop, col2drop); } /********************************************************************** * * scantwo_imp * * Performs genotype pair scan using the pseudomarker algorithm * (imputation) method of Sen and Churchill (2001). * * n_ind Number of individuals * * same_chr If = 1, work only with Draws1 and do 2-QTL model with * QTLs on the same chromosome. * * chr2 Chromesome id 2 * * n_pos1 Number of marker positions in chromesome 1 * * n_pos2 Number of marker positions in chromesome 2 * * n_gen1 Number of different genotypes on chr 1 * * n_gen2 Number of different genotypes on chr 2 * * n_draws Number of impiutations * * Draws1 Array of genotype imputations in chromesome 1, * indexed as Draws1[repl][mar][ind] * * Draws2 Array of genotype imputations in chromesome 2, * indexed as Draws2[repl][mar][ind] * * addcov Additive covariates matrix, addcov[mar][ind] * * n_addcov Number of additive covariates * * intcov Interacting covariates matrix, intcov[mar][ind] * * n_intcov Number of interacting covariates * * pheno Phenotype data, as a vector * * nphe Number of phenotypes * * weights Vector of positive weights, of length n_ind * * result Result vector of length [n_pos1*n_pos2]; * * n_col2drop For X chromosome, number of columns to drop * * col2drop For X chromosome, indicates which columns to drop * **********************************************************************/ void scantwo_imp(int n_ind, int same_chr, int n_pos1, int n_pos2, int n_gen1, int n_gen2, int n_draws, int ***Draws1, int ***Draws2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, int nphe, double *weights, double *result, int n_col2drop, int *col2drop) { /* create local variables */ int i, i1, i2, j, k; /* loop variants */ double **lrss0, **lrss1, **LODfull, **LODadd,*lod_tmp; double *dwork_null, *dwork_add, *dwork_full, *tmppheno, dtmp; int nrss, n_col_null, n_col_a, n_col_f, n_gen_sq; int lwork, nlod_per_draw, multivar=0; int *allcol2drop; /* if number of pheno is 1 or do multivariate model, we have only one rss at each position. Otherwise, we have one rss for each phenotype */ if( (nphe==1) || (multivar==1) ) nrss = 1; else nrss = nphe; /* constants */ n_gen_sq = n_gen1*n_gen2; /* number of columns of X for null model */ n_col_null = 1 + n_addcov; /* number of columns of X for additive model */ n_col_a = (n_gen1+n_gen2-1) + n_addcov + n_intcov*(n_gen1+n_gen2-2); /* number of columns of X for full model */ n_col_f = n_gen_sq + n_addcov + n_intcov*(n_gen_sq-1); /* expand col2drop */ if(n_col2drop) { allocate_int(n_col_f, &allcol2drop); expand_col2drop(n_gen1, n_addcov, n_intcov, col2drop, allcol2drop); } /********************* * allocate memory *********************/ tmppheno = (double *)R_alloc(n_ind*nphe, sizeof(double)); /* for rss' and lod scores - we might not need all of this memory */ lrss0 = (double **)R_alloc(n_draws, sizeof(double*)); lrss1 = (double **)R_alloc(n_draws, sizeof(double*)); LODadd = (double **)R_alloc(n_draws, sizeof(double*)); LODfull = (double **)R_alloc(n_draws, sizeof(double*)); for(i=0; i 1) { for(k=0; k 1) { for(k=0; k pos1 (for pos2 <= pos1, points to nothing) * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * nphe Number of phenotypes * * weights Vector of positive weights, of length n_ind * * Result Result matrix of size [n_pos x n_pos]; the lower * triangle (row > col) contains the joint LODs while * the upper triangle (row < col) contains the LODs for * testing epistasis. * Note: indexed as Result[col][row] * * n_col2drop For X chromosome, number of columns to drop * * col2drop For X chromosome, indicates which columns to drop * **********************************************************************/ void scantwo_1chr_hk(int n_ind, int n_pos, int n_gen, double ***Genoprob, double *****Pairprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, int nphe, double *weights, double ***Result, int n_col2drop, int *col2drop); /********************************************************************** * * R_scantwo_2chr_hk * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_2chr_hk. * **********************************************************************/ void R_scantwo_2chr_hk(int *n_ind, int *n_pos1, int *n_pos2, int *n_gen1, int *n_gen2, double *genoprob1, double *genoprob2, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, int *nphe, double *weights, double *result_full, double *result_add); /********************************************************************** * * scantwo_2chr_hk * * Performs a 2-dimensional genome scan using the Haley-Knott * regression method (regressing phenotypes on conditional genotype * probabilities) for a two-QTL model with the two QTL residing on * the different chromosomes. * * n_ind Number of individuals * * n_pos1 Number of marker positions on first chromosome * * n_pos2 Number of marker positions on second chromosome * * n_gen1 Number of different genotypes for first chromosome * * n_gen2 Number of different genotypes for second chromosome * * Genoprob1 Array of conditional genotype probs for 1st chr * Indexed as Genoprob[gen][pos][ind] * * Genoprob2 Array of conditional genotype probs for 2nd chr * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * nphe Number of phenotypes * * weights Vector of positive weights, of length n_ind * * Result_full Result matrix of size [n_pos1 x n_pos2] * containing the joint LODs * Note: indexed as Result[pos2][pos1] * * Result_add Result matrix of size [n_pos2 x n_pos1] * containing the LODs for add've models * also indexed as Result[pos2][pos1] * **********************************************************************/ void scantwo_2chr_hk(int n_ind, int n_pos1, int n_pos2, int n_gen1, int n_gen2, double ***Genoprob1, double ***Genoprob2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, int nphe, double *weights, double ***Result_full, double ***Result_add); /* end of scantwo_hk.h */ qtl/src/scantwo_hk.c0000644000176000001440000006532112131541647014210 0ustar ripleyusers/********************************************************************** * * scantwo_hk.c * * copyright (c) 2001-2011, Karl W Broman * * last modified Jul, 2011 * first written Nov, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for performing a two-dimensional genome scan with * a two-QTL model by Haley-Knott regression * * Contains: R_scantwo_1chr_hk, scantwo_1chr_hk, * R_scantwo_2chr_hk, scantwo_2chr_hk * **********************************************************************/ #include #include #include #include #include #include #include #include #include "util.h" #include "lapackutil.h" #include "scantwo_hk.h" #define TOL 1e-12 /********************************************************************** * * R_scantwo_1chr_hk * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_1chr_hk. * **********************************************************************/ void R_scantwo_1chr_hk(int *n_ind, int *n_pos, int *n_gen, double *genoprob, double *pairprob, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, int* nphe, double *weights, double *result, int *n_col2drop, int *col2drop) { double ***Genoprob, ***Result, **Addcov, **Intcov, *****Pairprob; reorg_genoprob(*n_ind, *n_pos, *n_gen, genoprob, &Genoprob); reorg_pairprob(*n_ind, *n_pos, *n_gen, pairprob, &Pairprob); reorg_genoprob(*n_pos, *n_pos, *nphe, result, &Result); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scantwo_1chr_hk(*n_ind, *n_pos, *n_gen, Genoprob, Pairprob, Addcov, *n_addcov, Intcov, *n_intcov, pheno, *nphe, weights, Result, *n_col2drop, col2drop); } /********************************************************************** * * scantwo_1chr_hk * * Performs a 2-dimensional genome scan using the Haley-Knott * regression method (regressing phenotypes on conditional genotype * probabilities) for a two-QTL model with the two QTL residing on * the same chromosome. * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Genoprob Array of conditional genotype probabilities * Indexed as Genoprob[gen][pos][ind] * * Pairprob Array of joint genotype probabilities for QTL * pairs; indexed as Pairprob[gen1][gen2][pos1][pos2][ind] * where pos2 > pos1 (for pos2 <= pos1, points to nothing) * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * nphe Number of phenotypes * * weights Vector of positive weights, of length n_ind * * Result Result matrix of size [nphe x n_pos x n_pos]; the lower * triangle (row > col) contains the joint LODs while * the upper triangle (row < col) contains the LODs for * testing epistasis. * Note: indexed as Result[iphe][col][row] * * n_col2drop For X chromosome, number of columns to drop * * col2drop For X chromosome, indicates which columns to drop * **********************************************************************/ void scantwo_1chr_hk(int n_ind, int n_pos, int n_gen, double ***Genoprob, double *****Pairprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, int nphe, double *weights, double ***Result, int n_col2drop, int *col2drop) { int n_col_a, n_col_f, n_gen_sq, multivar=0, rank=0, n_col_a_temp, n_col_f_temp; int itmp, i, i2, j, k, k2, k3, s, nrss, lwork, info, ind_idx; /* additive model working arrays */ /* double *dwork_add, *x_add, *x_bk_add, *singular_add, *work_add, *yfit_add, *coef_add; */ /* full model working arrays */ /* double *dwork_full, *x_full, *x_bk_full, *singular_full, *work_full, *yfit_full, *coef_full;*/ double *dwork, *x, *x_bk, *singular, *work, *yfit, *coef, *tmppheno; double tol=TOL, dtmp=0; int *allcol2drop; /* number of rss */ if( (nphe==1) || (multivar==1) ) nrss = 1; else nrss = nphe; /* tolerance for linear regression */ tol = TOL; n_gen_sq = n_gen*n_gen; /* no. param in additive QTL model */ n_col_a = (n_gen*2-1)+n_addcov+n_intcov*(n_gen-1)*2; /* no. param full model */ n_col_f = n_gen_sq+n_addcov+n_intcov*(n_gen_sq-1); /* expand col2drop */ if(n_col2drop) { allocate_int(n_col_f, &allcol2drop); expand_col2drop(n_gen, n_addcov, n_intcov, col2drop, allcol2drop); } /* allocate space and set things up - I will leave multivariate model at this time */ tmppheno = (double *)R_alloc(n_ind*nphe, sizeof(double)); /* for full model */ lwork = 3*n_col_f + MAX(n_ind, nphe);; if(multivar == 1) /* request to do multivariate normal model */ dwork = (double *)R_alloc(n_col_f+lwork+2*n_ind*n_col_f+n_ind*nphe+nphe*nphe+n_col_f*nphe, sizeof(double)); else dwork = (double *)R_alloc(n_col_f + lwork + 2*n_ind*n_col_f + n_ind*nphe + n_col_f*nphe, sizeof(double)); /* split memory block */ lwork = 3*n_col_f + MAX(n_ind, nphe); singular = dwork; work = singular + n_col_f; x = work + lwork; x_bk = x + n_ind*n_col_f; yfit = x_bk + n_ind*n_col_f; coef = yfit + n_ind*nphe; /*************************** * finish memory allocation ***************************/ /* modify pheno, Addcov and Intcov with weights */ for(i=0; i 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scantwo_2chr_hk(*n_ind, *n_pos1, *n_pos2, *n_gen1, *n_gen2, Genoprob1, Genoprob2, Addcov, *n_addcov, Intcov, *n_intcov, pheno, *nphe, weights, Result_full, Result_add); } /********************************************************************** * * scantwo_2chr_hk * * Performs a 2-dimensional genome scan using the Haley-Knott * regression method (regressing phenotypes on conditional genotype * probabilities) for a two-QTL model with the two QTL residing on * the different chromosomes. * * n_ind Number of individuals * * n_pos1 Number of marker positions on first chromosome * * n_pos2 Number of marker positions on second chromosome * * n_gen1 Number of different genotypes for first chromosome * * n_gen2 Number of different genotypes for second chromosome * * Genoprob1 Array of conditional genotype probs for 1st chr * Indexed as Genoprob[gen][pos][ind] * * Genoprob2 Array of conditional genotype probs for 2nd chr * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * nphe Number of phenotypes * * weights Vector of positive weights, of length n_ind * * Result_full Result matrix of size [nphe x n_pos1 x n_pos2] * containing the joint LODs * Note: indexed as Result[iphe][pos1][pos2] * * Result_add Result matrix of size [nphe x n_pos2 x n_pos1] * containing the LODs for add've models * also indexed as Result[iphe][pos2][pos1] * **********************************************************************/ void scantwo_2chr_hk(int n_ind, int n_pos1, int n_pos2, int n_gen1, int n_gen2, double ***Genoprob1, double ***Genoprob2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, int nphe, double *weights, double ***Result_full, double ***Result_add) { int n_col_a, n_col_f, n_gen_sq, multivar=0, rank=0; int itmp, i, i2, j, k, k2, k3, s, nrss, lwork, info, ind_idx; double *dwork, *x, *x_bk, *singular, *work, *yfit, *coef, *tmppheno; double tol=TOL, dtmp=0; /* number of rss */ if( (nphe==1) || (multivar==1) ) nrss = 1; else nrss = nphe; /* tolerance for linear regression */ tol = TOL; n_gen_sq = n_gen1*n_gen2; /* no. param in additive QTL model */ n_col_a = (n_gen1+n_gen2-1)+n_addcov+n_intcov*(n_gen1+n_gen2-2); /* no. param full model */ n_col_f = n_gen_sq+n_addcov+n_intcov*(n_gen_sq-1); /* allocate space and set things up*/ tmppheno = (double *)R_alloc(n_ind*nphe, sizeof(double)); lwork = 3*n_col_f + MAX(n_ind, nphe);; if(multivar == 1) /* request to do multivariate normal model */ dwork = (double *)R_alloc(n_col_f+lwork+2*n_ind*n_col_f+ n_ind*nphe+nphe*nphe+n_col_f*nphe, sizeof(double)); else dwork = (double *)R_alloc(n_col_f+lwork+2*n_ind*n_col_f+n_ind*nphe+n_col_f*nphe, sizeof(double)); /* split memory block */ lwork = 3*n_col_f + MAX(n_ind, nphe); singular = dwork; work = singular + n_col_f; x = work + lwork; x_bk = x + n_ind*n_col_f; yfit = x_bk + n_ind*n_col_f; coef = yfit + n_ind*nphe; /*************************** * finish memory allocation ***************************/ /* modify pheno, Addcov and Intcov with weights */ for(i=0; i pos1 (for pos2 <= pos1, points to nothing) * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * weights Vector of positive weights, of length n_ind * * Result Result matrix of size [n_pos x n_pos]; the lower * triangle (row > col) contains the joint LODs while * the upper triangle (row < col) contains the LODs for * testing epistasis. * Note: indexed as Result[col][row] * * maxit Maximum number of iterations for EM * * tol Tolerance for determining convergence of EM * * verbose If >0, print any messages when errors occur * >1, print out log likelihoods at end of EM * and check that log likelihood doesn't go down * >2, print out initial and final log likelihoods * >3, print out log likelihood at each iteration * * n_col2drop For X chromosome, number of columns to drop * * col2drop For X chromosome, indicates which columns to drop * **********************************************************************/ void scantwo_1chr_em(int n_ind, int n_pos, int n_gen, double *****Pairprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double **Result, int maxit, double tol, int verbose, int n_col2drop, int *col2drop); /********************************************************************** * * R_scantwo_2chr_em * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_2chr_em. * **********************************************************************/ void R_scantwo_2chr_em(int *n_ind, int *n_pos1, int *n_pos2, int *n_gen1, int *n_gen2, double *genoprob1, double *genoprob2, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *weights, double *result_full, double *result_add, int *maxit, double *tol, int *verbose); /********************************************************************** * * scantwo_2chr_em * * Performs a 2-dimensional genome scan using the EM algorithm * for a two-QTL model with the two QTL residing on the same * chromosome. * * n_ind Number of individuals * * n_pos1 Number of marker positions on chr 1 * * n_pos2 Number of marker positions on chr 2 * * n_gen1 Number of different genotypes on chr 1 * * n_gen2 Number of different genotypes on chr 2 * * Genoprob1 Array of genotype probabilities for chr 1 * indexed as Genoprob[gen][pos][ind] * * Genoprob2 Array of genotype probabilities for chr 2 * indexed as Genoprob[gen][pos][ind] * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * weights Vector of positive weights, of length n_ind * * Result_full Result matrix of size [n_pos1 x n_pos2] * containing the joint LODs * Note: indexed as Result[pos2][pos1] * * Result_add Result matrix of size [n_pos2 x n_pos1] * containing the LODs for add've models * also indexed as Result[pos2][pos1] * * maxit Maximum number of iterations for EM * * tol Tolerance for determining convergence of EM * * verbose If >0, print any messages when errors occur * >1, print out log likelihoods at end of EM * and check that log likelihood doesn't go down * >2, print out initial and final log likelihoods * >3, print out log likelihood at each iteration * **********************************************************************/ void scantwo_2chr_em(int n_ind, int n_pos1, int n_pos2, int n_gen1, int n_gen2, double ***Genoprob1, double ***Genoprob2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double **Result_full, double **Result_add, int maxit, double tol, int verbose); /********************************************************************** * * scantwo_em_mstep: M-step of the EM algorithm * * n_ind Number of individuals * * n_gen1 Number of possible genotypes at QTL 1 * * n_gen2 Number of possible genotypes at QTL 2 * * Addcov Additive covariates * * n_addcov Number of columns in Addcov * * Intcov Interactive covariates * * n_intcov Number of columns in Intcov * * pheno Phenotypes * * weights Vector of positive weights, of length n_ind * * Wts12 Pr(QTL1=v, QTL2=w | phenotype, model, marker data), * indexed as Wts[v][w][ind] * * Wts1 Marginal weights for QTL 1 * * Wts2 Marginal weights for QTL 2 * * param On output, the updated parameter estimates (incl resid SD) * * full_model If 1, include QTLxQTL interaction * * work1 Workspace of doubles, of length (n_par-1)*(n_par-1) * * work2 Workspace of doubles, of length (n_par-1) * * error_flag Set to 1 if X'X is singular * **********************************************************************/ void scantwo_em_mstep(int n_ind, int n_gen1, int n_gen2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double ***Wts12, double **Wts1, double **Wts2, double *param, int full_model, double *work1, double *work2, int *error_flag, int n_col2drop, int *allcol2drop, int verbose); /********************************************************************** * * scantwo_em_estep: E-step of the EM algorithm * * n_ind Number of individuals * * n_gen1 Number of possible genotypes at QTL 1 * * n_gen2 Number of possible genotypes at QTL 2 * * Probs Pr(QTL1=v, QTL2=w | multipoint marker data) * Indexed as Probs[v][w][ind] * * Wts12 The output: * Pr(QTL1=v, QTL2=w | marker data, phenotype, covar, param) * Indexed as Wts[v][w][ind] * * Wts1 Marginal weights for QTL 1 * * Wts2 Marginal weights for QTL 2 * * Addcov Additive covariates * * n_addcov Number of columns in Addcov * * Intcov Interactive covariates * * n_intcov Number of columns in Intcov * * pheno Phenotypes * * weights Vector of positive weights, of length n_ind * * param Current parameter estimates (including the resid SD) * * full_model If 1, use the full model (with QTLxQTL interaction) * * rescale If 1, rescale weights so that the sum to 1. * This is done so that by taking rescale=0, we can easily * calculate the log likelihood * **********************************************************************/ void scantwo_em_estep(int n_ind, int n_gen1, int n_gen2, double ***Probs, double ***Wts12, double **Wts1, double **Wts2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double *param, int full_model, int rescale, int n_col2drop, int *allcol2drop); double scantwo_em_loglik(int n_ind, int n_gen1, int n_gen2, double ***Probs, double ***Wts12, double **Wts1, double **Wts2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double *param, int full_model, int n_col2drop, int *allcol2drop); /* end of scantwo_em.h */ qtl/src/scantwo_em.c0000644000176000001440000010000412131541647014173 0ustar ripleyusers/********************************************************************** * * scantwo_em.c * * copyright (c) 2001-6, Karl W Broman * * last modified Dec, 2006 * first written Nov, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for performing a 2-dimensional genome scan * with a 2-QTL model by interval mapping.(the EM algorithm). * * Contains: R_scantwo_1chr_em, scantwo_1chr_em, * R_scantwo_2chr_em, scantwo_2chr_em, * scantwo_em_estep, scantwo_em_mstep, scantwo_em_loglik * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include "util.h" #include "scantwo_em.h" #define TOL 1e-12 /********************************************************************** * * R_scantwo_1chr_em * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_1chr_em. * **********************************************************************/ void R_scantwo_1chr_em(int *n_ind, int *n_pos, int *n_gen, double *pairprob, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *weights, double *result, int *maxit, double *tol, int *verbose, int *n_col2drop, int *col2drop) { double **Result, **Addcov, **Intcov, *****Pairprob; reorg_pairprob(*n_ind, *n_pos, *n_gen, pairprob, &Pairprob); reorg_errlod(*n_pos, *n_pos, result, &Result); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scantwo_1chr_em(*n_ind, *n_pos, *n_gen, Pairprob, Addcov, *n_addcov, Intcov, *n_intcov, pheno, weights, Result, *maxit, *tol, *verbose, *n_col2drop, col2drop); } /********************************************************************** * * scantwo_1chr_em * * Performs a 2-dimensional genome scan using the EM algorithm * for a two-QTL model with the two QTL residing on the same * chromosome. * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Pairprob Array of joint genotype probabilities for QTL * pairs; indexed as Pairprob[gen1][gen2][pos1][pos2][ind] * where pos2 > pos1 (for pos2 <= pos1, points to nothing) * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * weights Vector of positive weights, of length n_ind * * Result Result matrix of size [n_pos x n_pos]; the lower * triangle (row > col) contains the joint LODs while * the upper triangle (row < col) contains the LODs for * additive models. * Note: indexed as Result[col][row] * * maxit Maximum number of iterations for EM * * tol Tolerance for determining convergence of EM * * verbose If >0, print any messages when errors occur * >1, print out log likelihoods at end of EM * and check that log likelihood doesn't go down * >2, print out initial and final log likelihoods * >3, print out log likelihood at each iteration * * n_col2drop For X chromosome, number of columns to drop * * col2drop For X chromosome, indicates which columns to drop * **********************************************************************/ void scantwo_1chr_em(int n_ind, int n_pos, int n_gen, double *****Pairprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double **Result, int maxit, double tol, int verbose, int n_col2drop, int *col2drop) { int error_flag, i, i1, i2, k1, k2, j, m, n_col[2], n_col_rev[2], nit[2], r, flag=0; double *param, *oldparam, ***Wts12, **Wts1, **Wts2; double *wts, *work1, *work2, temp, ***Probs, oldllik=0.0, llik[2], sw; int *allcol2drop; n_col[0] = (2*n_gen-1) + n_addcov + 2*(n_gen-1)*n_intcov; n_col[1] = n_gen*n_gen + n_addcov + (n_gen*n_gen-1)*n_intcov; /* expand col2drop */ if(n_col2drop) { allocate_int(n_col[1], &allcol2drop); expand_col2drop(n_gen, n_addcov, n_intcov, col2drop, allcol2drop); } /* revised numbers of parameters */ if(n_col2drop) { n_col_rev[0] = 0; for(i=0; i1) Rprintf(" [%3d %3d] %1d: Initial model had error.\n", i1+1, i2+1, m+1); } else { /* only proceed if there's no error */ oldllik = scantwo_em_loglik(n_ind, n_gen, n_gen, Probs, Wts12, Wts1, Wts2, Addcov, n_addcov, Intcov, n_intcov, pheno, weights, oldparam, m, n_col2drop, allcol2drop); if(verbose>2) Rprintf(" [%3d %3d] %1d %9.3lf\n", i1+1, i2+1, m+1, oldllik); for(r=0; r1) Rprintf(" [%3d %3d] %1d %4d: Error in mstep\n", i1+1, i2+1, m+1, r+1); break; } llik[m] = scantwo_em_loglik(n_ind, n_gen, n_gen, Probs, Wts12, Wts1, Wts2, Addcov, n_addcov, Intcov, n_intcov, pheno, weights, param, m, n_col2drop, allcol2drop); if(verbose>1) { /* print log likelihood */ if(verbose>2) Rprintf(" [%3d %3d] %1d %4d %9.6lf\n", i1+1, i2+1, m+1, r+1, (llik[m]-oldllik)); if(llik[m] < oldllik-tol) Rprintf("** [%3d %3d] %1d %4d %9.6lf **\n", i1+1, i2+1, m+1, r+1, (llik[m]-oldllik)); if(verbose>3) { /* print parameters */ for(j=0; j1) Rprintf("** [%3d %3d] %1d Didn't converge! **\n", i1+1, i2+1, m+1); warning("Didn't converge!\n"); } } /* no error in getting initial estimates */ } /* loop over model */ if(verbose>1) { /* print likelihoods */ Rprintf(" [%3d %3d] %4d %4d %9.6lf", i1+1, i2+1, nit[0], nit[1], llik[1]-llik[0]); if(llik[1] < llik[0]) Rprintf(" ****"); Rprintf("\n"); } Result[i2][i1] = -(llik[0]+sw); Result[i1][i2] = -(llik[1]+sw); /* sw = sum[log10(weights)] */ } /* position 2 */ } /* position 1 */ } /********************************************************************** * * R_scantwo_2chr_em * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_2chr_em. * **********************************************************************/ void R_scantwo_2chr_em(int *n_ind, int *n_pos1, int *n_pos2, int *n_gen1, int *n_gen2, double *genoprob1, double *genoprob2, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *weights, double *result_full, double *result_add, int *maxit, double *tol, int *verbose) { double **Result_full, **Result_add, **Addcov, **Intcov; double ***Genoprob1, ***Genoprob2; reorg_genoprob(*n_ind, *n_pos1, *n_gen1, genoprob1, &Genoprob1); reorg_genoprob(*n_ind, *n_pos2, *n_gen2, genoprob2, &Genoprob2); reorg_errlod(*n_pos1, *n_pos2, result_full, &Result_full); reorg_errlod(*n_pos1, *n_pos2, result_add, &Result_add); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scantwo_2chr_em(*n_ind, *n_pos1, *n_pos2, *n_gen1, *n_gen2, Genoprob1, Genoprob2, Addcov, *n_addcov, Intcov, *n_intcov, pheno, weights, Result_full, Result_add, *maxit, *tol, *verbose); } /********************************************************************** * * scantwo_2chr_em * * Performs a 2-dimensional genome scan using the EM algorithm * for a two-QTL model with the two QTL residing on the same * chromosome. * * n_ind Number of individuals * * n_pos1 Number of marker positions on chr 1 * * n_pos2 Number of marker positions on chr 2 * * n_gen1 Number of different genotypes on chr 1 * * n_gen2 Number of different genotypes on chr 2 * * Genoprob1 Array of genotype probabilities for chr 1 * indexed as Genoprob[gen][pos][ind] * * Genoprob2 Array of genotype probabilities for chr 2 * indexed as Genoprob[gen][pos][ind] * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * weights Vector of positive weights, of length n_ind * * Result_full Result matrix of size [n_pos1 x n_pos2] * containing the joint LODs * Note: indexed as Result[pos2][pos1] * * Result_add Result matrix of size [n_pos2 x n_pos1] * containing the LODs for add've model * also indexed as Result[pos2][pos1] * * maxit Maximum number of iterations for EM * * tol Tolerance for determining convergence of EM * * verbose If >0, print any messages when errors occur * >1, print out log likelihoods at end of EM * and check that log likelihood doesn't go down * >2, print out initial and final log likelihoods * >3, print out log likelihood at each iteration * **********************************************************************/ void scantwo_2chr_em(int n_ind, int n_pos1, int n_pos2, int n_gen1, int n_gen2, double ***Genoprob1, double ***Genoprob2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double **Result_full, double **Result_add, int maxit, double tol, int verbose) { int error_flag, i, i1, i2, k1, k2, j, m, n_col[2], nit[2], r, flag=0; double *param, *oldparam, ***Wts12, **Wts1, **Wts2; double *wts, *work1, *work2, temp, ***Probs, oldllik=0.0, llik[2], sw; int n_col2drop=0, *allcol2drop=0; n_col[0] = (n_gen1+n_gen2-1) + n_addcov + (n_gen1+n_gen2-2)*n_intcov; n_col[1] = n_gen1*n_gen2 + n_addcov + (n_gen1*n_gen2-1)*n_intcov; /* allocate workspaces */ wts = (double *)R_alloc((2*n_gen1*n_gen2+n_gen1+n_gen2)*n_ind, sizeof(double)); reorg_errlod(n_ind, n_gen1, wts, &Wts1); reorg_errlod(n_ind, n_gen2, wts+n_gen1*n_ind, &Wts2); reorg_genoprob(n_ind, n_gen2, n_gen1, wts+(n_gen1+n_gen2)*n_ind, &Wts12); reorg_genoprob(n_ind, n_gen2, n_gen1, wts+(n_gen1*n_gen2+n_gen1+n_gen2)*n_ind, &Probs); work1 = (double *)R_alloc(n_col[1]*n_col[1], sizeof(double)); work2 = (double *)R_alloc(n_col[1], sizeof(double)); param = (double *)R_alloc(n_col[1]+1, sizeof(double)); oldparam = (double *)R_alloc(n_col[1]+1, sizeof(double)); /* recenter phenotype to have mean 0, for possibly increased numerical stability */ for(j=0, temp=0.0; j1) Rprintf(" [%3d %3d] %1d: Initial model had error.\n", i1+1, i2+1, m+1); } else { /* only proceed if there's no error */ oldllik = scantwo_em_loglik(n_ind, n_gen1, n_gen2, Probs, Wts12, Wts1, Wts2, Addcov, n_addcov, Intcov, n_intcov, pheno, weights, oldparam, m, n_col2drop, allcol2drop); if(verbose>2) Rprintf(" [%3d %3d] %1d %9.3lf\n", i1+1, i2+1, m+1, oldllik); for(r=0; r1) Rprintf(" [%3d %3d] %1d %4d: Error in mstep\n", i1+1, i2+1, m+1, r+1); break; } llik[m] = scantwo_em_loglik(n_ind, n_gen1, n_gen2, Probs, Wts12, Wts1, Wts2, Addcov, n_addcov, Intcov, n_intcov, pheno, weights, param, m, n_col2drop, allcol2drop); if(verbose>1) { /* print log likelihood */ if(verbose>2) Rprintf(" [%3d %3d] %1d %4d %9.6lf\n", i1+1, i2+1, m+1, r+1, (llik[m]-oldllik)); if(llik[m] < oldllik-tol) Rprintf("** [%3d %3d] %1d %4d %9.6lf **\n", i1+1, i2+1, m+1, r+1, (llik[m]-oldllik)); if(verbose>3) { /* print parameters */ for(j=0; j1) Rprintf("** [%3d %3d] %1d Didn't converge! **\n", i1+1, i2+1, m+1); warning("Didn't converge!\n"); } } /* no error in getting initial estimates */ } /* loop over model */ if(verbose>1) { /* print likelihoods */ Rprintf(" [%3d %3d] %4d %4d %9.6lf", i1+1, i2+1, nit[0], nit[1], llik[1]-llik[0]); if(llik[1] < llik[0]) Rprintf(" ****"); Rprintf("\n"); } Result_add[i2][i1] = -(llik[0]+sw); Result_full[i2][i1] = -(llik[1]+sw); /* sw = sum[log10(weights)] */ } /* position 2 */ } /* position 1 */ } /********************************************************************** * * scantwo_em_mstep: M-step of the EM algorithm * * n_ind Number of individuals * * n_gen1 Number of possible genotypes at QTL 1 * * n_gen2 Number of possible genotypes at QTL 2 * * Addcov Additive covariates * * n_addcov Number of columns in Addcov * * Intcov Interactive covariates * * n_intcov Number of columns in Intcov * * pheno Phenotypes * * weights Vector of positive weights, of length n_ind * * Wts12 Pr(QTL1=v, QTL2=w | phenotype, model, marker data), * indexed as Wts[v][w][ind] * * Wts1 Marginal weights for QTL 1 * * Wts2 Marginal weights for QTL 2 * * param On output, the updated parameter estimates (incl resid SD) * * full_model If 1, include QTLxQTL interaction * * work1 Workspace of doubles, of length (n_par-1)*(n_par-1) * * work2 Workspace of doubles, of length (n_par-1) * * error_flag Set to 1 if X'X is singular * **********************************************************************/ void scantwo_em_mstep(int n_ind, int n_gen1, int n_gen2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double ***Wts12, double **Wts1, double **Wts2, double *param, int full_model, double *work1, double *work2, int *error_flag, int n_col2drop, int *allcol2drop, int verbose) { int i, j, j2, k1, k2, s, s2, nparm1, info; double rcond, temp; *error_flag=0; nparm1 = n_gen1 + n_gen2-1 + n_addcov + n_intcov*(n_gen1+n_gen2-2); if(full_model) nparm1 += (n_gen1-1)*(n_gen2-1)*(n_intcov+1); /* calculate {E(X)}' y */ for(j=0; j 1) Rprintf("X'X matrix is singular.\n"); *error_flag = 1; } else { for(j=0; j pos1 (for pos2 <= pos1, points to nothing) * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * Result vector to contain LOD scores * triangle (row > col) contains the joint LODs while * the upper triangle (row < col) contains the LODs for * testing epistasis. * Note: indexed as Result[col][row] * * n_col2drop For X chromosome, number of columns to drop * * col2drop For X chromosome, indicates which columns to drop * **********************************************************************/ void scantwo_1chr_binary_hk(int n_ind, int n_pos, int n_gen, double ***Genoprob, double *****Pairprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double **Result, int n_col2drop, int *col2drop, double tol, int maxit, int verbose); /********************************************************************** * * R_scantwo_2chr_binary_hk * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_2chr_binary_hk. * **********************************************************************/ void R_scantwo_2chr_binary_hk(int *n_ind, int *n_pos1, int *n_pos2, int *n_gen1, int *n_gen2, double *genoprob1, double *genoprob2, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *result_full, double *result_add, double *tol, int *maxit, int *verbose); /********************************************************************** * * scantwo_2chr_binary_hk * * Performs a 2-dimensional genome scan using the Haley-Knott * regression method (regressing phenotypes on conditional genotype * probabilities) for a two-QTL model with the two QTL residing on * the different chromosomes. * * n_ind Number of individuals * * n_pos1 Number of marker positions on first chromosome * * n_pos2 Number of marker positions on second chromosome * * n_gen1 Number of different genotypes for first chromosome * * n_gen2 Number of different genotypes for second chromosome * * Genoprob1 Array of conditional genotype probs for 1st chr * Indexed as Genoprob[gen][pos][ind] * * Genoprob2 Array of conditional genotype probs for 2nd chr * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * Result_full Result matrix of size [n_pos1 x n_pos2] * containing the joint LODs * Note: indexed as Result[pos1][pos2] * * Result_add Result matrix of size [n_pos2 x n_pos1] * containing the LODs for add've models * also indexed as Result[pos2][pos1] * **********************************************************************/ void scantwo_2chr_binary_hk(int n_ind, int n_pos1, int n_pos2, int n_gen1, int n_gen2, double ***Genoprob1, double ***Genoprob2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double **Result_full, double **Result_add, double tol, int maxit, int verbose); /* end of scantwo_binary_hk.h */ qtl/src/scantwo_binary_hk.c0000644000176000001440000005611712131541647015557 0ustar ripleyusers/********************************************************************** * * scantwo_binary_hk.c * * copyright (c) 2010, Karl W Broman * * last modified Jun, 2010 * first written Jun, 2010 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for performing a two-dimensional genome scan with * a two-QTL model by Haley-Knott regression * * Contains: R_scantwo_1chr_binary_hk, scantwo_1chr_binary_hk, * R_scantwo_2chr_binary_hk, scantwo_2chr_binary_hk * **********************************************************************/ #include #include #include #include #include #include #include #include #include "util.h" #include "scantwo_binary_hk.h" #define TOL 1e-12 /********************************************************************** * * R_scantwo_1chr_binary_hk * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_1chr_binary_hk. * **********************************************************************/ void R_scantwo_1chr_binary_hk(int *n_ind, int *n_pos, int *n_gen, double *genoprob, double *pairprob, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *result, int *n_col2drop, int *col2drop, double *tol, int *maxit, int *verbose) { double ***Genoprob, **Result, **Addcov, **Intcov, *****Pairprob; reorg_genoprob(*n_ind, *n_pos, *n_gen, genoprob, &Genoprob); reorg_pairprob(*n_ind, *n_pos, *n_gen, pairprob, &Pairprob); reorg_errlod(*n_pos, *n_pos, result, &Result); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scantwo_1chr_binary_hk(*n_ind, *n_pos, *n_gen, Genoprob, Pairprob, Addcov, *n_addcov, Intcov, *n_intcov, pheno, Result, *n_col2drop, col2drop, *tol, *maxit, *verbose); } /********************************************************************** * * scantwo_1chr_binary_hk * * Performs a 2-dimensional genome scan using the Haley-Knott * regression method (regressing phenotypes on conditional genotype * probabilities) for a two-QTL model with the two QTL residing on * the same chromosome. * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Genoprob Array of conditional genotype probabilities * Indexed as Genoprob[gen][pos][ind] * * Pairprob Array of joint genotype probabilities for QTL * pairs; indexed as Pairprob[gen1][gen2][pos1][pos2][ind] * where pos2 > pos1 (for pos2 <= pos1, points to nothing) * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * Result vector to contain LOD scores * triangle (row > col) contains the joint LODs while * the upper triangle (row < col) contains the LODs for * testing epistasis. * Note: indexed as Result[col][row] * * n_col2drop For X chromosome, number of columns to drop * * col2drop For X chromosome, indicates which columns to drop * **********************************************************************/ void scantwo_1chr_binary_hk(int n_ind, int n_pos, int n_gen, double ***Genoprob, double *****Pairprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double **Result, int n_col2drop, int *col2drop, double tol, int maxit, int verbose) { int n_col_a, n_col_f, n_gen_sq, n_col_a_temp, n_col_f_temp; int *jpvt, ny=1, flag; int i, i2, j, k, k2, k3, kk, s; double *dwork, *x, *x_bk, *coef, *resid, *qty, *qraux, *ests; double tol2=TOL, *z, *nu, *wt, *pi, curllik, llik=0.0; int *allcol2drop; n_gen_sq = n_gen*n_gen; /* no. param in additive QTL model */ n_col_a = (n_gen*2-1)+n_addcov+n_intcov*(n_gen-1)*2; /* no. param full model */ n_col_f = n_gen_sq+n_addcov+n_intcov*(n_gen_sq-1); /* expand col2drop */ if(n_col2drop) { allocate_int(n_col_f, &allcol2drop); expand_col2drop(n_gen, n_addcov, n_intcov, col2drop, allcol2drop); } /* allocate space and set things up*/ /* lengths: 2*n_col_f: dwork n_ind*n_col_f: x, x_bk n_col_f: coef, qraux, ests n_ind: resid, qty, z, nu, wt, pi */ dwork = (double *)R_alloc(2*n_ind*n_col_f + n_col_f*5 + n_ind*6, sizeof(double)); x = dwork + 2*n_col_f; x_bk = x + n_ind*n_col_f; coef = x_bk + n_ind*n_col_f; resid = coef + n_col_f; qty = resid + n_ind; qraux = qty + n_ind; z = qraux + n_col_f; nu = z + n_ind; wt = nu + n_ind; pi = wt + n_ind; ests = pi + n_ind; /* length n_col_f */ jpvt = (int *)R_alloc(n_col_f, sizeof(int)); for(i=0; i2) Rprintf("\nadd: %-4d %-4d : %-4d %-10.5lf\n", i+1, i2+1, 0, curllik); /* multiply design matrix by current wts */ for(k=0; k2) Rprintf("add: %-4d %-4d : %-4d %-10.5lf\n", i+1, i2+1, s+1, llik); if(fabs(llik - curllik) < tol) { /* converged? */ flag = 1; break; } curllik = llik; } /* end of IRLS iterations */ if(!flag) warning("Didn't converge."); Result[i2][i] = -llik; /* INTERACTIVE MODEL */ /* fill up X matrix */ for(j=0; j2) Rprintf("\nint: %-4d %-4d : %-4d %-10.5lf\n", i+1, i2+1, 0, curllik); /* multiply design matrix by current wts */ for(k=0; k2) Rprintf("int: %-4d %-4d : %-4d %-10.5lf\n", i+1, i2+1, s+1, llik); if(fabs(llik - curllik) < tol) { /* converged? */ flag = 1; break; } curllik = llik; } /* end of IRLS iterations */ if(!flag) warning("Didn't converge."); Result[i][i2] = -llik; } /* end loop over positions */ } } /********************************************************************** * * R_scantwo_2chr_binary_hk * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_2chr_binary_hk. * **********************************************************************/ void R_scantwo_2chr_binary_hk(int *n_ind, int *n_pos1, int *n_pos2, int *n_gen1, int *n_gen2, double *genoprob1, double *genoprob2, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *result_full, double *result_add, double *tol, int *maxit, int *verbose) { double ***Genoprob1, ***Genoprob2, **Result_full, **Result_add; double **Addcov, **Intcov; reorg_genoprob(*n_ind, *n_pos1, *n_gen1, genoprob1, &Genoprob1); reorg_genoprob(*n_ind, *n_pos2, *n_gen2, genoprob2, &Genoprob2); reorg_errlod(*n_pos1, *n_pos2, result_full, &Result_full); reorg_errlod(*n_pos1, *n_pos2, result_add, &Result_add); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scantwo_2chr_binary_hk(*n_ind, *n_pos1, *n_pos2, *n_gen1, *n_gen2, Genoprob1, Genoprob2, Addcov, *n_addcov, Intcov, *n_intcov, pheno, Result_full, Result_add, *tol, *maxit, *verbose); } /********************************************************************** * * scantwo_2chr_binary_hk * * Performs a 2-dimensional genome scan using the Haley-Knott * regression method (regressing phenotypes on conditional genotype * probabilities) for a two-QTL model with the two QTL residing on * the different chromosomes. * * n_ind Number of individuals * * n_pos1 Number of marker positions on first chromosome * * n_pos2 Number of marker positions on second chromosome * * n_gen1 Number of different genotypes for first chromosome * * n_gen2 Number of different genotypes for second chromosome * * Genoprob1 Array of conditional genotype probs for 1st chr * Indexed as Genoprob[gen][pos][ind] * * Genoprob2 Array of conditional genotype probs for 2nd chr * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * Result_full Result matrix of size [n_pos1 x n_pos2] * containing the joint LODs * Note: indexed as Result[pos1][pos2] * * Result_add Result matrix of size [n_pos2 x n_pos1] * containing the LODs for add've models * also indexed as Result[pos2][pos1] * **********************************************************************/ void scantwo_2chr_binary_hk(int n_ind, int n_pos1, int n_pos2, int n_gen1, int n_gen2, double ***Genoprob1, double ***Genoprob2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double **Result_full, double **Result_add, double tol, int maxit, int verbose) { int n_col_a, n_col_f, n_gen_sq; int *jpvt, ny=1, flag; int i, i2, j, k, k2, k3, kk, s; double *dwork, *x, *x_bk, *coef, *resid, *qty, *qraux, *ests; double tol2=TOL, *z, *nu, *wt, *pi, curllik, llik=0.0; n_gen_sq = n_gen1*n_gen2; /* no. param in additive QTL model */ n_col_a = (n_gen1+n_gen2-1)+n_addcov+n_intcov*(n_gen1+n_gen2-2); /* no. param full model */ n_col_f = n_gen_sq+n_addcov+n_intcov*(n_gen_sq-1); /* allocate space and set things up*/ /* lengths: 2*n_col_f: dwork n_ind*n_col_f: x, x_bk n_col_f: coef, qraux, ests n_ind: resid, qty, z, nu, wt, pi */ dwork = (double *)R_alloc(2*n_ind*n_col_f + n_col_f*5 + n_ind*6, sizeof(double)); x = dwork + 2*n_col_f; x_bk = x + n_ind*n_col_f; coef = x_bk + n_ind*n_col_f; resid = coef + n_col_f; qty = resid + n_ind; qraux = qty + n_ind; z = qraux + n_col_f; nu = z + n_ind; wt = nu + n_ind; pi = wt + n_ind; ests = pi + n_ind; /* length n_col_f */ jpvt = (int *)R_alloc(n_col_f, sizeof(int)); for(i=0; i2) Rprintf("\nadd: %-4d %-4d : %-4d %-10.5lf\n", i+1, i2+1, 0, curllik); /* multiply design matrix by current wts */ for(k=0; k2) Rprintf("add: %-4d %-4d : %-4d %-10.5lf\n", i+1, i2+1, s+1, llik); if(fabs(llik - curllik) < tol) { /* converged? */ flag = 1; break; } curllik = llik; } /* end of IRLS iterations */ if(!flag) warning("Didn't converge."); Result_add[i2][i] = -llik; /* INTERACTIVE MODEL */ /* fill up X matrix */ for(j=0; j2) Rprintf("\nint: %-4d %-4d : %-4d %-10.5lf\n", i+1, i2+1, 0, curllik); /* multiply design matrix by current wts */ for(k=0; k2) Rprintf("int: %-4d %-4d : %-4d %-10.5lf\n", i+1, i2+1, s+1, llik); if(fabs(llik - curllik) < tol) { /* converged? */ flag = 1; break; } curllik = llik; } /* end of IRLS iterations */ if(!flag) warning("Didn't converge."); Result_full[i2][i] = -llik; } /* end loop over positions */ } } /* end of scantwo_binary_hk.c */ qtl/src/scantwo_binary_em.h0000644000176000001440000000657712131541647015570 0ustar ripleyusers/********************************************************************** * * scantwo_binary_em.h * * copyright (c) 2004-6, Karl W Broman * * last modified Oct, 2006 * first written Dec, 2004 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for performing a 2-dimensional genome scan * with a 2-QTL model by interval mapping (the EM algorithm) for * a binary trait. * * Contains: R_scantwo_1chr_binary_em, scantwo_1chr_binary_em, * R_scantwo_2chr_binary_em, scantwo_2chr_binary_em, * scantwo_binary_em_estep, scantwo_binary_em_mstep * **********************************************************************/ void R_scantwo_1chr_binary_em(int *n_ind, int *n_pos, int *n_gen, double *pairprob, double *addcov, int *n_addcov, double *intcov, int *n_intcov, int *pheno, double *start, double *result, int *maxit, double *tol, int *verbose, int *n_col2drop, int *col2drop); void scantwo_1chr_binary_em(int n_ind, int n_pos, int n_gen, double *****Pairprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, int *pheno, double *start, double **Result, int maxit, double tol, int verbose, int n_col2drop, int *col2drop); void R_scantwo_2chr_binary_em(int *n_ind, int *n_pos1, int *n_pos2, int *n_gen1, int *n_gen2, double *genoprob1, double *genoprob2, double *addcov, int *n_addcov, double *intcov, int *n_intcov, int *pheno, double *start, double *result_full, double *result_add, int *maxit, double *tol, int *verbose); void scantwo_2chr_binary_em(int n_ind, int n_pos1, int n_pos2, int n_gen1, int n_gen2, double ***Genoprob1, double ***Genoprob2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, int *pheno, double *start, double **Result_full, double **Result_add, int maxit, double tol, int verbose); void scantwo_binary_em_mstep(int n_ind, int n_gen1, int n_gen2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, int *pheno, double ***Wts12, double *param, int full_model, int n_col, int *error_flag, int n_col2drop, int *allcol2drop, int verbose); void scantwo_binary_em_estep(int n_ind, int n_gen1, int n_gen2, double ***Probs, double ***Wts12, double **Addcov, int n_addcov, double **Intcov, int n_intcov, int *pheno, double *param, int full_model, int rescale, int n_col2drop, int *allcol2drop); double scantwo_binary_em_loglik(int n_ind, int n_gen1, int n_gen2, double ***Probs, double **Addcov, int n_addcov, double **Intcov, int n_intcov, int *pheno, double *param, int full_model, int n_col2drop, int *allcol2drop); /* end of scantwo_binary_em.h */ qtl/src/scantwo_binary_em.c0000644000176000001440000007646712131541647015570 0ustar ripleyusers/********************************************************************** * * scantwo_binary_em.c * * copyright (c) 2004-6, Karl W Broman * * last modified Dec, 2006 * first written Dec, 2004 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for performing a 2-dimensional genome scan * with a 2-QTL model by interval mapping (the EM algorithm) for * a binary trait. * * Contains: R_scantwo_1chr_binary_em, scantwo_1chr_binary_em, * R_scantwo_2chr_binary_em, scantwo_2chr_binary_em, * scantwo_binary_em_estep, scantwo_binary_em_mstep * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include "util.h" #include "scantwo_binary_em.h" #define TOL 1e-12 /********************************************************************** * * R_scantwo_1chr_binary_em * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_1chr_binary_em. * **********************************************************************/ void R_scantwo_1chr_binary_em(int *n_ind, int *n_pos, int *n_gen, double *pairprob, double *addcov, int *n_addcov, double *intcov, int *n_intcov, int *pheno, double *start, double *result, int *maxit, double *tol, int *verbose, int *n_col2drop, int *col2drop) { double **Result, **Addcov, **Intcov, *****Pairprob; reorg_pairprob(*n_ind, *n_pos, *n_gen, pairprob, &Pairprob); reorg_errlod(*n_pos, *n_pos, result, &Result); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scantwo_1chr_binary_em(*n_ind, *n_pos, *n_gen, Pairprob, Addcov, *n_addcov, Intcov, *n_intcov, pheno, start, Result, *maxit, *tol, *verbose, *n_col2drop, col2drop); } /********************************************************************** * * scantwo_1chr_binary_em * * Performs a 2-dimensional genome scan using the EM algorithm * for a two-QTL model with the two QTL residing on the same * chromosome. * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Pairprob Array of joint genotype probabilities for QTL * pairs; indexed as Pairprob[gen1][gen2][pos1][pos2][ind] * where pos2 > pos1 (for pos2 <= pos1, points to nothing) * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * Result Result matrix of size [n_pos x n_pos]; the lower * triangle (row > col) contains the joint LODs while * the upper triangle (row < col) contains the LODs for * an additive model. * Note: indexed as Result[col][row] * * maxit Maximum number of iterations for EM * * tol Tolerance for determining convergence of EM * * verbose If >0, print any messages when errors occur * >1, print out log likelihoods at end of EM * and check that log likelihood doesn't go down * >2, print out initial and final log likelihoods * >3, print out log likelihood at each iteration * **********************************************************************/ void scantwo_1chr_binary_em(int n_ind, int n_pos, int n_gen, double *****Pairprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, int *pheno, double *start, double **Result, int maxit, double tol, int verbose, int n_col2drop, int *col2drop) { int error_flag, i, i1, i2, k1, k2, j, m, n_col[2], n_col_rev[2], nit[2], r, flag=0; double *param, *oldparam, ***Wts12, pardif; double *wts, ***Probs, oldllik=0.0, llik[2]; int *allcol2drop; n_col[0] = (2*n_gen-1) + n_addcov + 2*(n_gen-1)*n_intcov; n_col[1] = n_gen*n_gen + n_addcov + (n_gen*n_gen-1)*n_intcov; /* expand col2drop */ if(n_col2drop) { allocate_int(n_col[1], &allcol2drop); expand_col2drop(n_gen, n_addcov, n_intcov, col2drop, allcol2drop); } /* revised numbers of parameters */ if(n_col2drop) { n_col_rev[0] = 0; for(i=0; i1) Rprintf(" [%3d %3d] %1d: Initial model had error.\n", i1+1, i2+1, m+1); } else { /* only proceed if there's no error */ oldllik = scantwo_binary_em_loglik(n_ind, n_gen, n_gen, Probs, Addcov, n_addcov, Intcov, n_intcov, pheno, oldparam, m, n_col2drop, allcol2drop); if(verbose>2) Rprintf(" [%3d %3d] %1d %9.3lf\n", i1+1, i2+1, m+1, oldllik); for(j=0; j1) Rprintf(" [%3d %3d] %1d %4d: Error in mstep\n", i1+1, i2+1, m+1, r+1); break; } llik[m] = scantwo_binary_em_loglik(n_ind, n_gen, n_gen, Probs, Addcov, n_addcov, Intcov, n_intcov, pheno, param, m, n_col2drop, allcol2drop); if(verbose>1) { if(verbose>2) { pardif = fabs(param[0]-oldparam[0]); for(j=1; j3) { /* print parameters */ for(j=0; j1) Rprintf("** [%3d %3d] %1d Didn't converge! **\n", i1+1, i2+1, m+1); warning("Didn't converge!\n"); } } /* no error in getting initial estimates */ } /* loop over model */ if(verbose>1) { /* print likelihoods */ Rprintf(" [%3d %3d] %4d %4d %9.6lf %9.6lf %9.6lf", i1+1, i2+1, nit[0], nit[1], llik[0], llik[1], llik[1]-llik[0]); if(llik[1] < llik[0]) Rprintf(" ****"); Rprintf("\n"); } Result[i2][i1] = -llik[0]; Result[i1][i2] = -llik[1]; } /* position 2 */ } /* position 1 */ } /********************************************************************** * * R_scantwo_2chr_binary_em * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scantwo_2chr_binary_em. * **********************************************************************/ void R_scantwo_2chr_binary_em(int *n_ind, int *n_pos1, int *n_pos2, int *n_gen1, int *n_gen2, double *genoprob1, double *genoprob2, double *addcov, int *n_addcov, double *intcov, int *n_intcov, int *pheno, double *start, double *result_full, double *result_add, int *maxit, double *tol, int *verbose) { double **Result_full, **Result_add, **Addcov, **Intcov; double ***Genoprob1, ***Genoprob2; reorg_genoprob(*n_ind, *n_pos1, *n_gen1, genoprob1, &Genoprob1); reorg_genoprob(*n_ind, *n_pos2, *n_gen2, genoprob2, &Genoprob2); reorg_errlod(*n_pos1, *n_pos2, result_full, &Result_full); reorg_errlod(*n_pos1, *n_pos2, result_add, &Result_add); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scantwo_2chr_binary_em(*n_ind, *n_pos1, *n_pos2, *n_gen1, *n_gen2, Genoprob1, Genoprob2, Addcov, *n_addcov, Intcov, *n_intcov, pheno, start, Result_full, Result_add, *maxit, *tol, *verbose); } /********************************************************************** * * scantwo_2chr_binary_em * * Performs a 2-dimensional genome scan using the EM algorithm * for a two-QTL model with the two QTL residing on the same * chromosome. * * n_ind Number of individuals * * n_pos1 Number of marker positions on chr 1 * * n_pos2 Number of marker positions on chr 2 * * n_gen1 Number of different genotypes on chr 1 * * n_gen2 Number of different genotypes on chr 2 * * Genoprob1 Array of genotype probabilities for chr 1 * indexed as Genoprob[gen][pos][ind] * * Genoprob2 Array of genotype probabilities for chr 2 * indexed as Genoprob[gen][pos][ind] * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * Result_full Result matrix of size [n_pos1 x n_pos2] * containing the joint LODs * Note: indexed as Result[pos2][pos1] * * Result_add Result matrix of size [n_pos2 x n_pos1] * containing the LODs for additive models * also indexed as Result[pos2][pos1] * * maxit Maximum number of iterations for EM * * tol Tolerance for determining convergence of EM * * verbose If >0, print any messages when errors occur * >1, print out log likelihoods at end of EM * and check that log likelihood doesn't go down * >2, print out initial and final log likelihoods * >3, print out log likelihood at each iteration * **********************************************************************/ void scantwo_2chr_binary_em(int n_ind, int n_pos1, int n_pos2, int n_gen1, int n_gen2, double ***Genoprob1, double ***Genoprob2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, int *pheno, double *start, double **Result_full, double **Result_add, int maxit, double tol, int verbose) { int error_flag, i1, i2, k1, k2, j, m, n_col[2], nit[2], r, flag=0; double *param, *oldparam, ***Wts12; double *wts, ***Probs, oldllik=0.0, llik[2]; int n_col2drop=0, *allcol2drop=0; n_col[0] = (n_gen1+n_gen2-1) + n_addcov + (n_gen1+n_gen2-2)*n_intcov; n_col[1] = n_gen1*n_gen2 + n_addcov + (n_gen1*n_gen2-1)*n_intcov; /* allocate workspaces */ wts = (double *)R_alloc((2*n_gen1*n_gen2+n_gen1+n_gen2)*n_ind, sizeof(double)); reorg_genoprob(n_ind, n_gen2, n_gen1, wts+(n_gen1+n_gen2)*n_ind, &Wts12); reorg_genoprob(n_ind, n_gen2, n_gen1, wts+(n_gen1*n_gen2+n_gen1+n_gen2)*n_ind, &Probs); param = (double *)R_alloc(n_col[1], sizeof(double)); oldparam = (double *)R_alloc(n_col[1], sizeof(double)); /* begin loop over pairs of positions */ for(i1=0; i11) Rprintf(" [%3d %3d] %1d: Initial model had error.\n", i1+1, i2+1, m+1); } else { /* only proceed if there's no error */ oldllik = scantwo_binary_em_loglik(n_ind, n_gen1, n_gen2, Probs, Addcov, n_addcov, Intcov, n_intcov, pheno, oldparam, m, n_col2drop, allcol2drop); if(verbose>2) Rprintf(" [%3d %3d] %1d %9.3lf\n", i1+1, i2+1, m+1, oldllik); for(j=0; j1) Rprintf(" [%3d %3d] %1d %4d: Error in mstep\n", i1+1, i2+1, m+1, r+1); break; } llik[m] = scantwo_binary_em_loglik(n_ind, n_gen1, n_gen2, Probs, Addcov, n_addcov, Intcov, n_intcov, pheno, param, m, n_col2drop, allcol2drop); if(verbose>1) { /* print log likelihood */ if(verbose>2) Rprintf(" [%3d %3d] %1d %4d %9.6lf\n", i1+1, i2+1, m+1, r+1, (llik[m]-oldllik)); if(llik[m] < oldllik-tol) Rprintf("** [%3d %3d] %1d %4d %9.6lf **\n", i1+1, i2+1, m+1, r+1, (llik[m]-oldllik)); if(verbose>3) { /* print parameters */ for(j=0; j1) Rprintf("** [%3d %3d] %1d Didn't converge! **\n", i1+1, i2+1, m+1); warning("Didn't converge!\n"); } } /* no error in getting initial estimates */ } /* loop over model */ if(verbose>1) { /* print likelihoods */ Rprintf(" [%3d %3d] %4d %4d %9.6lf %9.6lf %9.6lf", i1+1, i2+1, nit[0], nit[1], llik[0], llik[1], llik[1]-llik[0]); if(llik[1] < llik[0]) Rprintf(" ****"); Rprintf("\n"); } Result_add[i2][i1] = -llik[0]; Result_full[i2][i1] = -llik[1]; } /* position 2 */ } /* position 1 */ } /********************************************************************** * * scantwo_binary_em_mstep: M-step of the EM algorithm * * n_ind Number of individuals * * n_gen1 Number of possible genotypes at QTL 1 * * n_gen2 Number of possible genotypes at QTL 2 * * Addcov Additive covariates * * n_addcov Number of columns in Addcov * * Intcov Interactive covariates * * n_intcov Number of columns in Intcov * * pheno Phenotypes * * Wts12 Pr(QTL1=v, QTL2=w | phenotype, model, marker data), * indexed as Wts[v][w][ind] * * param On output, the updated parameter estimates (incl resid SD) * * full_model If 1, include QTLxQTL interaction * * n_col * * error_flag Set to 1 if X'X is singular * **********************************************************************/ void scantwo_binary_em_mstep(int n_ind, int n_gen1, int n_gen2, double **Addcov, int n_addcov, double **Intcov, int n_intcov, int *pheno, double ***Wts12, double *param, int full_model, int n_col, int *error_flag, int n_col2drop, int *allcol2drop, int verbose) { int i, j, j2, k1, k2, s, s2, info, ss; double rcond, temp, *junk; double *grad, *jac, **Jac; double *tf1, ***f1, *tf2, ***f2; double *tfitted, **fitted; /* allocate space */ allocate_double(n_col, &junk); allocate_double(n_col, &grad); allocate_double(n_col*n_col, &jac); reorg_errlod(n_col, n_col, jac, &Jac); allocate_double(n_gen1*n_gen2*n_ind, &tf1); allocate_double(n_gen1*n_gen2*n_ind, &tf2); reorg_genoprob(n_ind, n_gen2, n_gen1, tf1, &f1); reorg_genoprob(n_ind, n_gen2, n_gen1, tf2, &f2); allocate_double(n_gen1*n_gen2, &tfitted); reorg_errlod(n_gen2, n_gen1, tfitted, &fitted); *error_flag=0; for(j=0; j 1) Rprintf("X'X matrix is singular.\n"); *error_flag = 1; } else { F77_CALL(dposl)(jac, &n_col, &n_col, grad); for(j=0; j #include #include #include #include #include #include #include #include "util.h" #include "scanone_np.h" /********************************************************************** * * R_scanone_np * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scanone_np. * **********************************************************************/ void R_scanone_np(int *n_ind, int *n_pos, int *n_gen, double *genoprob, double *pheno, double *result) { double ***Genoprob; reorg_genoprob(*n_ind, *n_pos, *n_gen, genoprob, &Genoprob); scanone_np(*n_ind, *n_pos, *n_gen, Genoprob, pheno, result); } /********************************************************************** * * scanone_np * * Performs genome scan using a non-parametric version of * interval mapping. (The multipoint genotype probabilities have * already been calculated in calc.genoprob). * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Genoprob Array of conditional genotype probabilities * (indexed as Genoprob[gen][pos][ind] * * pheno Phenotype data, as a vector of ranks * * result Result vector of length n_pos (the lod score) * **********************************************************************/ void scanone_np(int n_ind, int n_pos, int n_gen, double ***Genoprob, double *pheno, double *result) { int i, j, k; double sp, ssp, sr, temp; for(i=0; i #include #include #include #include #include #include #include #include "util.h" #include "scanone_mr.h" #define TOL 1e-12 /********************************************************************** * * R_scanone_mr * * Wrapper for call from R; reorganizes genotype and result matrix * and calls scanone_mr. * **********************************************************************/ void R_scanone_mr(int *n_ind, int *n_pos, int *n_gen, int *geno, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *weights, double *result) { int **Geno; double **Addcov, **Intcov; reorg_geno(*n_ind, *n_pos, geno, &Geno); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scanone_mr(*n_ind, *n_pos, *n_gen, Geno, Addcov, *n_addcov, Intcov, *n_intcov, pheno, weights, result); } /********************************************************************** * * scanone_mr * * Performs genome scan using marker regression. * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Geno Genotype matrix * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * weights Vector of positive weights, of length n_ind * * result Vector of length n_pos, to contain the RSS * **********************************************************************/ void scanone_mr(int n_ind, int n_pos, int n_gen, int **Geno, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double *result) { int ny, *jpvt, k, i, j, ncol, ncol0, k2, s; double *work, *x, *qty, *qraux, *coef, *resid, tol, rss0, *y; double rss0_allind=0.0; int *which_ind, this_n_ind, done_allind=0; /* tolerance for linear regression */ tol = TOL; ncol = n_gen + (n_gen-1)*n_intcov+n_addcov; ncol0 = n_addcov+1; /* allocate space and set things up*/ x = (double *)R_alloc(n_ind*ncol, sizeof(double)); coef = (double *)R_alloc(ncol, sizeof(double)); resid = (double *)R_alloc(n_ind, sizeof(double)); qty = (double *)R_alloc(n_ind, sizeof(double)); jpvt = (int *)R_alloc(ncol, sizeof(int)); qraux = (double *)R_alloc(ncol, sizeof(double)); work = (double *)R_alloc(2 * ncol, sizeof(double)); which_ind = (int *)R_alloc(n_ind, sizeof(int)); y = (double *)R_alloc(n_ind, sizeof(double)); ny = 1; for(j=0; j 0) { which_ind[this_n_ind] = j; y[this_n_ind] = pheno[j]; this_n_ind++; } } if((this_n_ind < n_ind) || !done_allind) { /* the above is to avoid repeatedly doing the null model regression in the case of complete marker data */ /* null model */ /* fill up X matrix */ for(j=0; j #include #include #include #include #include #include #include #include "util.h" #include "lapackutil.h" #include "scanone_imp.h" #define TOL 1e-12 /********************************************************************** * * R_scanone_imp * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scanone_imp. * **********************************************************************/ void R_scanone_imp(int *n_ind, int *n_pos, int *n_gen, int *n_draws, int *draws, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, int *nphe, double *weights, double *result, int *ind_noqtl) { /* reorganize draws */ int ***Draws; double **Addcov, **Intcov, **Result; reorg_draws(*n_ind, *n_pos, *n_draws, draws, &Draws); reorg_errlod(*n_pos, *nphe, result, &Result); /* reorganize addcov and intcov (if they are not empty) */ /* currently reorg_errlod function is used to reorganize the data */ if(*n_addcov != 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov != 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scanone_imp(*n_ind, *n_pos, *n_gen, *n_draws, Draws, Addcov, *n_addcov, Intcov, *n_intcov, pheno, *nphe, weights, Result, ind_noqtl); } /********************************************************************** * * scanone_imp * * Performs genome scan using the pseudomarker algorithm (imputation) * method of Sen and Churchill (2001). * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * n_draws Number of impiutations * * Draws Array of genotype imputations, indexed as * Draws[repl][mar][ind] * * Addcov Additive covariates matrix, Addcov[mar][ind] * * n_addcov Number of additive covariates * * Intcov Interacting covariates matrix, Intcov[mar][ind] * * n_intcov Number of interacting covariates * * pheno Phenotype data, as a vector/matrix * * nphe Number of phenotypes * * weights Vector of positive weights, of length n_ind * * Result Matrix of size [n_pos x nphe]; upon return, contains * the "LPD" (log posterior distribution of QTL location). * * ind_noqtl Indicators (0/1) of which individuals should be excluded * from QTL effects. * **********************************************************************/ void scanone_imp(int n_ind, int n_pos, int n_gen, int n_draws, int ***Draws, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, int nphe, double *weights, double **Result, int *ind_noqtl) { /* create local variables */ int i, j, k, nrss, sizefull, sizenull, lwork, multivar=0; double **lrss0, **lrss1, *LOD, dtmp, *tmppheno, *dwork_null, *dwork_full; /* if number of pheno is 1 or do multivariate model, we have only one rss at each position. Otherwise, we have one rss for each phenotype */ if( (nphe==1) || (multivar==1) ) nrss = 1; else nrss = nphe; /* number of columns in design matrices for null and full model */ sizenull = 1 + n_addcov; sizefull = n_gen + n_addcov + n_intcov*(n_gen-1); /* allocate memory */ tmppheno = (double *) R_alloc(n_ind*nphe, sizeof(double)); /* for null model */ lwork = 3*sizenull + MAX(n_ind, nphe); if(multivar == 1) /* request to do multivariate normal model */ dwork_null = (double *)R_alloc(sizenull+lwork+2*n_ind*sizenull+n_ind*nphe+nphe*nphe+sizenull*nphe, sizeof(double)); else /* normal model, don't need to allocate memory for rss_det, which is nphe^2 */ dwork_null = (double *)R_alloc(sizenull+lwork+2*n_ind*sizenull+n_ind*nphe+sizenull*nphe, sizeof(double)); /* for full model */ lwork = 3*sizefull + MAX(n_ind, nphe); if(multivar == 1) /* request to do multivariate normal model */ dwork_full = (double *)R_alloc(sizefull+lwork+2*n_ind*sizefull+n_ind*nphe+nphe*nphe+sizefull*nphe, sizeof(double)); else /* normal model, don't need to allocate memory for rss_det, which is nphe^2 */ dwork_full = (double *)R_alloc(sizefull+lwork+2*n_ind*sizefull+n_ind*nphe+sizefull*nphe, sizeof(double)); /* for rss' and lod scores - we might not need all of this memory */ lrss0 = (double **)R_alloc(n_draws, sizeof(double*)); lrss1 = (double **)R_alloc(n_draws, sizeof(double*)); /*LOD = (double **)R_alloc(n_draws, sizeof(double*));*/ for(i=0; i 1) { for(k=0; k #include #include #include #include #include #include #include #include "util.h" #include "scanone_hk_binary.h" #define TOL 1e-12 /********************************************************************** * * R_scanone_hk_binary * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scanone_hk. * **********************************************************************/ void R_scanone_hk_binary(int *n_ind, int *n_pos, int *n_gen, double *genoprob, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *result, double *tol, int *maxit, int *verbose, int *ind_noqtl) { double ***Genoprob, **Addcov, **Intcov; reorg_genoprob(*n_ind, *n_pos, *n_gen, genoprob, &Genoprob); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scanone_hk_binary(*n_ind, *n_pos, *n_gen, Genoprob, Addcov, *n_addcov, Intcov, *n_intcov, pheno, result, *tol, *maxit, *verbose, ind_noqtl); } /********************************************************************** * * scanone_hk_binary * * Performs genome scan using the Haley-Knott regression method * for a binary trait * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Genoprob Array of conditional genotype probabilities * Indexed as Genoprob[gen][pos][ind] * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * result vector of length n_ind, to contain the log10 likelihood values * * tol tolerance for convergence * * maxit maximum number of iterations * * verbose if TRUE, give some output * * ind_noqtl Indicators (0/1) of which individuals should be excluded * from QTL effects. * **********************************************************************/ void scanone_hk_binary(int n_ind, int n_pos, int n_gen, double ***Genoprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *result, double tol, int maxit, int verbose, int *ind_noqtl) { int i, j, k, k2, kk, s, ncolx, thepos, flag, ny, *jpvt; double *dwork, *x, *x_bk, *coef, *resid, *qty, *qraux, *ests; double *z, *nu, *wt, *pi, tol2; double curllik, llik=0.0; ncolx = n_gen + (n_gen-1)*n_intcov+n_addcov; tol2 = TOL; ny = 1; /* allocate space and set things up*/ /* lengths: 2*ncolx: dwork n_ind*ncolx: x, x_bk ncolx: coef, qraux, ests n_ind: resid, qty, z, nu, wt, pi */ dwork = (double *)R_alloc(2*n_ind*ncolx + ncolx*5 + n_ind*6, sizeof(double)); x = dwork + 2*ncolx; x_bk = x + n_ind*ncolx; coef = x_bk + n_ind*ncolx; resid = coef + ncolx; qty = resid + n_ind; qraux = qty + n_ind; z = qraux + ncolx; nu = z + n_ind; wt = nu + n_ind; pi = wt + n_ind; ests = pi + n_ind; /* length ncolx */ jpvt = (int *)R_alloc(ncolx, sizeof(int)); for(thepos=0; thepos1) Rprintf("\t%-5d %-5d %-10.5lf\n", thepos+1, 0, curllik); /* multiply design matrix by current wts */ for(i=0; i1) { for(i=0; i2) Rprintf("\t\t%-4d %1lf %-7.5lf\n", j, pheno[j], pi[j]); /* multiply design matrix by new weights */ for(i=0; i1) Rprintf("\t%-5d %-5d %-10.5lf\n", thepos+1, s+1, llik); if(fabs(llik - curllik) < tol) { /* converged? */ flag = 1; break; } curllik = llik; } /* end of IRLS iterations */ if(!flag) warning("Didn't converge."); result[thepos] = llik; if(verbose) Rprintf("%-5d final %-10.5lf\n", thepos+1, llik); } /* end loop over positions */ } /* end of scanone_hk_binary.c */ qtl/src/scanone_hk.h0000644000176000001440000000573712131541647014172 0ustar ripleyusers/********************************************************************** * * scanone_hk.h * * copyright (c) 2001-2010, Karl W Broman * * last modified Jul, 2010 * first written Nov, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for performing a genome scan with a * single QTL model by Haley-Knott regression * * Contains: R_scanone_hk, scanone_hk * **********************************************************************/ /********************************************************************** * * R_scanone_hk * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scanone_hk. * **********************************************************************/ void R_scanone_hk(int *n_ind, int *n_pos, int *n_gen, double *genoprob, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, int *nphe, double *weights, double *result, int *ind_noqtl); /********************************************************************** * * scanone_hk * * Performs genome scan using the Haley-Knott regression method * (regressing phenotypes on conditional genotype probabilities; the * multipoint genotype probabilities have already been calculated in * calc.genoprob) * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Genoprob Array of conditional genotype probabilities * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * nphe Number of phenotypes * * weights Vector of positive weights, of length n_ind * * Result Result matrix of size [n_pos x (nphe)] containing the * LOD scores for each phenotype * * ind_noqtl Indicators (0/1) of which individuals should be excluded * from QTL effects. * **********************************************************************/ void scanone_hk(int n_ind, int n_pos, int n_gen, double ***Genoprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, int nphe, double *weights, double **Result, int *ind_noqtl); /* end of scanone_hk.h */ qtl/src/scanone_hk.c0000644000176000001440000002326712131541647014163 0ustar ripleyusers/********************************************************************** * * scanone_hk.c * * copyright (c) 2001-2010, Karl W Broman * * last modified Jul, 2010 * first written Nov, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for performing a genome scan with a * single QTL model by Haley-Knott regression * * Contains: R_scanone_hk, scanone_hk * **********************************************************************/ #include #include #include #include #include #include #include #include #include "util.h" #include "lapackutil.h" #include "scanone_hk.h" #define TOL 1e-12 /********************************************************************** * * R_scanone_hk * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scanone_hk. * **********************************************************************/ void R_scanone_hk(int *n_ind, int *n_pos, int *n_gen, double *genoprob, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, int *nphe, double *weights, double *result, int *ind_noqtl) { double ***Genoprob, **Result, **Addcov, **Intcov; reorg_genoprob(*n_ind, *n_pos, *n_gen, genoprob, &Genoprob); reorg_errlod(*n_pos, *nphe, result, &Result); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scanone_hk(*n_ind, *n_pos, *n_gen, Genoprob, Addcov, *n_addcov, Intcov, *n_intcov, pheno, *nphe, weights, Result, ind_noqtl); } /********************************************************************** * * scanone_hk * * Performs genome scan using the Haley-Knott regression method * (regressing phenotypes on conditional genotype probabilities; the * multipoint genotype probabilities have already been calculated in * calc.genoprob) * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Genoprob Array of conditional genotype probabilities * Indexed as Genoprob[gen][pos][ind] * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * nphe number of phenotypes * * weights Vector of positive weights, of length n_ind * * Result Result matrix of size [n_pos x (nphe)] containing the * LOD scores for each phenotype * * ind_noqtl Indicators (0/1) of which individuals should be excluded * from QTL effects. * **********************************************************************/ void scanone_hk(int n_ind, int n_pos, int n_gen, double ***Genoprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, int nphe, double *weights, double **Result, int *ind_noqtl) { int i, j, k, k2, s, rank, info, nrss, lwork, ncolx, ind_idx, multivar=0; double *dwork, *x, *x_bk, *singular, *yfit, *rss, *rss_det=0, *work, *tmppheno, *coef; double alpha=1.0, beta=0.0, tol=TOL, dtmp; /* number of rss's, currently multivar is not used so it's always 0 */ if( (nphe==1) || (multivar==1) ) nrss = 1; else nrss = nphe; /* allocate memory */ rss = (double *)R_alloc(nrss, sizeof(double)); tmppheno = (double *)R_alloc(n_ind*nphe, sizeof(double)); /* number of columns in design matrix X for full model */ ncolx = n_gen + (n_gen-1)*n_intcov+n_addcov; /*ncol0 = n_addcov+1;*/ rank = ncolx; /* allocate space and set things up*/ /* x = (double *)R_alloc(n_ind*ncol, sizeof(double)); coef = (double *)R_alloc(ncol, sizeof(double)); resid = (double *)R_alloc(n_ind, sizeof(double)); qty = (double *)R_alloc(n_ind, sizeof(double)); jpvt = (int *)R_alloc(ncol, sizeof(int)); qraux = (double *)R_alloc(ncol, sizeof(double)); work = (double *)R_alloc(2 * ncol, sizeof(double)); */ lwork = 3*ncolx+ MAX(n_ind, nphe); if(multivar == 1) dwork = (double *)R_alloc((2*n_ind+1)*ncolx+lwork+(n_ind+nphe+ncolx)*nphe, sizeof(double)); else dwork = (double *)R_alloc((2*n_ind+1)*ncolx+lwork+(n_ind+ncolx)*nphe, sizeof(double)); /* split the memory block */ singular = dwork; work = singular + ncolx; x = work + lwork; x_bk = x + n_ind*ncolx; yfit = x_bk + n_ind*ncolx; coef = yfit + n_ind*nphe; if(multivar == 1) rss_det = coef + ncolx*nphe; /* NULL model is now done in R ******************** (only do it once!) for(j=0; j #include #include #include #include #include #include #include #include #include "util.h" #include "scanone_em.h" #include "scanone_em_covar.h" #define TOL 1e-12 /********************************************************************** * * scanone_em_covar * * Performs genome scan using interval mapping in the presence of * covariates. (The multipoint genotype probabilities have already * been calculated in calc.genoprob) * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Genoprob Array of conditional genotype probabilities * indexed as Genoprob[gen][pos][ind] * * Addcov Matrix of additive covariates indexed as * Addcov[cov][ind] * * n_addcov Number of columns in Addcov * * Intcov Matrix of interactive covariates indexed as * Intcov[cov][ind] * * n_intcov Number of columns in Intcov * * pheno Phenotype data, as a vector * * weights Vector of positive weights, of length n_ind * * result Result vector of length n_pos; upon return, contains * the LOD scores. * * maxit Maximum number of iterations in the EM algorithm * * tol Tolerance for determining convergence in EM * * verbose If 1, print out log likelihood at each iteration * * ind_noqtl Indicators (0/1) of which individuals should be excluded * from QTL effects. * **********************************************************************/ void scanone_em_covar(int n_ind, int n_pos, int n_gen, double ***Genoprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double *result, int maxit, double tol, int verbose, int *ind_noqtl) { int i, j, k, s, flag=0, n_par; double **wts, *param, *oldparam; int ncol0, error_flag; double llik, oldllik=0.0, *work1, *work2, temp, sw; /* recenter phenotype to have mean 0, for possibly increased numerical stability */ for(i=0, temp=0.0; i tol*(fabs(oldparam[k])+tol*100.0)) { flag = 1; break; } } if(!flag) break; for(k=0; k #include #include #include #include #include #include #include #include "util.h" #include "scanone_em.h" #include "scanone_em_covar.h" /********************************************************************** * * R_scanone_em * * Wrapper for call from R; reorganizes genotype prob * and calls scanone_em. * **********************************************************************/ void R_scanone_em(int *n_ind, int *n_pos, int *n_gen, double *genoprob, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *weights, double *result, int *std_start, double *start, int *maxit, double *tol, int *verbose, int *ind_noqtl) { double ***Genoprob, **work, **Addcov, **Intcov; double *means; reorg_genoprob(*n_ind, *n_pos, *n_gen, genoprob, &Genoprob); allocate_dmatrix(4,*n_gen, &work); allocate_double(*n_gen, &means); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); if(*n_addcov == 0 && *n_intcov == 0) { /* no covariates */ /* Read R's random seed */ GetRNGstate(); scanone_em(*n_ind, *n_pos, *n_gen, Genoprob, pheno, weights, result, *std_start, start, *maxit, *tol, work, means); /* Write R's random seed */ PutRNGstate(); } else { /* interval mapping with covariates */ scanone_em_covar(*n_ind, *n_pos, *n_gen, Genoprob, Addcov, *n_addcov, Intcov, *n_intcov, pheno, weights, result, *maxit, *tol, *verbose, ind_noqtl); } } /********************************************************************** * * scanone_em * * Performs genome scan using interval mapping. (The multipoint * genotype probabilities have already been calculated in * calc.genoprob) * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Genoprob Array of conditional genotype probabilities * * pheno Phenotype data, as a vector * * weights Vector of positive weights, of length n_ind * * result Upon exit, the LOD scores * * std_start If 1, use the usual starting points [initial weights as * Pr(QTL geno | marker genotypes)] * If -1, use iid Bernoulli(1/2) for initial weights. * If 0, use the specified values for the means and SD as * the starting point. * * start If std_start = 0, use these as initial estimates of the * genotype-specific means and the residual SD. * * maxit Maximum number of iterations in the EM algorithm * * tol Tolerance for determining convergence in EM * * work Workspace of dimension 4 x n_gen * * means Space for the phenotype means at each genotype * **********************************************************************/ void scanone_em(int n_ind, int n_pos, int n_gen, double ***Genoprob, double *pheno, double *weights, double *result, int std_start, double *start, int maxit, double tol, double **work, double *means) { int i, j, k, s, flag=0; double s1, s2, s3, oldsig, r, sigma=0.0; /* turn weights back into usual scale rather than sqrt(weights) */ for(j=0; j tol*(fabs(work[1][k])+tol*100.0)) { flag = 1; break; } } if(fabs(sigma - oldsig) > tol*(oldsig+tol*100.0)) flag = 1; if(!flag) break; oldsig = sigma; for(k=0; k #include #include #include #include #include #include #include #include #include "util.h" #include "scanone_ehk.h" #define TOL 1e-12 /********************************************************************** * * R_scanone_ehk * * Wrapper for call from R; reorganizes genotype prob and result matrix * and calls scanone_ehk. * **********************************************************************/ void R_scanone_ehk(int *n_ind, int *n_pos, int *n_gen, double *genoprob, double *addcov, int *n_addcov, double *intcov, int *n_intcov, double *pheno, double *weights, double *result, int *maxit, double *tol) { double ***Genoprob, **Addcov, **Intcov; reorg_genoprob(*n_ind, *n_pos, *n_gen, genoprob, &Genoprob); /* reorganize addcov and intcov (if they are not empty) */ if(*n_addcov > 0) reorg_errlod(*n_ind, *n_addcov, addcov, &Addcov); if(*n_intcov > 0) reorg_errlod(*n_ind, *n_intcov, intcov, &Intcov); scanone_ehk(*n_ind, *n_pos, *n_gen, Genoprob, Addcov, *n_addcov, Intcov, *n_intcov, pheno, weights, result, *maxit, *tol); } /********************************************************************** * * scanone_ehk * * Performs genome scan using the extended Haley-Knott method * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * Genoprob Array of conditional genotype probabilities * Indexed as Genoprob[gen][pos][ind] * * Addcov Matrix of additive covariates: Addcov[cov][ind] * * n_addcov Number of columns of Addcov * * Intcov Number of interactive covariates: Intcov[cov][ind] * * n_intcov Number of columns of Intcov * * pheno Phenotype data, as a vector * * weights Vector of positive weights, of length n_ind * * result Vector of length n_pos, to contain the LOD scores * * maxit Maximum number of iterations in the EM algorithm * * tol Tolerance for determining convergence in EM * **********************************************************************/ void scanone_ehk(int n_ind, int n_pos, int n_gen, double ***Genoprob, double **Addcov, int n_addcov, double **Intcov, int n_intcov, double *pheno, double *weights, double *result, int maxit, double tol) { int ny, *jpvt, k, i, j, ncol, k2, k3, k4, s; int info, error_flag, flag; double *work, *x, *qty, *qraux, *coef, *resid, tol2; double sigsq, *coef_cur, sigsq_cur, loglik=0.0, loglik_cur; double *m, *v, *z, *y, *wtsq; double *rhs, *lhs, **LHS, rcond; /* tolerance for linear regression */ tol2 = TOL; ncol = n_gen + (n_gen-1)*n_intcov+n_addcov; /* allocate space and set things up*/ x = (double *)R_alloc(n_ind*ncol, sizeof(double)); coef = (double *)R_alloc(ncol, sizeof(double)); coef_cur = (double *)R_alloc(ncol, sizeof(double)); resid = (double *)R_alloc(n_ind, sizeof(double)); qty = (double *)R_alloc(n_ind, sizeof(double)); jpvt = (int *)R_alloc(ncol, sizeof(int)); qraux = (double *)R_alloc(ncol, sizeof(double)); work = (double *)R_alloc(2 * ncol, sizeof(double)); m = (double *)R_alloc(n_ind, sizeof(double)); v = (double *)R_alloc(n_ind, sizeof(double)); z = (double *)R_alloc(n_ind, sizeof(double)); y = (double *)R_alloc(n_ind, sizeof(double)); wtsq = (double *)R_alloc(n_ind, sizeof(double)); rhs = (double *)R_alloc(ncol, sizeof(double)); lhs = (double *)R_alloc(ncol*ncol, sizeof(double)); reorg_errlod(ncol, ncol, lhs, &LHS); ny = 1; for(j=0; j #include #include #include #include #include #include #include #include "util.h" #include "ripple.h" /********************************************************************** * * ripple * * This function inspects each of a set of marker orders and counts * the number of obligate crossovers for each order. * * Input: * * n_ind = no. individuals * * n_mar = no. markers * * geno = genotype data [n_ind x n_mar] * * n_orders = no. different orders * * orders = matrix of marker orders [n_orders x n_mar] * (Note: each row contains {0, 1, ..., n_mar-1} * * nxo = the output; the number of obligate crossovers for each * order (a vector of length n_orders) * * print_by = How often to print out information? * * countxo = function to count the number of obligate crossovers in * an interval and to update the current inferred genotype * (specific for backcross, intercross, and four-way cross) * **********************************************************************/ void ripple(int n_ind, int n_mar, int *geno, int n_orders, int *orders, int *nxo, int print_by, int countxo(int *curgen, int nextgen)) { int **Geno, **Orders; int i, j, k, curgen; /* reorganize genotype data and marker order matrix */ reorg_geno(n_ind, n_mar, geno, &Geno); reorg_geno(n_orders, n_mar, orders, &Orders); for(i=0; i #include #include #include #include #include #include #include "ril48_reorg.h" #include "util.h" /********************************************************************** * reorgRIgenoprob * * For 4- and 8-way RIL, reorganize the QTL genotype probabilities * using the information on the order of the founder strains in each * cross. **********************************************************************/ void reorgRIgenoprob(int n_ind, int n_mar, int n_str, double ***Prob, int **Crosses) { int i, j, k; double *temp; temp = (double *)R_alloc(n_str, sizeof(double)); for(i=0; i #include #include #include #include #include #include #include #include "pickMarkerSubset.h" void R_pickMarkerSubset(double *locations, int *n_locations, double *weights, double *min_distance, int *path, int *n_path) { GetRNGstate(); pickMarkerSubset(locations, *n_locations, weights, *min_distance, path, n_path); PutRNGstate(); } void pickMarkerSubset(double *locations, int n_locations, double *weights, double min_distance, int *path, int *n_path) { int i, j; double *total_weights, themax; int *prev_marker, *max_to_choose, n_max_to_choose; total_weights = (double *)R_alloc(n_locations, sizeof(double)); prev_marker = (int *)R_alloc(n_locations, sizeof(int)); max_to_choose = (int *)R_alloc(n_locations, sizeof(int)); /* first location */ prev_marker[0] = -1; total_weights[0] = weights[0]; for(i=1; i min_distance away */ total_weights[i] = weights[i]; prev_marker[i] = -1; } else { /* look for maxima */ n_max_to_choose = 1; max_to_choose[0] = 0; themax = total_weights[0]; for(j=1; j themax) { n_max_to_choose = 1; max_to_choose[0] = j; themax = total_weights[j]; } else if(total_weights[j] == themax) { max_to_choose[n_max_to_choose] = j; n_max_to_choose++; } } /* now choose among the maxima at random */ total_weights[i] = themax + weights[i]; if(n_max_to_choose == 1) prev_marker[i] = max_to_choose[0]; else /* pick random */ prev_marker[i] = max_to_choose[(int)(unif_rand()*(double)n_max_to_choose)]; } } /* now find global max */ themax = total_weights[0]; n_max_to_choose = 1; max_to_choose[0] = 0; for(i=1; i themax) { themax = total_weights[i]; n_max_to_choose = 1; max_to_choose[0] = i; } else if(total_weights[i] == themax) { max_to_choose[n_max_to_choose] = i; n_max_to_choose++; } } /* right-most marker at global maximum */ if(n_max_to_choose == 1) path[0] = max_to_choose[0]; else /* pick random */ path[0] = max_to_choose[(int)(unif_rand()*(double)n_max_to_choose)]; *n_path=1; /* trace back */ while(prev_marker[path[*n_path-1]] > -1) { R_CheckUserInterrupt(); /* check for ^C */ path[*n_path] = prev_marker[path[*n_path-1]]; (*n_path)++; } /* note: result is backwards and has indices starting at 0 */ } /* end of pickMarkerSubset.c */ qtl/src/mqmscan.h0000644000176000001440000000536612131541647013517 0ustar ripleyusers/********************************************************************** * * mqmscan.h * * Copyright (c) 1996-2009 by * Ritsert C Jansen, Danny Arends, Pjotr Prins and Karl W Broman * * initial MQM C code written between 1996-2002 by Ritsert C. Jansen * improved for the R-language by Danny Arends, Pjotr Prins and Karl W. Broman * * Modified by Danny Arends and Pjotr Prins * last modified September 2009 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * **********************************************************************/ #ifdef __cplusplus extern "C" { #endif double Lnormal(double residual, double variance); int mqmmod(int a, int b); double ftruncate3(double n); void reorg_pheno(int n_ind, int n_mar, double *pheno, double ***Pheno); void reorg_int(int n_ind, int n_mar, int *pheno, int ***Pheno); /* analyseF2 - analyse one F2/BC/RIL family */ double analyseF2(int Nind, int *Nmark, cvector *cofactor, MQMMarkerMatrix marker, vector y, ivector f1genotype, int Backwards, double **QTL,vector *mapdistance,int **Chromo,int Nrun,int RMLorML, double windowsize,double stepsize, double stepmin,double stepmax,double alfa,int em,int out_Naug,int **INDlist,char reestimate, MQMCrossType crosstype,bool dominance,int verbose); //R calling interface void R_mqmscan(int *Nind,int *Nmark,int *Npheno, int *geno,int *chromo, double *dist, double *pheno, int *cofactors, int *backwards, int *RMLorML,double *alfa,int *emiter, double *windowsize,double *steps, double *stepmi,double *stepma, int *nRun,int *out_Naug,int *indlist, double *qtl,int *reestimate,int *rqtlcrosstype,int *domi,int *verbose); void mqmscan(int Nind, int Nmark,int Npheno,int **Geno,int **Chromo, double **Dist, double **Pheno, int **Cofactors, int Backwards, int RMLorML,double Alfa,int Emiter, double Windowsize,double Steps, double Stepmi,double Stepma,int NRUN,int out_Naug,int **INDlist, double **QTL, int re_estimate,RqtlCrossType rqtlcrosstype,int domi,int verbose); #ifdef __cplusplus } #endif /* end of mqmscan.h */ qtl/src/mqmscan.cpp0000644000176000001440000004017612131541647014050 0ustar ripleyusers/********************************************************************** * * mqmscan.cpp * * Copyright (c) 1996-2009 by * Ritsert C Jansen, Danny Arends, Pjotr Prins and Karl W Broman * * initial MQM C code written between 1996-2002 by Ritsert C. Jansen * improved for the R-language by Danny Arends, Pjotr Prins and Karl W. Broman * * Modified by Pjotr Prins and Danny Arends * last modified December 2009 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * **********************************************************************/ #include "mqm.h" #include #include inline int mqmmod(int a, int b) { return a%b; } /* * Helper function for truncate */ static double ftruncate(double n, double p = 3){ int sign = 0; if(n >= 0){ sign = 1; }else{ sign = -1; } double val = fabs((pow(10,p)) * n); val = floor(val); val /= pow(10,p); return (double) sign * val; } /* * Truncate a floating point to 3 decimal numbers. This is used for output * functions, in particular for regression tests - so floating point problems on * different platforms are eliminated */ double ftruncate3(double n){ return ftruncate(n,3); } double Lnormal(double residual, double variance) { //Now using R-library for Lnormal double result = dnorm(residual,0,sqrt(variance),0); debug_trace("Lnormal result:%f, residual: %f, variance %f\n",result,residual,variance); return result; } void reorg_pheno(int n_ind, int n_mar, double *pheno, double ***Pheno) { //reorganisation of doubles into a matrix int i; *Pheno = (double **)R_alloc(n_mar, sizeof(double *)); (*Pheno)[0] = pheno; for (i=1; i< n_mar; i++) (*Pheno)[i] = (*Pheno)[i-1] + n_ind; } void reorg_int(int n_ind, int n_mar, int *pheno, int ***Pheno) { //reorganisation of integers into a matrix int i; *Pheno = (int **)R_alloc(n_mar, sizeof(int *)); (*Pheno)[0] = pheno; for (i=1; i< n_mar; i++) (*Pheno)[i] = (*Pheno)[i-1] + n_ind; } /* * analyseF2 - analyse one F2/RIL/BC family * This is the main controller - called by mqmscan * * Returns logL */ double analyseF2(int Nind, int *nummark, cvector *cofactor, MQMMarkerMatrix marker, vector y, ivector f1genotype, int Backwards, double **QTL,vector *mapdistance, int **Chromo, int Nrun, int RMLorML, double windowsize, double stepsize, double stepmin, double stepmax, double alfa, int em, int out_Naug, int **INDlist, char reestimate, MQMCrossType crosstype, bool dominance, int verbose) { if (verbose) { Rprintf("INFO: Starting C-part of the MQM analysis\n"); } int Naug; int Nmark = (*nummark); int run=0; cvector position; vector informationcontent; ivector chr; matrix Frun; vector r; r= newvector(Nmark); position= newcvector(Nmark); bool useREML=true; bool fitQTL=false; // The chr vector contains the chromosome number for every marker chr= newivector(Nmark); //info("Receiving the chromosome matrix from R"); for (int i=0; i< Nmark; i++) { chr[i] = Chromo[0][i]; } if (RMLorML == 1) useREML=false; // use ML instead // Create an array of marker positions - and calculate R[f] based on these locations position = relative_marker_position(Nmark,chr); r = recombination_frequencies(Nmark, position, (*mapdistance)); //info("Initialize Frun and informationcontent to 0.0"); const int Nsteps = (int)(chr[Nmark-1]*((stepmax-stepmin)/stepsize+1)); Frun= newmatrix(Nsteps,Nrun+1); informationcontent= newvector(Nsteps); for (int i=0; i %d\n",Nmark,jj); Nmark= jj; (*nummark) = jj; position = relative_marker_position(Nmark,chr); r = recombination_frequencies(Nmark, position, (*mapdistance)); debug_trace("After dropping of uninformative cofactors\n"); //calculate Traits mean and variance ivector newind; vector newy; MQMMarkerMatrix newmarker; double ymean=0.0, yvari=0.0; //info("Number of individuals: %d Number Aug: %d",Nind,out_Naug); int cur = -1; for (int i=0; i stepmax) { info("ERROR: Reestimation of the map put markers at: %f Cm",max); info("ERROR: Rerun the algorithm with a step.max larger than %f Cm",max); return std::numeric_limits::quiet_NaN(); } else { // if (verbose) info("Reestimation of the map finished. MAX Cm: %f Cm",max); } //Check if everything still is correct positions and R[f] position = relative_marker_position(Nmark,chr); r = recombination_frequencies(Nmark, position, (*mapdistance)); /* eliminate individuals with missing trait values */ //We can skip this part iirc because R throws out missing phenotypes beforehand int oldNind=Nind; for (int i=0; i1) for (int ii=i+1; ii Nind) { Rprintf("ERROR: Setting %d cofactors would leave less than 10 degrees of freedom.\n",cof_cnt); return; } } char reestimate = 'y'; if (re_estimate == 0) { reestimate = 'n'; } //determine what kind of cross we have //set dominance accordingly if (crosstype != CF2) { if (verbose==1) { Rprintf("INFO: Dominance setting ignored (dominance=0)\n"); } domi = 0; } else { domi = domi; } bool dominance=false; if (domi != 0) { dominance=true; } //WE HAVE EVERYTHING START WITH MAIN SCANNING FUNCTION analyseF2(Nind, &Nmark, &cofactor, (MQMMarkerMatrix)markers, Pheno[(Npheno-1)], f1genotype, Backwards,QTL,&mapdistance,Chromo,NRUN,RMLorML,Windowsize,Steps,Stepmi,Stepma,Alfa,Emiter,out_Naug,INDlist,reestimate,crosstype,dominance,verbose); if (re_estimate) { if (verbose==1) { Rprintf("INFO: Sending back the reestimated map used during analysis\n"); } for (int i=0; i< Nmark; i++) { Dist[0][i]=mapdistance[i]; } } if (Backwards) { if (verbose==1) { Rprintf("INFO: Sending back the model\n"); } for (int i=0; i< Nmark; i++) { Cofactors[0][i]=cofactor[i]; } } //Rprintf("Starting Cleanup\n"); //[Danny]: The markers are already DELETED in analyseF2, So this should have always failed... //but in some way it doesn't. R and Memory managment, perhaps its best to use the c++ stdlibs features //like vector etc, (would mean again mayor recoding) //delMQMMarkerMatrix(markers,Nmark+1); Free(f1genotype); Free(cofactor); Free(mapdistance); if (verbose==1) { Rprintf("INFO: All done in C returning to R\n"); } #ifndef STANDALONE R_CheckUserInterrupt(); /* check for ^C */ // R_ProcessEvents(); /* Try not to crash windows etc*/ R_FlushConsole(); #endif return; } /* end of function mqmscan */ /********************************************************************** * * R_mqmscan * **********************************************************************/ void R_mqmscan(int *Nind,int *Nmark,int *Npheno, int *geno,int *chromo, double *dist, double *pheno, int *cofactors, int *backwards, int *RMLorML,double *alfa,int *emiter, double *windowsize,double *steps,double *stepmi,double *stepma, int *nRun, int *out_Naug, int *indlist, double *qtl, int *reestimate, int *crosstype, int *domi, int *verbose) { int **Geno; int **Chromo; double **Dist; double **Pheno; double **QTL; int **Cofactors; int **INDlist; // Reorganise the pointers into arrays, singletons are just cast into the function reorg_geno(*Nind,*Nmark,geno,&Geno); reorg_int(*Nmark,1,chromo,&Chromo); reorg_pheno(*Nmark,1,dist,&Dist); // Here we have the assumption that step.min is negative this needs to be split in 2 reorg_pheno((int)(2*(*chromo) * (((*stepma)-(*stepmi))/ (*steps))),1,qtl,&QTL); reorg_pheno(*Nind,*Npheno,pheno,&Pheno); reorg_int(*Nmark,1,cofactors,&Cofactors); reorg_int(*out_Naug,1,indlist,&INDlist); mqmscan(*Nind,*Nmark,*Npheno,Geno,Chromo,Dist,Pheno,Cofactors,*backwards,*RMLorML,*alfa,*emiter,*windowsize,*steps,*stepmi,*stepma,*nRun,*out_Naug,INDlist,QTL, *reestimate,(RqtlCrossType)*crosstype,*domi,*verbose); } qtl/src/mqmregression.h0000644000176000001440000000442312131541647014744 0ustar ripleyusers/********************************************************************** * * mqmregression.h * * Copyright (c) 1996-2009 by * Ritsert C Jansen, Danny Arends, Pjotr Prins and Karl W Broman * * initial MQM C code written between 1996-2002 by Ritsert C. Jansen * improved for the R-language by Danny Arends, Pjotr Prins and Karl W. Broman * * Modified by Danny Arends and Pjotr Prins * last modified September 2009 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * **********************************************************************/ #ifdef __cplusplus extern "C" { #endif int designmatrixdimensions(const cvector cofactor,const unsigned int nmark,const bool dominance); /* * Used regression (perhaps change it to something faster) * regression of trait on multiple cofactors y=xb+e with weight w * (xtwx)b=(xtw)y * b=inv(xtwx)(xtw)y */ double regression(int Nind, int Nmark, cvector cofactor, MQMMarkerMatrix marker, vector y, vector* weight, ivector ind, int Naug, double *variance, vector Fy,const bool biasadj,const bool fitQTL,const bool dominance); /* ----------------------------------------------------------------------- subroutines from book 'Numerical Recipees in C' for calculating F-probabilities and for generating randomly permuted trait data for other tasks -----------------------------------------------------------------------*/ void ludcmp(matrix m, int dim, ivector ndx, int *d); void lusolve(matrix lu, int dim, ivector ndx, vector b); double gammln(double xx); double betai(double a, double b, double x); double betacf(double a, double b, double x); double inverseF(int df1, int df2, double alfa,int verbose); #ifdef __cplusplus } #endif /* end of mqmregression.h */ qtl/src/mqmregression.cpp0000644000176000001440000003143712131541647015304 0ustar ripleyusers/********************************************************************** * * mqmregression.cpp * * Copyright (c) 1996-2009 by * Ritsert C Jansen, Danny Arends, Pjotr Prins and Karl W Broman * * initial MQM C code written between 1996-2002 by Ritsert C. Jansen * improved for the R-language by Danny Arends, Pjotr Prins and Karl W. Broman * * Modified by Pjotr Prins and Danny Arends * last modified December 2009 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * **********************************************************************/ #include "mqm.h" #include /* regression of trait on multiple cofactors y=xb+e with weight w * (xtwx)b=(xtw)y * b=inv(xtwx)(xtw)y * * performs weighted regression of trait on genotype (QTL and cofactors) for * augmented data */ int designmatrixdimensions(const cvector cofactor,const unsigned int nmark,const bool dominance){ int dimx=1; for (unsigned int j=0; j max) max=temp; if (max==0.0) fatal("Singular matrix"); scale[r]=1.0/max; } for (c=0; c max) { max=temp; rowmax=r; } } if (max==0.0) fatal("Singular matrix"); if (rowmax!=c) { swap=m[rowmax]; m[rowmax]=m[c]; m[c]=swap; scale[rowmax]=scale[c]; (*d)= -(*d); } ndx[c]=rowmax; temp=1.0/m[c][c]; for (r=c+1; r-1; r--) { sum=b[r]; for (c=r+1; c0.001)&&(count<100)) { debug_trace("INFO df1:%d df2:%d alpha:%f\n", df1, df2, alfa); count++; halfway= (maxF+minF)/2.0; prob = pbeta(df2/(df2+df1*halfway), df2/2.0, df1/2.0, 1, 0); debug_trace("(%f, %f, %f) prob=%f\n", df2/(df2+df1*halfway), df2/2.0, df1/2.0, prob); if (prob /* This function walks the marker list and determins for every position whether the marker is in the Middle, Left,Right of the chromosome When there is only 1 marker on a chromosome it is defined Unlinked*/ cvector relative_marker_position(const unsigned int nmark,const ivector chr) { cvector position = newcvector(nmark); //info("Calculating relative genomepositions of the markers"); for (unsigned int j=0; j0.0001)) { iem+=1; rdelta= 0.0; /* calculate weights = conditional genotype probabilities */ for (i=0; i %f\n", j, r[j], (*mapdistance)[j]); } } if (verbose==1) { Rprintf("INFO: Re-estimation of the genetic map took %d iterations, to reach a rdelta of %f\n", iem, rdelta); } Free(indweight); freevector(distance); return maximum; } /* ML estimation of parameters in mixture model via EM; maximum-likelihood * estimation of parameters in the mixture model via the EM algorithm, using * multilocus information, but assuming known recombination frequencies */ double QTLmixture(MQMMarkerMatrix loci, cvector cofactor, vector r, cvector position, vector y, ivector ind, int Nind, int Naug, int Nloci, double *variance, int em, vector *weight, const bool useREML,const bool fitQTL,const bool dominance, MQMCrossType crosstype, int verbose) { //debug_trace("QTLmixture called Nloci=%d Nind=%d Naug=%d, REML=%d em=%d fit=%d domi=%d cross=%c\n",Nloci,Nind,Naug,useREML,em,fitQTL,dominance,crosstype); //for (int i=0; i 0 en calc_i > 0 then we want to assert Ploci[] != 0 } } if ((position[j]==MLEFT)||(position[j]==MMIDDLE)) { for (i=0; itrait,indweight weight Ploci\n"); //for (int j=0; j%f,%f %f %f\n", j, y[j],indweight[i], (*weight)[j], Ploci[j]); //} double logL=0; vector indL; indL= newvector(Nind); while ((iem1.0e-5)) { iem+=1; if (!varknown) *variance=-1.0; logL= regression(Nind, Nloci, cofactor, loci, y, weight, ind, Naug, variance, Fy, biasadj, fitQTL, dominance); logL=0.0; for (i=0; i j+1 with steps of stepsize=20 cM, starting from -20 cM up to 220 cM 2. all marker-cofactors in the neighborhood of the QTL are dropped by using cM='windows' as criterium */ nextinterval= 'n'; #ifndef STANDALONE //Rprintf("TEST mqmmapqtl\n"); R_CheckUserInterrupt(); /* check for ^C */ R_FlushConsole(); //R_ProcessEvents(); /* Try not to crash windows etc*/ #endif while (nextinterval=='n') { // step 1: // Rprintf("DEBUG testing STEP 1"); if (position[j]==MLEFT) { if (moveQTL<=mapdistance[j]) { QTLposition[j]= position[j]; QTLposition[j+1]= MMIDDLE; QTLr[j]= recombination_frequentie((mapdistance[j]-moveQTL)); QTLr[j+1]= r[j]; QTLloci[j+1]= marker[j]; QTLloci[j]= marker[Nloci-1]; QTLmapdistance[j]= moveQTL; QTLmapdistance[j+1]= mapdistance[j]; if (firsttime=='y') weight[0]= -1.0; moveQTL+= stepsize; } else if (moveQTL<=mapdistance[j+1]) { QTLposition[j]= position[j]; QTLposition[j+1]= MMIDDLE; QTLr[j]= recombination_frequentie((moveQTL-mapdistance[j])); QTLr[j+1]= recombination_frequentie((mapdistance[j+1]-moveQTL)); //r[j]; QTLloci[j]= marker[j]; QTLloci[j+1]= marker[Nloci-1]; QTLmapdistance[j]= mapdistance[j]; QTLmapdistance[j+1]= moveQTL; moveQTL+= stepsize; } else nextinterval= 'y'; } else if (position[j]==MMIDDLE) { if (moveQTL<=mapdistance[j+1]) { QTLposition[j]= position[j]; QTLposition[j+1]= MMIDDLE; QTLr[j]= recombination_frequentie((moveQTL-mapdistance[j])); //0.0; QTLr[j+1]= recombination_frequentie((mapdistance[j+1]-moveQTL)); //r[j]; QTLloci[j]= marker[j]; QTLloci[j+1]= marker[Nloci-1]; QTLmapdistance[j]= mapdistance[j]; QTLmapdistance[j+1]= moveQTL; moveQTL+= stepsize; } else nextinterval= 'y'; } else if (position[j]==MRIGHT) { if (moveQTL<=stepmax) { QTLposition[j]= MMIDDLE; QTLposition[j+1]= MRIGHT; QTLr[j]= recombination_frequentie((moveQTL-mapdistance[j])); //0.0; QTLr[j+1]= r[j]; // note r[j]=999.0 QTLloci[j]= marker[j]; QTLloci[j+1]= marker[Nloci-1]; QTLmapdistance[j]= mapdistance[j]; QTLmapdistance[j+1]= moveQTL; moveQTL+= stepsize; } else { nextinterval= 'y'; moveQTL= stepmin; } } else if (position[j]==MUNLINKED) { QTLposition[j]= MLEFT; QTLposition[j+1]= MRIGHT; //position[j] ?? MRIGHT ? QTLr[j]= 0.0; QTLr[j+1]= r[j]; QTLloci[j+1]= marker[j]; QTLloci[j]= marker[Nloci-1]; QTLmapdistance[j]= mapdistance[j]; QTLmapdistance[j+1]= mapdistance[j]; if (firsttime=='y') weight[0]= -1.0; nextinterval= 'y'; moveQTL= stepmin; } if (nextinterval=='n') { // QTLcofactor[j]= MAA; // QTLcofactor[j+1]= MAA; for (jj=0; jj0) (*Frun)[step][run]+= QTLlikelihood; else (*Frun)[step][0]+= QTLlikelihood; /* Each individual has condition multilocus probabilities for being 0, 1 or 2 at the QTL. Calculate the maximum per individu. Calculate the mean of this maximum, averaging over all individuals This is the information content plotted. */ infocontent= 0.0; for (int i=0; i0)&&(!finished)) { for (int j=0; jmaxlogL) { maxlogL= logL[j]; dropj = j; } } } #ifndef STANDALONE //Rprintf("TEST BW\n"); R_CheckUserInterrupt(); /* check for ^C */ //R_ProcessEvents(); /* Try not to crash windows */ R_FlushConsole(); #endif //See which cofactor we need to drop, if we dont drop any (or have none left) we're finished if ( ((*newcofactor)[dropj]==MCOF) && ( F2> 2.0*(savelogL-maxlogL)) ) { savelogL= maxlogL; (*newcofactor)[dropj]= MNOCOF; Ncof-=1; if(verbose) info("Marker %d is dropped, resulting in reduced model logL = %.3f",(dropj+1),ftruncate3(savelogL)); } else if ( ((*newcofactor)[dropj]==MBB) && (F1> 2.0*(savelogL-maxlogL)) ) { savelogL= maxlogL; (*newcofactor)[dropj]= MNOCOF; Ncof-=1; if(verbose) info("Marker %d is dropped, resulting in logL of reduced model = %.3f",(dropj+1),ftruncate3(savelogL)); } else { if (verbose) { Rprintf("INFO: Backward selection of markers to be used as cofactors has finished.\n"); } finished=true; for (int j=0; j 3 && (rqtlcrosstype) != 1) { Rprintf("ind = %d marker = %d Geno = %d\n", i+1, j+1, Geno[j][i]); info("Unexpected genotype pattern, switching to F2"); crosstype = CF2; break; } if (Geno[j][i] == 3 && (rqtlcrosstype) == 2) { info("Unexpected genotype pattern, switching from BC to F2"); crosstype = CF2; break; } //IF we have a RIL and find AB then the set is messed up; we have a BC genotype if (Geno[j][i] == 2 && (rqtlcrosstype) == 3) { info("Unexpected genotype pattern, switching from RIL to BC"); crosstype = CBC; break; } } } /* switch(crosstype) { case CF2: info("F2 cross"); break; case CRIL: info("RIL cross"); break; case CBC: info("Back cross (BC)"); break; default: Rprintf("Cross type=%d",crosstype); fatal("Unknown cross"); } */ return crosstype; } /* * Change all the genotypes from default R/qtl format to MQM internal. R/qtl * uses internally { 'AA' => 1, 'H' => 2, 'BB' => 3, 'NOTBB' => 4, 'NOTAA' => 5, * '-' => 'NA' } * */ void change_coding(int *Nmark, int *Nind, int **Geno, MQMMarkerMatrix markers, const MQMCrossType crosstype) { //info("Convert codes R/qtl -> MQM"); for (int j=0; j < *Nmark; j++) { for (int i=0; i < *Nind; i++) { switch (Geno[j][i]) { case 1: markers[j][i] = MAA; break; case 2: markers[j][i] = MH; if (crosstype == CRIL) markers[j][i] = MBB; // FIXME test break; case 3: markers[j][i] = MBB; break; case 4: markers[j][i] = MNOTBB; break; case 5: markers[j][i] = MNOTAA; break; case 9: markers[j][i] = MMISSING; break; default: error("Can not convert R/qtl genotype with value %d",Geno[j][i]); } } } } /* * Allocate a memory block using the 'safe' R method calloc_init, but with * guarantee all data has been zeroed */ void *calloc_init(size_t num, size_t size) { void *buf; buf = R_chk_calloc(num,size); if (buf) memset(buf,0,num*size); return buf; } vector newvector(int dim) { vector v; v = (double *)calloc_init(dim, sizeof(double)); if (v==NULL) { warning("Not enough memory for new vector of dimension %d",(dim+1)); } return v; } ivector newivector(int dim) { ivector v; v = (int *)calloc_init(dim, sizeof(int)); if (v==NULL) { warning("Not enough memory for new vector of dimension %d",(dim+1)); } return v; } cvector newcvector(int dim) { cvector v; v = (char *)calloc_init(dim, sizeof(char)); if (v==NULL) { warning("Not enough memory for new vector of dimension %d",(dim+1)); } return v; } MQMMarkerVector newMQMMarkerVector(int dim) { MQMMarkerVector v; v = (MQMMarker *)calloc_init(dim, sizeof(MQMMarker)); if (v==NULL) { warning("Not enough memory for new vector of dimension %d",(dim+1)); } return v; } relmarkerarray newRelMarkerPos(int dim){ relmarkerarray v; v = (MQMRelMarkerPos *)calloc_init(dim, sizeof(char)); if (v==NULL) { warning("Not enough memory for the relative marker position vector with dimension %d",(dim+1)); } return v; } matrix newmatrix(int rows, int cols) { matrix m; m = (double **)calloc_init(rows, sizeof(double*)); if (m==NULL) { warning("Not enough memory for new double matrix"); } for (int i=0; i UINT_MAX/augmentationfactor){ outoflimit = true; } } if(!outoflimit){ info("Individual: %d has %d missing markers, leading to %d augmentations",i,missingmarkers,augind); }else{ info("Individual: %d has %d missing markers",i,missingmarkers); } } return 0; } MQMMarker randommarker(const MQMCrossType crosstype){ double randnum; switch (crosstype) { case CF2: randnum = 4*((double)rand()/(double)RAND_MAX); if(randnum <= 1){ return MAA; } if(randnum <= 3){ return MH; } return MBB; break; case CBC: randnum = 2*((double)rand()/(double)RAND_MAX); if(randnum <= 1){ return MAA; }else{ return MH; } break; case CRIL: randnum = 2*((double)rand()/(double)RAND_MAX); if(randnum <= 1){ return MAA; }else{ return MBB; } break; case CUNKNOWN: fatal("Strange: unknown crosstype in mqm augment()"); break; } return MMISSING; } int mqmaugmentfull(MQMMarkerMatrix* markers,int* nind, int* augmentednind, ivector* INDlist, double neglect_unlikely, int max_totalaugment, int max_indaugment, const matrix* pheno_value, const int nmark, const ivector chr, const vector mapdistance, const int augment_strategy, const MQMCrossType crosstype,const int verbose){ //Prepare for the first augmentation if (verbose) info("Augmentation routine"); const int nind0 = *nind; const vector originalpheno = (*pheno_value)[0]; MQMMarkerMatrix newmarkerset; vector new_y; //Because we do a phenotype matrix, we optimize by storing original the R-individual ivector new_ind; //numbers inside the trait-values, ands use new_ind etc for inside C ivector succes_ind; cvector position = relative_marker_position(nmark,chr); vector r = recombination_frequencies(nmark, position, mapdistance); if(verbose) info("Step 1: Augmentation"); mqmaugment((*markers), (*pheno_value)[0], &newmarkerset, &new_y, &new_ind, &succes_ind, nind, augmentednind, nmark, position, r, max_totalaugment, max_indaugment, neglect_unlikely, crosstype, verbose); //First round of augmentation, check if there are still individuals we need to do int ind_still_left=0; int ind_done=0; for(int i=0; i %d",i,current_leftover_ind); left_y_input[0][current_leftover_ind] = originalpheno[i]; for(int j=0;j 0){ for(int j=0;jprob1 ? newprob[ii]*prob2 : newprob[ii]*prob1); if (prob1>prob2) { if (probmax/(newprob[ii]*prob2)= maxNaug) goto bailout; newmarker[j][iaug]= MBB; newprob[iaug]= newprob[ii]*prob2left; newprobmax[iaug]= newprob[iaug]*prob2right; for (jj=0; jj= maxNaug) goto bailout; newmarker[j][iaug]= MH; newprob[iaug]= newprob[ii]*prob1left; newprobmax[iaug]= newprob[iaug]*prob1right; for (jj=0; jjnewprobmax[ii] ? probmax : newprobmax[ii]); } else if (newmarker[j][ii]==MNOTBB) { //NOTBB: augment data can contain MH and MAA for (jj=0; jjprob1 ? newprob[ii]*prob0 : newprob[ii]*prob1); if (prob1>prob0) { if (probmax/(newprob[ii]*prob0)= maxNaug) goto bailout; newmarker[j][iaug]= MAA; newprob[iaug]= newprob[ii]*prob0left; newprobmax[iaug]= newprob[iaug]*prob0right; for (jj=0; jj= maxNaug) goto bailout; newmarker[j][iaug]= MH; newprob[iaug]= newprob[ii]*prob1left; newprobmax[iaug]= newprob[iaug]*prob1right; for (jj=0; jjnewprobmax[ii] ? probmax : newprobmax[ii]); } else if (newmarker[j][ii]==MMISSING) { //UNKNOWN: augment data to contain AB, AA and BB for (jj=0; jjprob1)&&(prob2>prob0)) probmax= newprob[ii]*prob2; else if ((prob1>prob0)&&(prob1>prob2)) probmax= newprob[ii]*prob1; else probmax= newprob[ii]*prob0; } if ((prob2>prob1)&&(prob2>prob0)) { if (probmax/(newprob[ii]*prob1)= maxNaug) goto bailout; newmarker[j][iaug]= MH; newprob[iaug]= newprob[ii]*prob1left; newprobmax[iaug]= newprob[iaug]*prob1right; for (jj=0; jj= maxNaug) goto bailout; newmarker[j][iaug]= MAA; newprob[iaug]= newprob[ii]*prob0left; newprobmax[iaug]= newprob[iaug]*prob0right; for (jj=0; jjprob2)&&(prob1>prob0)) { if (probmax/(newprob[ii]*prob2)= maxNaug) goto bailout; newmarker[j][iaug]= MBB; newprob[iaug]= newprob[ii]*prob2left; newprobmax[iaug]= newprob[iaug]*prob2right; for (jj=0; jj= maxNaug) goto bailout; newmarker[j][iaug]= MAA; newprob[iaug]= newprob[ii]*prob0left; newprobmax[iaug]= newprob[iaug]*prob0right; for (jj=0; jj= maxNaug) goto bailout; newmarker[j][iaug]= MH; newprob[iaug]= newprob[ii]*prob1left; newprobmax[iaug]= newprob[iaug]*prob1right; for (jj=0; jj= maxNaug) goto bailout; newmarker[j][iaug]= MBB; newprob[iaug]= newprob[ii]*prob2left; newprobmax[iaug]= newprob[iaug]*prob2right; for (jj=0; jjnewprobmax[ii] ? probmax : newprobmax[ii]); } else { //STD case we know what the next marker is nou use probleft to estimate the likelihood of the current location if ((position[j]==MLEFT||position[j]==MUNLINKED)) { prob0left= start_prob(crosstype, newmarker[j][ii]); } else { prob0left= left_prob(r[j-1],newmarker[j-1][ii],newmarker[j][ii],crosstype); //prob0left= prob(newmarker, r, ii, j-1, newmarker[j][ii], crosstype, 0); } newprob[ii]*= prob0left; } if (iaug+3>maxNaug) { Rprintf("ERROR: augmentation (this code should not be reached)\n"); goto bailout; } } if ((iaug-previaug+1)>imaxNaug) { newNind-= 1; iaug= previaug-1; succesind[i]=0; //for(int x=previaug;x= maxNaug) goto bailout; previaug=iaug; } *Naug = iaug; *Nind = newNind; *augmarker = newMQMMarkerMatrix(Nmark, *Naug); *augy = newvector(*Naug); *augind = newivector(*Naug); *sucind = newivector(nind0); for (int i=0; i // #include // #include #include #include "standalone.h" #include "util.h" #include "mqmdatatypes.h" #include "mqmprob.h" #include "mqmmixture.h" #include "mqmregression.h" #include "mqmaugment.h" #include "mqmeliminate.h" #include "mqmmapqtl.h" #include "mqmscan.h" #ifdef ENABLE_C99_MACROS #ifdef STANDALONE // Running mqm stand alone (without R) extern FILE* redirect_info; // Redirect output for testing extern int debuglevel; // Redirect output for testing #define message(type, format, ...) { \ fprintf(redirect_info,"%s: ",type); \ fprintf(redirect_info, format, ## __VA_ARGS__); \ fprintf(redirect_info,"\n"); } // #define warning(s) { message("WARNING",s); } #define fatal(s) { message("FATAL",s); exit(127); } #define debug_trace(format, ...) { \ if(debuglevel > 0){ \ fprintf(redirect_info,"TRACE "); \ fprintf(redirect_info,"%s %d:",__FILE__,__LINE__); \ fprintf(redirect_info,format, ## __VA_ARGS__); \ }\ } #else // Running MQM under R #define debug_trace(format, ...) { } #ifdef WIN32 #define message(type, format, ...) { \ Rprintf(format, ## __VA_ARGS__);Rprintf("\n");} #else #define message(type, format, ...) { \ Rprintf(format, ## __VA_ARGS__);Rprintf("\n");} #endif // #define warning(s) { Rf_warning(s); } #define fatal(s) { message("FATAL",s); Rf_error(s); } #endif #ifdef NDEBUG #define info(format, ...) #else #define info(format, ...) { message("INFO",format, ## __VA_ARGS__); } #define verbose(format, ...) if (verbose) { info(format, ## __VA_ARGS__); } #endif //ndebug #else void info(const char *,...); void verbose(const char*,...); void debug_trace(const char *, ...); #define fatal(s) { Rprintf("FATAL",s); Rf_error(s); } #endif #endif // MQM_H qtl/src/markerlrt.h0000644000176000001440000000236512131541647014057 0ustar ripleyusers/********************************************************************** * * markerlrt.h * * copyright (c) 2010, Karl W Broman * * last modified Jul, 2010 * first written Jul, 2010 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for performing a general likelihood ratio test for * each pair of markers, to assess their association. * * Contains: R_markerlrt, markerlrt * **********************************************************************/ void R_markerlrt(int *n_ind, int *n_mar, int *geno, int *maxg, double *lod); void markerlrt(int n_ind, int n_mar, int **Geno, int maxg, double **Lod); /* end of markerlrt.h */ qtl/src/markerlrt.c0000644000176000001440000000507212131541647014050 0ustar ripleyusers/********************************************************************** * * markerlrt.c * * copyright (c) 2010, Karl W Broman * * last modified Jul, 2010 * first written Jul, 2010 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * These functions are for performing a general likelihood ratio test for * each pair of markers, to assess their association. * * Contains: R_markerlrt, markerlrt * **********************************************************************/ #include #include #include #include #include #include #include #include "markerlrt.h" #include "util.h" void R_markerlrt(int *n_ind, int *n_mar, int *geno, int *maxg, double *lod) { int **Geno; double **Lod; reorg_geno(*n_ind, *n_mar, geno, &Geno); reorg_errlod(*n_mar, *n_mar, lod, &Lod); markerlrt(*n_ind, *n_mar, Geno, *maxg, Lod); } void markerlrt(int n_ind, int n_mar, int **Geno, int maxg, double **Lod) { int i, j, k, k2, *n1, *n2, **n12, n; allocate_imatrix(maxg, maxg, &n12); allocate_int(maxg, &n1); allocate_int(maxg, &n2); for(i=0; i #include #include #include #include #include #include #include #include "lapackutil.h" #define TOL 1e-12 /* DGELSS function */ void mydgelss (int *n_ind, int *ncolx0, int *nphe, double *x0, double *x0_bk, double *pheno, double *tmppheno, double *s, double *tol, int *rank, double *work, int *lwork, int *info) { int i, singular=0; /* use dgels first */ F77_CALL(dgels)("N", n_ind, ncolx0, nphe, x0, n_ind, tmppheno, n_ind, work, lwork, info); /* if there's problem like singular, use dgelss */ /* note that x0 will contain the result for QR decomposition. If any diagonal element of R is zero, then input x0 is rank deficient */ for(i=0; i<*ncolx0; i++) { if(abs(x0[*n_ind*i+i]) < TOL) { singular = 1; break; } } if(singular) { /* switch to dgelss if input x0 is not of full rank */ /* note that tmppheno and x0 have been destroyed already, we need to make another copy of them */ /*mexPrintf("Warning - Design matrix is signular \n"); */ /* note that at this stage both x0 and tmppheno might be destroyed, we need to make a copy of them */ memcpy(x0, x0_bk, *n_ind*(*ncolx0)*sizeof(double)); memcpy(tmppheno, pheno, *n_ind*(*nphe)*sizeof(double)); F77_CALL(dgelss) (n_ind, ncolx0, nphe, x0, n_ind, tmppheno, n_ind, s, tol, rank, work, lwork, info); } } /* DGEMM */ void mydgemm(int *nphe, int *n_ind, double *alpha, double *tmppheno, double *beta, double *rss_det) { F77_CALL(dgemm)("T", "N", nphe, nphe, n_ind, alpha, tmppheno, n_ind, tmppheno, n_ind, beta, rss_det, nphe); } /* DPOTRF */ void mydpotrf(int *nphe, double *rss_det, int *info) { F77_CALL(dpotrf)("U", nphe, rss_det, nphe, info); } /*DPOTRS */ void mydpotrs(char *uplo, int *n, int *nrhs, double *A, int *lda, double *B, int *ldb, int *info) { F77_CALL(dpotrs)(uplo, n, nrhs, A, lda, B, ldb, info); } /* end of lapackutil.c */ qtl/src/info.h0000644000176000001440000000370012131541647013001 0ustar ripleyusers/********************************************************************** * * info.h * * copyright (c) 2001, Karl W Broman * * last modified Oct, 2001 * first written Oct, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * This function is for calculating the information contained in the * genotype data on a particular chromosome * * Contains: R_info * **********************************************************************/ /********************************************************************** * * R_info: calculates information contained in the genotype data for * a particular chromosome. * * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * genoprob Conditional genotype probabilities * * info1 Vector of length n_pos, to contain the output * (using the entropy version of the information) * * info2 Same as info1 (for the prop'n variance version * of the information) * * which 0 = only entropy version * 1 = only variance version * 2 = both * **********************************************************************/ void R_info(int *n_ind, int *n_pos, int *n_gen, double *genoprob, double *info1, double *info2, int *which); /* end of info.h */ qtl/src/info.c0000644000176000001440000000532012131541647012774 0ustar ripleyusers/********************************************************************** * * info.c * * copyright (c) 2001-6, Karl W Broman * * last modified Dec, 2006 * first written Oct, 2001 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * This function is for calculating the information contained in the * genotype data on a particular chromosome * * Contains: R_info * **********************************************************************/ #include #include #include #include #include #include #include #include "util.h" #include "info.h" /********************************************************************** * * R_info: calculates information contained in the genotype data for * a particular chromosome. * * * n_ind Number of individuals * * n_pos Number of marker positions * * n_gen Number of different genotypes * * genoprob Conditional genotype probabilities * * info1 Vector of length n_pos, to contain the output * (using the entropy version of the information) * * info2 Same as info1 (for the prop'n variance version * of the information) * * which 0 = only entropy version * 1 = only variance version * 2 = both * **********************************************************************/ void R_info(int *n_ind, int *n_pos, int *n_gen, double *genoprob, double *info1, double *info2, int *which) { int i, j, k; double ***Genoprob, p, s, ss; reorg_genoprob(*n_ind, *n_pos, *n_gen, genoprob, &Genoprob); for(i=0; i< *n_pos; i++) { R_CheckUserInterrupt(); /* check for ^C */ info1[i] = info2[i] = 0.0; for(j=0; j< *n_ind; j++) { s=ss=0.0; for(k=0; k< *n_gen; k++) { p = Genoprob[k][i][j]; if(*which != 1) if(p > 0) info1[i] += p*log(p); if(*which != 0) { s += p*(double)k; ss += p*(double)(k*k); } } if(*which != 0) info2[i] += (ss - s*s); } if(*which != 1) info1[i] /= (double)(*n_ind); if(*which != 0) info2[i] /= (double)(*n_ind); } } /* end of info.c */ qtl/src/inferFounderHap.h0000644000176000001440000000470612131541647015134 0ustar ripleyusers/********************************************************************** * * inferFounderHap.h * * copyright (c) 2011, Karl W Broman * * last modified Dec, 2011 * first written Dec, 2011 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * Contains: inferFounderHap, R_inferFounderHap, whichUnique, * restoreMWrilGeno, R_restoreMWrilGeno * * These are for reconstructing the founder haplotypes in inbred lines * by a crude method using groups of adjacent SNPs * **********************************************************************/ void R_inferFounderHap(int *n_snp, int *n_founders, int *n_ind, int *foundergen, int *indgen, int *max_offset, int *hap); void inferFounderHap(int n_snp, int n_founders, int n_ind, int **founderGen, int **indGen, int max_offset, int **Hap); void whichUnique(unsigned int *x, int n_x, int *is_unique, int *n_unique); /********************************************************************** * * restoreMWrilGeno Do the reverse of reviseMWril, to get * genotypes back * * n_ril Number of RILs to simulate * n_mar Number of markers * n_str Number of founder strains * * Parents SNP data for the founder strains [dim n_str x n_mar] * * Geno On exit, the detailed genotype data; on entry, the * SNP data written bitwise. [dim n_ril x n_mar] * * Crosses The crosses [n_ril x n_str] * * missingval Integer indicating missing value * **********************************************************************/ void restoreMWrilGeno(int n_ril, int n_mar, int n_str, int **Parents, int **Geno, int **Crosses, int missingval); /* wrapper for calling restoreMWrilGeno from R */ void R_restoreMWrilGeno(int *n_ril, int *n_mar, int *n_str, int *parents, int *geno, int *crosses, int *missingval); /* end of inferFounderHap.h */ qtl/src/inferFounderHap.c0000644000176000001440000001307412131541647015125 0ustar ripleyusers/********************************************************************** * * inferFounderHap.c * * copyright (c) 2011, Karl W Broman * * last modified Dec, 2011 * first written Dec, 2011 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * Contains: constructFounderHap, whichUnique * * These are for reconstructing the founder haplotypes in inbred lines * by a crude method using groups of adjacent SNPs * **********************************************************************/ #include #include #include #include #include #include #include "inferFounderHap.h" #include "util.h" void R_inferFounderHap(int *n_snp, int *n_founders, int *n_ind, int *foundergen, int *indgen, int *max_offset, int *hap) { int **founderGen, **indGen, **Hap; reorg_geno(*n_founders, *n_snp, foundergen, &founderGen); reorg_geno(*n_ind, *n_snp, indgen, &indGen); reorg_geno(*n_ind, *n_snp, hap, &Hap); inferFounderHap(*n_snp, *n_founders, *n_ind, founderGen, indGen, *max_offset, Hap); } void inferFounderHap(int n_snp, int n_founders, int n_ind, int **founderGen, int **indGen, int max_offset, int **Hap) { int i, j, left, offset, n_unique; unsigned int *fhap, *indhap; int *fhapunique; allocate_uint(n_founders, &fhap); allocate_int(n_founders, &fhapunique); allocate_uint(n_ind, &indhap); for(left=0; left=0; offset++) { R_CheckUserInterrupt(); /* check for ^C */ /* founder haplotypes as integers */ for(i=0; i 0 && founderGen[left-offset][i]) fhap[i] += (1 << (offset*2+1)); } /* individual haplotypes as integers */ for(i=0; i 0 && indGen[left-offset][i] < 0)) /* missing genotype */ Hap[left][i] = -1; else { if(indGen[left+offset][i]) indhap[i] += (1 << (offset*2)); if(offset > 0 && indGen[left-offset][i]) indhap[i] += (1 << (offset*2+1)); } } } /* which founder haplotypes are unique */ whichUnique(fhap, n_founders, fhapunique, &n_unique); if(n_unique>0) { /* at least one unique founder haplotype */ for(i=0; i 1) and then count the unique ones */ void whichUnique(unsigned int *x, int n_x, int *is_unique, int *n_unique) { int i, j; for(i=0; i #include #include #include #include #include #include "hmm_main.h" #include "util.h" void init_stepf(double *rf, double *rf2, int n_gen, int n_mar, int *cross_scheme, double stepf(int, int, double, double, int *), double **probmat) { int j,obs1,obs2,tmp1; for(j=0; j obs2) { tmp1 = obs2; obs2 = obs1; obs1 = tmp1; } tmp1 = ((obs2 * (obs2 - 1)) / 2) - 1; return(probmat[mar][obs1 + tmp1]); } void forward_prob(int i, int n_mar, int n_gen, int curpos, int *cross_scheme, double error_prob, int **Geno, double **probmat, double **alpha, double initf(int, int *), double emitf(int, int, double, int *)) { /* forward equations */ /* Note: true genotypes coded as 1, 2, ... but in the alpha's and beta's, we use 0, 1, ... */ int j,v,v2; double errortol,salpha; /* initialize alpha */ /* curpos = -1: use error_prob always */ /* curpos >= 0: use TOL except when j == curpos, then use error_prob */ errortol = error_prob; if(curpos > 0) errortol = TOL; for(v=0; v= 0: use TOL except when j2+1 == curpos, then use error_prob */ errortol = error_prob; if(curpos >= 0) errortol = TOL; for(j2=n_mar-2; j2>=0; j2--) { if(curpos == j2+1) errortol = error_prob; for(v=0; v= 0) { j0 = curpos; jmax = j0 + 1; } /* calculate genotype probabilities */ for(j=j0; j= y[1]) { x[0] = x[1]; x[1] = x[3]; y[0] = y[1]; y[1] = y[3]; } else { x[2] = x[0]; x[0] = x[3]; y[2] = y[0]; y[0] = y[3]; } } /* handle boundary situations cleanly */ if((x[0] == 0.0 && y[0] >= y[1]) || (x[2] == 0.0 && y[2] >= y[1])) return(0.0); if((x[0] == 1.0 && y[0] >= y[1]) || (x[2] == 1.0 && y[2] >= y[1])) return(1.0); x[1] = (x[2] + x[0]) / 2.0; /* make negative if does not converge */ if(iter >= maxit) x[1] = - x[1]; return(x[1]); } /* end of hmm_util.c */ qtl/src/hmm_ri8sib.h0000644000176000001440000000637612131541647014123 0ustar ripleyusers/********************************************************************** * * hmm_ri8sib.h * * copyright (c) 2005-9, Karl W Broman * * last modified Apr, 2009 * first written Mar, 2005 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * Contains: init_ri8sib, emit_ri8sib, step_ri8sib, step_special_ri8sib, * calc_genoprob_ri8sib, calc_genoprob_special_ri8sib, * argmax_geno_ri8sib, sim_geno_ri8sib, * est_map_ri8sib, nrec2_ri8sib, logprec_ri8sib, est_rf_ri8sib, * marker_loglik_ri8sib, calc_pairprob_ri8sib, * errorlod_ri8sib, calc_errorlod_ri8sib * * These are the init, emit, and step functions plus * all of the hmm wrappers for 8-way RIL by sib mating * (i.e., the Collaborative Cross). * * Genotype codes: 1-8 * "Phenotype" codes: 0=missing; otherwise binary 1-255, with bit i * indicating SNP compatible with parent i * **********************************************************************/ double init_ri8sib(int true_gen, int *cross_scheme); double emit_ri8sib(int obs_gen, int true_gen, double error_prob, int *cross_scheme); double step_ri8sib(int gen1, int gen2, double rf, double junk, int *cross_scheme); double step_special_ri8sib(int gen1, int gen2, double rf, double junk, int *cross_scheme); void calc_genoprob_ri8sib(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *genoprob); void calc_genoprob_special_ri8sib(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *genoprob); void argmax_geno_ri8sib(int *n_ind, int *n_pos, int *geno, double *rf, double *error_prob, int *argmax); void sim_geno_ri8sib(int *n_ind, int *n_pos, int *n_draws, int *geno, double *rf, double *error_prob, int *draws); void est_map_ri8sib(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *loglik, int *maxit, double *tol, int *verbose); /* expected no. recombinants */ double nrec2_ri8sib(int obs1, int obs2, double rf, int *cross_scheme); /* log [joint probability * 8] */ double logprec_ri8sib(int obs1, int obs2, double rf, int *cross_scheme); void est_rf_ri8sib(int *n_ind, int *n_mar, int *geno, double *rf, int *maxit, double *tol); void marker_loglik_ri8sib(int *n_ind, int *geno, double *error_prob, double *loglik); void calc_pairprob_ri8sib(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *genoprob, double *pairprob); double errorlod_ri8sib(int obs, double *prob, double error_prob); void calc_errorlod_ri8sib(int *n_ind, int *n_mar, int *geno, double *error_prob, double *genoprob, double *errlod); /* end of hmm_ri8sib.h */ qtl/src/hmm_ri8sib.c0000644000176000001440000001436512131541647014113 0ustar ripleyusers/********************************************************************** * * hmm_ri8sib.c * * copyright (c) 2005-2010, Karl W Broman * * last modified Jul, 2010 * first written Mar, 2005 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, * version 3, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but without any warranty; without even the implied warranty of * merchantability or fitness for a particular purpose. See the GNU * General Public License, version 3, for more details. * * A copy of the GNU General Public License, version 3, is available * at http://www.r-project.org/Licenses/GPL-3 * * C functions for the R/qtl package * * Contains: init_ri8sib, emit_ri8sib, step_ri8sib, step_special_ri8sib, * calc_genoprob_ri8sib, calc_genoprob_special_ri8sib, * argmax_geno_ri8sib, sim_geno_ri8sib, * est_map_ri8sib, nrec2_ri8sib, logprec_ri8sib, est_rf_ri8sib, * marker_loglik_ri8sib, calc_pairprob_ri8sib, * errorlod_ri8sib, calc_errorlod_ri8sib * * These are the init, emit, and step functions plus * all of the hmm wrappers for 8-way RIL by sib mating * (i.e., the Collaborative Cross). * * Genotype codes: 1-8 * "Phenotype" codes: 0=missing; otherwise binary 1-255, with bit i * indicating SNP compatible with parent i * **********************************************************************/ #include #include #include #include #include #include #include "hmm_main.h" #include "hmm_ri8sib.h" #include "hmm_bc.h" double init_ri8sib(int true_gen, int *cross_scheme) { return(-3.0*M_LN2); /* log(1/8) */ } double emit_ri8sib(int obs_gen, int true_gen, double error_prob, int *cross_scheme) { if(obs_gen==0) return(0.0); if(obs_gen & (1 << (true_gen-1))) return(log(1.0-error_prob)); else return(log(error_prob)); } double step_ri8sib(int gen1, int gen2, double rf, double junk, int *cross_scheme) { if(gen1 == gen2) return(log(1.0-rf)-log(1.0+6.0*rf)); else return(log(rf)-log(1.0+6.0*rf)); } /* this is needed for est.map; estimated recombination fractions on the RIL scale */ double step_special_ri8sib(int gen1, int gen2, double rf, double junk, int *cross_scheme) { if(gen1 == gen2) return(log(1.0-rf)); else return(log(rf)-log(7.0)); } void calc_genoprob_ri8sib(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *genoprob) { calc_genoprob(*n_ind, *n_mar, 8, geno, rf, rf, *error_prob, genoprob, init_ri8sib, emit_ri8sib, step_ri8sib); } void calc_genoprob_special_ri8sib(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *genoprob) { calc_genoprob_special(*n_ind, *n_mar, 8, geno, rf, rf, *error_prob, genoprob, init_ri8sib, emit_ri8sib, step_ri8sib); } void argmax_geno_ri8sib(int *n_ind, int *n_pos, int *geno, double *rf, double *error_prob, int *argmax) { argmax_geno(*n_ind, *n_pos, 8, geno, rf, rf, *error_prob, argmax, init_ri8sib, emit_ri8sib, step_ri8sib); } void sim_geno_ri8sib(int *n_ind, int *n_pos, int *n_draws, int *geno, double *rf, double *error_prob, int *draws) { sim_geno(*n_ind, *n_pos, 8, *n_draws, geno, rf, rf, *error_prob, draws, init_ri8sib, emit_ri8sib, step_ri8sib); } /* for estimating map, must do things with recombination fractions on the RIL scale */ void est_map_ri8sib(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *loglik, int *maxit, double *tol, int *verbose) { int i; /* expand rf */ for(i=0; i< *n_mar-1; i++) rf[i] = 7.0*rf[i]/(1.0+6.0*rf[i]); est_map(*n_ind, *n_mar, 8, geno, rf, rf, *error_prob, init_ri8sib, emit_ri8sib, step_special_ri8sib, nrec_bc, nrec_bc, loglik, *maxit, *tol, 0, *verbose); /* contract rf */ for(i=0; i< *n_mar-1; i++) rf[i] = rf[i]/(7.0-6.0*rf[i]); } /* expected no. recombinants */ double nrec2_ri8sib(int obs1, int obs2, double rf, int *cross_scheme) { int n1, n2, n12, nr, and, i, nstr=8; if(obs1==0 || obs2==0) return(-999.0); /* this shouldn't happen */ n1=n2=n12=0; and = obs1 & obs2; /* count bits */ for(i=0; i #include #include #include #include #include #include "hmm_main.h" #include "hmm_ri8self.h" #include "hmm_bc.h" double init_ri8self(int true_gen, int *cross_scheme) { return(-3.0*M_LN2); /* log(1/8) */ } double emit_ri8self(int obs_gen, int true_gen, double error_prob, int *cross_scheme) { if(obs_gen==0) return(0.0); if(obs_gen & (1 << (true_gen-1))) return(log(1.0-error_prob)); else return(log(error_prob)); } double step_ri8self(int gen1, int gen2, double rf, double junk, int *cross_scheme) { int temp; if(gen1 > gen2) { temp = gen1; gen1 = gen2; gen2=temp; } if(gen1 == gen2) return(2.0*log(1.0-rf)-log(1.0+2.0*rf)); else if((gen1==1 || gen1==3 || gen1==5 || gen1==7) && gen2==gen1+1) return(log(rf)+log(1.0-rf)-log(1.0+2.0*rf)); else return(log(rf) - M_LN2 - log(1.0+2.0*rf)); } /* this is needed for est.map; estimated recombination fractions on the RIL scale */ double step_special_ri8self(int gen1, int gen2, double rf, double junk, int *cross_scheme) { double RF; int temp; if(gen1 > gen2) { temp = gen1; gen1 = gen2; gen2=temp; } if(gen1 == gen2) return(log(1.0-rf)); else if((gen1==1 || gen1==3 || gen1==5 || gen1==7) && gen2==gen1+1) { RF = 2.0-rf-sqrt(rf*rf-5.0*rf+4.0); return(log(RF)+log(1.0-RF)-log(1.0+2.0*RF)); } else { RF = 2.0-rf-sqrt(rf*rf-5.0*rf+4.0); return(log(RF) - M_LN2 - log(1.0+2.0*RF)); } } void calc_genoprob_ri8self(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *genoprob) { calc_genoprob(*n_ind, *n_mar, 8, geno, rf, rf, *error_prob, genoprob, init_ri8self, emit_ri8self, step_ri8self); } void calc_genoprob_special_ri8self(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *genoprob) { calc_genoprob_special(*n_ind, *n_mar, 8, geno, rf, rf, *error_prob, genoprob, init_ri8self, emit_ri8self, step_ri8self); } void argmax_geno_ri8self(int *n_ind, int *n_pos, int *geno, double *rf, double *error_prob, int *argmax) { argmax_geno(*n_ind, *n_pos, 8, geno, rf, rf, *error_prob, argmax, init_ri8self, emit_ri8self, step_ri8self); } void sim_geno_ri8self(int *n_ind, int *n_pos, int *n_draws, int *geno, double *rf, double *error_prob, int *draws) { sim_geno(*n_ind, *n_pos, 8, *n_draws, geno, rf, rf, *error_prob, draws, init_ri8self, emit_ri8self, step_ri8self); } /* for estimating map, must do things with recombination fractions on the RIL scale */ void est_map_ri8self(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *loglik, int *maxit, double *tol, int *verbose) { int i; /* expand rf */ for(i=0; i< *n_mar-1; i++) rf[i] = rf[i]*(1.0-rf[i])/(1.0+2.0*rf[i]); est_map(*n_ind, *n_mar, 8, geno, rf, rf, *error_prob, init_ri8self, emit_ri8self, step_special_ri8self, nrec_bc, nrec_bc, loglik, *maxit, *tol, 0, *verbose); /* contract rf */ for(i=0; i< *n_mar-1; i++) rf[i] = 2.0-rf[i]-sqrt(rf[i]*rf[i]-5.0*rf[i]+4.0); } /* expected no. recombinants */ double nrec2_ri8self(int obs1, int obs2, double rf, int *cross_scheme) { int n1, n2, n12, nr, and, i, nstr=8; int offby1; double rfcontract, rf0, rf1, rf2, num; if(obs1==0 || obs2==0) return(-999.0); /* this shouldn't happen */ n1=n2=n12=0; and = obs1 & obs2; /* count bits */ for(i=0; i #include #include #include #include #include #include "hmm_main.h" #include "hmm_ri4sib.h" #include "hmm_bc.h" double init_ri4sib(int true_gen, int *cross_scheme) { return(-2.0*M_LN2); } double emit_ri4sib(int obs_gen, int true_gen, double error_prob, int *cross_scheme) { if(obs_gen==0) return(0.0); if(obs_gen & (1 << (true_gen-1))) return(log(1.0-error_prob)); else return(log(error_prob)); } double step_ri4sib(int gen1, int gen2, double rf, double junk, int *cross_scheme) { if(gen1 == gen2) return(-log(1.0+6.0*rf)); else return(M_LN2 + log(rf) - log(1.0+6.0*rf)); } /* this is needed for est.map; estimated recombination fractions on the RIL scale */ double step_special_ri4sib(int gen1, int gen2, double rf, double junk, int *cross_scheme) { if(gen1 == gen2) return(log(1.0-rf)); else return(log(rf)-log(3.0)); } void calc_genoprob_ri4sib(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *genoprob) { calc_genoprob(*n_ind, *n_mar, 4, geno, rf, rf, *error_prob, genoprob, init_ri4sib, emit_ri4sib, step_ri4sib); } void calc_genoprob_special_ri4sib(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *genoprob) { calc_genoprob_special(*n_ind, *n_mar, 4, geno, rf, rf, *error_prob, genoprob, init_ri4sib, emit_ri4sib, step_ri4sib); } void argmax_geno_ri4sib(int *n_ind, int *n_pos, int *geno, double *rf, double *error_prob, int *argmax) { argmax_geno(*n_ind, *n_pos, 4, geno, rf, rf, *error_prob, argmax, init_ri4sib, emit_ri4sib, step_ri4sib); } void sim_geno_ri4sib(int *n_ind, int *n_pos, int *n_draws, int *geno, double *rf, double *error_prob, int *draws) { sim_geno(*n_ind, *n_pos, 4, *n_draws, geno, rf, rf, *error_prob, draws, init_ri4sib, emit_ri4sib, step_ri4sib); } /* for estimating map, must do things with recombination fractions on the RIL scale */ void est_map_ri4sib(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *loglik, int *maxit, double *tol, int *verbose) { int i; /* expand rf */ for(i=0; i< *n_mar-1; i++) rf[i] = 6.0*rf[i]/(1.0+6.0*rf[i]); est_map(*n_ind, *n_mar, 4, geno, rf, rf, *error_prob, init_ri4sib, emit_ri4sib, step_special_ri4sib, nrec_bc, nrec_bc, loglik, *maxit, *tol, 0, *verbose); /* contract rf */ for(i=0; i< *n_mar-1; i++) rf[i] = rf[i]/6.0/(1.0-rf[i]); } /* expected no. recombinants */ double nrec2_ri4sib(int obs1, int obs2, double rf, int *cross_scheme) { int n1, n2, n12, nr, and, i, nstr=4; if(obs1==0 || obs2==0) return(-999.0); /* this shouldn't happen */ n1=n2=n12=0; and = obs1 & obs2; /* count bits */ for(i=0; i #include #include #include #include #include #include "hmm_main.h" #include "hmm_ri4self.h" #include "hmm_bc.h" double init_ri4self(int true_gen, int *cross_scheme) { return(-2.0*M_LN2); } double emit_ri4self(int obs_gen, int true_gen, double error_prob, int *cross_scheme) { if(obs_gen==0) return(0.0); if(obs_gen & (1 << (true_gen-1))) return(log(1.0-error_prob)); else return(log(error_prob)); } double step_ri4self(int gen1, int gen2, double rf, double junk, int *cross_scheme) { if(gen1 == gen2) return(log(1.0-rf)-log(1.0+2.0*rf)); else return(log(rf)-log(1.0+2.0*rf)); } /* this is needed for est.map; estimated recombination fractions on the RIL scale */ double step_special_ri4self(int gen1, int gen2, double rf, double junk, int *cross_scheme) { if(gen1 == gen2) return(log(1.0-rf)); else return(log(rf) - log(3.0)); } void calc_genoprob_ri4self(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *genoprob) { calc_genoprob(*n_ind, *n_mar, 4, geno, rf, rf, *error_prob, genoprob, init_ri4self, emit_ri4self, step_ri4self); } void calc_genoprob_special_ri4self(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *genoprob) { calc_genoprob_special(*n_ind, *n_mar, 4, geno, rf, rf, *error_prob, genoprob, init_ri4self, emit_ri4self, step_ri4self); } void argmax_geno_ri4self(int *n_ind, int *n_pos, int *geno, double *rf, double *error_prob, int *argmax) { argmax_geno(*n_ind, *n_pos, 4, geno, rf, rf, *error_prob, argmax, init_ri4self, emit_ri4self, step_ri4self); } void sim_geno_ri4self(int *n_ind, int *n_pos, int *n_draws, int *geno, double *rf, double *error_prob, int *draws) { sim_geno(*n_ind, *n_pos, 4, *n_draws, geno, rf, rf, *error_prob, draws, init_ri4self, emit_ri4self, step_ri4self); } /* for estimating map, must do things with recombination fractions on the RIL scale */ void est_map_ri4self(int *n_ind, int *n_mar, int *geno, double *rf, double *error_prob, double *loglik, int *maxit, double *tol, int *verbose) { int i; /* expand rf */ for(i=0; i< *n_mar-1; i++) rf[i] = 3.0*rf[i]/(1.0+2.0*rf[i]); est_map(*n_ind, *n_mar, 4, geno, rf, rf, *error_prob, init_ri4self, emit_ri4self, step_special_ri4self, nrec_bc, nrec_bc, loglik, *maxit, *tol, 0, *verbose); /* contract rf */ for(i=0; i< *n_mar-1; i++) rf[i] = rf[i]/(3.0-2.0*rf[i]); } /* expected no. recombinants */ double nrec2_ri4self(int obs1, int obs2, double rf, int *cross_scheme) { int n1, n2, n12, nr, and, i, nstr=4; if(obs1==0 || obs2==0) return(-999.0); /* this shouldn't happen */ n1=n2=n12=0; and = obs1 & obs2; /* count bits */ for(i=0; i